audk/EdkCompatibilityPkg/Foundation/Library/Dxe/Include/EfiMgmtModeRuntimeLib.h

430 lines
9.7 KiB
C

/*++
Copyright (c) 2004, Intel Corporation. All rights reserved.<BR>
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