From 56836fe92b0a7284bc2e964065e00ad867145826 Mon Sep 17 00:00:00 2001 From: yshang1 Date: Fri, 21 Jul 2006 14:25:43 +0000 Subject: [PATCH] 1) Check in Pei/Dxe status code; 2) OemHookStatusCodeLib and SerialPortLib class and null instance; 3) Remove all referenced code from EdkModulePkg,EdkNt32Pkg. 4) Add Nt32OemHookStatusCodeLib. git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@1067 6f19259b-4bc3-4df7-8a09-765794883524 --- EdkModulePkg/EdkModulePkg.fpd | 511 ++++++++++++++++++ EdkModulePkg/EdkModulePkg.spd | 171 ++++-- EdkModulePkg/Include/EdkDxe.h | 1 + EdkModulePkg/Include/EdkPeim.h | 1 + .../Include/Guid/MemoryStatusCodeRecord.h | 54 ++ EdkModulePkg/Include/Library/EdkDxeSalLib.h | 7 + .../Include/Library/OemHookStatusCodeLib.h | 70 +++ EdkModulePkg/Include/Library/SerialPortLib.h | 74 +++ .../Library/EdkDxeSalLib/Ipf/EsalServiceLib.c | 3 + .../EdkOemHookStatusCodeLibNull.msa} | 52 +- .../OemHookStatusCodeLibNull.c | 71 +++ .../BsDataHubStatusCode/BsDataHubStatusCode.c | 397 -------------- .../BsDataHubStatusCode/BsDataHubStatusCode.h | 130 ----- .../BsDataHubStatusCode.msa | 100 ---- .../RtMemoryStatusCode/RtMemoryStatusCode.c | 188 ------- .../RtPlatformStatusCode.c | 130 ----- .../EdkSerialPortLibNull.msa} | 58 +- .../EdkSerialPortLibNull/SerialPortLibNull.c | 77 +++ .../Dxe/Common/DxeStatusCodeCommon.c | 222 ++++++++ .../Common/StatusCode.dxs} | 0 .../StatusCode/Dxe/DataHubStatusCodeWorker.c | 310 +++++++++++ .../Universal/StatusCode/Dxe/DxeStatusCode.c | 149 +++++ .../Universal/StatusCode/Dxe/DxeStatusCode.h | 238 ++++++++ .../StatusCode/Dxe/DxeStatusCode.msa | 187 +++++++ .../StatusCode/Dxe/Ipf/DxeStatusCodeIpf.c | 201 +++++++ .../StatusCode/Dxe/Ipf/StatusCode.dxs | 27 + .../StatusCode/Dxe/RtMemoryStatusCodeWorker.c | 119 ++++ .../StatusCode/Dxe/SerialStatusCodeWorker.c | 184 +++++++ .../StatusCode/Pei/MemoryStausCodeWorker.c | 145 +++++ .../Universal/StatusCode/Pei/PeiStatusCode.c | 176 ++++++ .../Universal/StatusCode/Pei/PeiStatusCode.h | 100 ++++ .../StatusCode/Pei/PeiStatusCode.msa | 115 ++++ .../StatusCode/Pei/SerialStatusCodeWorker.c | 147 +++++ .../StatusCode/RuntimeDxe/DebugAssert.c | 231 -------- .../RuntimeDxe/Ia32/Ia32StatusCode.c | 75 --- .../StatusCode/RuntimeDxe/Ipf/IpfStatusCode.c | 126 ----- .../RuntimeDxe/Ipf/IpfStatusCode.dxs | 27 - .../StatusCode/RuntimeDxe/StatusCode.c | 172 ------ .../StatusCode/RuntimeDxe/StatusCode.h | 64 --- .../StatusCode/RuntimeDxe/StatusCode.msa | 97 ---- .../StatusCode/RuntimeDxe/x64/x64StatusCode.c | 75 --- .../RuntimeDxe/x64/x64StatusCode.dxs | 27 - 42 files changed, 3353 insertions(+), 1956 deletions(-) create mode 100644 EdkModulePkg/Include/Guid/MemoryStatusCodeRecord.h create mode 100644 EdkModulePkg/Include/Library/OemHookStatusCodeLib.h create mode 100644 EdkModulePkg/Include/Library/SerialPortLib.h rename EdkModulePkg/Library/{EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.msa => EdkOemHookStatusCodeLibNull/EdkOemHookStatusCodeLibNull.msa} (58%) create mode 100644 EdkModulePkg/Library/EdkOemHookStatusCodeLibNull/OemHookStatusCodeLibNull.c delete mode 100644 EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.c delete mode 100644 EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.h delete mode 100644 EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.msa delete mode 100644 EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.c delete mode 100644 EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.c rename EdkModulePkg/Library/{EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.msa => EdkSerialPortLibNull/EdkSerialPortLibNull.msa} (54%) create mode 100644 EdkModulePkg/Library/EdkSerialPortLibNull/SerialPortLibNull.c create mode 100644 EdkModulePkg/Universal/StatusCode/Dxe/Common/DxeStatusCodeCommon.c rename EdkModulePkg/Universal/StatusCode/{RuntimeDxe/Ia32/Ia32StatusCode.dxs => Dxe/Common/StatusCode.dxs} (100%) create mode 100644 EdkModulePkg/Universal/StatusCode/Dxe/DataHubStatusCodeWorker.c create mode 100644 EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.c create mode 100644 EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.h create mode 100644 EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.msa create mode 100644 EdkModulePkg/Universal/StatusCode/Dxe/Ipf/DxeStatusCodeIpf.c create mode 100644 EdkModulePkg/Universal/StatusCode/Dxe/Ipf/StatusCode.dxs create mode 100644 EdkModulePkg/Universal/StatusCode/Dxe/RtMemoryStatusCodeWorker.c create mode 100644 EdkModulePkg/Universal/StatusCode/Dxe/SerialStatusCodeWorker.c create mode 100644 EdkModulePkg/Universal/StatusCode/Pei/MemoryStausCodeWorker.c create mode 100644 EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.c create mode 100644 EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.h create mode 100644 EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.msa create mode 100644 EdkModulePkg/Universal/StatusCode/Pei/SerialStatusCodeWorker.c delete mode 100644 EdkModulePkg/Universal/StatusCode/RuntimeDxe/DebugAssert.c delete mode 100644 EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ia32/Ia32StatusCode.c delete mode 100644 EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ipf/IpfStatusCode.c delete mode 100644 EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ipf/IpfStatusCode.dxs delete mode 100644 EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.c delete mode 100644 EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.h delete mode 100644 EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.msa delete mode 100644 EdkModulePkg/Universal/StatusCode/RuntimeDxe/x64/x64StatusCode.c delete mode 100644 EdkModulePkg/Universal/StatusCode/RuntimeDxe/x64/x64StatusCode.dxs diff --git a/EdkModulePkg/EdkModulePkg.fpd b/EdkModulePkg/EdkModulePkg.fpd index a04f3c7484..28f9017f2f 100644 --- a/EdkModulePkg/EdkModulePkg.fpd +++ b/EdkModulePkg/EdkModulePkg.fpd @@ -36,6 +36,143 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. dummy.fdf + + + + + + + + + + + + + + + + + + + + + PcdMaximumUnicodeStringLength + 0x00000001 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 1000000 + + + PcdMaximumAsciiStringLength + 0x00000002 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 1000000 + + + PcdDebugPropertyMask + 0x00000005 + gEfiMdePkgTokenSpaceGuid + UINT8 + 1 + 0x0f + + + PcdSpinLockTimeout + 0x00000004 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 10000000 + + + PcdDebugPrintErrorLevel + 0x00000006 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 0x80000000 + + + PcdMaximumLinkedListLength + 0x00000003 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 1000000 + + + PcdReportStatusCodePropertyMask + 0x00000007 + gEfiMdePkgTokenSpaceGuid + UINT8 + 1 + 0x07 + + + PcdDebugClearMemoryValue + 0x00000008 + gEfiMdePkgTokenSpaceGuid + UINT8 + 1 + 0xAF + + + PcdVpdBaseAddress + 0x00010010 + gEfiEdkModulePkgTokenSpaceGuid + UINT32 + 4 + 0x0 + + + PcdDxePcdDatabaseTraverseEnabled + 0x00010021 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + TRUE + + + PcdStatusCodeUseSerial + 0x00010022 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeUseMemory + 0x00010023 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeUseOEM + 0x00010024 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeMemorySize + 0x00010025 + gEfiEdkModulePkgTokenSpaceGuid + UINT16 + 2 + 1 + + + + FV_RECOVERY + PE32_PEIM + + @@ -4133,6 +4270,380 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. BS_DRIVER + + + + + + + + + + + + + + + + + + + + + PcdMaximumUnicodeStringLength + 0x00000001 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 1000000 + + + PcdMaximumAsciiStringLength + 0x00000002 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 1000000 + + + PcdDebugPropertyMask + 0x00000005 + gEfiMdePkgTokenSpaceGuid + UINT8 + 1 + 0x0f + + + PcdSpinLockTimeout + 0x00000004 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 10000000 + + + PcdDebugPrintErrorLevel + 0x00000006 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 0x80000000 + + + PcdMaximumLinkedListLength + 0x00000003 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 1000000 + + + PcdDebugClearMemoryValue + 0x00000008 + gEfiMdePkgTokenSpaceGuid + UINT8 + 1 + 0xAF + + + PcdReportStatusCodePropertyMask + 0x00000007 + gEfiMdePkgTokenSpaceGuid + UINT8 + 1 + 0x07 + + + PcdVpdBaseAddress + 0x00010010 + gEfiEdkModulePkgTokenSpaceGuid + UINT32 + 4 + 0x0 + + + PcdDxePcdDatabaseTraverseEnabled + 0x00010021 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + TRUE + + + PcdStatusCodeUseEfiSerial + 0x00010026 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeUseHardSerial + 0x00010027 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeUseRuntimeMemory + 0x00010028 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeUseDataHub + 0x00010029 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeUseOEM + 0x00010024 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeReplayInSerial + 0x0001002a + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeReplayInRuntimeMemory + 0x0001002b + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeReplayInDataHub + 0x0001002c + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeReplayInOEM + 0x0001002c + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeRuntimeMemorySize + 0x0001002d + gEfiEdkModulePkgTokenSpaceGuid + UINT16 + 2 + 128 + + + + FV_RECOVERY + BS_DRIVER + + + + + + + + + + + + + + + + + + + + + + + + + PcdMaximumUnicodeStringLength + 0x00000001 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 1000000 + + + PcdMaximumAsciiStringLength + 0x00000002 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 1000000 + + + PcdDebugPropertyMask + 0x00000005 + gEfiMdePkgTokenSpaceGuid + UINT8 + 1 + 0x0f + + + PcdSpinLockTimeout + 0x00000004 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 10000000 + + + PcdDebugPrintErrorLevel + 0x00000006 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 0x80000000 + + + PcdMaximumLinkedListLength + 0x00000003 + gEfiMdePkgTokenSpaceGuid + UINT32 + 4 + 1000000 + + + PcdDebugClearMemoryValue + 0x00000008 + gEfiMdePkgTokenSpaceGuid + UINT8 + 1 + 0xAF + + + PcdReportStatusCodePropertyMask + 0x00000007 + gEfiMdePkgTokenSpaceGuid + UINT8 + 1 + 0x07 + + + PcdVpdBaseAddress + 0x00010010 + gEfiEdkModulePkgTokenSpaceGuid + UINT32 + 4 + 0x0 + + + PcdDxePcdDatabaseTraverseEnabled + 0x00010021 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + TRUE + + + PcdStatusCodeUseEfiSerial + 0x00010026 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeUseHardSerial + 0x00010027 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeUseRuntimeMemory + 0x00010028 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeUseDataHub + 0x00010029 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeUseOEM + 0x00010024 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeReplayInSerial + 0x0001002a + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeReplayInRuntimeMemory + 0x0001002b + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeReplayInDataHub + 0x0001002c + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeReplayInOEM + 0x0001002c + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + 1 + FALSE + + + PcdStatusCodeRuntimeMemorySize + 0x0001002d + gEfiEdkModulePkgTokenSpaceGuid + UINT16 + 2 + 128 + + + + FV_RECOVERY + BS_DRIVER + + + + diff --git a/EdkModulePkg/EdkModulePkg.spd b/EdkModulePkg/EdkModulePkg.spd index 8c3197e60c..218156b58d 100644 --- a/EdkModulePkg/EdkModulePkg.spd +++ b/EdkModulePkg/EdkModulePkg.spd @@ -24,10 +24,6 @@ Include/Library/CustomDecompressLib.h - - Include/Library/EdkBsDataHubStatusCodeLib.h - - Include/Library/EdkDxeSalLib.h @@ -44,10 +40,6 @@ Include/Library/EdkIfrSupportLib.h - - Include/Library/EdkMemoryStatusCodeLib.h - - Include/Library/EdkPeCoffLoaderLib.h @@ -56,14 +48,6 @@ Include/Library/EdkPeCoffLoaderX64Lib.h - - Include/Library/EdkRtMemoryStatusCodeLib.h - - - - Include/Library/EdkRtPlatformStatusCodeLib.h - - Include/Library/EdkScsiLib.h @@ -76,6 +60,14 @@ Include/Library/TianoDecompressLib.h + + Include/Library/SerialPortLib.h + + + + Include/Library/OemHookStatusCodeLib.h + + @@ -198,10 +190,6 @@ Include/Library/CustomDecompressLib.h - - Include/Library/EdkBsDataHubStatusCodeLib.h - - Include/Library/EdkDxeSalLib.h @@ -218,10 +206,6 @@ Include/Library/EdkIfrSupportLib.h - - Include/Library/EdkMemoryStatusCodeLib.h - - Include/Library/EdkPeCoffLoaderLib.h @@ -230,14 +214,6 @@ Include/Library/EdkPeCoffLoaderX64Lib.h - - Include/Library/EdkRtMemoryStatusCodeLib.h - - - - Include/Library/EdkRtPlatformStatusCodeLib.h - - Include/Library/EdkScsiLib.h @@ -424,18 +400,16 @@ Library/EdkFvbServiceLib/EdkFvbServiceLib.msa Library/EdkGraphicsLib/EdkGraphicsLib.msa Library/EdkIfrSupportLib/EdkIfrSupportLib.msa - Library/EdkMemoryStatusCodeLib/EdkMemoryStatusCodeLib.msa Library/EdkNullCustomizedDecompressLib/EdkNullCustomizedDecompressLib.msa Library/EdkPeCoffLoaderLib/EdkPeCoffLoaderLib.msa Library/EdkPeCoffLoaderX64Lib/EdkPeCoffLoaderX64Lib.msa Library/PeiPerformanceLib/PeiPerformanceLib.msa - Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.msa - Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.msa - Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.msa Library/EdkScsiLib/EdkScsiLib.msa Library/EdkUefiDebugLibConOut/EdkUefiDebugLibConOut.msa Library/EdkUefiDebugLibStdErr/EdkUefiDebugLibStdErr.msa Library/EdkUsbLib/EdkUsbLib.msa + Library/EdkSerialPortLibNull/EdkSerialPortLibNull.msa + Library/EdkOemHookStatusCodeLibNull/EdkOemHookStatusCodeLibNull.msa Universal/Console/ConSplitter/Dxe/ConSplitter.msa Universal/Console/GraphicsConsole/Dxe/GraphicsConsole.msa Universal/Console/Terminal/Dxe/Terminal.msa @@ -460,7 +434,6 @@ Universal/PCD/Dxe/Pcd.msa Universal/Runtime/RuntimeDxe/Runtime.msa Universal/Security/SecurityStub/Dxe/SecurityStub.msa - Universal/StatusCode/RuntimeDxe/StatusCode.msa Universal/UserInterface/HiiDataBase/Dxe/HiiDatabase.msa Universal/UserInterface/DriverSample/DriverSample.msa Universal/UserInterface/SetupBrowser/Dxe/SetupBrowser.msa @@ -469,6 +442,8 @@ Universal/Variable/RuntimeDxe/Variable.msa Universal/Capsule/RuntimeDxe/CapsuleRuntime.msa Universal/WatchdogTimer/Dxe/WatchDogTimer.msa + Universal/StatusCode/Pei/PeiStatusCode.msa + Universal/StatusCode/Dxe/DxeStatusCode.msa Include/EdkPeim.h @@ -663,6 +638,11 @@ EC4DF5AF-4395-4CC9-94DE-77506D12C7B8 + + gMemoryStatusCodeRecordGuid + 060CC026-4C0D-4DDA-8F41-595FEF00A502 + + @@ -886,5 +866,122 @@ This feature flag can be used to enable or disable the Pcd DXE database traverse capability. Disable it can reduce the size of final image generated. + + PcdStatusCodeUseSerial + 0x00010022 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + FEATURE_FLAG + FALSE + This feature flag can be used to enable or disable report staus code to serial I/O. Disable it can reduce the size of final image generated. + + + PcdStatusCodeUseMemory + 0x00010023 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + FEATURE_FLAG + FALSE + This feature flag can be used to enable or disable save statuc code in GUID'ed HOB. Disable it can reduce the size of final image generated. + + + PcdStatusCodeUseOEM + 0x00010024 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + FEATURE_FLAG + FALSE + This feature flag can be used to enable or disable send status code to OEM device. Disable it can reduce the size of final image generated. + + + PcdStatusCodeMemorySize + 0x00010025 + gEfiEdkModulePkgTokenSpaceGuid + UINT16 + DYNAMIC + 4 + kbytes size of GUID'ed HOB, if the GUID'ed HOB is full, create new GUID'ed HOB with this size. + + + PcdStatusCodeUseEfiSerial + 0x00010026 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + FEATURE_FLAG + FALSE + Use to switch on/off report status code through serial DXE. + + + PcdStatusCodeUseHardSerial + 0x00010027 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + FEATURE_FLAG + FALSE + Use to switch on/off report status code to serial device. + + + PcdStatusCodeUseRuntimeMemory + 0x00010028 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + FEATURE_FLAG + FALSE + Use to switch on/off save status code in runtime memory. + + + PcdStatusCodeUseDataHub + 0x00010029 + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + FEATURE_FLAG + FALSE + Use to switch on/off log status code in data hub. + + + PcdStatusCodeReplayInSerial + 0x0001002a + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + FEATURE_FLAG + FALSE + Use to enable/dsable replay status code which saved in GUID'ed HOB in PEI phase to EFI serial. + + + PcdStatusCodeReplayInRuntimeMemory + 0x0001002b + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + FEATURE_FLAG + FALSE + Use to enable/dsable replay status code which saved in GUID'ed HOB in PEI phase to EFI serial. + + + PcdStatusCodeReplayInDataHub + 0x0001002c + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + FEATURE_FLAG + FALSE + Use to enable/dsable replay status code which saved in GUID'ed HOB in PEI phase to EFI serial. + + + PcdStatusCodeReplayInOEM + 0x0001002c + gEfiEdkModulePkgTokenSpaceGuid + BOOLEAN + FEATURE_FLAG + FALSE + Use to enable/dsable replay status code which saved in GUID'ed HOB in PEI phase to EFI serial. + + + PcdStatusCodeRuntimeMemorySize + 0x0001002d + gEfiEdkModulePkgTokenSpaceGuid + UINT16 + DYNAMIC + 4 + kbytes size of runtime memory. + diff --git a/EdkModulePkg/Include/EdkDxe.h b/EdkModulePkg/Include/EdkDxe.h index d78893242e..f07f27e8b2 100644 --- a/EdkModulePkg/Include/EdkDxe.h +++ b/EdkModulePkg/Include/EdkDxe.h @@ -56,6 +56,7 @@ Abstract: #include #include #include +#include #include diff --git a/EdkModulePkg/Include/EdkPeim.h b/EdkModulePkg/Include/EdkPeim.h index 3c1799996d..a39ed5cdb4 100644 --- a/EdkModulePkg/Include/EdkPeim.h +++ b/EdkModulePkg/Include/EdkPeim.h @@ -46,6 +46,7 @@ Abstract: #include #include #include +#include #include #include diff --git a/EdkModulePkg/Include/Guid/MemoryStatusCodeRecord.h b/EdkModulePkg/Include/Guid/MemoryStatusCodeRecord.h new file mode 100644 index 0000000000..0c0fd9a051 --- /dev/null +++ b/EdkModulePkg/Include/Guid/MemoryStatusCodeRecord.h @@ -0,0 +1,54 @@ +/*++ + +Copyright (c) 2006, Intel Corporation +All rights reserved. This program and the accompanying materials +are licensed and made available under the terms and conditions of the BSD License +which accompanies this distribution. The full text of the license may be found at +http://opensource.org/licenses/bsd-license.php + +THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, +WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + +Module Name: + + MemoryStatusCodeRecord.h + +Abstract: + + GUID used to identify status code records HOB that originate from the PEI status code + +--*/ + +#ifndef _MEMORY_STATUS_CODE_RECORD_H__ +#define _MEMORY_STATUS_CODE_RECORD_H__ + +#define MEMORY_STATUS_CODE_RECORD_GUID \ + { \ + 0x60cc026, 0x4c0d, 0x4dda, {0x8f, 0x41, 0x59, 0x5f, 0xef, 0x0, 0xa5, 0x2} \ + } + +/** + Memory status code records packet structure : + +---------------+----------+----------+-----+----------+-----+----------+ + | Packet Header | Record 1 | Record 2 | ... + Record n | ... | Record m | + +---------------+----------+----------+-----+----------+-----+----------+ + ^ ^ ^ + +--------- RecordIndex -----------+ | + +---------------- MaxRecordsNumber----------------------+ +**/ +typedef struct { + UINT16 PacketIndex; // Index of the Packet. + UINT16 RecordIndex; // Index of record in the packet. + UINT32 MaxRecordsNumber; // Max number of records in the packet. +} MEMORY_STATUSCODE_PACKET_HEADER; + +typedef struct { + EFI_STATUS_CODE_TYPE CodeType; + EFI_STATUS_CODE_VALUE Value; + UINT32 Instance; +} MEMORY_STATUSCODE_RECORD; + + +extern EFI_GUID gMemoryStatusCodeRecordGuid; + +#endif diff --git a/EdkModulePkg/Include/Library/EdkDxeSalLib.h b/EdkModulePkg/Include/Library/EdkDxeSalLib.h index 9d21846289..d5fe5ed141 100644 --- a/EdkModulePkg/Include/Library/EdkDxeSalLib.h +++ b/EdkModulePkg/Include/Library/EdkDxeSalLib.h @@ -23,6 +23,7 @@ Abstract: //#include EFI_STATUS +EFIAPI RegisterEsalFunction ( IN UINT64 FunctionId, IN EFI_GUID *ClassGuid, @@ -49,6 +50,7 @@ Returns: ; EFI_STATUS +EFIAPI RegisterEsalClass ( IN EFI_GUID *ClassGuid, IN VOID *ModuleGlobal, @@ -74,6 +76,7 @@ Returns: ; SAL_RETURN_REGS +EFIAPI EfiCallEsalService ( IN EFI_GUID *ClassGuid, IN UINT64 FunctionId, @@ -112,6 +115,7 @@ Returns: ; SAL_RETURN_REGS +EFIAPI SetEsalVirtualEntryPoint ( IN UINT64 EntryPoint, IN UINT64 Gp @@ -119,6 +123,7 @@ SetEsalVirtualEntryPoint ( ; SAL_RETURN_REGS +EFIAPI SetEsalPhysicalEntryPoint ( IN UINT64 EntryPoint, IN UINT64 Gp @@ -126,12 +131,14 @@ SetEsalPhysicalEntryPoint ( ; SAL_RETURN_REGS +EFIAPI GetEsalEntryPoint ( VOID ) ; VOID +EFIAPI SalFlushCache ( IN EFI_PHYSICAL_ADDRESS Start, IN UINT64 Length diff --git a/EdkModulePkg/Include/Library/OemHookStatusCodeLib.h b/EdkModulePkg/Include/Library/OemHookStatusCodeLib.h new file mode 100644 index 0000000000..2d172259f5 --- /dev/null +++ b/EdkModulePkg/Include/Library/OemHookStatusCodeLib.h @@ -0,0 +1,70 @@ + +/** @file + OEM hook status code library functions with no library constructor/destructor + + Copyright (c) 2006, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + Module Name: OemHookStatusCodeLib.h + +**/ + +#ifndef __OEM_HOOK_STATUSCODE_LIB__ +#define __OEM_HOOK_STATUSCODE_LIB__ + +/** + + Initialize OEM status code device . + +**/ +VOID +EFIAPI +OemHookStatusCodeInitialize ( + VOID + ); + +/** + Report status code to OEM device. + + @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions¡± below. + + @param Value Describes the current status of a hardware or software entity. + This included information about the class and subclass that is used to classify the entity + as well as an operation. 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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + + @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. + Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification. + + + @param Data This optional parameter may be used to pass additional data + + @return The function always return EFI_SUCCESS. + +**/ +EFI_STATUS +EFIAPI +OemHookStatusCodeReport ( + IN EFI_STATUS_CODE_TYPE CodeType, + IN EFI_STATUS_CODE_VALUE Value, + IN UINT32 Instance, + IN EFI_GUID *CallerId, OPTIONAL + IN EFI_STATUS_CODE_DATA *Data OPTIONAL + ); + +#endif diff --git a/EdkModulePkg/Include/Library/SerialPortLib.h b/EdkModulePkg/Include/Library/SerialPortLib.h new file mode 100644 index 0000000000..8fe04e9a7d --- /dev/null +++ b/EdkModulePkg/Include/Library/SerialPortLib.h @@ -0,0 +1,74 @@ + +/** @file + Serial I/O Port library functions with no library constructor/destructor + + Copyright (c) 2006, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + Module Name: SerialPortLib.h + +**/ + +#ifndef __SERIAL_PORT_LIB__ +#define __SERIAL_PORT_LIB__ + +/** + + Programmed hardware of Serial port. + +**/ +EFI_STATUS +EFIAPI +SerialPortInitialize ( + VOID + ); + +/** + Write data to serial device. + + If the buffer is NULL, then ASSERT(); + if NumberOfBytes is zero, then ASSERT(). + + @param Buffer Point of data buffer which need to be writed. + @param NumberOfBytes Number of output bytes which are cached in Buffer. + + @retval 0 Write data failed. + @retval !0 Actual number of bytes writed to serial device. + +**/ +UINTN +EFIAPI +SerialPortWrite ( + IN UINT8 *Buffer, + IN UINTN NumberOfBytes +); + + +/** + Read data from serial device and save the datas in buffer. + + If the buffer is NULL, then ASSERT(); + if NumberOfBytes is zero, then ASSERT(). + + @param Buffer Point of data buffer which need to be writed. + @param NumberOfBytes Number of output bytes which are cached in Buffer. + + @retval 0 Read data failed. + @retval !0 Aactual number of bytes read from serial device. + +**/ +UINTN +EFIAPI +SerialPortRead ( + OUT UINT8 *Buffer, + IN UINTN NumberOfBytes +); + + +#endif diff --git a/EdkModulePkg/Library/EdkDxeSalLib/Ipf/EsalServiceLib.c b/EdkModulePkg/Library/EdkDxeSalLib/Ipf/EsalServiceLib.c index d258b98cab..83b6aa2c4c 100644 --- a/EdkModulePkg/Library/EdkDxeSalLib/Ipf/EsalServiceLib.c +++ b/EdkModulePkg/Library/EdkDxeSalLib/Ipf/EsalServiceLib.c @@ -38,6 +38,7 @@ DxeSalLibConstruct ( } EFI_STATUS +EFIAPI RegisterEsalFunction ( IN UINT64 FunctionId, IN EFI_GUID *ClassGuid, @@ -72,6 +73,7 @@ Returns: } EFI_STATUS +EFIAPI RegisterEsalClass ( IN EFI_GUID *ClassGuid, IN VOID *ModuleGlobal, @@ -129,6 +131,7 @@ Returns: } SAL_RETURN_REGS +EFIAPI EfiCallEsalService ( IN EFI_GUID *ClassGuid, IN UINT64 FunctionId, diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.msa b/EdkModulePkg/Library/EdkOemHookStatusCodeLibNull/EdkOemHookStatusCodeLibNull.msa similarity index 58% rename from EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.msa rename to EdkModulePkg/Library/EdkOemHookStatusCodeLibNull/EdkOemHookStatusCodeLibNull.msa index 1e03e7fa5e..6be9cb78ff 100644 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.msa +++ b/EdkModulePkg/Library/EdkOemHookStatusCodeLibNull/EdkOemHookStatusCodeLibNull.msa @@ -11,62 +11,40 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. --> - EdkRtMemoryStatusCodeLib - DXE_DRIVER - 1517564b-ab66-42b7-8903-731a95f314f9 + EdkOemHookStatusCodeLibNull + PEIM + 54D2878F-25CD-4a2b-8420-EBD18E609C76 1.0 - Runtime memory status code library - Save status code in runtime memory heap. + Memory Status Code Library for UEFI drivers + Lib to provide memory journal status code reporting Routines Copyright (c) 2006, Intel Corporation. - All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 IA32 X64 IPF EBC false - EdkRtMemoryStatusCodeLib + EdkOemHookStatusCodeLibNull - EdkRtMemoryStatusCodeLib - - - UefiLib - - - DebugLib - - - BaseLib - - - UefiRuntimeLib - - - ReportStatusCodeLib - - - PrintLib - - - HobLib - - - UefiBootServicesTableLib + OemHookStatusCodeLib - RtMemoryStatusCode.c + OemHookStatusCodeLibNull.c + + EFI_SPECIFICATION_VERSION 0x00020000 EDK_RELEASE_VERSION 0x00020000 diff --git a/EdkModulePkg/Library/EdkOemHookStatusCodeLibNull/OemHookStatusCodeLibNull.c b/EdkModulePkg/Library/EdkOemHookStatusCodeLibNull/OemHookStatusCodeLibNull.c new file mode 100644 index 0000000000..12988d01ba --- /dev/null +++ b/EdkModulePkg/Library/EdkOemHookStatusCodeLibNull/OemHookStatusCodeLibNull.c @@ -0,0 +1,71 @@ +/** @file + OEM hook status code library functions with no library constructor/destructor + + Copyright (c) 2006, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + Module Name: OemHookStatusCodeLibNull.c + +**/ + +/** + + Initialize OEM status code device . + +**/ +VOID +EFIAPI +OemHookStatusCodeInitialize ( + VOID + ) +{ + return; +} + +/** + Report status code to OEM device. + + @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions¡± below. + + @param Value Describes the current status of a hardware or software entity. + This included information about the class and subclass that is used to classify the entity + as well as an operation. 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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + + @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. + Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification. + + + @param Data This optional parameter may be used to pass additional data + + @return The function always return EFI_SUCCESS. + +**/ +EFI_STATUS +EFIAPI +OemHookStatusCodeReport ( + IN EFI_STATUS_CODE_TYPE CodeType, + IN EFI_STATUS_CODE_VALUE Value, + IN UINT32 Instance, + IN EFI_GUID *CallerId, OPTIONAL + IN EFI_STATUS_CODE_DATA *Data OPTIONAL + ) +{ + return EFI_UNSUPPORTED; +} + diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.c b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.c deleted file mode 100644 index d72aae11a3..0000000000 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.c +++ /dev/null @@ -1,397 +0,0 @@ -/*++ - -Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - BsDataHubStatusCode.c - -Abstract: - - This implements a status code listener that logs status codes into the data - hub. This is only active during non-runtime DXE. - ---*/ -#include "BsDataHubStatusCode.h" - -// -// Globals only work at BootService Time. NOT at Runtime! -// -static EFI_DATA_HUB_PROTOCOL *mDataHub; -static LIST_ENTRY mRecordBuffer; -static INTN mRecordNum; -static EFI_EVENT mLogDataHubEvent; -static EFI_LOCK mStatusCodeReportLock; -static BOOLEAN mEventHandlerActive = FALSE; - -STATUS_CODE_RECORD_LIST * -GetRecordBuffer ( - VOID - ) -/*++ - -Routine Description: - - Returned buffer of length BYTES_PER_RECORD - -Arguments: - - None - -Returns: - - Entry in mRecordBuffer or NULL if non available - ---*/ -{ - STATUS_CODE_RECORD_LIST *Buffer; - - gBS->AllocatePool (EfiBootServicesData, sizeof (STATUS_CODE_RECORD_LIST), (VOID **) &Buffer); - if (Buffer == NULL) { - return NULL; - } - - ZeroMem (Buffer, sizeof (STATUS_CODE_RECORD_LIST)); - Buffer->Signature = BS_DATA_HUB_STATUS_CODE_SIGNATURE; - - return Buffer; -} - -DATA_HUB_STATUS_CODE_DATA_RECORD * -AquireEmptyRecordBuffer ( - VOID - ) -/*++ - -Routine Description: - - Allocate a mRecordBuffer entry in the form of a pointer. - -Arguments: - - None - -Returns: - - Pointer to new buffer. NULL if none exist. - ---*/ -{ - STATUS_CODE_RECORD_LIST *DataBuffer; - - if (mRecordNum < MAX_RECORD_NUM) { - DataBuffer = GetRecordBuffer (); - if (DataBuffer != NULL) { - EfiAcquireLock (&mStatusCodeReportLock); - InsertTailList (&mRecordBuffer, &DataBuffer->Link); - mRecordNum++; - EfiReleaseLock (&mStatusCodeReportLock); - return (DATA_HUB_STATUS_CODE_DATA_RECORD *) DataBuffer->RecordBuffer; - } - } - - return NULL; -} - -EFI_STATUS -ReleaseRecordBuffer ( - IN STATUS_CODE_RECORD_LIST *RecordBuffer - ) -/*++ - -Routine Description: - - Release a mRecordBuffer entry allocated by AquireEmptyRecordBuffer (). - -Arguments: - - RecordBuffer - Data to free - -Returns: - - EFI_SUCCESS - If DataRecord is valid - EFI_UNSUPPORTED - The record list has empty - ---*/ -{ - ASSERT (RecordBuffer != NULL); - if (mRecordNum <= 0) { - return EFI_UNSUPPORTED; - } - - EfiAcquireLock (&mStatusCodeReportLock); - RemoveEntryList (&RecordBuffer->Link); - mRecordNum--; - EfiReleaseLock (&mStatusCodeReportLock); - gBS->FreePool (RecordBuffer); - return EFI_SUCCESS; -} - -EFI_STATUS -BsDataHubReportStatusCode ( - 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 - ) -/*++ - -Routine Description: - - Boot service report status code listener. This function logs the status code - into the data hub. - -Arguments: - - Same as ReportStatusCode (See Tiano Runtime Specification) - -Returns: - - None - ---*/ -{ - DATA_HUB_STATUS_CODE_DATA_RECORD *DataHub; - UINT32 ErrorLevel; - VA_LIST Marker; - CHAR8 *Format; - UINTN Index; - CHAR16 FormatBuffer[BYTES_PER_RECORD]; - - if (EfiAtRuntime ()) { - // - // For now all we do is post code at runtime - // - return EFI_SUCCESS; - } - // - // If we had an error while in our event handler, then do nothing so - // that we don't get in an endless loop. - // - if (mEventHandlerActive) { - return EFI_SUCCESS; - } - - DataHub = (DATA_HUB_STATUS_CODE_DATA_RECORD *) AquireEmptyRecordBuffer (); - if (DataHub == NULL) { - // - // There are no empty record buffer in private buffers - // - return EFI_OUT_OF_RESOURCES; - } - // - // Construct Data Hub Extended Data - // - DataHub->CodeType = CodeType; - DataHub->Value = Value; - DataHub->Instance = Instance; - - if (CallerId != NULL) { - CopyMem (&DataHub->CallerId, CallerId, sizeof (EFI_GUID)); - } else { - ZeroMem (&DataHub->CallerId, sizeof (EFI_GUID)); - } - - if (Data == NULL) { - ZeroMem (&DataHub->Data, sizeof (EFI_STATUS_CODE_DATA)); - } else { - // - // Copy generic Header - // - CopyMem (&DataHub->Data, Data, sizeof (EFI_STATUS_CODE_DATA)); - - if (ReportStatusCodeExtractDebugInfo (Data, &ErrorLevel, &Marker, &Format)) { - // - // Convert Ascii Format string to Unicode. - // - for (Index = 0; Format[Index] != '\0' && Index < (BYTES_PER_RECORD - 1); Index += 1) { - FormatBuffer[Index] = (CHAR16) Format[Index]; - } - - FormatBuffer[Index] = L'\0'; - - // - // Put processed string into the buffer - // - Index = UnicodeVSPrint ( - (CHAR16 *) (DataHub + 1), - BYTES_PER_RECORD - (sizeof (DATA_HUB_STATUS_CODE_DATA_RECORD)), - FormatBuffer, - Marker - ); - - // - // DATA_HUB_STATUS_CODE_DATA_RECORD followed by VSPrint String Buffer - // - DataHub->Data.Size = (UINT16) (Index * sizeof (CHAR16)); - - } else { - // - // Default behavior is to copy optional data - // - if (Data->Size > (BYTES_PER_RECORD - sizeof (DATA_HUB_STATUS_CODE_DATA_RECORD))) { - DataHub->Data.Size = (UINT16) (BYTES_PER_RECORD - sizeof (DATA_HUB_STATUS_CODE_DATA_RECORD)); - } - - CopyMem (DataHub + 1, Data + 1, DataHub->Data.Size); - } - } - - gBS->SignalEvent (mLogDataHubEvent); - - return EFI_SUCCESS; -} - -VOID -EFIAPI -LogDataHubEventHandler ( - IN EFI_EVENT Event, - IN VOID *Context - ) -/*++ - -Routine Description: - - The Event handler which will be notified to log data in Data Hub. - -Arguments: - - Event - Instance of the EFI_EVENT to signal whenever data is - available to be logged in the system. - Context - Context of the event. - -Returns: - - None. - ---*/ -{ - EFI_STATUS Status; - DATA_HUB_STATUS_CODE_DATA_RECORD *DataRecord; - UINTN Size; - UINT64 DataRecordClass; - LIST_ENTRY *Link; - STATUS_CODE_RECORD_LIST *BufferEntry; - - // - // Set our global flag so we don't recurse if we get an error here. - // - mEventHandlerActive = TRUE; - - // - // Log DataRecord in Data Hub. - // If there are multiple DataRecords, Log all of them. - // - for (Link = mRecordBuffer.ForwardLink; Link != &mRecordBuffer;) { - BufferEntry = CR (Link, STATUS_CODE_RECORD_LIST, Link, BS_DATA_HUB_STATUS_CODE_SIGNATURE); - DataRecord = (DATA_HUB_STATUS_CODE_DATA_RECORD *) (BufferEntry->RecordBuffer); - Link = Link->ForwardLink; - - // - // Add in the size of the header we added. - // - Size = sizeof (DATA_HUB_STATUS_CODE_DATA_RECORD) + DataRecord->Data.Size; - - if ((DataRecord->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) { - DataRecordClass = EFI_DATA_RECORD_CLASS_PROGRESS_CODE; - } else if ((DataRecord->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) { - DataRecordClass = EFI_DATA_RECORD_CLASS_ERROR; - } else if ((DataRecord->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE) { - DataRecordClass = EFI_DATA_RECORD_CLASS_DEBUG; - } else { - // - // Should never get here. - // - DataRecordClass = EFI_DATA_RECORD_CLASS_DEBUG | - EFI_DATA_RECORD_CLASS_ERROR | - EFI_DATA_RECORD_CLASS_DATA | - EFI_DATA_RECORD_CLASS_PROGRESS_CODE; - } - - if (((DataRecord->Instance & EFI_D_ERROR) != 0) && - (((DataRecord->Instance & EFI_D_POOL) != 0) || ((DataRecord->Instance & EFI_D_PAGE) != 0)) - ) { - // - // If memory error, do not call LogData (). - // - DebugPrint ((UINTN)-1, "Memory Error\n"); - Status = EFI_OUT_OF_RESOURCES; - } else { - // - // Log DataRecord in Data Hub - // - Status = mDataHub->LogData ( - mDataHub, - &gEfiStatusCodeGuid, - &gEfiStatusCodeRuntimeProtocolGuid, - DataRecordClass, - DataRecord, - (UINT32) Size - ); - } - - ReleaseRecordBuffer (BufferEntry); - } - - mEventHandlerActive = FALSE; - - return ; -} - -VOID -BsDataHubStatusCodeInitialize ( - VOID - ) -/*++ - -Routine Description: - - Install a data hub listener. - -Arguments: - - (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT) - -Returns: - - EFI_SUCCESS - Logging Hub protocol installed - Other - No protocol installed, unload driver. - ---*/ -{ - EFI_STATUS Status; - - Status = gBS->LocateProtocol (&gEfiDataHubProtocolGuid, NULL, (VOID **) &mDataHub); - // - // Should never fail due to dependency grammer - // - ASSERT_EFI_ERROR (Status); - - // - // Initialize FIFO - // - InitializeListHead (&mRecordBuffer); - mRecordNum = 0; - - EfiInitializeLock (&mStatusCodeReportLock, EFI_TPL_HIGH_LEVEL); - - // - // Create a Notify Event to log data in Data Hub - // - Status = gBS->CreateEvent ( - EFI_EVENT_NOTIFY_SIGNAL, - EFI_TPL_CALLBACK, - LogDataHubEventHandler, - NULL, - &mLogDataHubEvent - ); - -} diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.h b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.h deleted file mode 100644 index f15a90e5e2..0000000000 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.h +++ /dev/null @@ -1,130 +0,0 @@ -/*++ - -Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - BsDataHubStatusCode.h - -Abstract: - - Header for the status code data hub logging component - ---*/ - -#ifndef _EFI_BS_DATA_HUB_STATUS_CODE_H_ -#define _EFI_BS_DATA_HUB_STATUS_CODE_H_ - -// -// Private data declarations -// -#define MAX_RECORD_NUM 1000 -#define BYTES_PER_RECORD EFI_STATUS_CODE_DATA_MAX_SIZE -#define EMPTY_RECORD_TAG 0xFF - -#define BS_DATA_HUB_STATUS_CODE_SIGNATURE EFI_SIGNATURE_32 ('B', 'D', 'H', 'S') - -typedef struct { - UINTN Signature; - LIST_ENTRY Link; - UINT8 RecordBuffer[BYTES_PER_RECORD]; -} STATUS_CODE_RECORD_LIST; - -// -// Function prototypes -// -STATUS_CODE_RECORD_LIST * -GetRecordBuffer ( - VOID - ) -; - -/*++ - -Routine Description: - - Returned buffer of length BYTES_PER_RECORD - -Arguments: - - None - -Returns: - - Entry in mRecordBuffer or NULL if non available - ---*/ -DATA_HUB_STATUS_CODE_DATA_RECORD * -AquireEmptyRecordBuffer ( - VOID - ) -; - -/*++ - -Routine Description: - - Allocate a mRecordBuffer entry in the form of a pointer. - -Arguments: - - None - -Returns: - - Pointer to new buffer. NULL if none exist. - ---*/ -EFI_STATUS -ReleaseRecordBuffer ( - IN STATUS_CODE_RECORD_LIST *RecordBuffer - ) -; - -/*++ - -Routine Description: - - Release a mRecordBuffer entry allocated by AquireEmptyRecordBuffer (). - -Arguments: - - RecordBuffer - Data to free - -Returns: - - EFI_SUCCESS - If RecordBuffer is valid - EFI_UNSUPPORTED - The record list has empty - ---*/ -VOID -EFIAPI -LogDataHubEventHandler ( - IN EFI_EVENT Event, - IN VOID *Context - ) -; - -/*++ - -Routine Description: - - Event Handler that log in Status code in Data Hub. - -Arguments: - - (Standard EFI Event Handler - EFI_EVENT_NOTIFY) - -Returns: - - NONE - ---*/ -#endif diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.msa b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.msa deleted file mode 100644 index af8f5f74af..0000000000 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/BsDataHubStatusCode/BsDataHubStatusCode.msa +++ /dev/null @@ -1,100 +0,0 @@ - - - - - EdkBsDataHubStatusCodeLib - DXE_DRIVER - 041bf780-dc3e-49ab-8d67-4b86075440ea - 1.0 - Data hub status code library - Save status code in DATA HUB. - Copyright (c) 2006, Intel Corporation. - All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 - - - IA32 X64 IPF EBC - false - EdkBsDataHubStatusCodeLib - - - - EdkBsDataHubStatusCodeLib - - - UefiLib - - - DebugLib - - - BaseLib - - - BaseMemoryLib - - - UefiRuntimeLib - - - ReportStatusCodeLib - - - PrintLib - - - UefiBootServicesTableLib - - - - BsDataHubStatusCode.c - BsDataHubStatusCode.h - - - - - - - - gEfiStatusCodeRuntimeProtocolGuid - - - gEfiDataHubProtocolGuid - - - - - - EVENT_GROUP_GUID - - - - - - gEfiStatusCodeGuid - - - - - gEfiStatusCodeGuid - - - - EFI_SPECIFICATION_VERSION 0x00020000 - EDK_RELEASE_VERSION 0x00020000 - - \ No newline at end of file diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.c b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.c deleted file mode 100644 index e0347a3a03..0000000000 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtMemoryStatusCode/RtMemoryStatusCode.c +++ /dev/null @@ -1,188 +0,0 @@ -/*++ - -Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - RtMemoryStatusCode.c - -Abstract: - - EFI lib to provide memory journal status code reporting routines. - ---*/ - -#include - -// -// Global variables -// -PEI_STATUS_CODE_MEMORY_PPI mStatusCodeMemoryPpi = { 0, 0, 0, 0 }; - -// -// Function implementations -// -EFI_STATUS -RtMemoryReportStatusCode ( - 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 - ) -/*++ - -Routine Description: - - Log a status code to a memory journal. If no memory journal exists, - we will just return. - -Arguments: - - Same as ReportStatusCode AP - -Returns: - - EFI_SUCCESS This function always returns success - ---*/ -{ - EFI_STATUS_CODE_ENTRY *CurrentEntry; - UINT32 MaxEntry; - - // - // We don't care to log debug codes. - // - if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE) { - return EFI_SUCCESS; - } - // - // Update the latest entry in the journal. - // - MaxEntry = mStatusCodeMemoryPpi.Length / sizeof (EFI_STATUS_CODE_ENTRY); - if (!MaxEntry) { - // - // If we don't have any entries, then we can return. - // This effectively means that no memory buffer was passed forward from PEI. - // - return EFI_SUCCESS; - } - - CurrentEntry = (EFI_STATUS_CODE_ENTRY *) (UINTN) (mStatusCodeMemoryPpi.Address + (mStatusCodeMemoryPpi.LastEntry * sizeof (EFI_STATUS_CODE_ENTRY))); - - mStatusCodeMemoryPpi.LastEntry = (mStatusCodeMemoryPpi.LastEntry + 1) % MaxEntry; - if (mStatusCodeMemoryPpi.LastEntry == mStatusCodeMemoryPpi.FirstEntry) { - mStatusCodeMemoryPpi.FirstEntry = (mStatusCodeMemoryPpi.FirstEntry + 1) % MaxEntry; - } - - CurrentEntry->Type = CodeType; - CurrentEntry->Value = Value; - CurrentEntry->Instance = Instance; - - return EFI_SUCCESS; -} - -VOID -RtMemoryStatusCodeInitialize ( - VOID - ) -/*++ - -Routine Description: - - Initialization routine. - Allocates heap space for storing Status Codes. - Installs a PPI to point to that heap space. - Installs a callback to switch to memory. - Installs a callback to - -Arguments: - - (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT) - -Returns: - - None - ---*/ -{ - EFI_HOB_GUID_TYPE *GuidHob; - PEI_STATUS_CODE_MEMORY_PPI **StatusCodeMemoryPpi; - - GuidHob = GetFirstGuidHob (&gPeiStatusCodeMemoryPpiGuid); - if (GuidHob == NULL) { - return; - } - - StatusCodeMemoryPpi = GET_GUID_HOB_DATA (GuidHob); - - // - // Copy data to our structure since the HOB will go away at runtime - // - // BUGBUG: Virtualize for RT - // - mStatusCodeMemoryPpi.FirstEntry = (*StatusCodeMemoryPpi)->FirstEntry; - mStatusCodeMemoryPpi.LastEntry = (*StatusCodeMemoryPpi)->LastEntry; - mStatusCodeMemoryPpi.Address = (*StatusCodeMemoryPpi)->Address; - mStatusCodeMemoryPpi.Length = (*StatusCodeMemoryPpi)->Length; -} - -VOID -PlaybackStatusCodes ( - IN EFI_REPORT_STATUS_CODE ReportStatusCodeFunc - ) -/*++ - -Routine Description: - - Call the input ReportStatusCode function with every status code recorded in - the journal. - -Arguments: - - ReportStatusCode ReportStatusCode function to call. - -Returns: - - None - ---*/ -{ - UINTN MaxEntry; - EFI_STATUS_CODE_ENTRY *CurrentEntry; - UINTN Counter; - - if (ReportStatusCodeFunc == RtMemoryReportStatusCode) { - return ; - } - // - // Playback prior status codes to current listeners - // - MaxEntry = mStatusCodeMemoryPpi.Length / sizeof (EFI_STATUS_CODE_ENTRY); - for (Counter = mStatusCodeMemoryPpi.FirstEntry; Counter != mStatusCodeMemoryPpi.LastEntry; Counter++) { - // - // Check if we have to roll back to beginning of queue buffer - // - if (Counter == MaxEntry) { - Counter = 0; - } - // - // Play current entry - // - CurrentEntry = (EFI_STATUS_CODE_ENTRY *) (UINTN) (mStatusCodeMemoryPpi.Address + (Counter * sizeof (EFI_STATUS_CODE_ENTRY))); - ReportStatusCodeFunc ( - CurrentEntry->Type, - CurrentEntry->Value, - CurrentEntry->Instance, - NULL, - NULL - ); - } -} diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.c b/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.c deleted file mode 100644 index 47f7f96511..0000000000 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.c +++ /dev/null @@ -1,130 +0,0 @@ -/*++ - -Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - RtPlatformStatusCode.c - -Abstract: - - Contains NT32 specific implementations required to use status codes. - ---*/ - -// -// Globals only work at BootService Time. NOT at Runtime! -// -// - -typedef -EFI_STATUS -(EFIAPI *REPORT_STATUS_CODE_FUNCTION) ( - IN EFI_STATUS_CODE_TYPE Type, - IN EFI_STATUS_CODE_VALUE Value, - IN UINT32 Instance, - IN EFI_GUID *CallerId OPTIONAL, - IN EFI_STATUS_CODE_DATA *Data OPTIONAL - ); - -REPORT_STATUS_CODE_FUNCTION mPeiReportStatusCode; - -// -// Function implementations -// -EFI_STATUS -RtPlatformReportStatusCode ( - 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 - ) -/*++ - -Routine Description: - - Call all status code listeners in the MonoStatusCode. - -Arguments: - - Same as ReportStatusCode service - -Returns: - - EFI_SUCCESS Always returns success. - ---*/ -{ - RtMemoryReportStatusCode (CodeType, Value, Instance, CallerId, Data); - if (EfiAtRuntime ()) { - // - // For now all we do is post code at runtime - // - return EFI_SUCCESS; - } - - BsDataHubReportStatusCode (CodeType, Value, Instance, CallerId, Data); - - // - // Call back into PEI to get status codes. This is because SecMain contains - // status code that reports to Win32. - // - if (mPeiReportStatusCode != NULL) { - return mPeiReportStatusCode (CodeType, Value, Instance, CallerId, Data); - } - - return EFI_SUCCESS; -} - -VOID -RtPlatformStatusCodeInitialize ( - VOID - ) -/*++ - -Routine Description: - - Initialize the status code listeners. - -Arguments: - - (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT) - -Returns: - - None - ---*/ -{ - EFI_HOB_GUID_TYPE *GuidHob; - void *Pointer; - - RtMemoryStatusCodeInitialize (); - BsDataHubStatusCodeInitialize (); - - // - // Play any prior status codes to the data hub. - // - PlaybackStatusCodes (BsDataHubReportStatusCode); - - // - // If PEI has a ReportStatusCode callback find it and use it before StdErr - // is connected. - // - mPeiReportStatusCode = NULL; - - GuidHob = GetFirstGuidHob (&gEfiStatusCodeRuntimeProtocolGuid); - if (NULL == GuidHob) { - return; - } - Pointer = GET_GUID_HOB_DATA (GuidHob); - mPeiReportStatusCode = (REPORT_STATUS_CODE_FUNCTION) (*(UINTN *) Pointer); -} diff --git a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.msa b/EdkModulePkg/Library/EdkSerialPortLibNull/EdkSerialPortLibNull.msa similarity index 54% rename from EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.msa rename to EdkModulePkg/Library/EdkSerialPortLibNull/EdkSerialPortLibNull.msa index ac408a8ba7..a5940b2ca2 100644 --- a/EdkModulePkg/Library/EdkRuntimeStatusCodeLib/RtPlatformStatusCode/RtPlatformStatusCode.msa +++ b/EdkModulePkg/Library/EdkSerialPortLibNull/EdkSerialPortLibNull.msa @@ -11,68 +11,40 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. --> - EdkRtPlatformStatusCodeLib - DXE_DRIVER - 68b157b5-9534-43ff-9cd3-6705e4e1d56c + EdkSerialPortLibNull + PEIM + E4541241-8897-411a-91F8-7D7E45837146 1.0 - Runtime platform status code library - Platform status code library + Memory Status Code Library for UEFI drivers + Lib to provide memory journal status code reporting Routines Copyright (c) 2006, Intel Corporation. - All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 IA32 X64 IPF EBC false - EdkRtPlatformStatusCodeLib + EdkSerialPortLibNull - EdkRtPlatformStatusCodeLib - - - UefiLib - - - DebugLib - - - BaseLib - - - UefiRuntimeLib - - - ReportStatusCodeLib - - - PrintLib - - - HobLib - - - EdkBsDataHubStatusCodeLib - - - EdkRtMemoryStatusCodeLib - - - UefiBootServicesTableLib + SerialPortLib - RtPlatformStatusCode.c + SerialPortLibNull.c + + EFI_SPECIFICATION_VERSION 0x00020000 EDK_RELEASE_VERSION 0x00020000 diff --git a/EdkModulePkg/Library/EdkSerialPortLibNull/SerialPortLibNull.c b/EdkModulePkg/Library/EdkSerialPortLibNull/SerialPortLibNull.c new file mode 100644 index 0000000000..af9b95705f --- /dev/null +++ b/EdkModulePkg/Library/EdkSerialPortLibNull/SerialPortLibNull.c @@ -0,0 +1,77 @@ +/** @file + Serial I/O Port library functions with no library constructor/destructor + + Copyright (c) 2006, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + Module Name: SerialPortLibNull.c + +**/ + +/** + + Programmed hardware of Serial port. + +**/ +EFI_STATUS +EFIAPI +SerialPortInitialize ( + VOID + ) +{ + return EFI_UNSUPPORTED; +} + +/** + Write data to serial device. + + If the buffer is NULL, then ASSERT(); + if NumberOfBytes is zero, then ASSERT(). + + @param Buffer Point of data buffer which need to be writed. + @param NumberOfBytes Number of output bytes which are cached in Buffer. + + @retval 0 Write data failed. + @retval !0 Actual number of bytes writed to serial device. + +**/ +UINTN +EFIAPI +SerialPortWrite ( + IN UINT8 *Buffer, + IN UINTN NumberOfBytes +) +{ + return 0; +} + + +/** + Read data from serial device and save the datas in buffer. + + If the buffer is NULL, then ASSERT(); + if NumberOfBytes is zero, then ASSERT(). + + @param Buffer Point of data buffer which need to be writed. + @param NumberOfBytes Number of output bytes which are cached in Buffer. + + @retval 0 Read data failed. + @retval !0 Aactual number of bytes read from serial device. + +**/ +UINTN +EFIAPI +SerialPortRead ( + OUT UINT8 *Buffer, + IN UINTN NumberOfBytes +) +{ + return 0; +} + diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/Common/DxeStatusCodeCommon.c b/EdkModulePkg/Universal/StatusCode/Dxe/Common/DxeStatusCodeCommon.c new file mode 100644 index 0000000000..ae45d886be --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/Common/DxeStatusCodeCommon.c @@ -0,0 +1,222 @@ +/** @file + Status code driver for IA32/X64/EBC architecture. + +// Copyright (c) 2006, Intel Corporation. All rights reserved. +// This software and associated documentation (if any) is furnished +// under a license and may only be used or copied in accordance +// with the terms of the license. Except as permitted by such +// license, no part of this software or documentation may be +// reproduced, stored in a retrieval system, or transmitted in any +// form or by any means without the express written consent of +// Intel Corporation. + + Module Name: DxeStatusCodeCommon.c + +**/ +#include "DxeStatusCode.h" + + +/** + Report status code to all supported device. + Calls into the workers which dispatches the platform specific + listeners. + + @param Type Indicates the type of status code being reported. + The type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below. + @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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + @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. + Type EFI_STATUS_CODE_DATA is defined in "Related Definitions" below. + The contents of this data type may have additional GUID-specific data. The standard GUIDs and + their associated data structures are defined in the Intel? Platform Innovation Framework for EFI Status Codes Specification. +**/ +EFI_STATUS +EFIAPI +ReportDispatcher ( + IN EFI_STATUS_CODE_TYPE Type, + IN EFI_STATUS_CODE_VALUE Value, + IN UINT32 Instance, + IN EFI_GUID *CallerId OPTIONAL, + IN EFI_STATUS_CODE_DATA *Data OPTIONAL + ); + +// +// Declaration of status code protocol. +// +EFI_STATUS_CODE_PROTOCOL mEfiStatusCodeProtocol = { + ReportDispatcher +}; + +// +// Delaration of DXE status code controller +// +DXE_STATUS_CODE_CONTROLLER gDxeStatusCode = { + // + // Initialize nest status as non nested. + // + 0, + {NULL, NULL} +}; + +/** + + Install the ReportStatusCode runtime service. + + @param ImageHandle Image handle of the loaded driver + @param SystemTable Pointer to the System Table + + @return The function always returns success. + +**/ +EFI_STATUS +EFIAPI +DxeStatusCodeDriverEntry ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + EFI_HANDLE Handle = NULL; + EFI_STATUS Status; + + // + // Dispatch initialization request to supported devices + // + InitializationDispatcherWorker (); + + // + // Install Status Code Architectural Protocol implementation as defined in Tiano + // Architecture Specification. + // + Status = gBS->InstallMultipleProtocolInterfaces ( + &Handle, + &gEfiStatusCodeRuntimeProtocolGuid, + &mEfiStatusCodeProtocol, + NULL + ); + ASSERT_EFI_ERROR (Status); + + return Status; +} + +/** + Report status code to all supported device. + Calls into the workers which dispatches the platform specific + listeners. + + @param CodeType Indicates the type of status code being reported. + The type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below. + @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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + @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. + Type EFI_STATUS_CODE_DATA is defined in "Related Definitions" below. + The contents of this data type may have additional GUID-specific data. The standard GUIDs and + their associated data structures are defined in the Intel? Platform Innovation Framework for EFI Status Codes Specification. +**/ +EFI_STATUS +EFIAPI +ReportDispatcher ( + IN EFI_STATUS_CODE_TYPE CodeType, + IN EFI_STATUS_CODE_VALUE Value, + IN UINT32 Instance, + IN EFI_GUID *CallerId OPTIONAL, + IN EFI_STATUS_CODE_DATA *Data OPTIONAL + ) +{ + // + // Use atom operation to avoid the reentant of report. + // If current status is not zero, then the function is reentrancy. + // + if (InterlockedCompareExchange32 (&gDxeStatusCode.StatusCodeNestStatus, 0, 1)) { + return EFI_DEVICE_ERROR; + } + + if (FeaturePcdGet (PcdStatusCodeUseEfiSerial) || FeaturePcdGet (PcdStatusCodeUseHardSerial)) { + SerialStatusCodeReportWorker ( + CodeType, + Value, + Instance, + CallerId, + Data + ); + } + if (FeaturePcdGet (PcdStatusCodeUseRuntimeMemory)) { + RtMemoryStatusCodeReportWorker ( + gDxeStatusCode.RtMemoryStatusCodeTable[PHYSICAL_MODE], + CodeType, + Value, + Instance + ); + } + if (FeaturePcdGet (PcdStatusCodeUseDataHub)) { + DataHubStatusCodeReportWorker ( + CodeType, + Value, + Instance, + CallerId, + Data + ); + } + if (FeaturePcdGet (PcdStatusCodeUseOEM)) { + OemHookStatusCodeReport ( + CodeType, + Value, + Instance, + CallerId, + Data + ); + } + + // + // Restore the nest status of report + // + InterlockedCompareExchange32 (&gDxeStatusCode.StatusCodeNestStatus, 1, 0); + + return EFI_SUCCESS; +} + + +/** + Virtual address change notification call back. It converts global pointer + to virtual address. + + @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 +VirtualAddressChangeCallBack ( + IN EFI_EVENT Event, + IN VOID *Context + ) +{ + // + // Convert memory status code table to virtual address; + // + EfiConvertPointer ( + 0, + (VOID **) &gDxeStatusCode.RtMemoryStatusCodeTable[PHYSICAL_MODE] + ); +} + diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ia32/Ia32StatusCode.dxs b/EdkModulePkg/Universal/StatusCode/Dxe/Common/StatusCode.dxs similarity index 100% rename from EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ia32/Ia32StatusCode.dxs rename to EdkModulePkg/Universal/StatusCode/Dxe/Common/StatusCode.dxs diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/DataHubStatusCodeWorker.c b/EdkModulePkg/Universal/StatusCode/Dxe/DataHubStatusCodeWorker.c new file mode 100644 index 0000000000..ca70bf4338 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/DataHubStatusCodeWorker.c @@ -0,0 +1,310 @@ +/** @file + Data Hub status code worker in DXE. + +Copyright (c) 2006, Intel Corporation. All rights reserved. +This software and associated documentation (if any) is furnished +under a license and may only be used or copied in accordance +with the terms of the license. Except as permitted by such +license, no part of this software or documentation may be +reproduced, stored in a retrieval system, or transmitted in any +form or by any means without the express written consent of +Intel Corporation. + + Module Name: DataHubStatusCodeWorker.c + +**/ +#include "DxeStatusCode.h" + +// +// Initialize FIFO to cache records. +// +EFI_LOCK mFifoLock = EFI_INITIALIZE_LOCK_VARIABLE (EFI_TPL_HIGH_LEVEL); +LIST_ENTRY mRecordsFifo = INITIALIZE_LIST_HEAD_VARIABLE (mRecordsFifo); +UINTN mNumberOfRecords = 0; + +EFI_EVENT mLogDataHubEvent; +// +// Cache data hub protocol. +// +EFI_DATA_HUB_PROTOCOL *mDataHubProtocol; + + +/** + Return buffer of length DATAHUB_STATUSCODE_RECORD + + @retval NULL Can not allocate free memeory for record. + @retval !NULL Point to buffer of record. + +**/ +DATAHUB_STATUSCODE_RECORD * +AcquireRecordBuffer ( + VOID + ) +{ + DATAHUB_STATUSCODE_RECORD *Record; + + Record = (DATAHUB_STATUSCODE_RECORD *) AllocateZeroPool (sizeof (DATAHUB_STATUSCODE_RECORD)); + if (NULL == Record) { + return NULL; + } + Record->Signature = DATAHUB_STATUS_CODE_SIGNATURE; + + EfiAcquireLock (&mFifoLock); + InsertTailList (&mRecordsFifo, &Record->Node); + mNumberOfRecords++; + EfiReleaseLock (&mFifoLock); + + return Record; +} + + +/** + Release a mRecordBuffer entry allocated by AcquirRecordBuffer (). + + @param Record Point to record buffer which is acquired by AcquirRecordBuffer() + + @retval EFI_SUCCESS If DataRecord is valid. + @retval !EFI_SUCCESS The record list has empty. + +**/ +VOID +FreeRecordBuffer ( + IN DATAHUB_STATUSCODE_RECORD *Record + ) +/*++ + +Routine Description: + + Release a mRecordBuffer entry allocated by AquireEmptyRecordBuffer (). + +Arguments: + + RecordBuffer - Data to free + +Returns: + + EFI_SUCCESS - If DataRecord is valid + EFI_UNSUPPORTED - The record list has empty + +--*/ +{ + ASSERT (Record != NULL); + ASSERT (mNumberOfRecords != 0); + + EfiAcquireLock (&mFifoLock); + RemoveEntryList (&Record->Node); + mNumberOfRecords--; + EfiReleaseLock (&mFifoLock); + + FreePool (Record); +} + + +/** + Report status code into DataHub. + + @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions¡± below. + + @param Value Describes the current status of a hardware or software entity. + This included information about the class and subclass that is used to classify the entity + as well as an operation. 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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + + @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. + Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification. + + + @param Data This optional parameter may be used to pass additional data + + @retval EFI_OUT_OF_RESOURCES Can not acquire record buffer. + @retval EFI_SUCCESS Success to cache status code and signal log data event. + +**/ +EFI_STATUS +DataHubStatusCodeReportWorker ( + 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 + ) +{ + DATAHUB_STATUSCODE_RECORD *Record; + UINT32 ErrorLevel; + VA_LIST Marker; + CHAR8 *Format; + UINTN CharCount; + + // + // See whether in runtime phase or not. + // + if (EfiAtRuntime ()) { + return EFI_SUCCESS; + } + + Record = (DATAHUB_STATUSCODE_RECORD *) AcquireRecordBuffer (); + if (Record == NULL) { + // + // There are no empty record buffer in private buffers + // + return EFI_OUT_OF_RESOURCES; + } + // + // Construct Data Hub Extended Data + // + Record->CodeType = CodeType; + Record->Value = Value; + Record->Instance = Instance; + + if (CallerId != NULL) { + CopyMem (&Record->CallerId, CallerId, sizeof (EFI_GUID)); + } + + if (Data != NULL) { + if (ReportStatusCodeExtractDebugInfo (Data, &ErrorLevel, &Marker, &Format)) { + CharCount = UnicodeVSPrintAsciiFormat ( + (CHAR16 *) Record->ExtendData, + EFI_STATUS_CODE_DATA_MAX_SIZE, + Format, + Marker + ); + // + // Change record data type from DebugType to String Type. + // + CopyGuid (&Record->Data.Type, &gEfiStatusCodeDataTypeStringGuid); + Record->Data.HeaderSize = Data->HeaderSize; + Record->Data.Size = (UINT16) ((CharCount + 1) * sizeof (CHAR16)); + } else { + // + // Copy status code data header + // + CopyMem (&Record->Data, Data, sizeof (EFI_STATUS_CODE_DATA)); + + if (Data->Size > EFI_STATUS_CODE_DATA_MAX_SIZE) { + Record->Data.Size = EFI_STATUS_CODE_DATA_MAX_SIZE; + } + CopyMem (Record->ExtendData, Data + 1, Record->Data.Size); + } + } + + gBS->SignalEvent (mLogDataHubEvent); + + return EFI_SUCCESS; +} + + +/** + The Event handler which will be notified to log data in Data Hub. + + @param Event Instance of the EFI_EVENT to signal whenever data is + available to be logged in the system. + @param Context Context of the event. + +**/ +VOID +EFIAPI +LogDataHubEventCallBack ( + IN EFI_EVENT Event, + IN VOID *Context + ) +{ + DATAHUB_STATUSCODE_RECORD *Record; + UINTN Size; + UINT64 DataRecordClass; + LIST_ENTRY *Node; + + // + // Log DataRecord in Data Hub. + // Journal records fifo to find all record entry. + // + // + for (Node = mRecordsFifo.ForwardLink; Node != &mRecordsFifo;) { + Record = CR (Node, DATAHUB_STATUSCODE_RECORD, Node, DATAHUB_STATUS_CODE_SIGNATURE); + Node = Node->ForwardLink; + + // + // Add in the size of the header we added. + // + Size = sizeof (DATAHUB_STATUSCODE_RECORD) + Record->Data.Size; + + if ((Record->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) { + DataRecordClass = EFI_DATA_RECORD_CLASS_PROGRESS_CODE; + } else if ((Record->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) { + DataRecordClass = EFI_DATA_RECORD_CLASS_ERROR; + } else if ((Record->CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE) { + DataRecordClass = EFI_DATA_RECORD_CLASS_DEBUG; + } else { + // + // Should never get here. + // + DataRecordClass = EFI_DATA_RECORD_CLASS_DEBUG | + EFI_DATA_RECORD_CLASS_ERROR | + EFI_DATA_RECORD_CLASS_DATA | + EFI_DATA_RECORD_CLASS_PROGRESS_CODE; + } + + // + // Log DataRecord in Data Hub + // + + mDataHubProtocol->LogData ( + mDataHubProtocol, + &gEfiStatusCodeGuid, + &gEfiStatusCodeRuntimeProtocolGuid, + DataRecordClass, + Record, + (UINT32) Size + ); + + FreeRecordBuffer (Record); + } +} + + +/** + Initialize data hubstatus code. + Create a data hub listener. + + @return The function always return EFI_SUCCESS + +**/ +EFI_STATUS +DataHubStatusCodeInitializeWorker ( + VOID + ) +{ + EFI_STATUS Status; + + Status = gBS->LocateProtocol ( + &gEfiDataHubProtocolGuid, + NULL, + (VOID **) &mDataHubProtocol + ); + ASSERT_EFI_ERROR (Status); + + // + // Create a Notify Event to log data in Data Hub + // + Status = gBS->CreateEvent ( + EFI_EVENT_NOTIFY_SIGNAL, + EFI_TPL_CALLBACK, + LogDataHubEventCallBack, + NULL, + &mLogDataHubEvent + ); + + ASSERT_EFI_ERROR (Status); + + return EFI_SUCCESS; +} + + diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.c b/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.c new file mode 100644 index 0000000000..4b942187d3 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.c @@ -0,0 +1,149 @@ +/** @file + Status Code Architectural Protocol implementation as defined in Tiano + Architecture Specification. + + This driver has limited functionality at runtime and will not log to Data Hub + at runtime. + + Notes: + This driver assumes the following ReportStatusCode strategy: + PEI -> uses PeiReportStatusCode + DXE IPL -> uses PeiReportStatusCode + early DXE -> uses PeiReportStatusCode via HOB + DXE -> This driver + RT -> This driver + +// Copyright (c) 2006, Intel Corporation. All rights reserved. +// This software and associated documentation (if any) is furnished +// under a license and may only be used or copied in accordance +// with the terms of the license. Except as permitted by such +// license, no part of this software or documentation may be +// reproduced, stored in a retrieval system, or transmitted in any +// form or by any means without the express written consent of +// Intel Corporation. + + Module Name: StatusCode.c + +**/ + +#include "DxeStatusCode.h" + +/** + + Dispatch initialization request to sub status code devices based on + customized feature flags. + +**/ +VOID +InitializationDispatcherWorker ( + VOID + ) +{ + EFI_PEI_HOB_POINTERS Hob; + MEMORY_STATUSCODE_PACKET_HEADER *PacketHeader; + MEMORY_STATUSCODE_RECORD *Record; + UINTN ExpectedPacketIndex = 0; + UINTN Index; + VOID *HobStart; + + // + // If enable UseSerial, then initialize serial port. + // if enable UseRuntimeMemory, then initialize runtime memory status code worker. + // if enable UseDataHub, then initialize data hub status code worker. + // + if (FeaturePcdGet (PcdStatusCodeUseEfiSerial)) { + EfiSerialStatusCodeInitializeWorker (); + } + if (FeaturePcdGet (PcdStatusCodeUseHardSerial)) { + SerialPortInitialize (); + } + if (FeaturePcdGet (PcdStatusCodeUseRuntimeMemory)) { + RtMemoryStatusCodeInitializeWorker (); + } + if (FeaturePcdGet (PcdStatusCodeUseDataHub)) { + DataHubStatusCodeInitializeWorker (); + } + if (FeaturePcdGet (PcdStatusCodeUseOEM)) { + OemHookStatusCodeInitialize (); + } + + // + // Replay Status code which saved in GUID'ed HOB to all supported device. + // + + // + // Journal GUID'ed HOBs to find all record entry, if found, + // then output record to support replay device. + // + Hob.Raw = GetFirstGuidHob (&gMemoryStatusCodeRecordGuid); + HobStart = Hob.Raw; + while (Hob.Raw != NULL) { + PacketHeader = (MEMORY_STATUSCODE_PACKET_HEADER *) GET_GUID_HOB_DATA (Hob.Guid); + if (PacketHeader->PacketIndex == ExpectedPacketIndex) { + Record = (MEMORY_STATUSCODE_RECORD *) (PacketHeader + 1); + for (Index = 0; Index < PacketHeader->RecordIndex; Index++) { + // + // Dispatch records to devices based on feature flag. + // + if (FeaturePcdGet (PcdStatusCodeReplayInSerial) && + (FeaturePcdGet (PcdStatusCodeUseHardSerial) || + FeaturePcdGet (PcdStatusCodeUseEfiSerial))) { + SerialStatusCodeReportWorker ( + Record[Index].CodeType, + Record[Index].Value, + Record[Index].Instance, + NULL, + NULL + ); + } + if (FeaturePcdGet (PcdStatusCodeReplayInRuntimeMemory) && + FeaturePcdGet (PcdStatusCodeUseRuntimeMemory)) { + RtMemoryStatusCodeReportWorker ( + gDxeStatusCode.RtMemoryStatusCodeTable[PHYSICAL_MODE], + Record[Index].CodeType, + Record[Index].Value, + Record[Index].Instance + ); + } + if (FeaturePcdGet (PcdStatusCodeReplayInDataHub) && + FeaturePcdGet (PcdStatusCodeUseDataHub)) { + DataHubStatusCodeReportWorker ( + Record[Index].CodeType, + Record[Index].Value, + Record[Index].Instance, + NULL, + NULL + ); + } + if (FeaturePcdGet (PcdStatusCodeReplayInOEM) && + FeaturePcdGet (PcdStatusCodeUseOEM)) { + OemHookStatusCodeReport ( + Record[Index].CodeType, + Record[Index].Value, + Record[Index].Instance, + NULL, + NULL + ); + } + } + ExpectedPacketIndex++; + + // + // See whether there is gap of packet or not + // + if (HobStart) { + HobStart = NULL; + Hob.Raw = HobStart; + continue; + } + } else if (HobStart != NULL) { + // + // Cache the found packet for improve the performance + // + HobStart = Hob.Raw; + } + + Hob.Raw = GetNextGuidHob (&gMemoryStatusCodeRecordGuid, Hob.Raw); + } +} + diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.h b/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.h new file mode 100644 index 0000000000..eeb6dcb720 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.h @@ -0,0 +1,238 @@ +/*++ + +Copyright (c) 2006, Intel Corporation. All rights reserved. +This software and associated documentation (if any) is furnished +under a license and may only be used or copied in accordance +with the terms of the license. Except as permitted by such +license, no part of this software or documentation may be +reproduced, stored in a retrieval system, or transmitted in any +form or by any means without the express written consent of +Intel Corporation. + +Module Name: + + DxeStatusCode.h + +Abstract: + + Header file of EFI DXE/RT Status Code. + +--*/ + +#ifndef __DXE_STATUS_CODE_H__ +#define __DXE_STATUS_CODE_H__ + +// +// Data hub worker definition +// +#define MAX_NUMBER_DATAHUB_RECORDS 1000 +#define DATAHUB_BYTES_PER_RECORD EFI_STATUS_CODE_DATA_MAX_SIZE +#define EMPTY_RECORD_TAG 0xFF +#define DATAHUB_STATUS_CODE_SIGNATURE EFI_SIGNATURE_32 ('B', 'D', 'H', 'S') + +// +// Address type of pointer. +// The point type always equal to PHYSICAL_MODE on IA32/X64/EBC architecture +// Otherwise, VIRTUAL_MODE/PHYSICAL_MODE would be used on Ipf architecture, +// +enum { + PHYSICAL_MODE, + VIRTUAL_MODE +}; + +typedef struct { + UINTN Signature; + LIST_ENTRY Node; + EFI_STATUS_CODE_TYPE CodeType; + EFI_STATUS_CODE_VALUE Value; + UINT32 Instance; + EFI_GUID CallerId; + EFI_STATUS_CODE_DATA Data; + UINT8 ExtendData[EFI_STATUS_CODE_DATA_MAX_SIZE]; +} DATAHUB_STATUSCODE_RECORD; + + +// +// Runtime memory status code worker definition +// +typedef struct { + UINT32 RecordIndex; + UINT32 NumberOfRecords; + UINT32 MaxRecordsNumber; +} RUNTIME_MEMORY_STATUSCODE_HEADER; + + +typedef struct { + // + // Report operation nest status. + // If it is set, then the report operation has nested. + // + UINT32 StatusCodeNestStatus; + // + // Runtime status code management header, the records buffer is following it. + // + RUNTIME_MEMORY_STATUSCODE_HEADER *RtMemoryStatusCodeTable[2]; +} DXE_STATUS_CODE_CONTROLLER; + + +/** + + Dispatch initialization request to sub status code devices based on + customized feature flags. + +**/ +VOID +InitializationDispatcherWorker ( + VOID + ); + + +/** + Initialize serial status code worker. + + @return The function always return EFI_SUCCESS + +**/ +EFI_STATUS +EfiSerialStatusCodeInitializeWorker ( + VOID + ); + + +/** + Convert status code value and extended data to readable ASCII string, send string to serial I/O device. + + @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions¡± below. + + @param Value Describes the current status of a hardware or software entity. + This included information about the class and subclass that is used to classify the entity + as well as an operation. 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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + + @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. + Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification. + + + @param Data This optional parameter may be used to pass additional data + + @return The function always return EFI_SUCCESS. + +**/ +EFI_STATUS +SerialStatusCodeReportWorker ( + 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 + ); + +/** + Initialize runtime memory status code. + + @return The function always return EFI_SUCCESS + +**/ +EFI_STATUS +RtMemoryStatusCodeInitializeWorker ( + VOID + ); + +/** + Report status code into runtime memory. If the runtime pool is full, roll back to the + first record and overwrite it. + + @param RtMemoryStatusCodeTable + Point to Runtime memory table header. + + @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions¡± below. + + @param Value Describes the current status of a hardware or software entity. + This included information about the class and subclass that is used to classify the entity + as well as an operation. 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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + + @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. + + @return The function always return EFI_SUCCESS. + +**/ +EFI_STATUS +RtMemoryStatusCodeReportWorker ( + RUNTIME_MEMORY_STATUSCODE_HEADER *RtMemoryStatusCodeTable, + IN EFI_STATUS_CODE_TYPE CodeType, + IN EFI_STATUS_CODE_VALUE Value, + IN UINT32 Instance + ); + +/** + Initialize data hubstatus code. + Create a data hub listener. + + @return The function always return EFI_SUCCESS + +**/ +EFI_STATUS +DataHubStatusCodeInitializeWorker ( + VOID + ); + + +/** + Report status code into DataHub. + + @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions¡± below. + + @param Value Describes the current status of a hardware or software entity. + This included information about the class and subclass that is used to classify the entity + as well as an operation. 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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + + @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. + Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification. + + + @param Data This optional parameter may be used to pass additional data + + @retval EFI_OUT_OF_RESOURCES Can not acquire record buffer. + @retval EFI_SUCCESS Success to cache status code and signal log data event. + +**/ +EFI_STATUS +DataHubStatusCodeReportWorker ( + 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 + ); + +// +// declaration of DXE status code controller. +// +extern DXE_STATUS_CODE_CONTROLLER gDxeStatusCode; + +#endif diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.msa b/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.msa new file mode 100644 index 0000000000..061ea92b30 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/DxeStatusCode.msa @@ -0,0 +1,187 @@ + + + + + DxeStatusCode + DXE_RUNTIME_DRIVER + FEDE0A1B-BCA2-4A9F-BB2B-D9FD7DEC2E9F + 1.0 + DXE status code driver. + + Status Code Architectural Protocol implementation as defined in Tiano + Architecture Specification. This driver has limited functionality + at runtime and will not log to Data Hub at runtime. + + Copyright (c) 2006, Intel Corporation. + All rights reserved. + This software and associated documentation (if any) is furnished + under a license and may only be used or copied in accordance + with the terms of the license. Except as permitted by such + license, no part of this software or documentation may be + reproduced, stored in a retrieval system, or transmitted in any + form or by any means without the express written consent of + Intel Corporation. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IA32 X64 IPF EBC + false + DxeStatusCode + + + + BaseLib + + + BaseMemoryLib + + + DebugLib + + + ReportStatusCodeLib + + + PrintLib + + + PcdLib + + + HobLib + + + UefiDriverEntryPoint + + + UefiBootServicesTableLib + + + UefiLib + + + MemoryAllocationLib + + + UefiRuntimeLib + + + SerialPortLib + + + OemHookStatusCodeLib + + + EdkDxeSalLib + + + + DxeStatusCode.c + DataHubStatusCodeWorker.c + RtMemoryStatusCodeWorker.c + SerialStatusCodeWorker.c + Common/DxeStatusCodeCommon.c + Common/StatusCode.dxs + Common/DxeStatusCodeCommon.c + Common/StatusCode.dxs + Common/DxeStatusCodeCommon.c + Common/StatusCode.dxs + Ipf/DxeStatusCodeIpf.c + Ipf/StatusCode.dxs + + + + + + + + gEfiExtendedSalStatusCodeServicesProtocolGuid + + + gEfiSerialIoProtocolGuid + + + gEfiDataHubProtocolGuid + + + + + gMemoryStatusCodeRecordGuid + + + gEfiStatusCodeDataTypeStringGuid + + + gEfiStatusCodeGuid + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + DxeStatusCodeDriverEntry + + + VirtualAddressChangeCallBack + + + + + PcdStatusCodeUseHardSerial + gEfiGenericPlatformTokenSpaceGuid + + + + PcdStatusCodeUseEfiSerial + gEfiGenericPlatformTokenSpaceGuid + + + + PcdStatusCodeUseRuntimeMemory + gEfiGenericPlatformTokenSpaceGuid + + + + PcdStatusCodeUseDataHub + gEfiGenericPlatformTokenSpaceGuid + + + + PcdStatusCodeUseOEM + gEfiGenericPlatformTokenSpaceGuid + + + + PcdStatusCodeReplayInSerial + gEfiGenericPlatformTokenSpaceGuid + + + + PcdStatusCodeReplayInDataHub + gEfiGenericPlatformTokenSpaceGuid + + + + PcdStatusCodeReplayInRuntimeMemory + gEfiGenericPlatformTokenSpaceGuid + + + + PcdStatusCodeReplayInOEM + gEfiGenericPlatformTokenSpaceGuid + + + + PcdStatusCodeRuntimeMemory + gEfiGenericPlatformTokenSpaceGuid + + + + \ No newline at end of file diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/Ipf/DxeStatusCodeIpf.c b/EdkModulePkg/Universal/StatusCode/Dxe/Ipf/DxeStatusCodeIpf.c new file mode 100644 index 0000000000..756c274495 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/Ipf/DxeStatusCodeIpf.c @@ -0,0 +1,201 @@ +/** @file + Status code driver for IA32/X64/EBC architecture. + +// Copyright (c) 2006, Intel Corporation. All rights reserved. +// This software and associated documentation (if any) is furnished +// under a license and may only be used or copied in accordance +// with the terms of the license. Except as permitted by such +// license, no part of this software or documentation may be +// reproduced, stored in a retrieval system, or transmitted in any +// form or by any means without the express written consent of +// Intel Corporation. + + Module Name: DxeStatusCodeIpf.c + +**/ + +#include "DxeStatusCode.h" + + +// +// Delaration of DXE status code controller +// +DXE_STATUS_CODE_CONTROLLER gDxeStatusCode = { + // + // Initialize nest status as non nested. + // + 0, + {NULL, NULL} +}; + +/** + + Main entry for Extended SAL ReportStatusCode Services + + @param FunctionId Function Id which needed to be called + @param Arg2 Efi status code type + @param Arg3 Efi status code value + @param Arg4 Instance number + @param Arg5 Caller Id + @param Arg6 Efi status code data + @param Arg7 Not used + @param Arg8 Not used + @param ExtendedSalProc Esal Proc pointer + @param VirtualMode If this function is called in virtual mode + @param Global This module's global variable pointer + + @return Value returned in SAL_RETURN_REGS + +--*/ +SAL_RETURN_REGS +EFIAPI +ReportEsalServiceEntry ( + IN UINT64 FunctionId, + IN UINT64 Arg2, + IN UINT64 Arg3, + IN UINT64 Arg4, + IN UINT64 Arg5, + IN UINT64 Arg6, + IN UINT64 Arg7, + IN UINT64 Arg8, + IN SAL_EXTENDED_SAL_PROC ExtendedSalProc, + IN BOOLEAN VirtualMode, + IN VOID *Global + ) +{ + SAL_RETURN_REGS ReturnVal; + DXE_STATUS_CODE_CONTROLLER *DxeStatusCode; + + switch (FunctionId) { + + case ReportStatusCodeService: + + DxeStatusCode = (DXE_STATUS_CODE_CONTROLLER *) Global; + + // + // Use atom operation to avoid the reentant of report. + // If current status is not zero, then the function is reentrancy. + // + if (InterlockedCompareExchange32 (&DxeStatusCode->StatusCodeNestStatus, 0, 1)) { + ReturnVal.Status = EFI_DEVICE_ERROR ; + return ReturnVal; + } + + if (FeaturePcdGet (PcdStatusCodeUseEfiSerial) || FeaturePcdGet (PcdStatusCodeUseHardSerial)) { + SerialStatusCodeReportWorker ( + (EFI_STATUS_CODE_TYPE) Arg2, + (EFI_STATUS_CODE_VALUE) Arg3, + (UINT32) Arg4, + (EFI_GUID *) Arg5, + (EFI_STATUS_CODE_DATA *) Arg6 + ); + } + if (FeaturePcdGet (PcdStatusCodeUseRuntimeMemory)) { + RtMemoryStatusCodeReportWorker ( + DxeStatusCode->RtMemoryStatusCodeTable[VirtualMode], + (EFI_STATUS_CODE_TYPE) Arg2, + (EFI_STATUS_CODE_VALUE) Arg3, + (UINT32) Arg4 + ); + } + if (FeaturePcdGet (PcdStatusCodeUseDataHub)) { + DataHubStatusCodeReportWorker ( + (EFI_STATUS_CODE_TYPE) Arg2, + (EFI_STATUS_CODE_VALUE) Arg3, + (UINT32) Arg4, + (EFI_GUID *) Arg5, + (EFI_STATUS_CODE_DATA *) Arg6 + ); + } + if (FeaturePcdGet (PcdStatusCodeUseOEM)) { + OemHookStatusCodeReport ( + (EFI_STATUS_CODE_TYPE) Arg2, + (EFI_STATUS_CODE_VALUE) Arg3, + (UINT32) Arg4, + (EFI_GUID *) Arg5, + (EFI_STATUS_CODE_DATA *) Arg6 + ); + } + + // + // Restore the nest status of report + // + InterlockedCompareExchange32 (&DxeStatusCode->StatusCodeNestStatus, 1, 0); + + ReturnVal.Status = EFI_SUCCESS; + + break; + + default: + ReturnVal.Status = EFI_SAL_INVALID_ARGUMENT; + break; + } + + return ReturnVal; +} + +/** + + Install the ReportStatusCode runtime service. + + @param ImageHandle Image handle of the loaded driver + @param SystemTable Pointer to the System Table + + @return The function always returns success. + +**/ +EFI_STATUS +EFIAPI +DxeStatusCodeDriverEntry ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + // + // Dispatch initialization request to supported devices + // + InitializationDispatcherWorker (); + + // + // Initialize ESAL capabilities. + // + RegisterEsalClass ( + &gEfiExtendedSalStatusCodeServicesProtocolGuid, + &gDxeStatusCode, + ReportEsalServiceEntry, + StatusCode, + NULL + ); + + return EFI_SUCCESS; +} + + +/** + Virtual address change notification call back. It converts physical mode global pointer to + virtual mode. + + @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 +VirtualAddressChangeCallBack ( + IN EFI_EVENT Event, + IN VOID *Context + ) +{ + gDxeStatusCode.RtMemoryStatusCodeTable[VIRTUAL_MODE] = + gDxeStatusCode.RtMemoryStatusCodeTable[PHYSICAL_MODE]; + + // + // Convert the physical mode pointer to virtual mode point. + // + EfiConvertPointer ( + 0, + (VOID **) &gDxeStatusCode.RtMemoryStatusCodeTable[VIRTUAL_MODE] + ); +} + diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/Ipf/StatusCode.dxs b/EdkModulePkg/Universal/StatusCode/Dxe/Ipf/StatusCode.dxs new file mode 100644 index 0000000000..9d94fd79fa --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/Ipf/StatusCode.dxs @@ -0,0 +1,27 @@ +#/*++ +# +// Copyright (c) 2006, Intel Corporation. All rights reserved. +// This software and associated documentation (if any) is furnished +// under a license and may only be used or copied in accordance +// with the terms of the license. Except as permitted by such +// license, no part of this software or documentation may be +// reproduced, stored in a retrieval system, or transmitted in any +// form or by any means without the express written consent of +// Intel Corporation. +# +# Module Name: +# +# IpfStatusCode.dxs +# +# Abstract: +# +# Dependency expression source file. +# +#--*/ + +#include +#include + +DEPENDENCY_START + EFI_DATA_HUB_PROTOCOL_GUID AND EFI_EXTENDED_SAL_BASE_IO_SERVICES_PROTOCOL_GUID +DEPENDENCY_END diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/RtMemoryStatusCodeWorker.c b/EdkModulePkg/Universal/StatusCode/Dxe/RtMemoryStatusCodeWorker.c new file mode 100644 index 0000000000..a0b70b8d95 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/RtMemoryStatusCodeWorker.c @@ -0,0 +1,119 @@ +/** @file + Runtime memory status code worker in DXE. + +Copyright (c) 2006, Intel Corporation. All rights reserved. +This software and associated documentation (if any) is furnished +under a license and may only be used or copied in accordance +with the terms of the license. Except as permitted by such +license, no part of this software or documentation may be +reproduced, stored in a retrieval system, or transmitted in any +form or by any means without the express written consent of +Intel Corporation. + + Module Name: RtMemoryStatusCodeWorker.c + +**/ + +#include "DxeStatusCode.h" + +/** + Initialize runtime memory status code. + + @return The function always return EFI_SUCCESS + +**/ +EFI_STATUS +RtMemoryStatusCodeInitializeWorker ( + VOID + ) +{ + RUNTIME_MEMORY_STATUSCODE_HEADER *RtMemoryStatusCodeTable; + + // + // Allocate runtime memory status code pool. + // + RtMemoryStatusCodeTable = + (RUNTIME_MEMORY_STATUSCODE_HEADER *) AllocatePool ( + sizeof (RUNTIME_MEMORY_STATUSCODE_HEADER) + PcdGet16 (PcdStatusCodeRuntimeMemorySize) * 1024 + ); + + ASSERT (NULL != RtMemoryStatusCodeTable); + + RtMemoryStatusCodeTable->RecordIndex = 0; + RtMemoryStatusCodeTable->NumberOfRecords = 0; + RtMemoryStatusCodeTable->MaxRecordsNumber = + (PcdGet16 (PcdStatusCodeRuntimeMemorySize) * 1024) / sizeof (MEMORY_STATUSCODE_RECORD); + + gDxeStatusCode.RtMemoryStatusCodeTable[PHYSICAL_MODE] = RtMemoryStatusCodeTable; + return EFI_SUCCESS; +} + + +/** + Report status code into runtime memory. If the runtime pool is full, roll back to the + first record and overwrite it. + + @param RtMemoryStatusCodeTable + Point to Runtime memory table header. + + @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions¡± below. + + @param Value Describes the current status of a hardware or software entity. + This included information about the class and subclass that is used to classify the entity + as well as an operation. 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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + + @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. + + @return The function always return EFI_SUCCESS. + +**/ +EFI_STATUS +RtMemoryStatusCodeReportWorker ( + RUNTIME_MEMORY_STATUSCODE_HEADER *RtMemoryStatusCodeTable, + IN EFI_STATUS_CODE_TYPE CodeType, + IN EFI_STATUS_CODE_VALUE Value, + IN UINT32 Instance + ) +{ + MEMORY_STATUSCODE_RECORD *Record; + + ASSERT (NULL != RtMemoryStatusCodeTable); + + // + // Locate current record buffer. + // + Record = (MEMORY_STATUSCODE_RECORD *) (RtMemoryStatusCodeTable + 1); + Record = &Record[RtMemoryStatusCodeTable->RecordIndex++]; + + // + // Save status code. + // + Record->CodeType = CodeType; + Record->Value = Value; + Record->Instance = Instance; + + // + // Record total number of records, we compare the number with max records number, + // if it is bigger than the max number, then the roll back had happened, the record index points to + // the first record. if it is less then max number, then the zero index is the first record. + // + RtMemoryStatusCodeTable->NumberOfRecords++; + if (RtMemoryStatusCodeTable->RecordIndex == RtMemoryStatusCodeTable->MaxRecordsNumber) { + // + // Roll back record index. + // + RtMemoryStatusCodeTable->RecordIndex = 0; + } + + + return EFI_SUCCESS; +} + + + diff --git a/EdkModulePkg/Universal/StatusCode/Dxe/SerialStatusCodeWorker.c b/EdkModulePkg/Universal/StatusCode/Dxe/SerialStatusCodeWorker.c new file mode 100644 index 0000000000..9f1f922269 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Dxe/SerialStatusCodeWorker.c @@ -0,0 +1,184 @@ + +/** @file + Serial I/O status code reporting worker. + +Copyright (c) 2006, Intel Corporation. All rights reserved. +This software and associated documentation (if any) is furnished +under a license and may only be used or copied in accordance +with the terms of the license. Except as permitted by such +license, no part of this software or documentation may be +reproduced, stored in a retrieval system, or transmitted in any +form or by any means without the express written consent of +Intel Corporation. + + Module Name: SerialStatusCodeWorker.c + +**/ + +EFI_SERIAL_IO_PROTOCOL *SerialIoProtocol; + +/** + Initialize serial status code worker. + + @return The function always return EFI_SUCCESS + +**/ +EFI_STATUS +EfiSerialStatusCodeInitializeWorker ( + VOID + ) +{ + EFI_STATUS Status; + + Status = gBS->LocateProtocol ( + &gEfiSerialIoProtocolGuid, + NULL, + (VOID **) &SerialIoProtocol + ); + + ASSERT_EFI_ERROR (Status); + + return EFI_SUCCESS; +} + + +/** + Convert status code value and extended data to readable ASCII string, send string to serial I/O device. + + @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions¡± below. + + @param Value Describes the current status of a hardware or software entity. + This included information about the class and subclass that is used to classify the entity + as well as an operation. 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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + + @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. + Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification. + + + @param Data This optional parameter may be used to pass additional data + + @return The function always return EFI_SUCCESS. + +**/ +EFI_STATUS +SerialStatusCodeReportWorker ( + 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 + ) +{ + CHAR8 *Filename; + CHAR8 *Description; + CHAR8 *Format; + CHAR8 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE]; + UINT32 ErrorLevel; + UINT32 LineNumber; + UINTN CharCount; + VA_LIST Marker; + EFI_DEBUG_INFO *DebugInfo; + + Buffer[0] = '\0'; + + if (Data != NULL && + ReportStatusCodeExtractAssertInfo (CodeType, Value, Data, &Filename, &Description, &LineNumber)) { + // + // Print ASSERT() information into output buffer. + // + CharCount = AsciiSPrint ( + Buffer, + EFI_STATUS_CODE_DATA_MAX_SIZE, + "\n\rDXE_ASSERT!: %a (%d): %a\n\r", + Filename, + LineNumber, + Description + ); + } else if (Data != NULL && + ReportStatusCodeExtractDebugInfo (Data, &ErrorLevel, &Marker, &Format)) { + // + // Print DEBUG() information into output buffer. + // + CharCount = AsciiVSPrint ( + Buffer, + EFI_STATUS_CODE_DATA_MAX_SIZE, + Format, + Marker + ); + } else if (Data != NULL && + CompareGuid (&Data->Type, &gEfiStatusCodeSpecificDataGuid) && + (CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE) { + // + // Print specific data into output buffer. + // + DebugInfo = (EFI_DEBUG_INFO *) (Data + 1); + Marker = (VA_LIST) (DebugInfo + 1); + Format = (CHAR8 *) (((UINT64 *) Marker) + 12); + + CharCount = AsciiVSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, Format, Marker); + } else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) { + // + // Print ERROR information into output buffer. + // + CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "ERROR: C%x:V%x I%x", CodeType, Value, Instance); + + // + // Make sure we don't try to print values that weren't intended to be printed, especially NULL GUID pointers. + // + + if (CallerId != NULL) { + CharCount += AsciiSPrint ( + &Buffer[CharCount - 1], + (EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)), + " %g", + CallerId + ); + } + + if (Data) { + CharCount += AsciiSPrint ( + &Buffer[CharCount - 1], + (EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)), + " %x", + Data + ); + } + + CharCount += AsciiSPrint ( + &Buffer[CharCount - 1], + (EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)), + "\n\r" + ); + } else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) { + CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "PROGRESS CODE: V%x I%x\n\r", Value, Instance); + } else { + CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "Undefined: C%x:V%x I%x\n\r", CodeType, Value, Instance); + } + + + if (FeaturePcdGet (PcdStatusCodeUseHardSerial)) { + // + // Callout to SerialPort Lib function to do print. + // + SerialPortWrite (Buffer, CharCount); + } + if (FeaturePcdGet (PcdStatusCodeUseEfiSerial)) { + SerialIoProtocol->Write ( + SerialIoProtocol, + &CharCount, + Buffer + ); + } + + return EFI_SUCCESS; +} diff --git a/EdkModulePkg/Universal/StatusCode/Pei/MemoryStausCodeWorker.c b/EdkModulePkg/Universal/StatusCode/Pei/MemoryStausCodeWorker.c new file mode 100644 index 0000000000..229f557b2b --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Pei/MemoryStausCodeWorker.c @@ -0,0 +1,145 @@ +/** @file + Memory status code worker in PEI. + +Copyright (c) 2006, Intel Corporation. All rights reserved. +This software and associated documentation (if any) is furnished +under a license and may only be used or copied in accordance +with the terms of the license. Except as permitted by such +license, no part of this software or documentation may be +reproduced, stored in a retrieval system, or transmitted in any +form or by any means without the express written consent of +Intel Corporation. + + Module Name: MemoryStatusCodeWorker.c + +**/ + +/** + Create one memory status code GUID'ed HOB, use PacketIndex + to identify the packet. + + @param PacketIndex Index of records packet. + + @return The function always return EFI_SUCCESS + +**/ +MEMORY_STATUSCODE_PACKET_HEADER * +CreateMemoryStatusCodePacket ( + UINT16 PacketIndex + ) +{ + MEMORY_STATUSCODE_PACKET_HEADER *PacketHeader; + + // + // Build GUID'ed HOB with PCD defined size. + // + PacketHeader = + (MEMORY_STATUSCODE_PACKET_HEADER *) BuildGuidHob ( + &gMemoryStatusCodeRecordGuid, + (PcdGet16 (PcdStatusCodeMemorySize) * 1024) + sizeof (MEMORY_STATUSCODE_PACKET_HEADER)); + ASSERT (PacketHeader != NULL); + + PacketHeader->MaxRecordsNumber = (PcdGet16 (PcdStatusCodeMemorySize) * 1024)/ sizeof (MEMORY_STATUSCODE_RECORD); + PacketHeader->PacketIndex = PacketIndex; + PacketHeader->RecordIndex = 0; + + return PacketHeader; +} + + + +/** + Initialize memory status code. + Create one GUID'ed HOB with PCD defined size. If create required size + GUID'ed HOB failed, then ASSERT(). + + @return The function always return EFI_SUCCESS + +**/ +EFI_STATUS +MemoryStatusCodeInitializeWorker ( + VOID + ) +{ + // + // Create first memory status code GUID'ed HOB. + // + CreateMemoryStatusCodePacket (0); + + return EFI_SUCCESS; +} + + +/** + Report status code into GUID'ed HOB.. + + @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions¡± below. + + @param Value Describes the current status of a hardware or software entity. + This included information about the class and subclass that is used to classify the entity + as well as an operation. 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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + + @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. + + @return The function always return EFI_SUCCESS. + +**/ +EFI_STATUS +MemoryStatusCodeReportWorker ( + IN EFI_STATUS_CODE_TYPE CodeType, + IN EFI_STATUS_CODE_VALUE Value, + IN UINT32 Instance + ) +{ + + EFI_PEI_HOB_POINTERS Hob; + MEMORY_STATUSCODE_PACKET_HEADER *PacketHeader; + MEMORY_STATUSCODE_RECORD *Record = NULL; + UINT16 PacketIndex = 0;; + + // + // Journal GUID'ed HOBs to find empty record entry, if found, then save status code in it. + // otherwise, create a new GUID'ed HOB. + // + Hob.Raw = GetFirstGuidHob (&gMemoryStatusCodeRecordGuid); + while (Hob.Raw != NULL) { + PacketHeader = (MEMORY_STATUSCODE_PACKET_HEADER *) GET_GUID_HOB_DATA (Hob.Guid); + + // + // Check whether pccket is full or not. + // + if (PacketHeader->RecordIndex < PacketHeader->MaxRecordsNumber) { + Record = (MEMORY_STATUSCODE_RECORD *) (PacketHeader + 1); + Record = &Record[PacketHeader->RecordIndex++]; + break; + } + // + // Cache number of found packet in PacketIndex. + // + PacketIndex++; + + Hob.Raw = GetNextGuidHob (&gMemoryStatusCodeRecordGuid, Hob.Raw); + } + + if (NULL == Record) { + // + // In order to save status code , create new packet. + // + PacketHeader = CreateMemoryStatusCodePacket (PacketIndex); + + Record = (MEMORY_STATUSCODE_RECORD *) (PacketHeader + 1); + Record = &Record[PacketHeader->RecordIndex++]; + } + + Record->CodeType = CodeType; + Record->Instance = Instance; + Record->Value = Value; + + return EFI_SUCCESS; +} diff --git a/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.c b/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.c new file mode 100644 index 0000000000..9c36deecf0 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.c @@ -0,0 +1,176 @@ + +/** @file + Generic PeiStatusCode Module. + +// Copyright (c) 2006, Intel Corporation. All rights reserved. +// This software and associated documentation (if any) is furnished +// under a license and may only be used or copied in accordance +// with the terms of the license. Except as permitted by such +// license, no part of this software or documentation may be +// reproduced, stored in a retrieval system, or transmitted in any +// form or by any means without the express written consent of +// Intel Corporation. + + Module Name: PeiStatusCode.c + +**/ + +#include "PeiStatusCode.h" + +/** + Report status code to all supported device. + * + * + @param PeiServices + + @param Type Indicates the type of status code being reported. + The type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below. + @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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + @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. + Type EFI_STATUS_CODE_DATA is defined in "Related Definitions" below. + The contents of this data type may have additional GUID-specific data. The standard GUIDs and + their associated data structures are defined in the Intel? Platform Innovation Framework for EFI Status Codes Specification. +**/ +EFI_STATUS +EFIAPI +ReportDispatcher ( + IN EFI_PEI_SERVICES **PeiServices, + IN EFI_STATUS_CODE_TYPE Type, + IN EFI_STATUS_CODE_VALUE Value, + IN UINT32 Instance, + IN EFI_GUID *CallerId OPTIONAL, + IN EFI_STATUS_CODE_DATA *Data OPTIONAL + ); + + +EFI_PEI_PROGRESS_CODE_PPI mStatusCodePpi = { + ReportDispatcher + }; + +EFI_PEI_PPI_DESCRIPTOR mStatusCodePpiDescriptor = { + EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, + &gEfiPeiStatusCodePpiGuid, + &mStatusCodePpi + }; + +/** + Report status code to all supported device. + * + * + @param PeiServices + + @param CodeType Indicates the type of status code being reported. + The type EFI_STATUS_CODE_TYPE is defined in "Related Definitions" below. + @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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + @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. + Type EFI_STATUS_CODE_DATA is defined in "Related Definitions" below. + The contents of this data type may have additional GUID-specific data. The standard GUIDs and + their associated data structures are defined in the Intel? Platform Innovation Framework for EFI Status Codes Specification. +**/ +EFI_STATUS +EFIAPI +ReportDispatcher ( + IN EFI_PEI_SERVICES **PeiServices, + IN EFI_STATUS_CODE_TYPE CodeType, + IN EFI_STATUS_CODE_VALUE Value, + IN UINT32 Instance, + IN EFI_GUID *CallerId OPTIONAL, + IN EFI_STATUS_CODE_DATA *Data OPTIONAL + ) +{ + if (FeaturePcdGet (PcdStatusCodeUseSerial)) { + SerialStatusCodeReportWorker ( + CodeType, + Value, + Instance, + CallerId, + Data + ); + } + if (FeaturePcdGet (PcdStatusCodeUseMemory)) { + MemoryStatusCodeReportWorker ( + CodeType, + Value, + Instance + ); + } + if (FeaturePcdGet (PcdStatusCodeUseOEM)) { + OemHookStatusCodeReport ( + CodeType, + Value, + Instance, + CallerId, + Data + ); + } + + return EFI_SUCCESS; +} + +/** + Initialize PEI status codes and publish the status code + PPI. + + @param FfsHeader FV this PEIM was loaded from. + @param PeiServices General purpose services available to every PEIM. + + @return The function always returns success. + +**/ +EFI_STATUS +EFIAPI +PeiStatusCodeDriverEntry ( + IN EFI_FFS_FILE_HEADER *FfsHeader, + IN EFI_PEI_SERVICES **PeiServices + ) +{ + EFI_STATUS Status; + + // + // Dispatch initialization request to sub-statuscode-devices. + // If enable UseSerial, then initialize serial port. + // if enable UseMemory, then initialize memory status code worker. + // if enable UseOEM, then initialize Oem status code. + // + if (FeaturePcdGet (PcdStatusCodeUseSerial)) { + SerialPortInitialize(); + } + if (FeaturePcdGet (PcdStatusCodeUseMemory)) { + MemoryStatusCodeInitializeWorker (); + } + if (FeaturePcdGet (PcdStatusCodeUseOEM)) { + OemHookStatusCodeInitialize (); + } + + // + // Install PeiStatusCodePpi. + // PeiServices use this Ppi to output status code. + // use library + Status = PeiServicesInstallPpi (&mStatusCodePpiDescriptor); + ASSERT_EFI_ERROR (Status); + + return EFI_SUCCESS; +} + diff --git a/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.h b/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.h new file mode 100644 index 0000000000..42ab8a5013 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.h @@ -0,0 +1,100 @@ + +/** @file + Heade file of status code PEIM + + Copyright (c) 2006, Intel Corporation + All rights reserved. This program and the accompanying materials + are licensed and made available under the terms and conditions of the BSD License + which accompanies this distribution. The full text of the license may be found at + http://opensource.org/licenses/bsd-license.php + + THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, + WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. + + Module Name: PeiStatusCode.h + +**/ + +#ifndef __PEI_STATUS_CODE_H__ +#define __PEI_STATUS_CODE_H__ + + +/** + Convert status code value and extended data to readable ASCII string, send string to serial I/O device. + + @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions¡± below. + + @param Value Describes the current status of a hardware or software entity. + This included information about the class and subclass that is used to classify the entity + as well as an operation. 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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + + @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. + Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification. + + + @param Data This optional parameter may be used to pass additional data + + @return The function always return EFI_SUCCESS. + +**/ +EFI_STATUS +SerialStatusCodeReportWorker ( + 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 + ); + + +/** + Initialize memory status code. + Create one GUID'ed HOB with PCD defined size. If create required size + GUID'ed HOB failed, then ASSERT(). + + @return The function always return EFI_SUCCESS + +**/ +EFI_STATUS +MemoryStatusCodeInitializeWorker ( + VOID + ); + +/** + Report status code into GUID'ed HOB. + + @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions¡± below. + + @param Value Describes the current status of a hardware or software entity. + This included information about the class and subclass that is used to classify the entity + as well as an operation. 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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + + @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. + + @return The function always return EFI_SUCCESS. + +**/ +EFI_STATUS +MemoryStatusCodeReportWorker ( + IN EFI_STATUS_CODE_TYPE CodeType, + IN EFI_STATUS_CODE_VALUE Value, + IN UINT32 Instance + ); + +#endif diff --git a/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.msa b/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.msa new file mode 100644 index 0000000000..7517e57a84 --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Pei/PeiStatusCode.msa @@ -0,0 +1,115 @@ + + + + + PeiStatusCode + PEIM + 1EC0F53A-FDE0-4576-8F25-7A1A410F58EB + 1.0 + Generic Status code Pei driver + Customized output devices based on feature flags. + Copyright (c) 2006, Intel Corporation. + All rights reserved. + This software and associated documentation (if any) is furnished + under a license and may only be used or copied in accordance + with the terms of the license. Except as permitted by such + license, no part of this software or documentation may be + reproduced, stored in a retrieval system, or transmitted in any + form or by any means without the express written consent of + Intel Corporation. + FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 + + + IA32 X64 IPF EBC + false + PeiStatusCode + + + + BaseLib + + + BaseMemoryLib + + + DebugLib + + + PrintLib + + + ReportStatusCodeLib + + + SerialPortLib + + + HobLib + + + PcdLib + + + PeiServicesLib + + + OemHookStatusCodeLib + + + + SerialStatusCodeWorker.c + MemoryStausCodeWorker.c + PeiStatusCode.c + PeiStatusCode.c + + + + + + + + gEfiPeiStatusCodePpiGuid + + + + + gMemoryStatusCodeRecordGuid + + + + EFI_SPECIFICATION_VERSION 0x00020000 + EDK_RELEASE_VERSION 0x00020000 + + PeiStatusCodeDriverEntry + + + + + PcdStatusCodeUseSerial + gEfiGenericPlatformTokenSpaceGuid + + + + PcdStatusCodeUseMemory + gEfiGenericPlatformTokenSpaceGuid + + + + PcdStatusCodeUseOEM + gEfiGenericPlatformTokenSpaceGuid + + + + PcdStatusCodeMemorySize + gEfiGenericPlatformTokenSpaceGuid + + + + diff --git a/EdkModulePkg/Universal/StatusCode/Pei/SerialStatusCodeWorker.c b/EdkModulePkg/Universal/StatusCode/Pei/SerialStatusCodeWorker.c new file mode 100644 index 0000000000..fc22b624ec --- /dev/null +++ b/EdkModulePkg/Universal/StatusCode/Pei/SerialStatusCodeWorker.c @@ -0,0 +1,147 @@ + +/** @file + Serial I/O status code reporting worker. + +Copyright (c) 2006, Intel Corporation. All rights reserved. +This software and associated documentation (if any) is furnished +under a license and may only be used or copied in accordance +with the terms of the license. Except as permitted by such +license, no part of this software or documentation may be +reproduced, stored in a retrieval system, or transmitted in any +form or by any means without the express written consent of +Intel Corporation. + + Module Name: SerialStatusCodeWorker.c + +**/ + +/** + Convert status code value and extended data to readable ASCII string, send string to serial I/O device. + + @param CodeType Indicates the type of status code being reported. Type EFI_STATUS_CODE_TYPE is defined in "Related Definitions¡± below. + + @param Value Describes the current status of a hardware or software entity. + This included information about the class and subclass that is used to classify the entity + as well as an operation. 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. + Type EFI_STATUS_CODE_VALUE is defined in ¡°Related Definitions¡± below. + Specific values are discussed in the Intel? Platform Innovation Framework for EFI Status Code Specification. + + @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. + Type EFI_GUID is defined in InstallProtocolInterface() in the EFI 1.10 Specification. + + + @param Data This optional parameter may be used to pass additional data + + @return The function always return EFI_SUCCESS. + +**/ +EFI_STATUS +SerialStatusCodeReportWorker ( + 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 + ) +{ + CHAR8 *Filename; + CHAR8 *Description; + CHAR8 *Format; + CHAR8 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE]; + UINT32 ErrorLevel; + UINT32 LineNumber; + UINTN CharCount; + VA_LIST Marker; + EFI_DEBUG_INFO *DebugInfo; + + Buffer[0] = '\0'; + + if (Data != NULL && + ReportStatusCodeExtractAssertInfo (CodeType, Value, Data, &Filename, &Description, &LineNumber)) { + // + // Print ASSERT() information into output buffer. + // + CharCount = AsciiSPrint ( + Buffer, + EFI_STATUS_CODE_DATA_MAX_SIZE, + "\n\rPEI_ASSERT!: %a (%d): %a\n\r", + Filename, + LineNumber, + Description + ); + } else if (Data != NULL && + ReportStatusCodeExtractDebugInfo (Data, &ErrorLevel, &Marker, &Format)) { + // + // Print DEBUG() information into output buffer. + // + CharCount = AsciiVSPrint ( + Buffer, + EFI_STATUS_CODE_DATA_MAX_SIZE, + Format, + Marker + ); + } else if (Data != NULL && + CompareGuid (&Data->Type, &gEfiStatusCodeSpecificDataGuid) && + (CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_DEBUG_CODE) { + // + // Print specific data into output buffer. + // + DebugInfo = (EFI_DEBUG_INFO *) (Data + 1); + Marker = (VA_LIST) (DebugInfo + 1); + Format = (CHAR8 *) (((UINT64 *) Marker) + 12); + + CharCount = AsciiVSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, Format, Marker); + } else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_ERROR_CODE) { + // + // Print ERROR information into output buffer. + // + CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "ERROR: C%x:V%x I%x", CodeType, Value, Instance); + + // + // Make sure we don't try to print values that weren't intended to be printed, especially NULL GUID pointers. + // + + if (CallerId != NULL) { + CharCount += AsciiSPrint ( + &Buffer[CharCount - 1], + (EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)), + " %g", + CallerId + ); + } + + if (Data) { + CharCount += AsciiSPrint ( + &Buffer[CharCount - 1], + (EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)), + " %x", + Data + ); + } + + CharCount += AsciiSPrint ( + &Buffer[CharCount - 1], + (EFI_STATUS_CODE_DATA_MAX_SIZE - (sizeof (Buffer[0]) * CharCount)), + "\n\r" + ); + } else if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE) { + CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "PROGRESS CODE: V%x I%x\n\r", Value, Instance); + } else { + CharCount = AsciiSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, "Undefined: C%x:V%x I%x\n\r", CodeType, Value, Instance); + } + + // + // Callout to SerialPort Lib function to do print. + // + SerialPortWrite (Buffer, CharCount); + + return EFI_SUCCESS; +} diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/DebugAssert.c b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/DebugAssert.c deleted file mode 100644 index 75f0ed144d..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/DebugAssert.c +++ /dev/null @@ -1,231 +0,0 @@ -/*++ - -Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - DebugAssert.c - -Abstract: - - Produce EfiDebugAssertProtocol to enable EfiUtilityLib to function. - The EfiUtilityLib is used by the EFI shell! - ---*/ - -#include "StatusCode.h" - -EFI_STATUS -EFIAPI -StatusCodeDebugAssert ( - IN EFI_DEBUG_ASSERT_PROTOCOL *This, - IN CHAR8 *FileName, - IN INTN LineNumber, - IN CHAR8 *Description - ); - -EFI_STATUS -EFIAPI -StatusCodeDebugPrint ( - IN EFI_DEBUG_ASSERT_PROTOCOL *This, - IN UINTN ErrorLevel, - IN CHAR8 *Format, - IN VA_LIST Marker - ); - -EFI_STATUS -EFIAPI -StatusCodePostCode ( - IN EFI_DEBUG_ASSERT_PROTOCOL * This, - IN UINT16 PostCode, - IN CHAR8 *PostCodeString OPTIONAL - ); - -EFI_STATUS -EFIAPI -StatusCodeGetErrorLevel ( - IN EFI_DEBUG_ASSERT_PROTOCOL *This, - IN UINTN *ErrorLevel - ); - -EFI_STATUS -EFIAPI -StatusCodeSetErrorLevel ( - IN EFI_DEBUG_ASSERT_PROTOCOL *This, - IN UINTN ErrorLevel - ); - -// -// Protocol instance, there can be only one. -// -EFI_HANDLE mHandle = NULL; -EFI_DEBUG_ASSERT_PROTOCOL mDebugAssertProtocol = { - StatusCodeDebugAssert, - StatusCodeDebugPrint, - StatusCodePostCode, - StatusCodeGetErrorLevel, - StatusCodeSetErrorLevel -}; - -// -// Function implementations -// -EFI_STATUS -EFIAPI -StatusCodeDebugAssert ( - IN EFI_DEBUG_ASSERT_PROTOCOL *This, - IN CHAR8 *FileName, - IN INTN LineNumber, - IN CHAR8 *Description - ) -/*++ - -Routine Description: - - Worker function for ASSERT (). If Error Logging hub is loaded log ASSERT - information. If Error Logging hub is not loaded CpuBreakpoint (). - -Arguments: - - This - Protocol instance. - FileName - File name of failing routine. - LineNumber - Line number of failing ASSERT(). - Description - Description, usually the assertion, - -Returns: - - EFI_SUCCESS The function always completes successfully. - ---*/ -{ - DebugAssert (FileName, LineNumber, Description); - - return EFI_SUCCESS; -} - -EFI_STATUS -EFIAPI -StatusCodeDebugPrint ( - IN EFI_DEBUG_ASSERT_PROTOCOL *This, - IN UINTN ErrorLevel, - IN CHAR8 *Format, - IN VA_LIST Marker - ) -/*++ - -Routine Description: - - Worker function for DEBUG (). If Error Logging hub is loaded log ASSERT - information. If Error Logging hub is not loaded do nothing. - -Arguments: - - This - Protocol Instance. - ErrorLevel - If error level is set do the debug print. - Format - String to use for the print, followed by Print arguments. - -Returns: - - EFI_SUCCESS The function always completes successfully. - ---*/ -{ - CHAR8 Buffer[EFI_STATUS_CODE_DATA_MAX_SIZE]; - - AsciiVSPrint (Buffer, EFI_STATUS_CODE_DATA_MAX_SIZE, Format, Marker); - DebugPrint (ErrorLevel, Buffer); - - return EFI_SUCCESS; -} - -EFI_STATUS -EFIAPI -StatusCodeGetErrorLevel ( - IN EFI_DEBUG_ASSERT_PROTOCOL *This, - IN UINTN *ErrorLevel - ) -{ - *ErrorLevel = PcdGet32(PcdDebugPrintErrorLevel); - return EFI_SUCCESS; -} - -EFI_STATUS -EFIAPI -StatusCodeSetErrorLevel ( - IN EFI_DEBUG_ASSERT_PROTOCOL *This, - IN UINTN ErrorLevel - ) -{ - return EFI_UNSUPPORTED; -} - -EFI_STATUS -EFIAPI -StatusCodePostCode ( - IN EFI_DEBUG_ASSERT_PROTOCOL * This, - IN UINT16 PostCode, - IN CHAR8 *PostCodeString OPTIONAL - ) -/*++ - -Routine Description: - - Write the code to IO ports 80 and 81. - -Arguments: - - This - Protocol Instance. - PostCode - Code to write - PostCodeString - String, currently ignored. - -Returns: - - EFI_SUCCESS The function always completes successfully. - ---*/ -{ - IoWrite8 (0x80, (UINT8) (PostCode & 0xff)); - IoWrite8 (0x81, (UINT8) (PostCode >> 8)); - - return EFI_SUCCESS; -} - -EFI_STATUS -InstallStatusCodeDebugAssert ( - VOID - ) -/*++ - -Routine Description: - - Install the status code debug assert protocol - -Arguments: - - None - -Returns: - - Results of call to InstallProtocolInterface. - ---*/ -{ - - DEBUG_CODE ( - gBS->InstallProtocolInterface ( - &mHandle, - &gEfiDebugAssertProtocolGuid, - EFI_NATIVE_INTERFACE, - &mDebugAssertProtocol - ); - ); - - return EFI_SUCCESS; -} diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ia32/Ia32StatusCode.c b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ia32/Ia32StatusCode.c deleted file mode 100644 index d2e1009b7f..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ia32/Ia32StatusCode.c +++ /dev/null @@ -1,75 +0,0 @@ -/*++ - -Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - Ia32StatusCode.c - -Abstract: - - Installs the ReportStatusCode runtime service. - ---*/ - -#include "StatusCode.h" - -// -// -// -EFI_HANDLE gStatusCodeHandle = NULL; - -const EFI_STATUS_CODE_PROTOCOL gStatusCodeInstance = { - StatusCodeReportStatusCode -}; - -// -// Define the driver entry point -// -EFI_STATUS -EFIAPI -InstallStatusCode ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -/*++ - -Routine Description: - - Install the ReportStatusCode runtime service. - -Arguments: - - ImageHandle Image handle of the loaded driver - SystemTable Pointer to the System Table - -Returns: - - EFI_SUCCESS The function always returns success. - ---*/ -{ - EFI_STATUS Status; - - // - // Initialize RT status code - // - InitializeStatusCode (ImageHandle, SystemTable); - - Status = gBS->InstallMultipleProtocolInterfaces ( - &gStatusCodeHandle, - &gEfiStatusCodeRuntimeProtocolGuid, - &gStatusCodeInstance, - NULL - ); - ASSERT_EFI_ERROR (Status); - - return Status; -} diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ipf/IpfStatusCode.c b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ipf/IpfStatusCode.c deleted file mode 100644 index 62564c0cd8..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ipf/IpfStatusCode.c +++ /dev/null @@ -1,126 +0,0 @@ -/*++ - -Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - IpfStatusCode.c - -Abstract: - - Contains the IPF installation function and an ESAL entry. - ---*/ - -#include "StatusCode.h" - -SAL_RETURN_REGS -ReportStatusCodeEsalServicesClassCommonEntry ( - IN UINT64 FunctionId, - IN UINT64 Arg2, - IN UINT64 Arg3, - IN UINT64 Arg4, - IN UINT64 Arg5, - IN UINT64 Arg6, - IN UINT64 Arg7, - IN UINT64 Arg8, - IN SAL_EXTENDED_SAL_PROC ExtendedSalProc, - IN BOOLEAN VirtualMode, - IN VOID *Global - ) -/*++ - -Routine Description: - - Main entry for Extended SAL ReportStatusCode Services - -Arguments: - - FunctionId Function Id which needed to be called - Arg2 Efi status code type - Arg3 Efi status code value - Arg4 Instance number - Arg5 Caller Id - Arg6 Efi status code data - Arg7 Not used - Arg8 Not used - ExtendedSalProc Esal Proc pointer - VirtualMode If this function is called in virtual mode - Global This module's global variable pointer - -Returns: - - SAL_RETURN_REGS - ---*/ -{ - SAL_RETURN_REGS ReturnVal; - - switch (FunctionId) { - - case ReportStatusCodeService: - ReturnVal.Status = StatusCodeReportStatusCode ( - (EFI_STATUS_CODE_TYPE) Arg2, - (EFI_STATUS_CODE_VALUE) Arg3, - (UINT32) Arg4, - (EFI_GUID *) Arg5, - (EFI_STATUS_CODE_DATA *) Arg6 - ); - break; - - default: - ReturnVal.Status = EFI_SAL_INVALID_ARGUMENT; - break; - } - - return ReturnVal; -} - -EFI_STATUS -EFIAPI -InstallStatusCode ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -/*++ - -Routine Description: - - Install the ReportStatusCode runtime service. - -Arguments: - - ImageHandle Image handle of the loaded driver - SystemTable Pointer to the System Table - -Returns: - - EFI_SUCCESS The function always returns success. - ---*/ -{ - // - // Initialize RT status code - // - InitializeStatusCode (ImageHandle, SystemTable); - - // - // Initialize ESAL capabilities - // - RegisterEsalClass ( - &gEfiExtendedSalStatusCodeServicesProtocolGuid, - NULL, - ReportStatusCodeEsalServicesClassCommonEntry, - StatusCode, - NULL - ); - - return EFI_SUCCESS; -} diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ipf/IpfStatusCode.dxs b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ipf/IpfStatusCode.dxs deleted file mode 100644 index aaa3efe3e1..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/Ipf/IpfStatusCode.dxs +++ /dev/null @@ -1,27 +0,0 @@ -#/*++ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# IpfStatusCode.dxs -# -# Abstract: -# -# Dependency expression source file. -# -#--*/ - -#include -#include - -DEPENDENCY_START - EFI_DATA_HUB_PROTOCOL_GUID AND EFI_EXTENDED_SAL_BASE_IO_SERVICES_PROTOCOL_GUID -DEPENDENCY_END diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.c b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.c deleted file mode 100644 index 13b6426beb..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.c +++ /dev/null @@ -1,172 +0,0 @@ -/*++ - -Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - StatusCode.c - -Abstract: - - Status Code Architectural Protocol implementation as defined in Tiano - Architecture Specification. - - This driver also depends on the DataHub, and will log all status code info - to the DataHub. Fatal Errors are Printed to Standard Error (StdErr) and not - logged to the data hub (If you crash what good is the data in the data hub). - - This driver has limited functionality at runtime and will not log to Data Hub - at runtime. - - Notes: - This driver assumes the following ReportStatusCode strategy: - PEI -> uses PeiReportStatusCode - DXE IPL -> uses PeiReportStatusCode - early DXE -> uses PeiReportStatusCode via HOB - DXE -> This driver - RT -> This driver - ---*/ - -#include "StatusCode.h" - -EFI_LOCK mStatusCodeLock; -BOOLEAN mStatusCodeFlag = FALSE; - -// -// Function implemenations -// - - -EFI_STATUS -EFIAPI -StatusCodeReportStatusCode ( - 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 - ) -/*++ - -Routine Description: - - Calls into the platform library which dispatches the platform specific - listeners. For NT environments we still call back into PEI because the - ReportStatusCode functionality requires Win32 services and is built into - the SecMain.exe utility. - -Arguments: - - (See Tiano Runtime Specification) - -Returns: - - None - ---*/ -{ - EFI_STATUS Status; - - // - // Acquire the lock required to update mStatusCodeFlag - // - Status = EfiAcquireLockOrFail (&mStatusCodeLock); - if (EFI_ERROR (Status)) { - // - // Check for reentrancy of the lock - // - return EFI_DEVICE_ERROR; - } - // - // Check to see if we are already in the middle of a ReportStatusCode() - // - if (mStatusCodeFlag) { - EfiReleaseLock (&mStatusCodeLock); - return EFI_DEVICE_ERROR; - } - // - // Set the flag to show we are in the middle of a ReportStatusCode() - // - mStatusCodeFlag = TRUE; - - // - // Release the lock for updating mStatusCodeFlag - // - EfiReleaseLock (&mStatusCodeLock); - - // - // Go do the work required to report a status code - // - RtPlatformReportStatusCode (CodeType, Value, Instance, CallerId, Data); - - // - // Acquire the lock required to update mStatusCodeFlag - // - Status = EfiAcquireLockOrFail (&mStatusCodeLock); - if (EFI_ERROR (Status)) { - // - // Check for reentrancy of the lock - // - return EFI_DEVICE_ERROR; - } - // - // Clear the flag to show we are no longer in the middle of a ReportStatusCode() - // - mStatusCodeFlag = FALSE; - - // - // Release the lock for updating mStatusCodeFlag - // - EfiReleaseLock (&mStatusCodeLock); - - return EFI_SUCCESS; -} -// -// Protocol instance, there can be only one. -// -EFI_STATUS -InitializeStatusCode ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -/*++ - -Routine Description: - - Install Driver to produce Report Status Code Arch Protocol - -Arguments: - - (Standard EFI Image entry - EFI_IMAGE_ENTRY_POINT) - -Returns: - - EFI_SUCCESS - Logging Hub protocol installed - Other - No protocol installed, unload driver. - ---*/ -{ - - EfiInitializeLock (&mStatusCodeLock, EFI_TPL_HIGH_LEVEL); - - // - // Call the platform hook to initialize the different listeners. - // - RtPlatformStatusCodeInitialize (); - - // - // Register a protocol that EfiUtilityLib can use to implement DEBUG () and ASSERT () - // Macros. - // - InstallStatusCodeDebugAssert (); - - return EFI_SUCCESS; -} diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.h b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.h deleted file mode 100644 index cb4a4d9def..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.h +++ /dev/null @@ -1,64 +0,0 @@ -/*++ - -Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - StatusCode.h - -Abstract: - - EFI DXE/RT Status Code include file. - ---*/ - -#ifndef _EFI_RUNTIME_STATUS_CODE_H_ -#define _EFI_RUNTIME_STATUS_CODE_H_ - -// -// Function prototypes -// - -EFI_STATUS -EFIAPI -StatusCodeReportStatusCode ( - 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 - ) -; - -EFI_STATUS -InitializeStatusCode ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -; - -EFI_STATUS -InstallStatusCodeDebugAssert ( - VOID - ) -; - -// -// Driver entry point -// -EFI_STATUS -EFIAPI -InstallStatusCode ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -; - -#endif diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.msa b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.msa deleted file mode 100644 index f8364b6f80..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/StatusCode.msa +++ /dev/null @@ -1,97 +0,0 @@ - - - - - StatusCode - DXE_RUNTIME_DRIVER - 9F455D3B-2B8A-4c06-960B-A71B9714B9CD - 1.0 - Component description file for StatusCode module. - This driver implement Status Code Architectural Protocol and log all status code info. - Copyright (c) 2006, Intel Corporation - All rights reserved. This program and the accompanying materials - are licensed and made available under the terms and conditions of the BSD License - which accompanies this distribution. The full text of the license may be found at - http://opensource.org/licenses/bsd-license.php - THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, - WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - FRAMEWORK_BUILD_PACKAGING_SPECIFICATION 0x00000052 - - - IA32 X64 IPF EBC - false - StatusCode - - - - BaseLib - - - UefiRuntimeLib - - - UefiDriverEntryPoint - - - UefiLib - - - DebugLib - - - PrintLib - - - IoLib - - - EdkRtPlatformStatusCodeLib - - - EdkDxeSalLib - - - UefiBootServicesTableLib - - - PcdLib - - - - DebugAssert.c - StatusCode.c - StatusCode.h - Ia32/Ia32StatusCode.c - Ia32/Ia32StatusCode.dxs - x64/x64StatusCode.c - x64/x64StatusCode.dxs - Ipf/IpfStatusCode.c - Ipf/IpfStatusCode.dxs - - - - - - - - gEfiDebugAssertProtocolGuid - - - gEfiExtendedSalStatusCodeServicesProtocolGuid - - - - EFI_SPECIFICATION_VERSION 0x00020000 - EDK_RELEASE_VERSION 0x00020000 - - InstallStatusCode - - - \ No newline at end of file diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/x64/x64StatusCode.c b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/x64/x64StatusCode.c deleted file mode 100644 index 4c8ad0c81a..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/x64/x64StatusCode.c +++ /dev/null @@ -1,75 +0,0 @@ -/*++ - -Copyright (c) 2006, Intel Corporation -All rights reserved. This program and the accompanying materials -are licensed and made available under the terms and conditions of the BSD License -which accompanies this distribution. The full text of the license may be found at -http://opensource.org/licenses/bsd-license.php - -THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. - -Module Name: - - x64StatusCode.c - -Abstract: - - Installs the ReportStatusCode runtime service. - ---*/ - -#include "StatusCode.h" - -// -// -// -EFI_HANDLE gStatusCodeHandle = NULL; - -const EFI_STATUS_CODE_PROTOCOL gStatusCodeInstance = { - StatusCodeReportStatusCode -}; - -// -// Define the driver entry point -// -EFI_STATUS -EFIAPI -InstallStatusCode ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -/*++ - -Routine Description: - - Install the ReportStatusCode runtime service. - -Arguments: - - ImageHandle Image handle of the loaded driver - SystemTable Pointer to the System Table - -Returns: - - EFI_SUCCESS The function always returns success. - ---*/ -{ - EFI_STATUS Status; - - // - // Initialize RT status code - // - InitializeStatusCode (ImageHandle, SystemTable); - - Status = gBS->InstallMultipleProtocolInterfaces ( - &gStatusCodeHandle, - &gEfiStatusCodeRuntimeProtocolGuid, - &gStatusCodeInstance, - NULL - ); - ASSERT_EFI_ERROR (Status); - - return Status; -} diff --git a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/x64/x64StatusCode.dxs b/EdkModulePkg/Universal/StatusCode/RuntimeDxe/x64/x64StatusCode.dxs deleted file mode 100644 index 74cf23eee3..0000000000 --- a/EdkModulePkg/Universal/StatusCode/RuntimeDxe/x64/x64StatusCode.dxs +++ /dev/null @@ -1,27 +0,0 @@ -#/*++ -# -# Copyright (c) 2006, Intel Corporation -# All rights reserved. This program and the accompanying materials -# are licensed and made available under the terms and conditions of the BSD License -# which accompanies this distribution. The full text of the license may be found at -# http://opensource.org/licenses/bsd-license.php -# -# THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, -# WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. -# -# Module Name: -# -# x64StatusCode.dxs -# -# Abstract: -# -# Dependency expression source file. -# -#--*/ - -#include -#include - -DEPENDENCY_START - EFI_DATA_HUB_PROTOCOL_GUID AND EFI_CPU_IO_PROTOCOL_GUID -DEPENDENCY_END -- 2.39.2