mirror of https://github.com/acidanthera/audk.git
219 lines
5.6 KiB
C
219 lines
5.6 KiB
C
/*++
|
|
|
|
Copyright (c) 2004 - 2011, 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:
|
|
|
|
EfiSmmDriverLib.h
|
|
|
|
Abstract:
|
|
|
|
Light weight lib to support EFI Smm drivers.
|
|
|
|
--*/
|
|
|
|
#ifndef _EFI_SMM_DRIVER_LIB_H_
|
|
#define _EFI_SMM_DRIVER_LIB_H_
|
|
|
|
#include "Tiano.h"
|
|
#include "GetImage.h"
|
|
#include "EfiCommonLib.h"
|
|
#include EFI_GUID_DEFINITION (EventLegacyBios)
|
|
#include EFI_GUID_DEFINITION (EventGroup)
|
|
#include EFI_PROTOCOL_DEFINITION (FirmwareVolume)
|
|
#include EFI_PROTOCOL_DEFINITION (FirmwareVolume2)
|
|
#include EFI_PROTOCOL_DEFINITION (SmmBase)
|
|
#include EFI_PROTOCOL_DEFINITION (SmmStatusCode)
|
|
//
|
|
// Driver Lib Globals.
|
|
//
|
|
extern EFI_BOOT_SERVICES *gBS;
|
|
extern EFI_SYSTEM_TABLE *gST;
|
|
extern EFI_RUNTIME_SERVICES *gRT;
|
|
extern EFI_SMM_BASE_PROTOCOL *gSMM;
|
|
extern EFI_SMM_STATUS_CODE_PROTOCOL *mSmmDebug;
|
|
extern UINTN gErrorLevel;
|
|
|
|
#define EfiCopyMem EfiCommonLibCopyMem
|
|
#define EfiSetMem EfiCommonLibSetMem
|
|
#define EfiZeroMem EfiCommonLibZeroMem
|
|
|
|
EFI_STATUS
|
|
EfiInitializeSmmDriverLib (
|
|
IN EFI_HANDLE ImageHandle,
|
|
IN EFI_SYSTEM_TABLE *SystemTable,
|
|
IN OUT BOOLEAN *InSmm
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Intialize Smm 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.
|
|
|
|
InSmm - If InSmm is NULL, it will not register Image to SMM.
|
|
If InSmm is not NULL, it will register Image to SMM and
|
|
return information on currently in SMM mode or not.
|
|
|
|
Returns:
|
|
|
|
EFI_STATUS always returns EFI_SUCCESS
|
|
|
|
--*/
|
|
;
|
|
|
|
VOID
|
|
EfiDebugAssert (
|
|
IN CHAR8 *FileName,
|
|
IN INTN LineNumber,
|
|
IN CHAR8 *Description
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Worker function for ASSERT (). If Error Logging hub is loaded log ASSERT
|
|
information. If Error Logging hub is not loaded DEADLOOP ().
|
|
|
|
Arguments:
|
|
|
|
FileName - File name of failing routine.
|
|
|
|
LineNumber - Line number of failing ASSERT().
|
|
|
|
Description - Description, usually the assertion,
|
|
|
|
Returns:
|
|
|
|
None
|
|
|
|
--*/
|
|
;
|
|
|
|
VOID
|
|
EfiDebugVPrint (
|
|
IN UINTN ErrorLevel,
|
|
IN CHAR8 *Format,
|
|
IN VA_LIST Marker
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Worker function for DEBUG(). If Error Logging hub is loaded log ASSERT
|
|
information. If Error Logging hub is not loaded do nothing.
|
|
|
|
Arguments:
|
|
|
|
ErrorLevel - If error level is set do the debug print.
|
|
|
|
Format - String to use for the print, followed by Print arguments.
|
|
|
|
Marker - VarArgs
|
|
|
|
Returns:
|
|
|
|
None
|
|
|
|
--*/
|
|
;
|
|
|
|
VOID
|
|
EfiDebugPrint (
|
|
IN UINTN ErrorLevel,
|
|
IN CHAR8 *Format,
|
|
...
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
|
|
Worker function for DEBUG(). If Error Logging hub is loaded log ASSERT
|
|
information. If Error Logging hub is not loaded do nothing.
|
|
|
|
Arguments:
|
|
|
|
ErrorLevel - If error level is set do the debug print.
|
|
|
|
Format - String to use for the print, followed by Print arguments.
|
|
|
|
... - VAR args for Format
|
|
|
|
Returns:
|
|
|
|
None
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
SmmEfiCreateEventLegacyBoot (
|
|
IN EFI_TPL NotifyTpl,
|
|
IN EFI_EVENT_NOTIFY NotifyFunction,
|
|
IN VOID *NotifyContext,
|
|
OUT EFI_EVENT *LegacyBootEvent
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Create a Legacy Boot Event.
|
|
Tiano extended the CreateEvent Type enum to add a legacy boot event type.
|
|
This was bad as Tiano did not own the enum. In UEFI 2.0 CreateEventEx was
|
|
added and now it's possible to not voilate the UEFI specification by
|
|
declaring a GUID for the legacy boot event class. This library supports
|
|
the EFI 1.10 form and UEFI 2.0 form and allows common code to work both ways.
|
|
|
|
Arguments:
|
|
LegacyBootEvent Returns the EFI event returned from gBS->CreateEvent(Ex)
|
|
|
|
Returns:
|
|
EFI_SUCCESS Event was created.
|
|
Other Event was not created.
|
|
|
|
--*/
|
|
;
|
|
|
|
EFI_STATUS
|
|
EFIAPI
|
|
SmmEfiCreateEventReadyToBoot (
|
|
IN EFI_TPL NotifyTpl,
|
|
IN EFI_EVENT_NOTIFY NotifyFunction,
|
|
IN VOID *NotifyContext,
|
|
OUT EFI_EVENT *ReadyToBootEvent
|
|
)
|
|
/*++
|
|
|
|
Routine Description:
|
|
Create a Read to Boot Event.
|
|
|
|
Tiano extended the CreateEvent Type enum to add a ready to boot event type.
|
|
This was bad as Tiano did not own the enum. In UEFI 2.0 CreateEventEx was
|
|
added and now it's possible to not voilate the UEFI specification and use
|
|
the ready to boot event class defined in UEFI 2.0. This library supports
|
|
the EFI 1.10 form and UEFI 2.0 form and allows common code to work both ways.
|
|
|
|
Arguments:
|
|
ReadyToBootEvent Returns the EFI event returned from gBS->CreateEvent(Ex)
|
|
|
|
Return:
|
|
EFI_SUCCESS - Event was created.
|
|
Other - Event was not created.
|
|
|
|
--*/
|
|
;
|
|
|
|
#endif
|