.../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 ++++++++ 17 files changed, 1506 insertions(+) create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/BeepDebugFeaturePkg.dec create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/BeepDebugFeaturePkg.dsc create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Include/BeepDebugFeature.dsc create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepLib.h create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepMapLib.h create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLibNull.c create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLibNull.inf create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.c create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.inf create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/PlatformStatusCodesInternal.h create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/PeiBeepStatusCodeHandlerLib.c create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/PeiBeepStatusCodeHandlerLib.inf create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.c create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.inf create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/SmmBeepStatusCodeHandlerLib.c create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/SmmBeepStatusCodeHandlerLib.inf create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Readme.md
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>
---
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
.../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 ++++++++
17 files changed, 1506 insertions(+)
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/BeepDebugFeaturePkg.dec
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/BeepDebugFeaturePkg.dsc
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Include/BeepDebugFeature.dsc
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepLib.h
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepMapLib.h
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLibNull.c
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLibNull.inf
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.c
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.inf
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/PlatformStatusCodesInternal.h
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/PeiBeepStatusCodeHandlerLib.c
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/PeiBeepStatusCodeHandlerLib.inf
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.c
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.inf
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/SmmBeepStatusCodeHandlerLib.c
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/SmmBeepStatusCodeHandlerLib.inf
create mode 100644 Features/Intel/Debugging/BeepDebugFeaturePkg/Readme.md
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|BOOLEAN|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/BeepDebugFeature.dsc b/Features/Intel/Debugging/BeepDebugFeaturePkg/Include/BeepDebugFeature.dsc
new file mode 100644
index 0000000000..65e00b5979
--- /dev/null
+++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Include/BeepDebugFeature.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/BaseTimerLibNullTemplate.inf
+ UefiBootServicesTableLib|MdePkg/Library/UefiBootServicesTableLib/UefiBootServicesTableLib.inf
+ UefiDriverEntryPoint|MdePkg/Library/UefiDriverEntryPoint/UefiDriverEntryPoint.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/PeiMemoryAllocationLib.inf
+ PeiServicesTablePointerLib|MdePkg/Library/PeiServicesTablePointerLibIdt/PeiServicesTablePointerLibIdt.inf
+
+[LibraryClasses.IA32.PEIM,LibraryClasses.IA32.PEI_CORE,LibraryClasses.IA32.SEC]
+ #######################################
+ # Edk2 Packages
+ #######################################
+ ReportStatusCodeLib|MdeModulePkg/Library/PeiReportStatusCodeLib/PeiReportStatusCodeLib.inf
+
+[LibraryClasses.common.DXE_DRIVER]
+ #######################################
+ # Edk2 Packages
+ #######################################
+ HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
+ MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
+
+[LibraryClasses.common.DXE_RUNTIME_DRIVER]
+ #######################################
+ # Edk2 Packages
+ #######################################
+ HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
+ MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
+ UefiRuntimeLib|MdePkg/Library/UefiRuntimeLib/UefiRuntimeLib.inf
+ ReportStatusCodeLib|MdeModulePkg/Library/RuntimeDxeReportStatusCodeLib/RuntimeDxeReportStatusCodeLib.inf
+
+[LibraryClasses.common.UEFI_DRIVER]
+ #######################################
+ # Edk2 Packages
+ #######################################
+ HobLib|MdePkg/Library/DxeHobLib/DxeHobLib.inf
+ MemoryAllocationLib|MdePkg/Library/UefiMemoryAllocationLib/UefiMemoryAllocationLib.inf
+
+[LibraryClasses.X64.DXE_SMM_DRIVER]
+ #######################################
+ # Edk2 Packages
+ #######################################
+ SmmServicesTableLib|MdePkg/Library/SmmServicesTableLib/SmmServicesTableLib.inf
+ MemoryAllocationLib|MdePkg/Library/SmmMemoryAllocationLib/SmmMemoryAllocationLib.inf
+ SmmIoLib|MdePkg/Library/SmmIoLib/SmmIoLib.inf
+ SmmMemLib|MdePkg/Library/SmmMemLib/SmmMemLib.inf
+ ReportStatusCodeLib|MdeModulePkg/Library/SmmReportStatusCodeLib/SmmReportStatusCodeLib.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/PeiBeepStatusCodeHandlerLib.inf
+
+ # The following is an example for used with StatusCodeHandler:
+# MdeModulePkg/Universal/StatusCodeHandler/Pei/StatusCodeHandlerPei.inf {
+# <LibraryClasses>
+# OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
+# SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
+# BeepLib|BeepDebugFeaturePkg/Library/BeepLib/BeepLibNull.inf
+# BeepMapLib|BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.inf
+# NULL|BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/PeiBeepStatusCodeHandlerLib.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/RuntimeDxeBeepStatusCodeHandlerLib.inf
+ BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/SmmBeepStatusCodeHandlerLib.inf
+
+ # The following is an example for used with StatusCodeHandler:
+# MdeModulePkg/Universal/StatusCodeHandler/RuntimeDxe/StatusCodeHandlerRuntimeDxe.inf {
+# <LibraryClasses>
+# OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
+# SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
+# BeepLib|BeepDebugFeaturePkg/Library/BeepLib/BeepLibNull.inf
+# BeepMapLib|BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.inf
+# NULL|BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.inf
+# }
+
+# MdeModulePkg/Universal/StatusCodeHandler/Smm/StatusCodeHandlerSmm.inf {
+# <LibraryClasses>
+# OemHookStatusCodeLib|MdeModulePkg/Library/OemHookStatusCodeLibNull/OemHookStatusCodeLibNull.inf
+# SerialPortLib|MdePkg/Library/BaseSerialPortLibNull/BaseSerialPortLibNull.inf
+# BeepLib|BeepDebugFeaturePkg/Library/BeepLib/BeepLibNull.inf
+# BeepMapLib|BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.inf
+# NULL|BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/SmmBeepStatusCodeHandlerLib.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/BeepLib.h b/Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepLib.h
new file mode 100644
index 0000000000..f768acc557
--- /dev/null
+++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepLib.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/BeepMapLib.h b/Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepMapLib.h
new file mode 100644
index 0000000000..7600d72ecd
--- /dev/null
+++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Include/Library/BeepMapLib.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/BeepLibNull.c b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLibNull.c
new file mode 100644
index 0000000000..a0bd946b50
--- /dev/null
+++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLibNull.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/BeepLibNull.inf b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLibNull.inf
new file mode 100644
index 0000000000..7f84dad082
--- /dev/null
+++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepLib/BeepLibNull.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/BeepMapLib.c b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.c
new file mode 100644
index 0000000000..26c32dfd9b
--- /dev/null
+++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.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/BeepMapLib.inf b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.inf
new file mode 100644
index 0000000000..b957eee07b
--- /dev/null
+++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/BeepMapLib.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/PlatformStatusCodesInternal.h b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/PlatformStatusCodesInternal.h
new file mode 100644
index 0000000000..a36134c933
--- /dev/null
+++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepMapLib/PlatformStatusCodesInternal.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/BeepStatusCodeHandlerLib/PeiBeepStatusCodeHandlerLib.c b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/PeiBeepStatusCodeHandlerLib.c
new file mode 100644
index 0000000000..a29d948951
--- /dev/null
+++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/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/BeepStatusCodeHandlerLib/PeiBeepStatusCodeHandlerLib.inf b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/PeiBeepStatusCodeHandlerLib.inf
new file mode 100644
index 0000000000..421b246663
--- /dev/null
+++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/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/BeepStatusCodeHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.c b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.c
new file mode 100644
index 0000000000..631e2eecae
--- /dev/null
+++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/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/BeepStatusCodeHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.inf b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.inf
new file mode 100644
index 0000000000..b9aae39128
--- /dev/null
+++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/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/BeepStatusCodeHandlerLib/SmmBeepStatusCodeHandlerLib.c b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/SmmBeepStatusCodeHandlerLib.c
new file mode 100644
index 0000000000..6b1125f4c2
--- /dev/null
+++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/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/BeepStatusCodeHandlerLib/SmmBeepStatusCodeHandlerLib.inf b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/SmmBeepStatusCodeHandlerLib.inf
new file mode 100644
index 0000000000..caa82264ae
--- /dev/null
+++ b/Features/Intel/Debugging/BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/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/StatusCodeHandlerRuntimeDxe.inf {
+ <LibraryClasses>
+ NULL|BeepDebugFeaturePkg/Library/BeepStatusCodeHandlerLib/RuntimeDxeBeepStatusCodeHandlerLib.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 (#61194): https://edk2.groups.io/g/devel/message/61194
Mute This Topic: https://groups.io/mt/74833107/1787277
Group Owner: devel+owner@edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org]
-=-=-=-=-=-=-=-=-=-=-=-
Reviewed-by: Eric Dong <eric.dong@intel.com> > -----Original Message----- > From: Tan, Ming <ming.tan@intel.com> > Sent: Friday, June 12, 2020 11:41 AM > To: devel@edk2.groups.io > Cc: Dong, Eric <eric.dong@intel.com>; Gao, Liming <liming.gao@intel.com> > Subject: [PATCH v6] 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> > --- > 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 > .../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 ++++++++ > 17 files changed, 1506 insertions(+) > 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/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 (#61263): https://edk2.groups.io/g/devel/message/61263 Mute This Topic: https://groups.io/mt/74833107/1787277 Group Owner: devel+owner@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [importer@patchew.org] -=-=-=-=-=-=-=-=-=-=-=-
© 2016 - 2024 Red Hat, Inc.