/** @file Permanently disable the library instance in DXE_RUNTIME_DRIVER modules when exiting boot services. Copyright (C) Red Hat Copyright (c) 2006 - 2019, Intel Corporation. All rights reserved.
Copyright (c) 2018, Linaro, Ltd. All rights reserved.
SPDX-License-Identifier: BSD-2-Clause-Patent **/ #include #include "Ram.h" STATIC EFI_EVENT mExitBootServicesEvent; /** Notification function that is triggered when the boot service ExitBootServices() is called. @param[in] Event Event whose notification function is being invoked. Here, unused. @param[in] Context The pointer to the notification function's context, which is implementation-dependent. Here, unused. **/ STATIC VOID EFIAPI ExitBootServicesNotify ( IN EFI_EVENT Event, IN VOID *Context ) { mDebugLibFdtPL011UartAddress = 0; mDebugLibFdtPL011UartPermanentStatus = RETURN_ABORTED; } /** Library instance constructor, registering ExitBootServicesNotify(). @param[in] ImageHandle The firmware-allocated handle for the EFI image. @param[in] SystemTable A pointer to the EFI System Table. @retval EFI_SUCCESS The operation completed successfully. @return Error codes propagated from CreateEvent(); the registration of ExitBootServicesNotify() failed. **/ EFI_STATUS EFIAPI DxeRuntimeDebugLibFdtPL011UartConstructor ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { return SystemTable->BootServices->CreateEvent ( EVT_SIGNAL_EXIT_BOOT_SERVICES, TPL_CALLBACK, ExitBootServicesNotify, NULL /* NotifyContext */, &mExitBootServicesEvent ); } /** Library instance destructor, deregistering ExitBootServicesNotify(). @param[in] ImageHandle The firmware-allocated handle for the EFI image. @param[in] SystemTable A pointer to the EFI System Table. @retval EFI_SUCCESS Library instance tear-down complete. @return Error codes propagated from CloseEvent(); the deregistration of ExitBootServicesNotify() failed. **/ EFI_STATUS EFIAPI DxeRuntimeDebugLibFdtPL011UartDestructor ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable ) { return SystemTable->BootServices->CloseEvent (mExitBootServicesEvent); }