/*++ Copyright (c) 2004, 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: EfiMgmtModeRuntimeLib.h Abstract: Light weight lib to support EFI drivers. --*/ #ifndef _EFI_RT_SUPPORT_LIB_H_ #define _EFI_RT_SUPPORT_LIB_H_ #ifndef EFI_LOAD_IMAGE_SMM #define EFI_LOAD_DRIVER_SMM FALSE #else #define EFI_LOAD_DRIVER_SMM TRUE #endif #ifndef EFI_NO_LOAD_IMAGE_RT #define EFI_NO_LOAD_DRIVER_RT FALSE #else #define EFI_NO_LOAD_DRIVER_RT TRUE #endif #include "EfiCommonLib.h" #include "LinkedList.h" #include "ProcDep.h" #include EFI_PROTOCOL_DEFINITION (CpuIo) #include EFI_PROTOCOL_DEFINITION (FirmwareVolumeBlock) // // Driver Lib Globals. // extern EFI_BOOT_SERVICES *gBS; extern EFI_SYSTEM_TABLE *gST; extern UINTN gRtErrorLevel; extern BOOLEAN mEfiLoadDriverSmm; extern BOOLEAN mEfiNoLoadDriverRt; extern EFI_DEVICE_PATH_PROTOCOL *mFilePath; // // Runtime Memory Allocation/De-Allocation tools (Should be used in Boot Phase only) // EFI_STATUS EfiAllocateRuntimeMemoryPool ( IN UINTN Size, OUT VOID **Buffer ) /*++ Routine Description: Allocate EfiRuntimeServicesData pool of specified size. Arguments: Size - Pool size Buffer - Memory pointer for output Returns: Status code --*/ ; EFI_STATUS EfiFreeRuntimeMemoryPool ( IN VOID *Buffer ) /*++ Routine Description: Free allocated pool Arguments: Buffer - Pool to be freed Returns: Status code --*/ ; EFI_STATUS EfiLocateProtocolHandleBuffers ( IN EFI_GUID *Protocol, IN OUT UINTN *NumberHandles, OUT EFI_HANDLE **Buffer ) /*++ Routine Description: Returns an array of handles that support the requested protocol in a buffer allocated from pool. Arguments: Protocol - Provides the protocol to search by. NumberHandles - The number of handles returned in Buffer. Buffer - A pointer to the buffer to return the requested array of handles that support Protocol. Returns: Status code --*/ ; EFI_STATUS EfiHandleProtocol ( IN EFI_HANDLE Handle, IN EFI_GUID *Protocol, OUT VOID **Interface ) /*++ Routine Description: Queries a handle to determine if it supports a specified protocol. Arguments: Handle - The handle being queried. Protocol - The published unique identifier of the protocol. Interface - Supplies the address where a pointer to the corresponding Protocol Interface is returned. NULL will be returned in *Interface if a structure is not associated with Protocol. Returns: Status code --*/ ; EFI_STATUS EfiInstallProtocolInterface ( IN OUT EFI_HANDLE *Handle, IN EFI_GUID *Protocol, IN EFI_INTERFACE_TYPE InterfaceType, IN VOID *Interface ) /*++ Routine Description: Installs a protocol interface on a device handle. If the handle does not exist, it is created and added to the list of handles in the system. Arguments: Handle - A pointer to the EFI_HANDLE on which the interface is to be installed. Protocol - The numeric ID of the protocol interface. InterfaceType - Indicates whether Interface is supplied in native form. Interface - A pointer to the protocol interface. Returns: Status code --*/ ; EFI_STATUS EfiReinstallProtocolInterface ( IN EFI_HANDLE SmmProtocolHandle, IN EFI_GUID *Protocol, IN VOID *OldInterface, IN VOID *NewInterface ) /*++ Routine Description: Reinstalls a protocol interface on a device handle. Arguments: SmmProtocolHandle - Handle on which the interface is to be reinstalled. Protocol - The numeric ID of the interface. OldInterface - A pointer to the old interface. NewInterface - A pointer to the new interface. Returns: Status code --*/ ; EFI_STATUS EfiLocateProtocolInterface ( EFI_GUID *Protocol, VOID *Registration, OPTIONAL VOID **Interface ) /*++ Routine Description: Returns the first protocol instance that matches the given protocol. Arguments: Protocol - Provides the protocol to search for. Registration - Optional registration key returned from RegisterProtocolNotify(). If Registration is NULL, then it is ignored. Interface - On return, a pointer to the first interface that matches Protocol and Registration. Returns: Status code --*/ ; EFI_STATUS UninstallProtocolInterface ( IN EFI_HANDLE SmmProtocolHandle, IN EFI_GUID *Protocol, IN VOID *Interface ) /*++ Routine Description: Removes a protocol interface from a device handle. Arguments: SmmProtocolHandle - The handle on which the interface was installed. Protocol - The numeric ID of the interface. Interface - A pointer to the interface. Returns: Status code --*/ ; EFI_STATUS EfiRegisterProtocolCallback ( IN EFI_EVENT_NOTIFY CallbackFunction, IN VOID *Context, IN EFI_GUID *ProtocolGuid, IN EFI_TPL NotifyTpl, OUT VOID **Registeration, OUT EFI_EVENT *Event ) /*++ Routine Description: Register a callback function to be signaled whenever an interface is installed for a specified protocol. Arguments: CallbackFunction - Call back function Context - Context of call back function ProtocolGuid - The numeric ID of the protocol for which the callback function is to be registered. NotifyTpl - Notify tpl of callback function Registeration - A pointer to a memory location to receive the registration value. Event - Event that is to be signaled whenever a protocol interface is registered for Protocol. Returns: Status code --*/ ; EFI_STATUS EfiSignalProtocolEvent ( EFI_EVENT Event ) /*++ Routine Description: Signals an event. Arguments: Event - The event to signal. Returns: Status code --*/ ; EFI_STATUS EfiInstallVendorConfigurationTable ( IN EFI_GUID *Guid, IN VOID *Table ) /*++ Routine Description: Adds, updates, or removes a configuration table entry from the EFI System Table. Arguments: Guid - A pointer to the GUID for the entry to add, update, or remove. Table - A pointer to the configuration table for the entry to add, update, or remove. May be NULL. Returns: Status code --*/ ; EFI_STATUS EfiGetVendorConfigurationTable ( IN EFI_GUID *Guid, OUT VOID **Table ) /*++ Routine Description: Return the EFI 1.0 System Tabl entry with TableGuid Arguments: Guid - Name of entry to return in the system table Table - Pointer in EFI system table associated with TableGuid Returns: EFI_SUCCESS - Table returned; EFI_NOT_FOUND - TableGuid not in EFI system table --*/ ; EFI_STATUS EfiInitializeUtilsRuntimeDriverLib ( IN EFI_HANDLE ImageHandle, IN EFI_SYSTEM_TABLE *SystemTable, IN EFI_EVENT_NOTIFY GoVirtualChildEvent ) /*++ Routine Description: Intialize runtime Driver Lib if it has not yet been initialized. Arguments: ImageHandle - The firmware allocated handle for the EFI image. SystemTable - A pointer to the EFI System Table. GoVirtualChildEvent - Caller can register a virtual notification event. Returns: EFI_STATUS always returns EFI_SUCCESS --*/ ; BOOLEAN EfiInManagementInterrupt ( VOID ) /*++ Routine Description: Indicate whether the caller is already in SMM or not. Arguments: None Returns: TRUE - In SMM FALSE - Not in SMM --*/ ; // // This MACRO initializes the RUNTIME invironment and optionally loads Image to SMM or Non-SMM space // based upon the presence of build flags EFI_LOAD_DRIVER_SMM and EFI_NO_LOAD_DRIVER_RT. // #define EFI_INITIALIZE_RUNTIME_DRIVER_LIB(ImageHandle, SystemTable, GoVirtualChildEvent, FilePath) \ mEfiLoadDriverSmm = EFI_LOAD_DRIVER_SMM; \ mEfiNoLoadDriverRt = EFI_NO_LOAD_DRIVER_RT; \ mFilePath = (EFI_DEVICE_PATH_PROTOCOL*) FilePath; \ EfiInitializeUtilsRuntimeDriverLib ((EFI_HANDLE) ImageHandle, (EFI_SYSTEM_TABLE*) SystemTable, (EFI_EVENT_NOTIFY) GoVirtualChildEvent); \ if (!EfiInManagementInterrupt()) { \ if (mEfiNoLoadDriverRt) { \ return EFI_SUCCESS; \ } \ } #endif