diff options
Diffstat (limited to 'EDK/Foundation/Library/Dxe/Include/EfiMgmtModeRuntimeLib.h')
-rw-r--r-- | EDK/Foundation/Library/Dxe/Include/EfiMgmtModeRuntimeLib.h | 429 |
1 files changed, 429 insertions, 0 deletions
diff --git a/EDK/Foundation/Library/Dxe/Include/EfiMgmtModeRuntimeLib.h b/EDK/Foundation/Library/Dxe/Include/EfiMgmtModeRuntimeLib.h new file mode 100644 index 0000000..89fb72e --- /dev/null +++ b/EDK/Foundation/Library/Dxe/Include/EfiMgmtModeRuntimeLib.h @@ -0,0 +1,429 @@ +/*++ + +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 |