//\r
SerialPortWrite ((UINT8 *) Buffer, CharCount);\r
\r
+ //\r
+ // If register an unregister function of gEfiEventExitBootServicesGuid,\r
+ // then some log called in ExitBootServices() will be lost,\r
+ // so unregister the handler after receive the value of exit boot service.\r
+ //\r
+ if ((CodeType & EFI_STATUS_CODE_TYPE_MASK) == EFI_PROGRESS_CODE &&\r
+ Value == (EFI_SOFTWARE_EFI_BOOT_SERVICE | EFI_SW_BS_PC_EXIT_BOOT_SERVICES)) {\r
+ UnregisterSerialBootTimeHandlers();\r
+ }\r
+\r
return EFI_SUCCESS;\r
}\r
\r
#include "StatusCodeHandlerRuntimeDxe.h"\r
\r
EFI_EVENT mVirtualAddressChangeEvent = NULL;\r
-static EFI_EVENT mExitBootServicesEvent = NULL;\r
EFI_RSC_HANDLER_PROTOCOL *mRscHandlerProtocol = NULL;\r
\r
/**\r
Unregister status code callback functions only available at boot time from\r
report status code router when exiting boot services.\r
\r
- @param Event Event whose notification function is being invoked.\r
- @param Context Pointer to the notification function's context, which is\r
- always zero in current implementation.\r
-\r
**/\r
VOID\r
EFIAPI\r
-UnregisterBootTimeHandlers (\r
- IN EFI_EVENT Event,\r
- IN VOID *Context\r
+UnregisterSerialBootTimeHandlers (\r
+ VOID\r
)\r
{\r
if (PcdGetBool (PcdStatusCodeUseSerial)) {\r
mRscHandlerProtocol->Register (RtMemoryStatusCodeReportWorker, TPL_HIGH_LEVEL);\r
}\r
\r
- Status = gBS->CreateEventEx (\r
- EVT_NOTIFY_SIGNAL,\r
- TPL_NOTIFY,\r
- UnregisterBootTimeHandlers,\r
- NULL,\r
- &gEfiEventExitBootServicesGuid,\r
- &mExitBootServicesEvent\r
- );\r
-\r
Status = gBS->CreateEventEx (\r
EVT_NOTIFY_SIGNAL,\r
TPL_NOTIFY,\r