Add in the 1st version of ECP.
git-svn-id: https://edk2.svn.sourceforge.net/svnroot/edk2/trunk/edk2@2832 6f19259b-4bc3-4df7-8a09-765794883524
This commit is contained in:
@@ -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
|
Reference in New Issue
Block a user