/*++ | |
Copyright (c) 2004 - 2007, 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: | |
EfiApi.h | |
Abstract: | |
EFI intrinsic definitions. This includes all EFI 1.0 boot and runtime | |
services APIs. | |
Drivers and applications are passed in a pointer to the EFI system table. | |
The EFI system table contains pointers to the boot and runtime services | |
tables. | |
--*/ | |
#ifndef _EFI_API_H_ | |
#define _EFI_API_H_ | |
#include EFI_PROTOCOL_DEFINITION (DevicePath) | |
#include EFI_PROTOCOL_DEFINITION (SimpleTextIn) | |
#include EFI_PROTOCOL_DEFINITION (SimpleTextOut) | |
#if (EFI_SPECIFICATION_VERSION >= 0x00020000) | |
#include "EfiCapsule.h" | |
#else | |
#include "EfiStatusCode.h" | |
#endif | |
// | |
// Declare forward referenced data structures | |
// | |
EFI_FORWARD_DECLARATION (EFI_SYSTEM_TABLE); | |
// | |
// EFI Memory | |
// | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_ALLOCATE_PAGES) ( | |
IN EFI_ALLOCATE_TYPE Type, | |
IN EFI_MEMORY_TYPE MemoryType, | |
IN UINTN NoPages, | |
OUT EFI_PHYSICAL_ADDRESS * Memory | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_FREE_PAGES) ( | |
IN EFI_PHYSICAL_ADDRESS Memory, | |
IN UINTN NoPages | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_GET_MEMORY_MAP) ( | |
IN OUT UINTN *MemoryMapSize, | |
IN OUT EFI_MEMORY_DESCRIPTOR * MemoryMap, | |
OUT UINTN *MapKey, | |
OUT UINTN *DescriptorSize, | |
OUT UINT32 *DescriptorVersion | |
); | |
#define NextMemoryDescriptor(_Ptr, _Size) ((EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) (_Ptr)) + (_Size))) | |
#define NEXT_MEMORY_DESCRIPTOR(_Ptr, _Size) NextMemoryDescriptor (_Ptr, _Size) | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_ALLOCATE_POOL) ( | |
IN EFI_MEMORY_TYPE PoolType, | |
IN UINTN Size, | |
OUT VOID **Buffer | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_FREE_POOL) ( | |
IN VOID *Buffer | |
); | |
typedef | |
EFI_RUNTIMESERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) ( | |
IN UINTN MemoryMapSize, | |
IN UINTN DescriptorSize, | |
IN UINT32 DescriptorVersion, | |
IN EFI_MEMORY_DESCRIPTOR * VirtualMap | |
); | |
typedef | |
EFI_BOOTSERVICE11 | |
EFI_STATUS | |
(EFIAPI *EFI_CONNECT_CONTROLLER) ( | |
IN EFI_HANDLE ControllerHandle, | |
IN EFI_HANDLE * DriverImageHandle OPTIONAL, | |
IN EFI_DEVICE_PATH_PROTOCOL * RemainingDevicePath OPTIONAL, | |
IN BOOLEAN Recursive | |
); | |
typedef | |
EFI_BOOTSERVICE11 | |
EFI_STATUS | |
(EFIAPI *EFI_DISCONNECT_CONTROLLER) ( | |
IN EFI_HANDLE ControllerHandle, | |
IN EFI_HANDLE DriverImageHandle, OPTIONAL | |
IN EFI_HANDLE ChildHandle OPTIONAL | |
); | |
// | |
// ConvertPointer DebugDisposition type. | |
// | |
#define EFI_OPTIONAL_POINTER 0x00000001 | |
typedef | |
EFI_RUNTIMESERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_CONVERT_POINTER) ( | |
IN UINTN DebugDisposition, | |
IN OUT VOID **Address | |
); | |
// | |
// EFI Event Types | |
// | |
#define EFI_EVENT_TIMER 0x80000000 | |
#define EFI_EVENT_RUNTIME 0x40000000 | |
#define EFI_EVENT_RUNTIME_CONTEXT 0x20000000 | |
#define EFI_EVENT_NOTIFY_WAIT 0x00000100 | |
#define EFI_EVENT_NOTIFY_SIGNAL 0x00000200 | |
#define EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201 | |
#define EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202 | |
#define EFI_EVENT_EFI_SIGNAL_MASK 0x000000FF | |
#define EFI_EVENT_EFI_SIGNAL_MAX 4 | |
typedef | |
VOID | |
(EFIAPI *EFI_EVENT_NOTIFY) ( | |
IN EFI_EVENT Event, | |
IN VOID *Context | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_CREATE_EVENT) ( | |
IN UINT32 Type, | |
IN EFI_TPL NotifyTpl, | |
IN EFI_EVENT_NOTIFY NotifyFunction, | |
IN VOID *NotifyContext, | |
OUT EFI_EVENT * Event | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_CREATE_EVENT_EX) ( | |
IN UINT32 Type, | |
IN EFI_TPL NotifyTpl OPTIONAL, | |
IN EFI_EVENT_NOTIFY NotifyFunction OPTIONAL, | |
IN CONST VOID *NotifyContext OPTIONAL, | |
IN CONST EFI_GUID *EventGroup OPTIONAL, | |
OUT EFI_EVENT *Event | |
); | |
typedef enum { | |
TimerCancel, | |
TimerPeriodic, | |
TimerRelative, | |
TimerTypeMax | |
} EFI_TIMER_DELAY; | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_SET_TIMER) ( | |
IN EFI_EVENT Event, | |
IN EFI_TIMER_DELAY Type, | |
IN UINT64 TriggerTime | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_SIGNAL_EVENT) ( | |
IN EFI_EVENT Event | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_WAIT_FOR_EVENT) ( | |
IN UINTN NumberOfEvents, | |
IN EFI_EVENT * Event, | |
OUT UINTN *Index | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_CLOSE_EVENT) ( | |
IN EFI_EVENT Event | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_CHECK_EVENT) ( | |
IN EFI_EVENT Event | |
); | |
// | |
// Task priority level | |
// | |
#define EFI_TPL_APPLICATION 4 | |
#define EFI_TPL_CALLBACK 8 | |
#define EFI_TPL_NOTIFY 16 | |
#define EFI_TPL_HIGH_LEVEL 31 | |
typedef | |
EFI_BOOTSERVICE | |
EFI_TPL | |
(EFIAPI *EFI_RAISE_TPL) ( | |
IN EFI_TPL NewTpl | |
); | |
typedef | |
EFI_BOOTSERVICE | |
VOID | |
(EFIAPI *EFI_RESTORE_TPL) ( | |
IN EFI_TPL OldTpl | |
); | |
// | |
// Variable attributes | |
// | |
#define EFI_VARIABLE_NON_VOLATILE 0x00000001 | |
#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002 | |
#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004 | |
#if (EFI_SPECIFICATION_VERSION >= 0x0002000A) | |
#define EFI_VARIABLE_HARDWARE_ERROR_RECORD 0x00000008 | |
#endif | |
typedef | |
EFI_RUNTIMESERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_GET_VARIABLE) ( | |
IN CHAR16 *VariableName, | |
IN EFI_GUID * VendorGuid, | |
OUT UINT32 *Attributes OPTIONAL, | |
IN OUT UINTN *DataSize, | |
OUT VOID *Data | |
); | |
typedef | |
EFI_RUNTIMESERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) ( | |
IN OUT UINTN *VariableNameSize, | |
IN OUT CHAR16 *VariableName, | |
IN OUT EFI_GUID * VendorGuid | |
); | |
typedef | |
EFI_RUNTIMESERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_SET_VARIABLE) ( | |
IN CHAR16 *VariableName, | |
IN EFI_GUID * VendorGuid, | |
IN UINT32 Attributes, | |
IN UINTN DataSize, | |
IN VOID *Data | |
); | |
// | |
// EFI Time | |
// | |
typedef struct { | |
UINT32 Resolution; | |
UINT32 Accuracy; | |
BOOLEAN SetsToZero; | |
} EFI_TIME_CAPABILITIES; | |
typedef | |
EFI_RUNTIMESERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_GET_TIME) ( | |
OUT EFI_TIME * Time, | |
OUT EFI_TIME_CAPABILITIES * Capabilities OPTIONAL | |
); | |
typedef | |
EFI_RUNTIMESERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_SET_TIME) ( | |
IN EFI_TIME * Time | |
); | |
typedef | |
EFI_RUNTIMESERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_GET_WAKEUP_TIME) ( | |
OUT BOOLEAN *Enabled, | |
OUT BOOLEAN *Pending, | |
OUT EFI_TIME * Time | |
); | |
typedef | |
EFI_RUNTIMESERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_SET_WAKEUP_TIME) ( | |
IN BOOLEAN Enable, | |
IN EFI_TIME * Time OPTIONAL | |
); | |
// | |
// Image Entry prototype | |
// | |
typedef | |
EFI_STATUS | |
(EFIAPI *EFI_IMAGE_ENTRY_POINT) ( | |
IN EFI_HANDLE ImageHandle, | |
IN EFI_SYSTEM_TABLE * SystemTable | |
); | |
// | |
// Image functions | |
// | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_IMAGE_LOAD) ( | |
IN BOOLEAN BootPolicy, | |
IN EFI_HANDLE ParentImageHandle, | |
IN EFI_DEVICE_PATH_PROTOCOL * FilePath, | |
IN VOID *SourceBuffer OPTIONAL, | |
IN UINTN SourceSize, | |
OUT EFI_HANDLE * ImageHandle | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_IMAGE_START) ( | |
IN EFI_HANDLE ImageHandle, | |
OUT UINTN *ExitDataSize, | |
OUT CHAR16 **ExitData OPTIONAL | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_EXIT) ( | |
IN EFI_HANDLE ImageHandle, | |
IN EFI_STATUS ExitStatus, | |
IN UINTN ExitDataSize, | |
IN CHAR16 *ExitData OPTIONAL | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_IMAGE_UNLOAD) ( | |
IN EFI_HANDLE ImageHandle | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_EXIT_BOOT_SERVICES) ( | |
IN EFI_HANDLE ImageHandle, | |
IN UINTN MapKey | |
); | |
// | |
// Misc | |
// | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_STALL) ( | |
IN UINTN Microseconds | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_SET_WATCHDOG_TIMER) ( | |
IN UINTN Timeout, | |
IN UINT64 WatchdogCode, | |
IN UINTN DataSize, | |
IN CHAR16 *WatchdogData OPTIONAL | |
); | |
typedef enum { | |
EfiResetCold, | |
EfiResetWarm, | |
EfiResetShutdown | |
#if ((TIANO_RELEASE_VERSION != 0) && (EFI_SPECIFICATION_VERSION < 0x00020000)) | |
, EfiResetUpdate | |
#endif | |
} EFI_RESET_TYPE; | |
typedef | |
EFI_RUNTIMESERVICE | |
VOID | |
(EFIAPI *EFI_RESET_SYSTEM) ( | |
IN EFI_RESET_TYPE ResetType, | |
IN EFI_STATUS ResetStatus, | |
IN UINTN DataSize, | |
IN CHAR16 *ResetData OPTIONAL | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) ( | |
OUT UINT64 *Count | |
); | |
typedef | |
EFI_RUNTIMESERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) ( | |
OUT UINT32 *HighCount | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_CALCULATE_CRC32) ( | |
IN VOID *Data, | |
IN UINTN DataSize, | |
OUT UINT32 *Crc32 | |
); | |
typedef | |
EFI_BOOTSERVICE | |
VOID | |
(EFIAPI *EFI_COPY_MEM) ( | |
IN VOID *Destination, | |
IN VOID *Source, | |
IN UINTN Length | |
); | |
typedef | |
EFI_BOOTSERVICE | |
VOID | |
(EFIAPI *EFI_SET_MEM) ( | |
IN VOID *Buffer, | |
IN UINTN Size, | |
IN UINT8 Value | |
); | |
// | |
// Protocol handler functions | |
// | |
typedef enum { | |
EFI_NATIVE_INTERFACE | |
} EFI_INTERFACE_TYPE; | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) ( | |
IN OUT EFI_HANDLE * Handle, | |
IN EFI_GUID * Protocol, | |
IN EFI_INTERFACE_TYPE InterfaceType, | |
IN VOID *Interface | |
); | |
typedef | |
EFI_BOOTSERVICE11 | |
EFI_STATUS | |
(EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( | |
IN OUT EFI_HANDLE * Handle, | |
... | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) ( | |
IN EFI_HANDLE Handle, | |
IN EFI_GUID * Protocol, | |
IN VOID *OldInterface, | |
IN VOID *NewInterface | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) ( | |
IN EFI_HANDLE Handle, | |
IN EFI_GUID * Protocol, | |
IN VOID *Interface | |
); | |
typedef | |
EFI_BOOTSERVICE11 | |
EFI_STATUS | |
(EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( | |
IN EFI_HANDLE Handle, | |
... | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_HANDLE_PROTOCOL) ( | |
IN EFI_HANDLE Handle, | |
IN EFI_GUID * Protocol, | |
OUT VOID **Interface | |
); | |
#define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 | |
#define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 | |
#define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 | |
#define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 | |
#define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 | |
#define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 | |
// | |
// /////////////////////////////////////////////////////////////////////////////////////////////// | |
// OpenProtocol() Attribute Values | |
///////////////////////////////////////////////////////////////////////////////////////////////// | |
// BY_HANDLE_PROTOCOL - Used by EFI 1.0 Drivers and Applications | |
// May not actually add an elemnt to the open list in a production build | |
// | |
// GET_PROTOCOL - Used by EFI 1.1 Drivers to get a protocol interface | |
// May not actually add an elemnt to the open list in a production build | |
// | |
// TEST_PROTOCOL - Used by EFI 1.1 Drivers to test for the existence of a protocol interface | |
// The interface is not returned, and it is an optional parameter tham may be NULL. | |
// May not actually add an elemnt to the open list in a production build | |
// | |
// BY_DRIVER - Used by EFI 1.1 Drivers that are able to share a protocol with other | |
// agents other than its children. A driver is always able to share | |
// a protocol with its children, since the driver is in control of the | |
// parent controller's and the child controller's use of the protocol. | |
// | |
// BY_DRIVER | EXCLUSIVE - Used by EFI 1.1 Drivers that will not share a protocol with any other | |
// agents except its children. A driver is always able to share | |
// a protocol with its children, since the driver is in control of the | |
// parent controller's and the child controller's use of the protocol. | |
// This attribute will force all other drivers to disconnect from the protocol | |
// before this driver attaches. When this driver closes the handle, the other | |
// drivers will reconnect to the protocol. | |
// | |
// | |
// BY_CHILD_CONTROLLER - Used by EFI 1.1 Driver to show that a protocol is consumed by a child | |
// of the driver. This is information used by DisconnectController() to | |
// determine the list of children that a protocol has. It has | |
// no affect on the OpenProtocol()/ClosePrototocol() behavior. | |
// | |
// EXCLUSIVE - Used by EFI 1.1 Applications to gain exclusive access to a protocol. | |
// All drivers are disconnected from the handle while the application has | |
// the handle open. These drivers are reconnected when the application | |
// closes the handle. | |
// | |
///////////////////////////////////////////////////////////////////////////////////////////////// | |
// OpenProtocol() behavior based on Attribute values | |
///////////////////////////////////////////////////////////////////////////////////////////////// | |
// | |
// OpenProtocol (Handle, Protocol, Interface, ImageHandle, DeviceHandle, Attributes) | |
// * EFI_UNSUPPORTED if Protocol does not exist on Handle | |
// * EFI_INVALID_PARAMETER if Handle is not a valid handle. | |
// * EFI_INVALID_PARAMETER if Protocol is NULL or not a valid GUID | |
// * EFI_INVALID_PARAMETER if Interface is NULL | |
// * EFI_INVALID_PARAMETER if Attributes is not one of the following values: | |
// BY_HANDLE_PROTOCOL | |
// GET_PROTOCOL | |
// TEST_PROTOCOL | |
// BY_CHILD_CONTROLLER | |
// BY_DRIVER | |
// BY_DRIVER | EXCLUSIVE | |
// EXCLUSIVE | |
// * EFI_INVALID_PARAMETER if Attributes BY_CHILD_CONTROLLER and ImageHandle is not a valid handle | |
// * EFI_INVALID_PARAMETER if Attributes BY_CHILD_CONTROLLER and DeviceHandle is not a valid handle | |
// * EFI_INVALID_PARAMETER if Attributes BY_CHILD_CONTROLLER and Handle == DeviceHandle | |
// * EFI_INVALID_PARAMETER if Attributes BY_DRIVER and ImageHandle is not a valid handle | |
// * EFI_INVALID_PARAMETER if Attributes BY_DRIVER and DeviceHandle is not a valid handle | |
// * EFI_INVALID_PARAMETER if Attributes BY_DRIVER | EXCLUSIVE and ImageHandle is not a valid handle | |
// * EFI_INVALID_PARAMETER if Attributes BY_DRIVER | EXCLUSIVE and DeviceHandle is not a valid handle | |
// * EFI_INVALID_PARAMETER if Attributes EXCLUSIVE and ImageHandle is not a valid handle | |
// | |
// OpenProtocol() Attributes = BY_HANDLE_PROTOCOL, GET_PROTOCOL, TEST_PROTOCOL, BY_CHILD_CONTROLLER | |
// * EFI_SUCCESS if Protocol exists on the Handle | |
// | |
// OpenProtocol() Attributes = BY_DRIVER | |
// * EFI_SUCCESS if there are no items in the Open List for (Handle, Protocol) | |
// * EFI_SUCCESS if there are only items in the Open List for (Handle, Protocol) | |
// that have the one of the following Attributes | |
// BY_HANDLE_PROTOCOL | |
// GET_PROTOCOL | |
// TEST_PROTOCOL | |
// BY_CHILD_CONTROLLER | |
// * EFI_ACCESS_DENIED if there are any items in the Open List for (Handle, Protocol) | |
// that have the one of the following Attributes | |
// BY_DRIVER | |
// AND ImageHandle != OpenListItem.IH | |
// * EFI_ALREADY_STARTED if there are any items in the Open List for (Handle, Protocol) | |
// that have the one of the following Attributes | |
// BY_DRIVER | |
// AND ImageHandle == OpenListItem.IH | |
// * EFI_ACCESS_DENIED if there are any items in the Open List for (Handle, Protocol) | |
// that have the one of the following Attributes | |
// BY_DRIVER | EXCLUSIVE | |
// EXCLUSIVE | |
// | |
// OpenProtocol() Attributes = BY_DRIVER | EXCLUSIVE | |
// * EFI_SUCCESS if there are no items in the Open List for (Handle, Protocol) | |
// * EFI_SUCCESS if there are only items in the Open List for (Handle, Protocol) | |
// that have the one of the following Attributes | |
// BY_HANDLE_PROTOCOL | |
// GET_PROTOCOL | |
// TEST_PROTOCOL | |
// BY_CHILD_CONTROLLER | |
// * EFI_SUCCESS if there are any items in the Open List for (Handle, Protocol) | |
// that have the one of the following Attributes | |
// BY_DRIVER | |
// AND the driver is removed by DisconnectController(IH,DH) | |
// * EFI_ALREADY_STARTED if there are any items in the Open List for (Handle, Protocol) | |
// that have the one of the following Attributes | |
// BY_DRIVER | EXCLUSIVE | |
// AND ImageHandle == OpenListItem.IH | |
// * EFI_ACCESS_DENIED if there are any items in the Open List for (Handle, Protocol) | |
// that have the one of the following Attributes | |
// BY_DRIVER | |
// AND the driver can not be removed by DisconnectController(IH,DH) | |
// * EFI_ACCESS_DENIED if there are any items in the Open List for (Handle, Protocol) | |
// that have the one of the following Attributes | |
// BY_DRIVER | EXCLUSIVE | |
// EXCLUSIVE | |
// | |
// OpenProtocol() Attributes = EXCLUSIVE | |
// * EFI_SUCCESS if there are no items in the Open List for (Handle, Protocol) | |
// * EFI_SUCCESS if there are only items in the Open List for (Handle, Protocol) | |
// that have the one of the following Attributes | |
// BY_HANDLE_PROTOCOL | |
// GET_PROTOCOL | |
// TEST_PROTOCOL | |
// BY_CHILD_CONTROLLER | |
// * EFI_SUCCESS if there are any items in the Open List for (Handle, Protocol) | |
// that have the one of the following Attributes | |
// BY_DRIVER | |
// AND the driver is removed by DisconnectController(IH,DH) | |
// * EFI_ACCESS_DENIED if there are any items in the Open List for (Handle, Protocol) | |
// that have the one of the following Attributes | |
// BY_DRIVER | |
// AND the driver can not be removed by DisconnectController(IH,DH) | |
// * EFI_ACCESS_DENIED if there are any items in the Open List for (Handle, Protocol) | |
// that have the one of the following Attributes | |
// BY_DRIVER | EXCLUSIVE | |
// EXCLUSIVE | |
// | |
///////////////////////////////////////////////////////////////////////////////////////////////// | |
// CloseProtocol() Behavior based on the Attributes of the item being closed and the items | |
// remaining on the Open List | |
///////////////////////////////////////////////////////////////////////////////////////////////// | |
// CloseProtocol(Handle, Protocol, ImageHandle, DeviceHandle) | |
// CloseProtocol() Attributes of item = BY_HANDLE_PROTOCOL, | |
// GET_PROTOCOL | |
// TEST_PROTOCOL | |
// BY_CHILD_CONTROLLER, | |
// BY_DRIVER | |
// BY_DRIVER | EXCLUSIVE | |
// EXCLUSIVE | |
// EFI_NOT_FOUND if Protocol does not exist on Handle | |
// EFI_INVALID_PARAMETER if Handle is not a valid handle. | |
// EFI_INVALID_PARAMETER if Protocol is NULL or not a valid GUID | |
// EFI_INVALID_PARAMETER if ImageHandle is not a valid handle | |
// EFI_INVALID_PARAMETER if DeviceHandle is not a valid handle | |
// EFI_NOT_FOUND if (ImageHandle, DeviceHandle) is not present in the Open List | |
// for (Handle, Protocol) | |
// EFI_ACCESS_DENIED if (ImageHandle, DeviceHandle) is present in the Open List | |
// for (Handle, Protocol), but the item can not be removed. | |
// EFI_SUCCESS if (ImageHandle, DeviceHandle) is present in the Open List | |
// for (Handle, Protocol), and the item can be removed. | |
// | |
///////////////////////////////////////////////////////////////////////////////////////////////// | |
// UninstallProtocolInterface() behavior | |
///////////////////////////////////////////////////////////////////////////////////////////////// | |
// | |
// UninstallProtocolInterface (Handle, Protocol, Interface) | |
// | |
// EFI_INVALID_PARAMETER if Handle is not a valid handle. | |
// EFI_INVALID_PARAMETER if Protocol is not a vlaid GUID | |
// EFI_NOT_FOUND if Handle doe not support Protocol | |
// EFI_NOT_FOUND if the interface for (Handle, Protocol) does not match Interface | |
// EFI_ACCESS_DENIED if the list of Open Items for (Handle, Protocol) can not be removed | |
// EFI_SUCCESS if the list of Open Items is empty, and Protocol is removed from Handle | |
// | |
// Algorithm to remove Open Item List: | |
// | |
// Loop through all Open Item List entries | |
// if (OpenItem.Attributes & BY_DRIVER) then | |
// DisconnectController (OpenItem.IH, OpenItem.DH) | |
// end if | |
// end loop | |
// Loop through all Open Item List entries | |
// if (OpenItem.Attributes & BY_HANDLE_PROTOCOL or GET_PROTOCOL or TEST_PROTOCOL) then | |
// CloseProtocol (Handle, Protocol, OpenItem.IH, OpenItem.DH) | |
// end if | |
// end loop | |
// if Open Item List is empty then remove Protocol from Handle and return EFI_SUCCESS | |
// if Open Item List is not empty then return EFI_ACCESS_DENIED | |
// | |
///////////////////////////////////////////////////////////////////////////////////////////////// | |
typedef | |
EFI_BOOTSERVICE11 | |
EFI_STATUS | |
(EFIAPI *EFI_OPEN_PROTOCOL) ( | |
IN EFI_HANDLE Handle, | |
IN EFI_GUID * Protocol, | |
OUT VOID **Interface, | |
IN EFI_HANDLE ImageHandle, | |
IN EFI_HANDLE ControllerHandle, OPTIONAL | |
IN UINT32 Attributes | |
); | |
typedef | |
EFI_BOOTSERVICE11 | |
EFI_STATUS | |
(EFIAPI *EFI_CLOSE_PROTOCOL) ( | |
IN EFI_HANDLE Handle, | |
IN EFI_GUID * Protocol, | |
IN EFI_HANDLE ImageHandle, | |
IN EFI_HANDLE DeviceHandle | |
); | |
typedef struct { | |
EFI_HANDLE AgentHandle; | |
EFI_HANDLE ControllerHandle; | |
UINT32 Attributes; | |
UINT32 OpenCount; | |
} EFI_OPEN_PROTOCOL_INFORMATION_ENTRY; | |
typedef | |
EFI_BOOTSERVICE11 | |
EFI_STATUS | |
(EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION) ( | |
IN EFI_HANDLE UserHandle, | |
IN EFI_GUID * Protocol, | |
IN EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer, | |
OUT UINTN *EntryCount | |
); | |
typedef | |
EFI_BOOTSERVICE11 | |
EFI_STATUS | |
(EFIAPI *EFI_PROTOCOLS_PER_HANDLE) ( | |
IN EFI_HANDLE UserHandle, | |
OUT EFI_GUID ***ProtocolBuffer, | |
OUT UINTN *ProtocolBufferCount | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) ( | |
IN EFI_GUID * Protocol, | |
IN EFI_EVENT Event, | |
OUT VOID **Registration | |
); | |
typedef enum { | |
AllHandles, | |
ByRegisterNotify, | |
ByProtocol | |
} EFI_LOCATE_SEARCH_TYPE; | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_LOCATE_HANDLE) ( | |
IN EFI_LOCATE_SEARCH_TYPE SearchType, | |
IN EFI_GUID * Protocol OPTIONAL, | |
IN VOID *SearchKey OPTIONAL, | |
IN OUT UINTN *BufferSize, | |
OUT EFI_HANDLE * Buffer | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_LOCATE_DEVICE_PATH) ( | |
IN EFI_GUID * Protocol, | |
IN OUT EFI_DEVICE_PATH_PROTOCOL **DevicePath, | |
OUT EFI_HANDLE * Device | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) ( | |
IN EFI_GUID * Guid, | |
IN VOID *Table | |
); | |
typedef | |
EFI_BOOTSERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_RESERVED_SERVICE) ( | |
VOID | |
); | |
typedef | |
EFI_BOOTSERVICE11 | |
EFI_STATUS | |
(EFIAPI *EFI_LOCATE_HANDLE_BUFFER) ( | |
IN EFI_LOCATE_SEARCH_TYPE SearchType, | |
IN EFI_GUID * Protocol OPTIONAL, | |
IN VOID *SearchKey OPTIONAL, | |
IN OUT UINTN *NumberHandles, | |
OUT EFI_HANDLE **Buffer | |
); | |
typedef | |
EFI_BOOTSERVICE11 | |
EFI_STATUS | |
(EFIAPI *EFI_LOCATE_PROTOCOL) ( | |
EFI_GUID * Protocol, | |
VOID *Registration, OPTIONAL | |
VOID **Interface | |
); | |
// | |
// Definition of Status Code extended data header | |
// | |
// HeaderSize The size of the architecture. This is specified to enable | |
// the future expansion | |
// | |
// Size The size of the data in bytes. This does not include the size | |
// of the header structure. | |
// | |
// Type A GUID defining the type of the data | |
// | |
// | |
#if ((TIANO_RELEASE_VERSION != 0) && (EFI_SPECIFICATION_VERSION < 0x00020000)) | |
typedef | |
EFI_RUNTIMESERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_REPORT_STATUS_CODE) ( | |
IN EFI_STATUS_CODE_TYPE Type, | |
IN EFI_STATUS_CODE_VALUE Value, | |
IN UINT32 Instance, | |
IN EFI_GUID * CallerId OPTIONAL, | |
IN EFI_STATUS_CODE_DATA * Data OPTIONAL | |
); | |
#endif | |
#if (EFI_SPECIFICATION_VERSION >= 0x00020000) | |
typedef | |
EFI_RUNTIMESERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_UPDATE_CAPSULE) ( | |
IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, | |
IN UINTN CapsuleCount, | |
IN EFI_PHYSICAL_ADDRESS ScatterGatherList OPTIONAL | |
); | |
typedef | |
EFI_RUNTIMESERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_QUERY_CAPSULE_CAPABILITIES) ( | |
IN EFI_CAPSULE_HEADER **CapsuleHeaderArray, | |
IN UINTN CapsuleCount, | |
OUT UINT64 *MaximumCapsuleSize, | |
OUT EFI_RESET_TYPE *ResetType | |
); | |
typedef | |
EFI_RUNTIMESERVICE | |
EFI_STATUS | |
(EFIAPI *EFI_QUERY_VARIABLE_INFO) ( | |
IN UINT32 Attributes, | |
OUT UINT64 *MaximumVariableStorageSize, | |
OUT UINT64 *RemainingVariableStorageSize, | |
OUT UINT64 *MaximumVariableSize | |
); | |
#endif | |
// | |
// EFI Runtime Services Table | |
// | |
#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552ULL | |
#define EFI_RUNTIME_SERVICES_REVISION EFI_SPECIFICATION_VERSION | |
typedef struct { | |
EFI_TABLE_HEADER Hdr; | |
// | |
// Time services | |
// | |
EFI_GET_TIME GetTime; | |
EFI_SET_TIME SetTime; | |
EFI_GET_WAKEUP_TIME GetWakeupTime; | |
EFI_SET_WAKEUP_TIME SetWakeupTime; | |
// | |
// Virtual memory services | |
// | |
EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; | |
EFI_CONVERT_POINTER ConvertPointer; | |
// | |
// Variable services | |
// | |
EFI_GET_VARIABLE GetVariable; | |
EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; | |
EFI_SET_VARIABLE SetVariable; | |
// | |
// Misc | |
// | |
EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount; | |
EFI_RESET_SYSTEM ResetSystem; | |
#if (EFI_SPECIFICATION_VERSION >= 0x00020000) | |
// | |
// New Boot Service added by UEFI 2.0 | |
// | |
EFI_UPDATE_CAPSULE UpdateCapsule; | |
EFI_QUERY_CAPSULE_CAPABILITIES QueryCapsuleCapabilities; | |
EFI_QUERY_VARIABLE_INFO QueryVariableInfo; | |
#elif (TIANO_RELEASE_VERSION != 0) | |
// | |
// Tiano extension to EFI 1.10 runtime table | |
// It was moved to a protocol to not conflict with UEFI 2.0 | |
// If Tiano is disabled, this item is not enabled for EFI1.10 | |
// | |
EFI_REPORT_STATUS_CODE ReportStatusCode; | |
#endif | |
} EFI_RUNTIME_SERVICES; | |
// | |
// EFI Boot Services Table | |
// | |
#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42ULL | |
#define EFI_BOOT_SERVICES_REVISION EFI_SPECIFICATION_VERSION | |
typedef struct { | |
EFI_TABLE_HEADER Hdr; | |
// | |
// Task priority functions | |
// | |
EFI_RAISE_TPL RaiseTPL; | |
EFI_RESTORE_TPL RestoreTPL; | |
// | |
// Memory functions | |
// | |
EFI_ALLOCATE_PAGES AllocatePages; | |
EFI_FREE_PAGES FreePages; | |
EFI_GET_MEMORY_MAP GetMemoryMap; | |
EFI_ALLOCATE_POOL AllocatePool; | |
EFI_FREE_POOL FreePool; | |
// | |
// Event & timer functions | |
// | |
EFI_CREATE_EVENT CreateEvent; | |
EFI_SET_TIMER SetTimer; | |
EFI_WAIT_FOR_EVENT WaitForEvent; | |
EFI_SIGNAL_EVENT SignalEvent; | |
EFI_CLOSE_EVENT CloseEvent; | |
EFI_CHECK_EVENT CheckEvent; | |
// | |
// Protocol handler functions | |
// | |
EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; | |
EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; | |
EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; | |
EFI_HANDLE_PROTOCOL HandleProtocol; | |
VOID *Reserved; | |
EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; | |
EFI_LOCATE_HANDLE LocateHandle; | |
EFI_LOCATE_DEVICE_PATH LocateDevicePath; | |
EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; | |
// | |
// Image functions | |
// | |
EFI_IMAGE_LOAD LoadImage; | |
EFI_IMAGE_START StartImage; | |
EFI_EXIT Exit; | |
EFI_IMAGE_UNLOAD UnloadImage; | |
EFI_EXIT_BOOT_SERVICES ExitBootServices; | |
// | |
// Misc functions | |
// | |
EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; | |
EFI_STALL Stall; | |
EFI_SET_WATCHDOG_TIMER SetWatchdogTimer; | |
// | |
// //////////////////////////////////////////////////// | |
// EFI 1.1 Services | |
////////////////////////////////////////////////////// | |
// | |
// DriverSupport Services | |
// | |
EFI_CONNECT_CONTROLLER ConnectController; | |
EFI_DISCONNECT_CONTROLLER DisconnectController; | |
// | |
// Added Open and Close protocol for the new driver model | |
// | |
EFI_OPEN_PROTOCOL OpenProtocol; | |
EFI_CLOSE_PROTOCOL CloseProtocol; | |
EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation; | |
// | |
// Added new services to EFI 1.1 as Lib to reduce code size. | |
// | |
EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle; | |
EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer; | |
EFI_LOCATE_PROTOCOL LocateProtocol; | |
EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces; | |
EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces; | |
// | |
// CRC32 services | |
// | |
EFI_CALCULATE_CRC32 CalculateCrc32; | |
// | |
// Memory Utility Services | |
// | |
EFI_COPY_MEM CopyMem; | |
EFI_SET_MEM SetMem; | |
#if (EFI_SPECIFICATION_VERSION >= 0x00020000) | |
// | |
// UEFI 2.0 Extension to the table | |
// | |
EFI_CREATE_EVENT_EX CreateEventEx; | |
#endif | |
} EFI_BOOT_SERVICES; | |
// | |
// EFI Configuration Table | |
// | |
typedef struct { | |
EFI_GUID VendorGuid; | |
VOID *VendorTable; | |
} EFI_CONFIGURATION_TABLE; | |
// | |
// EFI System Table | |
// | |
#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249ULL | |
#define EFI_SYSTEM_TABLE_REVISION EFI_SPECIFICATION_VERSION | |
#define EFI_1_02_SYSTEM_TABLE_REVISION ((1 << 16) | 02) | |
#define EFI_1_10_SYSTEM_TABLE_REVISION ((1 << 16) | 10) | |
#define EFI_2_00_SYSTEM_TABLE_REVISION ((2 << 16) | 00) | |
#define EFI_2_10_SYSTEM_TABLE_REVISION ((2 << 16) | 10) | |
struct _EFI_SYSTEM_TABLE { | |
EFI_TABLE_HEADER Hdr; | |
CHAR16 *FirmwareVendor; | |
UINT32 FirmwareRevision; | |
EFI_HANDLE ConsoleInHandle; | |
EFI_SIMPLE_TEXT_IN_PROTOCOL *ConIn; | |
EFI_HANDLE ConsoleOutHandle; | |
EFI_SIMPLE_TEXT_OUT_PROTOCOL *ConOut; | |
EFI_HANDLE StandardErrorHandle; | |
EFI_SIMPLE_TEXT_OUT_PROTOCOL *StdErr; | |
EFI_RUNTIME_SERVICES *RuntimeServices; | |
EFI_BOOT_SERVICES *BootServices; | |
UINTN NumberOfTableEntries; | |
EFI_CONFIGURATION_TABLE *ConfigurationTable; | |
}; | |
#endif |