| /*++ | |
| 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 |