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