From 7f05fa00f73038b425002566d3afe6c3ade2ccdb Mon Sep 17 00:00:00 2001 From: Guo Mang Date: Thu, 22 Dec 2016 15:55:38 +0800 Subject: MdeModulePkg: Move to new location Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Guo Mang --- .../Pei/ReportStatusCodeRouterPei.c | 321 ---------------- .../Pei/ReportStatusCodeRouterPei.h | 109 ------ .../Pei/ReportStatusCodeRouterPei.inf | 60 --- .../Pei/ReportStatusCodeRouterPei.uni | Bin 2096 -> 0 bytes .../Pei/ReportStatusCodeRouterPeiExtra.uni | Bin 1384 -> 0 bytes .../RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.c | 406 --------------------- .../RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.h | 142 ------- .../ReportStatusCodeRouterRuntimeDxe.inf | 63 ---- .../ReportStatusCodeRouterRuntimeDxe.uni | Bin 2212 -> 0 bytes .../ReportStatusCodeRouterRuntimeDxeExtra.uni | Bin 1398 -> 0 bytes .../Smm/ReportStatusCodeRouterSmm.c | 239 ------------ .../Smm/ReportStatusCodeRouterSmm.h | 109 ------ .../Smm/ReportStatusCodeRouterSmm.inf | 56 --- .../Smm/ReportStatusCodeRouterSmm.uni | Bin 2212 -> 0 bytes .../Smm/ReportStatusCodeRouterSmmExtra.uni | Bin 1384 -> 0 bytes 15 files changed, 1505 deletions(-) delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.c delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.h delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.inf delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.uni delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPeiExtra.uni delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.c delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.h delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.uni delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxeExtra.uni delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.c delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.h delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.uni delete mode 100644 MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmmExtra.uni (limited to 'MdeModulePkg/Universal/ReportStatusCodeRouter') diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.c b/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.c deleted file mode 100644 index 8a2dc8a9bd..0000000000 --- a/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.c +++ /dev/null @@ -1,321 +0,0 @@ -/** @file - Report Status Code Router PEIM which produces Report Stataus Code Handler PPI and Status Code PPI. - - Copyright (c) 2009 - 2011, 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. - -**/ - -#include "ReportStatusCodeRouterPei.h" - -EFI_PEI_RSC_HANDLER_PPI mRscHandlerPpi = { - Register, - Unregister - }; - -EFI_PEI_PROGRESS_CODE_PPI mStatusCodePpi = { - ReportDispatcher - }; - -EFI_PEI_PPI_DESCRIPTOR mRscHandlerPpiList[] = { - { - EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, - &gEfiPeiRscHandlerPpiGuid, - &mRscHandlerPpi - } -}; - -EFI_PEI_PPI_DESCRIPTOR mStatusCodePpiList[] = { - { - EFI_PEI_PPI_DESCRIPTOR_PPI | EFI_PEI_PPI_DESCRIPTOR_TERMINATE_LIST, - &gEfiPeiStatusCodePpiGuid, - &mStatusCodePpi - } -}; - -/** - Worker function to create one memory status code GUID'ed HOB, - using PacketIndex to identify the packet. - - @param PacketIndex Index of records packet. - - @return Pointer to the memory status code packet. - -**/ -UINTN * -CreateRscHandlerCallbackPacket ( - VOID - ) -{ - UINTN *NumberOfEntries; - - // - // Build GUID'ed HOB with PCD defined size. - // - NumberOfEntries = BuildGuidHob ( - &gStatusCodeCallbackGuid, - sizeof (EFI_PEI_RSC_HANDLER_CALLBACK) * 64 + sizeof (UINTN) - ); - ASSERT (NumberOfEntries != NULL); - - *NumberOfEntries = 0; - - return NumberOfEntries; -} - -/** - Register the callback function for ReportStatusCode() notification. - - When this function is called the function pointer is added to an internal list and any future calls to - ReportStatusCode() will be forwarded to the Callback function. - - @param[in] Callback A pointer to a function of type EFI_PEI_RSC_HANDLER_CALLBACK that is called - when a call to ReportStatusCode() occurs. - - @retval EFI_SUCCESS Function was successfully registered. - @retval EFI_INVALID_PARAMETER The callback function was NULL. - @retval EFI_OUT_OF_RESOURCES The internal buffer ran out of space. No more functions can be - registered. - @retval EFI_ALREADY_STARTED The function was already registered. It can't be registered again. - -**/ -EFI_STATUS -EFIAPI -Register ( - IN EFI_PEI_RSC_HANDLER_CALLBACK Callback - ) -{ - EFI_PEI_HOB_POINTERS Hob; - EFI_PEI_RSC_HANDLER_CALLBACK *CallbackEntry; - UINTN *NumberOfEntries; - UINTN Index; - UINTN FreeEntryIndex; - UINTN *FreePacket; - - if (Callback == NULL) { - return EFI_INVALID_PARAMETER; - } - - Hob.Raw = GetFirstGuidHob (&gStatusCodeCallbackGuid); - FreePacket = NULL; - FreeEntryIndex = 0; - while (Hob.Raw != NULL) { - NumberOfEntries = GET_GUID_HOB_DATA (Hob); - CallbackEntry = (EFI_PEI_RSC_HANDLER_CALLBACK *) (NumberOfEntries + 1); - if (FreePacket == NULL && *NumberOfEntries < 64) { - // - // If current total number of handlers does not exceed 64, put new handler - // at the last of packet - // - FreePacket = NumberOfEntries; - FreeEntryIndex = *NumberOfEntries; - } - for (Index = 0; Index < *NumberOfEntries; Index++) { - if (CallbackEntry[Index] == Callback) { - // - // If the function was already registered. It can't be registered again. - // - return EFI_ALREADY_STARTED; - } - if (FreePacket == NULL && CallbackEntry[Index] == NULL) { - // - // If the total number of handlers in current packet is max value 64, - // search an entry with NULL pointer and fill new handler into this entry. - // - FreePacket = NumberOfEntries; - FreeEntryIndex = Index; - } - } - Hob.Raw = GET_NEXT_HOB (Hob); - Hob.Raw = GetNextGuidHob (&gStatusCodeCallbackGuid, Hob.Raw); - } - - if (FreePacket == NULL) { - FreePacket = CreateRscHandlerCallbackPacket(); - } - - CallbackEntry = (EFI_PEI_RSC_HANDLER_CALLBACK *) (FreePacket + 1); - CallbackEntry[FreeEntryIndex] = Callback; - - if (*FreePacket == FreeEntryIndex) { - // - // If new registered callback is added as a new entry in the packet, - // increase the total number of handlers in the packet. - // - *FreePacket += 1; - } - - return EFI_SUCCESS; -} - -/** - Remove a previously registered callback function from the notification list. - - ReportStatusCode() messages will no longer be forwarded to the Callback function. - - @param[in] Callback A pointer to a function of type EFI_PEI_RSC_HANDLER_CALLBACK that is to be - unregistered. - - @retval EFI_SUCCESS The function was successfully unregistered. - @retval EFI_INVALID_PARAMETER The callback function was NULL. - @retval EFI_NOT_FOUND The callback function was not found to be unregistered. - -**/ -EFI_STATUS -EFIAPI -Unregister ( - IN EFI_PEI_RSC_HANDLER_CALLBACK Callback - ) -{ - EFI_PEI_HOB_POINTERS Hob; - EFI_PEI_RSC_HANDLER_CALLBACK *CallbackEntry; - UINTN *NumberOfEntries; - UINTN Index; - - if (Callback == NULL) { - return EFI_INVALID_PARAMETER; - } - - Hob.Raw = GetFirstGuidHob (&gStatusCodeCallbackGuid); - while (Hob.Raw != NULL) { - NumberOfEntries = GET_GUID_HOB_DATA (Hob); - CallbackEntry = (EFI_PEI_RSC_HANDLER_CALLBACK *) (NumberOfEntries + 1); - for (Index = 0; Index < *NumberOfEntries; Index++) { - if (CallbackEntry[Index] == Callback) { - // - // Set removed entry as NULL. - // - CallbackEntry[Index] = NULL; - return EFI_SUCCESS; - } - } - Hob.Raw = GET_NEXT_HOB (Hob); - Hob.Raw = GetNextGuidHob (&gStatusCodeCallbackGuid, Hob.Raw); - } - - return EFI_NOT_FOUND; -} - -/** - Publishes an interface that allows PEIMs to report status codes. - - This function implements EFI_PEI_PROGRESS_CODE_PPI.ReportStatusCode(). - It publishes an interface that allows PEIMs to report status codes. - - @param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation. - @param CodeType Indicates the type of status code being reported. - @param Value Describes the current status of a hardware or - software entity. This includes information about the class and - subclass that is used to classify the entity as well as an operation. - For progress codes, the operation is the current activity. - For error codes, it is the exception.For debug codes,it is not defined at this time. - @param Instance The enumeration of a hardware or software entity within - the system. A system may contain multiple entities that match a class/subclass - pairing. The instance differentiates between them. An instance of 0 indicates - that instance information is unavailable, not meaningful, or not relevant. - Valid instance numbers start with 1. - @param CallerId This optional parameter may be used to identify the caller. - This parameter allows the status code driver to apply different rules to - different callers. - @param Data This optional parameter may be used to pass additional data. - - @retval EFI_SUCCESS The function completed successfully. - -**/ -EFI_STATUS -EFIAPI -ReportDispatcher ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN EFI_STATUS_CODE_TYPE CodeType, - IN EFI_STATUS_CODE_VALUE Value, - IN UINT32 Instance, - IN CONST EFI_GUID *CallerId OPTIONAL, - IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL - ) -{ - EFI_PEI_HOB_POINTERS Hob; - EFI_PEI_RSC_HANDLER_CALLBACK *CallbackEntry; - UINTN *NumberOfEntries; - UINTN Index; - - Hob.Raw = GetFirstGuidHob (&gStatusCodeCallbackGuid); - while (Hob.Raw != NULL) { - NumberOfEntries = GET_GUID_HOB_DATA (Hob); - CallbackEntry = (EFI_PEI_RSC_HANDLER_CALLBACK *) (NumberOfEntries + 1); - for (Index = 0; Index < *NumberOfEntries; Index++) { - if (CallbackEntry[Index] != NULL) { - CallbackEntry[Index]( - PeiServices, - CodeType, - Value, - Instance, - CallerId, - Data - ); - } - } - Hob.Raw = GET_NEXT_HOB (Hob); - Hob.Raw = GetNextGuidHob (&gStatusCodeCallbackGuid, Hob.Raw); - } - - return EFI_SUCCESS; -} - -/** - Entry point of Status Code PEIM. - - This function is the entry point of this Status Code Router PEIM. - It produces Report Stataus Code Handler PPI and Status Code PPI. - - @param FileHandle Handle of the file being invoked. - @param PeiServices Describes the list of possible PEI Services. - - @retval EFI_SUCESS The entry point of DXE IPL PEIM executes successfully. - -**/ -EFI_STATUS -EFIAPI -GenericStatusCodePeiEntry ( - IN EFI_PEI_FILE_HANDLE FileHandle, - IN CONST EFI_PEI_SERVICES **PeiServices - ) -{ - EFI_STATUS Status; - EFI_PEI_PPI_DESCRIPTOR *OldDescriptor; - EFI_PEI_PROGRESS_CODE_PPI *OldStatusCodePpi; - - CreateRscHandlerCallbackPacket (); - - // - // Install Report Status Code Handler PPI - // - Status = PeiServicesInstallPpi (mRscHandlerPpiList); - ASSERT_EFI_ERROR (Status); - - // - // Install Status Code PPI. PI spec specifies that there can be only one instance - // of this PPI in system. So first check if other instance already exists. - // If no other instance exists, then just install the PPI. - // If other instance already exists, then reinstall it. - // - Status = PeiServicesLocatePpi ( - &gEfiPeiStatusCodePpiGuid, - 0, - &OldDescriptor, - (VOID **) &OldStatusCodePpi - ); - if (!EFI_ERROR (Status)) { - Status = PeiServicesReInstallPpi (OldDescriptor, mStatusCodePpiList); - } else { - Status = PeiServicesInstallPpi (mStatusCodePpiList); - } - ASSERT_EFI_ERROR (Status); - - return EFI_SUCCESS; -} diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.h b/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.h deleted file mode 100644 index 318a3f5af1..0000000000 --- a/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.h +++ /dev/null @@ -1,109 +0,0 @@ -/** @file - Internal include file for Report Status Code Router PEIM. - - Copyright (c) 2009, 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. - -**/ - -#ifndef __PEI_REPORT_STATUS_CODE_ROUTER_H__ -#define __PEI_REPORT_STATUS_CODE_ROUTER_H__ - - -#include -#include - -#include - -#include -#include -#include -#include - -/** - Register the callback function for ReportStatusCode() notification. - - When this function is called the function pointer is added to an internal list and any future calls to - ReportStatusCode() will be forwarded to the Callback function. - - @param[in] Callback A pointer to a function of type EFI_PEI_RSC_HANDLER_CALLBACK that is called - when a call to ReportStatusCode() occurs. - - @retval EFI_SUCCESS Function was successfully registered. - @retval EFI_INVALID_PARAMETER The callback function was NULL. - @retval EFI_OUT_OF_RESOURCES The internal buffer ran out of space. No more functions can be - registered. - @retval EFI_ALREADY_STARTED The function was already registered. It can't be registered again. - -**/ -EFI_STATUS -EFIAPI -Register ( - IN EFI_PEI_RSC_HANDLER_CALLBACK Callback - ); - -/** - Remove a previously registered callback function from the notification list. - - ReportStatusCode() messages will no longer be forwarded to the Callback function. - - @param[in] Callback A pointer to a function of type EFI_PEI_RSC_HANDLER_CALLBACK that is to be - unregistered. - - @retval EFI_SUCCESS The function was successfully unregistered. - @retval EFI_INVALID_PARAMETER The callback function was NULL. - @retval EFI_NOT_FOUND The callback function was not found to be unregistered. - -**/ -EFI_STATUS -EFIAPI -Unregister ( - IN EFI_PEI_RSC_HANDLER_CALLBACK Callback - ); - -/** - Publishes an interface that allows PEIMs to report status codes. - - This function implements EFI_PEI_PROGRESS_CODE_PPI.ReportStatusCode(). - It publishes an interface that allows PEIMs to report status codes. - - @param PeiServices An indirect pointer to the EFI_PEI_SERVICES table published by the PEI Foundation. - @param CodeType Indicates the type of status code being reported. - @param Value Describes the current status of a hardware or - software entity. This includes information about the class and - subclass that is used to classify the entity as well as an operation. - For progress codes, the operation is the current activity. - For error codes, it is the exception.For debug codes,it is not defined at this time. - @param Instance The enumeration of a hardware or software entity within - the system. A system may contain multiple entities that match a class/subclass - pairing. The instance differentiates between them. An instance of 0 indicates - that instance information is unavailable, not meaningful, or not relevant. - Valid instance numbers start with 1. - @param CallerId This optional parameter may be used to identify the caller. - This parameter allows the status code driver to apply different rules to - different callers. - @param Data This optional parameter may be used to pass additional data. - - @retval EFI_SUCCESS The function completed successfully. - -**/ -EFI_STATUS -EFIAPI -ReportDispatcher ( - IN CONST EFI_PEI_SERVICES **PeiServices, - IN EFI_STATUS_CODE_TYPE CodeType, - IN EFI_STATUS_CODE_VALUE Value, - IN UINT32 Instance, - IN CONST EFI_GUID *CallerId OPTIONAL, - IN CONST EFI_STATUS_CODE_DATA *Data OPTIONAL - ); - -#endif - - diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.inf b/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.inf deleted file mode 100644 index a3de382d00..0000000000 --- a/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.inf +++ /dev/null @@ -1,60 +0,0 @@ -## @file -# Report Status Code Router PEIM which produces Report Stataus Code Handler PPI and Status Code PPI. -# -# Copyright (c) 2009 - 2014, 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. -# -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = ReportStatusCodeRouterPei - MODULE_UNI_FILE = ReportStatusCodeRouterPei.uni - FILE_GUID = A3610442-E69F-4DF3-82CA-2360C4031A23 - MODULE_TYPE = PEIM - VERSION_STRING = 1.0 - ENTRY_POINT = GenericStatusCodePeiEntry - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 IPF EBC (EBC is only for build) -# - -[Sources] - ReportStatusCodeRouterPei.c - ReportStatusCodeRouterPei.h - - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - -[LibraryClasses] - PeimEntryPoint - PeiServicesLib - DebugLib - HobLib - -[Guids] - ## PRODUCES ## HOB - ## CONSUMES ## HOB - gStatusCodeCallbackGuid - -[Ppis] - gEfiPeiRscHandlerPpiGuid ## PRODUCES - gEfiPeiStatusCodePpiGuid ## PRODUCES - - -[Depex] - TRUE - -[UserExtensions.TianoCore."ExtraFiles"] - ReportStatusCodeRouterPeiExtra.uni diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.uni b/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.uni deleted file mode 100644 index 3ab998028e..0000000000 Binary files a/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPei.uni and /dev/null differ diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPeiExtra.uni b/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPeiExtra.uni deleted file mode 100644 index 965c094b62..0000000000 Binary files a/MdeModulePkg/Universal/ReportStatusCodeRouter/Pei/ReportStatusCodeRouterPeiExtra.uni and /dev/null differ diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.c b/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.c deleted file mode 100644 index f859075da6..0000000000 --- a/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.c +++ /dev/null @@ -1,406 +0,0 @@ -/** @file - Report Status Code Router Driver which produces Report Stataus Code Handler Protocol - and Status Code Runtime Protocol. - - Copyright (c) 2009 - 2011, 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. - -**/ - -#include "ReportStatusCodeRouterRuntimeDxe.h" - -EFI_HANDLE mHandle = NULL; -LIST_ENTRY mCallbackListHead = INITIALIZE_LIST_HEAD_VARIABLE (mCallbackListHead); -EFI_EVENT mVirtualAddressChangeEvent = NULL; - -// -// Report operation nest status. -// If it is set, then the report operation has nested. -// -UINT32 mStatusCodeNestStatus = 0; - -EFI_STATUS_CODE_PROTOCOL mStatusCodeProtocol = { - ReportDispatcher -}; - -EFI_RSC_HANDLER_PROTOCOL mRscHandlerProtocol = { - Register, - Unregister - }; - -/** - Event callback function to invoke status code handler in list. - - @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 -RscHandlerNotification ( - IN EFI_EVENT Event, - IN VOID *Context - ) -{ - RSC_HANDLER_CALLBACK_ENTRY *CallbackEntry; - EFI_PHYSICAL_ADDRESS Address; - RSC_DATA_ENTRY *RscData; - - CallbackEntry = (RSC_HANDLER_CALLBACK_ENTRY *) Context; - - // - // Traverse the status code data buffer to parse all - // data to report. - // - Address = CallbackEntry->StatusCodeDataBuffer; - while (Address < CallbackEntry->EndPointer) { - RscData = (RSC_DATA_ENTRY *) (UINTN) Address; - CallbackEntry->RscHandlerCallback ( - RscData->Type, - RscData->Value, - RscData->Instance, - &RscData->CallerId, - &RscData->Data - ); - - Address += (sizeof (RSC_DATA_ENTRY) + RscData->Data.Size); - Address = ALIGN_VARIABLE (Address); - } - - CallbackEntry->EndPointer = CallbackEntry->StatusCodeDataBuffer; -} - -/** - Register the callback function for ReportStatusCode() notification. - - When this function is called the function pointer is added to an internal list and any future calls to - ReportStatusCode() will be forwarded to the Callback function. During the bootservices, - this is the callback for which this service can be invoked. The report status code router - will create an event such that the callback function is only invoked at the TPL for which it was - registered. The entity that registers for the callback should also register for an event upon - generation of exit boot services and invoke the unregister service. - If the handler does not have a TPL dependency, it should register for a callback at TPL high. The - router infrastructure will support making callbacks at runtime, but the caller for runtime invocation - must meet the following criteria: - 1. must be a runtime driver type so that its memory is not reclaimed - 2. not unregister at exit boot services so that the router will still have its callback address - 3. the caller must be self-contained (eg. Not call out into any boot-service interfaces) and be - runtime safe, in general. - - @param[in] Callback A pointer to a function of type EFI_RSC_HANDLER_CALLBACK that is called when - a call to ReportStatusCode() occurs. - @param[in] Tpl TPL at which callback can be safely invoked. - - @retval EFI_SUCCESS Function was successfully registered. - @retval EFI_INVALID_PARAMETER The callback function was NULL. - @retval EFI_OUT_OF_RESOURCES The internal buffer ran out of space. No more functions can be - registered. - @retval EFI_ALREADY_STARTED The function was already registered. It can't be registered again. - -**/ -EFI_STATUS -EFIAPI -Register ( - IN EFI_RSC_HANDLER_CALLBACK Callback, - IN EFI_TPL Tpl - ) -{ - EFI_STATUS Status; - LIST_ENTRY *Link; - RSC_HANDLER_CALLBACK_ENTRY *CallbackEntry; - - if (Callback == NULL) { - return EFI_INVALID_PARAMETER; - } - - for (Link = GetFirstNode (&mCallbackListHead); !IsNull (&mCallbackListHead, Link); Link = GetNextNode (&mCallbackListHead, Link)) { - CallbackEntry = CR (Link, RSC_HANDLER_CALLBACK_ENTRY, Node, RSC_HANDLER_CALLBACK_ENTRY_SIGNATURE); - if (CallbackEntry->RscHandlerCallback == Callback) { - // - // If the function was already registered. It can't be registered again. - // - return EFI_ALREADY_STARTED; - } - } - - CallbackEntry = AllocateRuntimeZeroPool (sizeof (RSC_HANDLER_CALLBACK_ENTRY)); - ASSERT (CallbackEntry != NULL); - - CallbackEntry->Signature = RSC_HANDLER_CALLBACK_ENTRY_SIGNATURE; - CallbackEntry->RscHandlerCallback = Callback; - CallbackEntry->Tpl = Tpl; - - // - // If TPL of registered callback funtion is not TPL_HIGH_LEVEL, then event should be created - // for it, and related buffer for status code data should be prepared. - // Here the data buffer must be prepared in advance, because Report Status Code Protocol might - // be invoked under TPL_HIGH_LEVEL and no memory allocation is allowed then. - // If TPL is TPL_HIGH_LEVEL, then all status code will be reported immediately, without data - // buffer and event trigger. - // - if (Tpl != TPL_HIGH_LEVEL) { - CallbackEntry->StatusCodeDataBuffer = (EFI_PHYSICAL_ADDRESS) (UINTN) AllocatePool (EFI_PAGE_SIZE); - CallbackEntry->BufferSize = EFI_PAGE_SIZE; - CallbackEntry->EndPointer = CallbackEntry->StatusCodeDataBuffer; - Status = gBS->CreateEvent ( - EVT_NOTIFY_SIGNAL, - Tpl, - RscHandlerNotification, - CallbackEntry, - &CallbackEntry->Event - ); - ASSERT_EFI_ERROR (Status); - } - - InsertTailList (&mCallbackListHead, &CallbackEntry->Node); - - return EFI_SUCCESS; -} - -/** - Remove a previously registered callback function from the notification list. - - A callback function must be unregistered before it is deallocated. It is important that any registered - callbacks that are not runtime complaint be unregistered when ExitBootServices() is called. - - @param[in] Callback A pointer to a function of type EFI_RSC_HANDLER_CALLBACK that is to be - unregistered. - - @retval EFI_SUCCESS The function was successfully unregistered. - @retval EFI_INVALID_PARAMETER The callback function was NULL. - @retval EFI_NOT_FOUND The callback function was not found to be unregistered. - -**/ -EFI_STATUS -EFIAPI -Unregister ( - IN EFI_RSC_HANDLER_CALLBACK Callback - ) -{ - LIST_ENTRY *Link; - RSC_HANDLER_CALLBACK_ENTRY *CallbackEntry; - - if (Callback == NULL) { - return EFI_INVALID_PARAMETER; - } - - for (Link = GetFirstNode (&mCallbackListHead); !IsNull (&mCallbackListHead, Link); Link = GetNextNode (&mCallbackListHead, Link)) { - CallbackEntry = CR (Link, RSC_HANDLER_CALLBACK_ENTRY, Node, RSC_HANDLER_CALLBACK_ENTRY_SIGNATURE); - if (CallbackEntry->RscHandlerCallback == Callback) { - // - // If the function is found in list, delete it and return. - // - if (CallbackEntry->Tpl != TPL_HIGH_LEVEL) { - FreePool ((VOID *) (UINTN) CallbackEntry->StatusCodeDataBuffer); - gBS->CloseEvent (CallbackEntry->Event); - } - RemoveEntryList (&CallbackEntry->Node); - FreePool (CallbackEntry); - return EFI_SUCCESS; - } - } - - return EFI_NOT_FOUND; -} - -/** - Provides an interface that a software module can call to report a status code. - - @param Type Indicates the type of status code being reported. - @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. - @param Instance The enumeration of a hardware or software entity within - the system. Valid instance numbers start with 1. - @param CallerId This optional parameter may be used to identify the caller. - This parameter allows the status code driver to apply different rules to - different callers. - @param Data This optional parameter may be used to pass additional data. - - @retval EFI_SUCCESS The function completed successfully - @retval EFI_DEVICE_ERROR The function should not be completed due to a device error. - -**/ -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 - ) -{ - LIST_ENTRY *Link; - RSC_HANDLER_CALLBACK_ENTRY *CallbackEntry; - RSC_DATA_ENTRY *RscData; - EFI_STATUS Status; - VOID *NewBuffer; - - // - // Use atom operation to avoid the reentant of report. - // If current status is not zero, then the function is reentrancy. - // - if (InterlockedCompareExchange32 (&mStatusCodeNestStatus, 0, 1) == 1) { - return EFI_DEVICE_ERROR; - } - - for (Link = GetFirstNode (&mCallbackListHead); !IsNull (&mCallbackListHead, Link);) { - CallbackEntry = CR (Link, RSC_HANDLER_CALLBACK_ENTRY, Node, RSC_HANDLER_CALLBACK_ENTRY_SIGNATURE); - // - // The handler may remove itself, so get the next handler in advance. - // - Link = GetNextNode (&mCallbackListHead, Link); - if ((CallbackEntry->Tpl == TPL_HIGH_LEVEL) || EfiAtRuntime ()) { - CallbackEntry->RscHandlerCallback ( - Type, - Value, - Instance, - CallerId, - Data - ); - continue; - } - - // - // If callback is registered with TPL lower than TPL_HIGH_LEVEL, event must be signaled at boot time to possibly wait for - // allowed TPL to report status code. Related data should also be stored in data buffer. - // - CallbackEntry->EndPointer = ALIGN_VARIABLE (CallbackEntry->EndPointer); - RscData = (RSC_DATA_ENTRY *) (UINTN) CallbackEntry->EndPointer; - CallbackEntry->EndPointer += sizeof (RSC_DATA_ENTRY); - if (Data != NULL) { - CallbackEntry->EndPointer += Data->Size; - } - - // - // If data buffer is about to be used up (7/8 here), try to reallocate a buffer with double size, if not at TPL_HIGH_LEVEL. - // - if (CallbackEntry->EndPointer > (CallbackEntry->StatusCodeDataBuffer + (CallbackEntry->BufferSize / 8) * 7)) { - if (EfiGetCurrentTpl () < TPL_HIGH_LEVEL) { - NewBuffer = ReallocatePool ( - CallbackEntry->BufferSize, - CallbackEntry->BufferSize * 2, - (VOID *) (UINTN) CallbackEntry->StatusCodeDataBuffer - ); - if (NewBuffer != NULL) { - CallbackEntry->EndPointer = (EFI_PHYSICAL_ADDRESS) (UINTN) NewBuffer + (CallbackEntry->EndPointer - CallbackEntry->StatusCodeDataBuffer); - CallbackEntry->StatusCodeDataBuffer = (EFI_PHYSICAL_ADDRESS) (UINTN) NewBuffer; - CallbackEntry->BufferSize *= 2; - } - } - } - - // - // If data buffer is used up, do not report for this time. - // - if (CallbackEntry->EndPointer > (CallbackEntry->StatusCodeDataBuffer + CallbackEntry->BufferSize)) { - continue; - } - - RscData->Type = Type; - RscData->Value = Value; - RscData->Instance = Instance; - if (CallerId != NULL) { - CopyGuid (&RscData->CallerId, CallerId); - } - if (Data != NULL) { - CopyMem (&RscData->Data, Data, Data->HeaderSize + Data->Size); - } - - Status = gBS->SignalEvent (CallbackEntry->Event); - ASSERT_EFI_ERROR (Status); - } - - // - // Restore the nest status of report - // - InterlockedCompareExchange32 (&mStatusCodeNestStatus, 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 - ) -{ - EFI_STATUS Status; - LIST_ENTRY *Link; - RSC_HANDLER_CALLBACK_ENTRY *CallbackEntry; - - for (Link = GetFirstNode (&mCallbackListHead); !IsNull (&mCallbackListHead, Link); Link = GetNextNode (&mCallbackListHead, Link)) { - CallbackEntry = CR (Link, RSC_HANDLER_CALLBACK_ENTRY, Node, RSC_HANDLER_CALLBACK_ENTRY_SIGNATURE); - Status = EfiConvertFunctionPointer (0, (VOID **) &CallbackEntry->RscHandlerCallback); - ASSERT_EFI_ERROR (Status); - } - - Status = EfiConvertList ( - 0, - &mCallbackListHead - ); - ASSERT_EFI_ERROR (Status); -} - -/** - Entry point of Generic Status Code Driver. - - This function is the entry point of this Generic Status Code Driver. - It installs eport Stataus Code Handler Protocol and Status Code Runtime Protocol, - and registers event for EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE. - - @param ImageHandle The firmware allocated handle for the EFI image. - @param SystemTable A pointer to the EFI System Table. - - @retval EFI_SUCCESS The entry point is executed successfully. - -**/ -EFI_STATUS -EFIAPI -GenericStatusCodeRuntimeDxeEntry ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - EFI_STATUS Status; - - Status = gBS->InstallMultipleProtocolInterfaces ( - &mHandle, - &gEfiRscHandlerProtocolGuid, - &mRscHandlerProtocol, - &gEfiStatusCodeRuntimeProtocolGuid, - &mStatusCodeProtocol, - NULL - ); - ASSERT_EFI_ERROR (Status); - - Status = gBS->CreateEventEx ( - EVT_NOTIFY_SIGNAL, - TPL_NOTIFY, - VirtualAddressChangeCallBack, - NULL, - &gEfiEventVirtualAddressChangeGuid, - &mVirtualAddressChangeEvent - ); - ASSERT_EFI_ERROR (Status); - - return EFI_SUCCESS; -} diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.h b/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.h deleted file mode 100644 index c82f296f8d..0000000000 --- a/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.h +++ /dev/null @@ -1,142 +0,0 @@ -/** @file - Internal include file for Report Status Code Router Driver. - - Copyright (c) 2009, 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. - -**/ - -#ifndef __REPORT_STATUS_CODE_ROUTER_RUNTIME_DXE_H__ -#define __REPORT_STATUS_CODE_ROUTER_RUNTIME_DXE_H__ - - -#include -#include - -#include - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include "Library/UefiLib.h" - -#define RSC_HANDLER_CALLBACK_ENTRY_SIGNATURE SIGNATURE_32 ('r', 'h', 'c', 'e') - -typedef struct { - UINTN Signature; - EFI_RSC_HANDLER_CALLBACK RscHandlerCallback; - EFI_TPL Tpl; - EFI_EVENT Event; - EFI_PHYSICAL_ADDRESS StatusCodeDataBuffer; - UINTN BufferSize; - EFI_PHYSICAL_ADDRESS EndPointer; - LIST_ENTRY Node; -} RSC_HANDLER_CALLBACK_ENTRY; - -typedef struct { - EFI_STATUS_CODE_TYPE Type; - EFI_STATUS_CODE_VALUE Value; - UINT32 Instance; - UINT32 Reserved; - EFI_GUID CallerId; - EFI_STATUS_CODE_DATA Data; -} RSC_DATA_ENTRY; - -/** - Register the callback function for ReportStatusCode() notification. - - When this function is called the function pointer is added to an internal list and any future calls to - ReportStatusCode() will be forwarded to the Callback function. During the bootservices, - this is the callback for which this service can be invoked. The report status code router - will create an event such that the callback function is only invoked at the TPL for which it was - registered. The entity that registers for the callback should also register for an event upon - generation of exit boot services and invoke the unregister service. - If the handler does not have a TPL dependency, it should register for a callback at TPL high. The - router infrastructure will support making callbacks at runtime, but the caller for runtime invocation - must meet the following criteria: - 1. must be a runtime driver type so that its memory is not reclaimed - 2. not unregister at exit boot services so that the router will still have its callback address - 3. the caller must be self-contained (eg. Not call out into any boot-service interfaces) and be - runtime safe, in general. - - @param[in] Callback A pointer to a function of type EFI_RSC_HANDLER_CALLBACK that is called when - a call to ReportStatusCode() occurs. - @param[in] Tpl TPL at which callback can be safely invoked. - - @retval EFI_SUCCESS Function was successfully registered. - @retval EFI_INVALID_PARAMETER The callback function was NULL. - @retval EFI_OUT_OF_RESOURCES The internal buffer ran out of space. No more functions can be - registered. - @retval EFI_ALREADY_STARTED The function was already registered. It can't be registered again. - -**/ -EFI_STATUS -EFIAPI -Register ( - IN EFI_RSC_HANDLER_CALLBACK Callback, - IN EFI_TPL Tpl - ); - -/** - Remove a previously registered callback function from the notification list. - - A callback function must be unregistered before it is deallocated. It is important that any registered - callbacks that are not runtime complaint be unregistered when ExitBootServices() is called. - - @param[in] Callback A pointer to a function of type EFI_RSC_HANDLER_CALLBACK that is to be - unregistered. - - @retval EFI_SUCCESS The function was successfully unregistered. - @retval EFI_INVALID_PARAMETER The callback function was NULL. - @retval EFI_NOT_FOUND The callback function was not found to be unregistered. - -**/ -EFI_STATUS -EFIAPI -Unregister ( - IN EFI_RSC_HANDLER_CALLBACK Callback - ); - -/** - Provides an interface that a software module can call to report a status code. - - @param Type Indicates the type of status code being reported. - @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. - @param Instance The enumeration of a hardware or software entity within - the system. Valid instance numbers start with 1. - @param CallerId This optional parameter may be used to identify the caller. - This parameter allows the status code driver to apply different rules to - different callers. - @param Data This optional parameter may be used to pass additional data. - - @retval EFI_SUCCESS The function completed successfully - @retval EFI_DEVICE_ERROR The function should not be completed due to a device error. - -**/ -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 - ); - -#endif - - diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf b/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf deleted file mode 100644 index 0445d94340..0000000000 --- a/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.inf +++ /dev/null @@ -1,63 +0,0 @@ -## @file -# Report Status Code Router Driver which produces Report Stataus Code Handler Protocol and Status Code Runtime Protocol. -# -# Copyright (c) 2009 - 2014, 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. -# -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = ReportStatusCodeRouterRuntimeDxe - MODULE_UNI_FILE = ReportStatusCodeRouterRuntimeDxe.uni - FILE_GUID = D93CE3D8-A7EB-4730-8C8E-CC466A9ECC3C - MODULE_TYPE = DXE_RUNTIME_DRIVER - VERSION_STRING = 1.0 - ENTRY_POINT = GenericStatusCodeRuntimeDxeEntry - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 IPF EBC -# - -[Sources] - ReportStatusCodeRouterRuntimeDxe.c - ReportStatusCodeRouterRuntimeDxe.h - - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - -[LibraryClasses] - UefiRuntimeLib - MemoryAllocationLib - BaseMemoryLib - UefiBootServicesTableLib - UefiDriverEntryPoint - HobLib - DebugLib - BaseLib - SynchronizationLib - UefiLib - -[Guids] - gEfiEventVirtualAddressChangeGuid ## CONSUMES ## Event - -[Protocols] - gEfiRscHandlerProtocolGuid ## PRODUCES - gEfiStatusCodeRuntimeProtocolGuid ## PRODUCES - -[Depex] - TRUE - -[UserExtensions.TianoCore."ExtraFiles"] - ReportStatusCodeRouterRuntimeDxeExtra.uni diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.uni b/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.uni deleted file mode 100644 index 3eb0842356..0000000000 Binary files a/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxe.uni and /dev/null differ diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxeExtra.uni b/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxeExtra.uni deleted file mode 100644 index 89be808583..0000000000 Binary files a/MdeModulePkg/Universal/ReportStatusCodeRouter/RuntimeDxe/ReportStatusCodeRouterRuntimeDxeExtra.uni and /dev/null differ diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.c b/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.c deleted file mode 100644 index 79c8d1e36f..0000000000 --- a/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.c +++ /dev/null @@ -1,239 +0,0 @@ -/** @file - Report Status Code Router Driver which produces SMM Report Stataus Code Handler Protocol - and SMM Status Code Protocol. - - Copyright (c) 2009 - 2011, 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. - -**/ - -#include "ReportStatusCodeRouterSmm.h" - -LIST_ENTRY mCallbackListHead = INITIALIZE_LIST_HEAD_VARIABLE (mCallbackListHead); - -// -// Report operation nest status. -// If it is set, then the report operation has nested. -// -UINT32 mStatusCodeNestStatus = 0; - -EFI_SMM_STATUS_CODE_PROTOCOL mSmmStatusCodeProtocol = { - ReportDispatcher -}; - -EFI_SMM_RSC_HANDLER_PROTOCOL mSmmRscHandlerProtocol = { - Register, - Unregister - }; - -/** - Register the callback function for ReportStatusCode() notification. - - When this function is called the function pointer is added to an internal list and any future calls to - ReportStatusCode() will be forwarded to the Callback function. - - @param[in] Callback A pointer to a function of type EFI_PEI_RSC_HANDLER_CALLBACK that is called - when a call to ReportStatusCode() occurs. - - @retval EFI_SUCCESS Function was successfully registered. - @retval EFI_INVALID_PARAMETER The callback function was NULL. - @retval EFI_OUT_OF_RESOURCES The internal buffer ran out of space. No more functions can be - registered. - @retval EFI_ALREADY_STARTED The function was already registered. It can't be registered again. - -**/ -EFI_STATUS -EFIAPI -Register ( - IN EFI_SMM_RSC_HANDLER_CALLBACK Callback - ) -{ - LIST_ENTRY *Link; - SMM_RSC_HANDLER_CALLBACK_ENTRY *CallbackEntry; - - if (Callback == NULL) { - return EFI_INVALID_PARAMETER; - } - - for (Link = GetFirstNode (&mCallbackListHead); !IsNull (&mCallbackListHead, Link); Link = GetNextNode (&mCallbackListHead, Link)) { - CallbackEntry = CR (Link, SMM_RSC_HANDLER_CALLBACK_ENTRY, Node, SMM_RSC_HANDLER_CALLBACK_ENTRY_SIGNATURE); - if (CallbackEntry->RscHandlerCallback == Callback) { - // - // If the function was already registered. It can't be registered again. - // - return EFI_ALREADY_STARTED; - } - } - - CallbackEntry = (SMM_RSC_HANDLER_CALLBACK_ENTRY *)AllocatePool (sizeof (SMM_RSC_HANDLER_CALLBACK_ENTRY)); - ASSERT (CallbackEntry != NULL); - - CallbackEntry->Signature = SMM_RSC_HANDLER_CALLBACK_ENTRY_SIGNATURE; - CallbackEntry->RscHandlerCallback = Callback; - - InsertTailList (&mCallbackListHead, &CallbackEntry->Node); - - return EFI_SUCCESS; -} - -/** - Remove a previously registered callback function from the notification list. - - ReportStatusCode() messages will no longer be forwarded to the Callback function. - - @param[in] Callback A pointer to a function of type EFI_PEI_RSC_HANDLER_CALLBACK that is to be - unregistered. - - @retval EFI_SUCCESS The function was successfully unregistered. - @retval EFI_INVALID_PARAMETER The callback function was NULL. - @retval EFI_NOT_FOUND The callback function was not found to be unregistered. - -**/ -EFI_STATUS -EFIAPI -Unregister ( - IN EFI_SMM_RSC_HANDLER_CALLBACK Callback - ) -{ - LIST_ENTRY *Link; - SMM_RSC_HANDLER_CALLBACK_ENTRY *CallbackEntry; - - if (Callback == NULL) { - return EFI_INVALID_PARAMETER; - } - - for (Link = GetFirstNode (&mCallbackListHead); !IsNull (&mCallbackListHead, Link); Link = GetNextNode (&mCallbackListHead, Link)) { - CallbackEntry = CR (Link, SMM_RSC_HANDLER_CALLBACK_ENTRY, Node, SMM_RSC_HANDLER_CALLBACK_ENTRY_SIGNATURE); - if (CallbackEntry->RscHandlerCallback == Callback) { - // - // If the function is found in list, delete it and return. - // - RemoveEntryList (&CallbackEntry->Node); - FreePool (CallbackEntry); - return EFI_SUCCESS; - } - } - - return EFI_NOT_FOUND; -} - - -/** - Provides an interface that a software module can call to report a status code. - - @param This EFI_SMM_STATUS_CODE_PROTOCOL instance. - @param Type Indicates the type of status code being reported. - @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. - @param Instance The enumeration of a hardware or software entity within - the system. Valid instance numbers start with 1. - @param CallerId This optional parameter may be used to identify the caller. - This parameter allows the status code driver to apply different rules to - different callers. - @param Data This optional parameter may be used to pass additional data. - - @retval EFI_SUCCESS The function completed successfully - @retval EFI_DEVICE_ERROR The function should not be completed due to a device error. - -**/ -EFI_STATUS -EFIAPI -ReportDispatcher ( - IN CONST EFI_SMM_STATUS_CODE_PROTOCOL *This, - IN EFI_STATUS_CODE_TYPE Type, - IN EFI_STATUS_CODE_VALUE Value, - IN UINT32 Instance, - IN CONST EFI_GUID *CallerId OPTIONAL, - IN EFI_STATUS_CODE_DATA *Data OPTIONAL - ) -{ - LIST_ENTRY *Link; - SMM_RSC_HANDLER_CALLBACK_ENTRY *CallbackEntry; - - // - // Use atom operation to avoid the reentant of report. - // If current status is not zero, then the function is reentrancy. - // - if (InterlockedCompareExchange32 (&mStatusCodeNestStatus, 0, 1) == 1) { - return EFI_DEVICE_ERROR; - } - - for (Link = GetFirstNode (&mCallbackListHead); !IsNull (&mCallbackListHead, Link);) { - CallbackEntry = CR (Link, SMM_RSC_HANDLER_CALLBACK_ENTRY, Node, SMM_RSC_HANDLER_CALLBACK_ENTRY_SIGNATURE); - // - // The handler may remove itself, so get the next handler in advance. - // - Link = GetNextNode (&mCallbackListHead, Link); - CallbackEntry->RscHandlerCallback ( - Type, - Value, - Instance, - (EFI_GUID*)CallerId, - Data - ); - - } - - // - // Restore the nest status of report - // - InterlockedCompareExchange32 (&mStatusCodeNestStatus, 1, 0); - - return EFI_SUCCESS; -} - -/** - Entry point of Generic Status Code Driver. - - This function is the entry point of SMM Status Code Router . - It produces SMM Report Stataus Code Handler and Status Code protocol. - - @param ImageHandle The firmware allocated handle for the EFI image. - @param SystemTable A pointer to the EFI System Table. - - @retval EFI_SUCCESS The entry point is executed successfully. - -**/ -EFI_STATUS -EFIAPI -GenericStatusCodeSmmEntry ( - IN EFI_HANDLE ImageHandle, - IN EFI_SYSTEM_TABLE *SystemTable - ) -{ - EFI_STATUS Status; - EFI_HANDLE Handle; - - Handle = NULL; - - // - // Install SmmRscHandler Protocol - // - Status = gSmst->SmmInstallProtocolInterface ( - &Handle, - &gEfiSmmRscHandlerProtocolGuid, - EFI_NATIVE_INTERFACE, - &mSmmRscHandlerProtocol - ); - ASSERT_EFI_ERROR (Status); - - // - // Install SmmStatusCode Protocol - // - Status = gSmst->SmmInstallProtocolInterface ( - &Handle, - &gEfiSmmStatusCodeProtocolGuid, - EFI_NATIVE_INTERFACE, - &mSmmStatusCodeProtocol - ); - ASSERT_EFI_ERROR (Status); - - return EFI_SUCCESS; -} diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.h b/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.h deleted file mode 100644 index 83f1bed003..0000000000 --- a/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.h +++ /dev/null @@ -1,109 +0,0 @@ -/** @file - Internal include file for Report Status Code Router Driver. - - Copyright (c) 2009 - 2010, 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. - -**/ - -#ifndef __REPORT_STATUS_CODE_ROUTER_SMM_H__ -#define __REPORT_STATUS_CODE_ROUTER_SMM_H__ - - -#include -#include - -#include -#include -#include -#include -#include -#include -#include - -#define SMM_RSC_HANDLER_CALLBACK_ENTRY_SIGNATURE SIGNATURE_32 ('s', 'h', 'c', 'e') - -typedef struct { - UINTN Signature; - EFI_SMM_RSC_HANDLER_CALLBACK RscHandlerCallback; - LIST_ENTRY Node; -} SMM_RSC_HANDLER_CALLBACK_ENTRY; - -/** - Register the callback function for ReportStatusCode() notification. - - When this function is called the function pointer is added to an internal list and any future calls to - ReportStatusCode() will be forwarded to the Callback function. - - @param[in] Callback A pointer to a function of type EFI_PEI_RSC_HANDLER_CALLBACK that is called - when a call to ReportStatusCode() occurs. - - @retval EFI_SUCCESS Function was successfully registered. - @retval EFI_INVALID_PARAMETER The callback function was NULL. - @retval EFI_OUT_OF_RESOURCES The internal buffer ran out of space. No more functions can be - registered. - @retval EFI_ALREADY_STARTED The function was already registered. It can't be registered again. - -**/ -EFI_STATUS -EFIAPI -Register ( - IN EFI_SMM_RSC_HANDLER_CALLBACK Callback - ); - -/** - Remove a previously registered callback function from the notification list. - - ReportStatusCode() messages will no longer be forwarded to the Callback function. - - @param[in] Callback A pointer to a function of type EFI_PEI_RSC_HANDLER_CALLBACK that is to be - unregistered. - - @retval EFI_SUCCESS The function was successfully unregistered. - @retval EFI_INVALID_PARAMETER The callback function was NULL. - @retval EFI_NOT_FOUND The callback function was not found to be unregistered. - -**/ -EFI_STATUS -EFIAPI -Unregister ( - IN EFI_SMM_RSC_HANDLER_CALLBACK Callback - ); - -/** - Provides an interface that a software module can call to report a status code. - - @param This EFI_SMM_STATUS_CODE_PROTOCOL instance. - @param Type Indicates the type of status code being reported. - @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. - @param Instance The enumeration of a hardware or software entity within - the system. Valid instance numbers start with 1. - @param CallerId This optional parameter may be used to identify the caller. - This parameter allows the status code driver to apply different rules to - different callers. - @param Data This optional parameter may be used to pass additional data. - - @retval EFI_SUCCESS The function completed successfully - @retval EFI_DEVICE_ERROR The function should not be completed due to a device error. - -**/ -EFI_STATUS -EFIAPI -ReportDispatcher ( - IN CONST EFI_SMM_STATUS_CODE_PROTOCOL *This, - IN EFI_STATUS_CODE_TYPE Type, - IN EFI_STATUS_CODE_VALUE Value, - IN UINT32 Instance, - IN CONST EFI_GUID *CallerId OPTIONAL, - IN EFI_STATUS_CODE_DATA *Data OPTIONAL - ); - -#endif diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf b/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf deleted file mode 100644 index 36c97ef57a..0000000000 --- a/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.inf +++ /dev/null @@ -1,56 +0,0 @@ -## @file -# Report Status Code Router Driver which produces SMM Report Stataus Code Handler Protocol and SMM Status Code Protocol. -# -# Copyright (c) 2009 - 2014, 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. -# -# -## - -[Defines] - INF_VERSION = 0x00010005 - BASE_NAME = ReportStatusCodeRouterSmm - MODULE_UNI_FILE = ReportStatusCodeRouterSmm.uni - FILE_GUID = A6885402-D022-4b0e-A509-4711B90F2A39 - MODULE_TYPE = DXE_SMM_DRIVER - PI_SPECIFICATION_VERSION = 0x0001000A - VERSION_STRING = 1.0 - ENTRY_POINT = GenericStatusCodeSmmEntry - -# -# The following information is for reference only and not required by the build tools. -# -# VALID_ARCHITECTURES = IA32 X64 -# - -[Sources] - ReportStatusCodeRouterSmm.c - ReportStatusCodeRouterSmm.h - -[Packages] - MdePkg/MdePkg.dec - MdeModulePkg/MdeModulePkg.dec - -[LibraryClasses] - SmmServicesTableLib - UefiDriverEntryPoint - DebugLib - BaseLib - SynchronizationLib - MemoryAllocationLib - -[Protocols] - gEfiSmmRscHandlerProtocolGuid ## PRODUCES - gEfiSmmStatusCodeProtocolGuid ## PRODUCES - -[Depex] - TRUE - -[UserExtensions.TianoCore."ExtraFiles"] - ReportStatusCodeRouterSmmExtra.uni diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.uni b/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.uni deleted file mode 100644 index bbee22e73e..0000000000 Binary files a/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmm.uni and /dev/null differ diff --git a/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmmExtra.uni b/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmmExtra.uni deleted file mode 100644 index 92264ec5d0..0000000000 Binary files a/MdeModulePkg/Universal/ReportStatusCodeRouter/Smm/ReportStatusCodeRouterSmmExtra.uni and /dev/null differ -- cgit v1.2.3