177943Sdfr/* $FreeBSD$ */ 277943Sdfr#ifndef _EFI_API_H 377943Sdfr#define _EFI_API_H 477943Sdfr 577943Sdfr/*++ 677943Sdfr 7163898SmarcelCopyright (c) 1999 - 2002 Intel Corporation. All rights reserved 8163898SmarcelThis software and associated documentation (if any) is furnished 9163898Smarcelunder a license and may only be used or copied in accordance 10163898Smarcelwith the terms of the license. Except as permitted by such 11163898Smarcellicense, no part of this software or documentation may be 12163898Smarcelreproduced, stored in a retrieval system, or transmitted in any 13163898Smarcelform or by any means without the express written consent of 14163898SmarcelIntel Corporation. 1577943Sdfr 1677943SdfrModule Name: 1777943Sdfr 1877943Sdfr efiapi.h 1977943Sdfr 2077943SdfrAbstract: 2177943Sdfr 2277943Sdfr Global EFI runtime & boot service interfaces 2377943Sdfr 2477943Sdfr 2577943Sdfr 2677943Sdfr 2777943SdfrRevision History 2877943Sdfr 2977943Sdfr--*/ 3077943Sdfr 31163898Smarcel// 32163898Smarcel// EFI Specification Revision 33163898Smarcel// 3477943Sdfr 3577943Sdfr#define EFI_SPECIFICATION_MAJOR_REVISION 1 36163898Smarcel#define EFI_SPECIFICATION_MINOR_REVISION 10 3777943Sdfr 38163898Smarcel// 39163898Smarcel// Declare forward referenced data structures 40163898Smarcel// 4177943Sdfr 4277943SdfrINTERFACE_DECL(_EFI_SYSTEM_TABLE); 4377943Sdfr 44163898Smarcel// 45163898Smarcel// EFI Memory 46163898Smarcel// 4777943Sdfr 4877943Sdfrtypedef 4977943SdfrEFI_STATUS 5077943Sdfr(EFIAPI *EFI_ALLOCATE_PAGES) ( 5177943Sdfr IN EFI_ALLOCATE_TYPE Type, 5277943Sdfr IN EFI_MEMORY_TYPE MemoryType, 5377943Sdfr IN UINTN NoPages, 5477943Sdfr OUT EFI_PHYSICAL_ADDRESS *Memory 5577943Sdfr ); 5677943Sdfr 5777943Sdfrtypedef 5877943SdfrEFI_STATUS 5977943Sdfr(EFIAPI *EFI_FREE_PAGES) ( 6077943Sdfr IN EFI_PHYSICAL_ADDRESS Memory, 6177943Sdfr IN UINTN NoPages 6277943Sdfr ); 6377943Sdfr 6477943Sdfrtypedef 6577943SdfrEFI_STATUS 6677943Sdfr(EFIAPI *EFI_GET_MEMORY_MAP) ( 6777943Sdfr IN OUT UINTN *MemoryMapSize, 6877943Sdfr IN OUT EFI_MEMORY_DESCRIPTOR *MemoryMap, 6977943Sdfr OUT UINTN *MapKey, 7077943Sdfr OUT UINTN *DescriptorSize, 7177943Sdfr OUT UINT32 *DescriptorVersion 7277943Sdfr ); 7377943Sdfr 7477943Sdfr#define NextMemoryDescriptor(Ptr,Size) ((EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size)) 7577943Sdfr 7677943Sdfr 7777943Sdfrtypedef 7877943SdfrEFI_STATUS 7977943Sdfr(EFIAPI *EFI_ALLOCATE_POOL) ( 8077943Sdfr IN EFI_MEMORY_TYPE PoolType, 8177943Sdfr IN UINTN Size, 8277943Sdfr OUT VOID **Buffer 8377943Sdfr ); 8477943Sdfr 8577943Sdfrtypedef 8677943SdfrEFI_STATUS 8777943Sdfr(EFIAPI *EFI_FREE_POOL) ( 8877943Sdfr IN VOID *Buffer 8977943Sdfr ); 9077943Sdfr 9177943Sdfrtypedef 9277943SdfrEFI_STATUS 9377943Sdfr(EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) ( 9477943Sdfr IN UINTN MemoryMapSize, 9577943Sdfr IN UINTN DescriptorSize, 9677943Sdfr IN UINT32 DescriptorVersion, 9777943Sdfr IN EFI_MEMORY_DESCRIPTOR *VirtualMap 9877943Sdfr ); 9977943Sdfr 10077943Sdfr 10177943Sdfr#define EFI_OPTIONAL_PTR 0x00000001 102163898Smarcel#define EFI_INTERNAL_FNC 0x00000002 // Pointer to internal runtime fnc 103163898Smarcel#define EFI_INTERNAL_PTR 0x00000004 // Pointer to internal runtime data 10477943Sdfr 10577943Sdfr 10677943Sdfrtypedef 10777943SdfrEFI_STATUS 10877943Sdfr(EFIAPI *EFI_CONVERT_POINTER) ( 10977943Sdfr IN UINTN DebugDisposition, 11077943Sdfr IN OUT VOID **Address 11177943Sdfr ); 11277943Sdfr 11377943Sdfr 114163898Smarcel// 115163898Smarcel// EFI Events 116163898Smarcel// 11777943Sdfr 11877943Sdfr 11977943Sdfr 12077943Sdfr#define EVT_TIMER 0x80000000 12177943Sdfr#define EVT_RUNTIME 0x40000000 12277943Sdfr#define EVT_RUNTIME_CONTEXT 0x20000000 12377943Sdfr 12477943Sdfr#define EVT_NOTIFY_WAIT 0x00000100 12577943Sdfr#define EVT_NOTIFY_SIGNAL 0x00000200 12677943Sdfr 12777943Sdfr#define EVT_SIGNAL_EXIT_BOOT_SERVICES 0x00000201 12877943Sdfr#define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE 0x60000202 12977943Sdfr 13077943Sdfr#define EVT_EFI_SIGNAL_MASK 0x000000FF 13177943Sdfr#define EVT_EFI_SIGNAL_MAX 2 13277943Sdfr 13377943Sdfrtypedef 13477943SdfrVOID 13577943Sdfr(EFIAPI *EFI_EVENT_NOTIFY) ( 13677943Sdfr IN EFI_EVENT Event, 13777943Sdfr IN VOID *Context 13877943Sdfr ); 13977943Sdfr 14077943Sdfrtypedef 14177943SdfrEFI_STATUS 14277943Sdfr(EFIAPI *EFI_CREATE_EVENT) ( 14377943Sdfr IN UINT32 Type, 14477943Sdfr IN EFI_TPL NotifyTpl, 14577943Sdfr IN EFI_EVENT_NOTIFY NotifyFunction, 14677943Sdfr IN VOID *NotifyContext, 14777943Sdfr OUT EFI_EVENT *Event 14877943Sdfr ); 14977943Sdfr 15077943Sdfrtypedef enum { 15177943Sdfr TimerCancel, 15277943Sdfr TimerPeriodic, 15377943Sdfr TimerRelative, 15477943Sdfr TimerTypeMax 15577943Sdfr} EFI_TIMER_DELAY; 15677943Sdfr 15777943Sdfrtypedef 15877943SdfrEFI_STATUS 15977943Sdfr(EFIAPI *EFI_SET_TIMER) ( 16077943Sdfr IN EFI_EVENT Event, 16177943Sdfr IN EFI_TIMER_DELAY Type, 16277943Sdfr IN UINT64 TriggerTime 16377943Sdfr ); 16477943Sdfr 16577943Sdfrtypedef 16677943SdfrEFI_STATUS 16777943Sdfr(EFIAPI *EFI_SIGNAL_EVENT) ( 16877943Sdfr IN EFI_EVENT Event 16977943Sdfr ); 17077943Sdfr 17177943Sdfrtypedef 17277943SdfrEFI_STATUS 17377943Sdfr(EFIAPI *EFI_WAIT_FOR_EVENT) ( 17477943Sdfr IN UINTN NumberOfEvents, 17577943Sdfr IN EFI_EVENT *Event, 17677943Sdfr OUT UINTN *Index 17777943Sdfr ); 17877943Sdfr 17977943Sdfrtypedef 18077943SdfrEFI_STATUS 18177943Sdfr(EFIAPI *EFI_CLOSE_EVENT) ( 18277943Sdfr IN EFI_EVENT Event 18377943Sdfr ); 18477943Sdfr 18577943Sdfrtypedef 18677943SdfrEFI_STATUS 18777943Sdfr(EFIAPI *EFI_CHECK_EVENT) ( 18877943Sdfr IN EFI_EVENT Event 18977943Sdfr ); 19077943Sdfr 191163898Smarcel// 192163898Smarcel// Task priority level 193163898Smarcel// 19477943Sdfr 19577943Sdfr#define TPL_APPLICATION 4 19677943Sdfr#define TPL_CALLBACK 8 19777943Sdfr#define TPL_NOTIFY 16 19877943Sdfr#define TPL_HIGH_LEVEL 31 19977943Sdfr 20077943Sdfrtypedef 20177943SdfrEFI_TPL 20277943Sdfr(EFIAPI *EFI_RAISE_TPL) ( 20377943Sdfr IN EFI_TPL NewTpl 20477943Sdfr ); 20577943Sdfr 20677943Sdfrtypedef 20777943SdfrVOID 20877943Sdfr(EFIAPI *EFI_RESTORE_TPL) ( 20977943Sdfr IN EFI_TPL OldTpl 21077943Sdfr ); 21177943Sdfr 21277943Sdfr 213163898Smarcel// 214163898Smarcel// EFI platform varibles 215163898Smarcel// 21677943Sdfr 21777943Sdfr#define EFI_GLOBAL_VARIABLE \ 21877943Sdfr { 0x8BE4DF61, 0x93CA, 0x11d2, 0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C } 21977943Sdfr 220163898Smarcel// Variable attributes 22177943Sdfr#define EFI_VARIABLE_NON_VOLATILE 0x00000001 22277943Sdfr#define EFI_VARIABLE_BOOTSERVICE_ACCESS 0x00000002 22377943Sdfr#define EFI_VARIABLE_RUNTIME_ACCESS 0x00000004 22477943Sdfr 225163898Smarcel// Variable size limitation 22677943Sdfr#define EFI_MAXIMUM_VARIABLE_SIZE 1024 22777943Sdfr 22877943Sdfrtypedef 22977943SdfrEFI_STATUS 23077943Sdfr(EFIAPI *EFI_GET_VARIABLE) ( 23177943Sdfr IN CHAR16 *VariableName, 23277943Sdfr IN EFI_GUID *VendorGuid, 23377943Sdfr OUT UINT32 *Attributes OPTIONAL, 23477943Sdfr IN OUT UINTN *DataSize, 23577943Sdfr OUT VOID *Data 23677943Sdfr ); 23777943Sdfr 23877943Sdfrtypedef 23977943SdfrEFI_STATUS 24077943Sdfr(EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) ( 24177943Sdfr IN OUT UINTN *VariableNameSize, 24277943Sdfr IN OUT CHAR16 *VariableName, 24377943Sdfr IN OUT EFI_GUID *VendorGuid 24477943Sdfr ); 24577943Sdfr 24677943Sdfr 24777943Sdfrtypedef 24877943SdfrEFI_STATUS 24977943Sdfr(EFIAPI *EFI_SET_VARIABLE) ( 25077943Sdfr IN CHAR16 *VariableName, 25177943Sdfr IN EFI_GUID *VendorGuid, 25277943Sdfr IN UINT32 Attributes, 25377943Sdfr IN UINTN DataSize, 25477943Sdfr IN VOID *Data 25577943Sdfr ); 25677943Sdfr 25777943Sdfr 258163898Smarcel// 259163898Smarcel// EFI Time 260163898Smarcel// 26177943Sdfr 26277943Sdfrtypedef struct { 263163898Smarcel UINT32 Resolution; // 1e-6 parts per million 264163898Smarcel UINT32 Accuracy; // hertz 265163898Smarcel BOOLEAN SetsToZero; // Set clears sub-second time 26677943Sdfr} EFI_TIME_CAPABILITIES; 26777943Sdfr 26877943Sdfr 26977943Sdfrtypedef 27077943SdfrEFI_STATUS 27177943Sdfr(EFIAPI *EFI_GET_TIME) ( 27277943Sdfr OUT EFI_TIME *Time, 27377943Sdfr OUT EFI_TIME_CAPABILITIES *Capabilities OPTIONAL 27477943Sdfr ); 27577943Sdfr 27677943Sdfrtypedef 27777943SdfrEFI_STATUS 27877943Sdfr(EFIAPI *EFI_SET_TIME) ( 27977943Sdfr IN EFI_TIME *Time 28077943Sdfr ); 28177943Sdfr 28277943Sdfrtypedef 28377943SdfrEFI_STATUS 28477943Sdfr(EFIAPI *EFI_GET_WAKEUP_TIME) ( 28577943Sdfr OUT BOOLEAN *Enabled, 28677943Sdfr OUT BOOLEAN *Pending, 28777943Sdfr OUT EFI_TIME *Time 28877943Sdfr ); 28977943Sdfr 29077943Sdfrtypedef 29177943SdfrEFI_STATUS 29277943Sdfr(EFIAPI *EFI_SET_WAKEUP_TIME) ( 29377943Sdfr IN BOOLEAN Enable, 29477943Sdfr IN EFI_TIME *Time OPTIONAL 29577943Sdfr ); 29677943Sdfr 29777943Sdfr 298163898Smarcel// 299163898Smarcel// Image functions 300163898Smarcel// 30177943Sdfr 30277943Sdfr 303163898Smarcel// PE32+ Subsystem type for EFI images 30477943Sdfr 30577943Sdfr#if !defined(IMAGE_SUBSYSTEM_EFI_APPLICATION) 30677943Sdfr#define IMAGE_SUBSYSTEM_EFI_APPLICATION 10 30777943Sdfr#define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER 11 30877943Sdfr#define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER 12 30977943Sdfr#endif 31077943Sdfr 311163898Smarcel// PE32+ Machine type for EFI images 31277943Sdfr 31377943Sdfr#if !defined(EFI_IMAGE_MACHINE_IA32) 31477943Sdfr#define EFI_IMAGE_MACHINE_IA32 0x014c 31577943Sdfr#endif 31677943Sdfr 31777943Sdfr#if !defined(EFI_IMAGE_MACHINE_IA64) 31877943Sdfr#define EFI_IMAGE_MACHINE_IA64 0x0200 31977943Sdfr#endif 32077943Sdfr 321163898Smarcel#if !defined(EFI_IMAGE_MACHINE_EBC) 322163898Smarcel#define EFI_IMAGE_MACHINE_EBC 0x0EBC 323163898Smarcel#endif 32477943Sdfr 325163898Smarcel// Image Entry prototype 326163898Smarcel 32777943Sdfrtypedef 32877943SdfrEFI_STATUS 32977943Sdfr(EFIAPI *EFI_IMAGE_ENTRY_POINT) ( 33077943Sdfr IN EFI_HANDLE ImageHandle, 33177943Sdfr IN struct _EFI_SYSTEM_TABLE *SystemTable 33277943Sdfr ); 33377943Sdfr 33477943Sdfrtypedef 33577943SdfrEFI_STATUS 33677943Sdfr(EFIAPI *EFI_IMAGE_LOAD) ( 33777943Sdfr IN BOOLEAN BootPolicy, 33877943Sdfr IN EFI_HANDLE ParentImageHandle, 33977943Sdfr IN EFI_DEVICE_PATH *FilePath, 34077943Sdfr IN VOID *SourceBuffer OPTIONAL, 34177943Sdfr IN UINTN SourceSize, 34277943Sdfr OUT EFI_HANDLE *ImageHandle 34377943Sdfr ); 34477943Sdfr 34577943Sdfrtypedef 34677943SdfrEFI_STATUS 34777943Sdfr(EFIAPI *EFI_IMAGE_START) ( 34877943Sdfr IN EFI_HANDLE ImageHandle, 34977943Sdfr OUT UINTN *ExitDataSize, 35077943Sdfr OUT CHAR16 **ExitData OPTIONAL 35177943Sdfr ); 35277943Sdfr 35377943Sdfrtypedef 35477943SdfrEFI_STATUS 35577943Sdfr(EFIAPI *EFI_EXIT) ( 35677943Sdfr IN EFI_HANDLE ImageHandle, 35777943Sdfr IN EFI_STATUS ExitStatus, 35877943Sdfr IN UINTN ExitDataSize, 35977943Sdfr IN CHAR16 *ExitData OPTIONAL 36077943Sdfr ); 36177943Sdfr 36277943Sdfrtypedef 36377943SdfrEFI_STATUS 36477943Sdfr(EFIAPI *EFI_IMAGE_UNLOAD) ( 36577943Sdfr IN EFI_HANDLE ImageHandle 36677943Sdfr ); 36777943Sdfr 36877943Sdfr 369163898Smarcel// Image handle 37077943Sdfr#define LOADED_IMAGE_PROTOCOL \ 37177943Sdfr { 0x5B1B31A1, 0x9562, 0x11d2, 0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B } 37277943Sdfr 373163898Smarcel#define EFI_LOADED_IMAGE_INFORMATION_REVISION 0x1000 37477943Sdfrtypedef struct { 37577943Sdfr UINT32 Revision; 37677943Sdfr EFI_HANDLE ParentHandle; 37777943Sdfr struct _EFI_SYSTEM_TABLE *SystemTable; 37877943Sdfr 379163898Smarcel // Source location of image 38077943Sdfr EFI_HANDLE DeviceHandle; 38177943Sdfr EFI_DEVICE_PATH *FilePath; 38277943Sdfr VOID *Reserved; 38377943Sdfr 384163898Smarcel // Images load options 38577943Sdfr UINT32 LoadOptionsSize; 38677943Sdfr VOID *LoadOptions; 38777943Sdfr 388163898Smarcel // Location of where image was loaded 38977943Sdfr VOID *ImageBase; 39077943Sdfr UINT64 ImageSize; 39177943Sdfr EFI_MEMORY_TYPE ImageCodeType; 39277943Sdfr EFI_MEMORY_TYPE ImageDataType; 39377943Sdfr 394163898Smarcel // If the driver image supports a dynamic unload request 39577943Sdfr EFI_IMAGE_UNLOAD Unload; 39677943Sdfr 39777943Sdfr} EFI_LOADED_IMAGE; 39877943Sdfr 39977943Sdfr 40077943Sdfrtypedef 40177943SdfrEFI_STATUS 40277943Sdfr(EFIAPI *EFI_EXIT_BOOT_SERVICES) ( 40377943Sdfr IN EFI_HANDLE ImageHandle, 40477943Sdfr IN UINTN MapKey 40577943Sdfr ); 40677943Sdfr 407163898Smarcel// 408163898Smarcel// Misc 409163898Smarcel// 41077943Sdfr 41177943Sdfr 41277943Sdfrtypedef 41377943SdfrEFI_STATUS 41477943Sdfr(EFIAPI *EFI_STALL) ( 41577943Sdfr IN UINTN Microseconds 41677943Sdfr ); 41777943Sdfr 41877943Sdfrtypedef 41977943SdfrEFI_STATUS 42077943Sdfr(EFIAPI *EFI_SET_WATCHDOG_TIMER) ( 42177943Sdfr IN UINTN Timeout, 42277943Sdfr IN UINT64 WatchdogCode, 42377943Sdfr IN UINTN DataSize, 42477943Sdfr IN CHAR16 *WatchdogData OPTIONAL 42577943Sdfr ); 42677943Sdfr 42777943Sdfr 42877943Sdfrtypedef enum { 42977943Sdfr EfiResetCold, 430163898Smarcel EfiResetWarm, 431163898Smarcel EfiResetShutdown 43277943Sdfr} EFI_RESET_TYPE; 43377943Sdfr 43477943Sdfrtypedef 435163898SmarcelVOID 43677943Sdfr(EFIAPI *EFI_RESET_SYSTEM) ( 43777943Sdfr IN EFI_RESET_TYPE ResetType, 43877943Sdfr IN EFI_STATUS ResetStatus, 43977943Sdfr IN UINTN DataSize, 44077943Sdfr IN CHAR16 *ResetData OPTIONAL 44177943Sdfr ); 44277943Sdfr 44377943Sdfrtypedef 44477943SdfrEFI_STATUS 44577943Sdfr(EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) ( 44677943Sdfr OUT UINT64 *Count 44777943Sdfr ); 44877943Sdfr 44977943Sdfrtypedef 45077943SdfrEFI_STATUS 45177943Sdfr(EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) ( 45277943Sdfr OUT UINT32 *HighCount 45377943Sdfr ); 45477943Sdfr 455163898Smarcel// 456163898Smarcel// Protocol handler functions 457163898Smarcel// 45877943Sdfr 45977943Sdfrtypedef enum { 460163898Smarcel EFI_NATIVE_INTERFACE 46177943Sdfr} EFI_INTERFACE_TYPE; 46277943Sdfr 46377943Sdfrtypedef 46477943SdfrEFI_STATUS 46577943Sdfr(EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) ( 46677943Sdfr IN OUT EFI_HANDLE *Handle, 46777943Sdfr IN EFI_GUID *Protocol, 46877943Sdfr IN EFI_INTERFACE_TYPE InterfaceType, 46977943Sdfr IN VOID *Interface 47077943Sdfr ); 47177943Sdfr 47277943Sdfrtypedef 47377943SdfrEFI_STATUS 47477943Sdfr(EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) ( 47577943Sdfr IN EFI_HANDLE Handle, 47677943Sdfr IN EFI_GUID *Protocol, 47777943Sdfr IN VOID *OldInterface, 47877943Sdfr IN VOID *NewInterface 47977943Sdfr ); 48077943Sdfr 48177943Sdfrtypedef 48277943SdfrEFI_STATUS 48377943Sdfr(EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) ( 48477943Sdfr IN EFI_HANDLE Handle, 48577943Sdfr IN EFI_GUID *Protocol, 48677943Sdfr IN VOID *Interface 48777943Sdfr ); 48877943Sdfr 48977943Sdfrtypedef 49077943SdfrEFI_STATUS 49177943Sdfr(EFIAPI *EFI_HANDLE_PROTOCOL) ( 49277943Sdfr IN EFI_HANDLE Handle, 49377943Sdfr IN EFI_GUID *Protocol, 49477943Sdfr OUT VOID **Interface 49577943Sdfr ); 49677943Sdfr 49777943Sdfrtypedef 49877943SdfrEFI_STATUS 49977943Sdfr(EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) ( 50077943Sdfr IN EFI_GUID *Protocol, 50177943Sdfr IN EFI_EVENT Event, 50277943Sdfr OUT VOID **Registration 50377943Sdfr ); 50477943Sdfr 50577943Sdfrtypedef enum { 50677943Sdfr AllHandles, 50777943Sdfr ByRegisterNotify, 50877943Sdfr ByProtocol 50977943Sdfr} EFI_LOCATE_SEARCH_TYPE; 51077943Sdfr 51177943Sdfrtypedef 51277943SdfrEFI_STATUS 51377943Sdfr(EFIAPI *EFI_LOCATE_HANDLE) ( 51477943Sdfr IN EFI_LOCATE_SEARCH_TYPE SearchType, 51577943Sdfr IN EFI_GUID *Protocol OPTIONAL, 51677943Sdfr IN VOID *SearchKey OPTIONAL, 51777943Sdfr IN OUT UINTN *BufferSize, 51877943Sdfr OUT EFI_HANDLE *Buffer 51977943Sdfr ); 52077943Sdfr 52177943Sdfrtypedef 52277943SdfrEFI_STATUS 52377943Sdfr(EFIAPI *EFI_LOCATE_DEVICE_PATH) ( 52477943Sdfr IN EFI_GUID *Protocol, 52577943Sdfr IN OUT EFI_DEVICE_PATH **DevicePath, 52677943Sdfr OUT EFI_HANDLE *Device 52777943Sdfr ); 52877943Sdfr 52977943Sdfrtypedef 53077943SdfrEFI_STATUS 53177943Sdfr(EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) ( 53277943Sdfr IN EFI_GUID *Guid, 53377943Sdfr IN VOID *Table 53477943Sdfr ); 53577943Sdfr 53677943Sdfrtypedef 53777943SdfrEFI_STATUS 53877943Sdfr(EFIAPI *EFI_RESERVED_SERVICE) ( 53977943Sdfr ); 54077943Sdfr 541163898Smarceltypedef 542163898SmarcelEFI_STATUS 543163898Smarcel(EFIAPI *EFI_CONNECT_CONTROLLER) ( 544163898Smarcel IN EFI_HANDLE ControllerHandle, 545163898Smarcel IN EFI_HANDLE *DriverImageHandle OPTIONAL, 546163898Smarcel IN EFI_DEVICE_PATH *RemainingDevicePath OPTIONAL, 547163898Smarcel IN BOOLEAN Recursive 548163898Smarcel ); 54977943Sdfr 550163898Smarceltypedef 551163898SmarcelEFI_STATUS 552163898Smarcel(EFIAPI *EFI_DISCONNECT_CONTROLLER)( 553163898Smarcel IN EFI_HANDLE ControllerHandle, 554163898Smarcel IN EFI_HANDLE DriverImageHandle, OPTIONAL 555163898Smarcel IN EFI_HANDLE ChildHandle OPTIONAL 556163898Smarcel ); 557163898Smarcel 558163898Smarcel#define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 559163898Smarcel#define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 560163898Smarcel#define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 561163898Smarcel#define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 562163898Smarcel#define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 563163898Smarcel#define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 564163898Smarcel 565163898Smarceltypedef 566163898SmarcelEFI_STATUS 567163898Smarcel(EFIAPI *EFI_OPEN_PROTOCOL) ( 568163898Smarcel IN EFI_HANDLE Handle, 569163898Smarcel IN EFI_GUID *Protocol, 570163898Smarcel OUT VOID **Interface, 571163898Smarcel IN EFI_HANDLE ImageHandle, 572163898Smarcel IN EFI_HANDLE ControllerHandle, OPTIONAL 573163898Smarcel IN UINT32 Attributes 574163898Smarcel ); 575163898Smarcel 576163898Smarceltypedef 577163898SmarcelEFI_STATUS 578163898Smarcel(EFIAPI *EFI_CLOSE_PROTOCOL) ( 579163898Smarcel IN EFI_HANDLE Handle, 580163898Smarcel IN EFI_GUID *Protocol, 581163898Smarcel IN EFI_HANDLE ImageHandle, 582163898Smarcel IN EFI_HANDLE DeviceHandle 583163898Smarcel ); 584163898Smarcel 585163898Smarceltypedef struct { 586163898Smarcel EFI_HANDLE AgentHandle; 587163898Smarcel EFI_HANDLE ControllerHandle; 588163898Smarcel UINT32 Attributes; 589163898Smarcel UINT32 OpenCount; 590163898Smarcel} EFI_OPEN_PROTOCOL_INFORMATION_ENTRY; 591163898Smarcel 592163898Smarceltypedef 593163898SmarcelEFI_STATUS 594163898Smarcel(EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION) ( 595163898Smarcel IN EFI_HANDLE UserHandle, 596163898Smarcel IN EFI_GUID *Protocol, 597163898Smarcel IN EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer, 598163898Smarcel OUT UINTN *EntryCount 599163898Smarcel ); 600163898Smarcel 601163898Smarceltypedef 602163898SmarcelEFI_STATUS 603163898Smarcel(EFIAPI *EFI_PROTOCOLS_PER_HANDLE) ( 604163898Smarcel IN EFI_HANDLE UserHandle, 605163898Smarcel OUT EFI_GUID ***ProtocolBuffer, 606163898Smarcel OUT UINTN *ProtocolBufferCount 607163898Smarcel ); 608163898Smarcel 609163898Smarceltypedef 610163898SmarcelEFI_STATUS 611163898Smarcel(EFIAPI *EFI_LOCATE_HANDLE_BUFFER) ( 612163898Smarcel IN EFI_LOCATE_SEARCH_TYPE SearchType, 613163898Smarcel IN EFI_GUID *Protocol OPTIONAL, 614163898Smarcel IN VOID *SearchKey OPTIONAL, 615163898Smarcel IN OUT UINTN *NumberHandles, 616163898Smarcel OUT EFI_HANDLE **Buffer 617163898Smarcel ); 618163898Smarcel 619163898Smarceltypedef 620163898SmarcelEFI_STATUS 621163898Smarcel(EFIAPI *EFI_LOCATE_PROTOCOL) ( 622163898Smarcel EFI_GUID *Protocol, 623163898Smarcel VOID *Registration, OPTIONAL 624163898Smarcel VOID **Interface 625163898Smarcel ); 626163898Smarcel 627163898Smarceltypedef 628163898SmarcelEFI_STATUS 629163898Smarcel(EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( 630163898Smarcel IN OUT EFI_HANDLE *Handle, 631163898Smarcel ... 632163898Smarcel ); 633163898Smarcel 634163898Smarceltypedef 635163898SmarcelEFI_STATUS 636163898Smarcel(EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( 637163898Smarcel IN EFI_HANDLE Handle, 638163898Smarcel ... 639163898Smarcel ); 640163898Smarcel 641163898Smarceltypedef 642163898SmarcelEFI_STATUS 643163898Smarcel(EFIAPI *EFI_CALCULATE_CRC32) ( 644163898Smarcel IN VOID *Data, 645163898Smarcel IN UINTN DataSize, 646163898Smarcel OUT UINT32 *Crc32 647163898Smarcel ); 648163898Smarcel 649163898Smarceltypedef 650163898SmarcelVOID 651163898Smarcel(EFIAPI *EFI_COPY_MEM) ( 652163898Smarcel IN VOID *Destination, 653163898Smarcel IN VOID *Source, 654163898Smarcel IN UINTN Length 655163898Smarcel ); 656163898Smarcel 657163898Smarceltypedef 658163898SmarcelVOID 659163898Smarcel(EFIAPI *EFI_SET_MEM) ( 660163898Smarcel IN VOID *Buffer, 661163898Smarcel IN UINTN Size, 662163898Smarcel IN UINT8 Value 663163898Smarcel ); 664163898Smarcel 665163898Smarcel// 666163898Smarcel// Standard EFI table header 667163898Smarcel// 668163898Smarcel 66977943Sdfrtypedef struct _EFI_TABLE_HEARDER { 670163898Smarcel UINT64 Signature; 671163898Smarcel UINT32 Revision; 672163898Smarcel UINT32 HeaderSize; 673163898Smarcel UINT32 CRC32; 674163898Smarcel UINT32 Reserved; 67577943Sdfr} EFI_TABLE_HEADER; 67677943Sdfr 67777943Sdfr 678163898Smarcel// 679163898Smarcel// EFI Runtime Serivces Table 680163898Smarcel// 68177943Sdfr 68277943Sdfr#define EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552 683163898Smarcel#define EFI_RUNTIME_SERVICES_REVISION ((EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)) 68477943Sdfr 68577943Sdfrtypedef struct { 686163898Smarcel EFI_TABLE_HEADER Hdr; 68777943Sdfr 688163898Smarcel // 689163898Smarcel // Time services 690163898Smarcel // 69177943Sdfr 692163898Smarcel EFI_GET_TIME GetTime; 693163898Smarcel EFI_SET_TIME SetTime; 694163898Smarcel EFI_GET_WAKEUP_TIME GetWakeupTime; 695163898Smarcel EFI_SET_WAKEUP_TIME SetWakeupTime; 69677943Sdfr 697163898Smarcel // 698163898Smarcel // Virtual memory services 699163898Smarcel // 70077943Sdfr 701163898Smarcel EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap; 702163898Smarcel EFI_CONVERT_POINTER ConvertPointer; 70377943Sdfr 704163898Smarcel // 705163898Smarcel // Variable serviers 706163898Smarcel // 70777943Sdfr 708163898Smarcel EFI_GET_VARIABLE GetVariable; 709163898Smarcel EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName; 710163898Smarcel EFI_SET_VARIABLE SetVariable; 71177943Sdfr 712163898Smarcel // 713163898Smarcel // Misc 714163898Smarcel // 71577943Sdfr 716163898Smarcel EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount; 717163898Smarcel EFI_RESET_SYSTEM ResetSystem; 71877943Sdfr 71977943Sdfr} EFI_RUNTIME_SERVICES; 72077943Sdfr 72177943Sdfr 722163898Smarcel// 723163898Smarcel// EFI Boot Services Table 724163898Smarcel// 72577943Sdfr 72677943Sdfr#define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42 727163898Smarcel#define EFI_BOOT_SERVICES_REVISION ((EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)) 72877943Sdfr 729163898Smarceltypedef struct { 73077943Sdfr 731163898Smarcel EFI_TABLE_HEADER Hdr; 73277943Sdfr 733163898Smarcel // 734163898Smarcel // Task priority functions 735163898Smarcel // 73677943Sdfr 737163898Smarcel EFI_RAISE_TPL RaiseTPL; 738163898Smarcel EFI_RESTORE_TPL RestoreTPL; 73977943Sdfr 740163898Smarcel // 741163898Smarcel // Memory functions 742163898Smarcel // 74377943Sdfr 744163898Smarcel EFI_ALLOCATE_PAGES AllocatePages; 745163898Smarcel EFI_FREE_PAGES FreePages; 746163898Smarcel EFI_GET_MEMORY_MAP GetMemoryMap; 747163898Smarcel EFI_ALLOCATE_POOL AllocatePool; 748163898Smarcel EFI_FREE_POOL FreePool; 74977943Sdfr 750163898Smarcel // 751163898Smarcel // Event & timer functions 752163898Smarcel // 75377943Sdfr 754163898Smarcel EFI_CREATE_EVENT CreateEvent; 755163898Smarcel EFI_SET_TIMER SetTimer; 756163898Smarcel EFI_WAIT_FOR_EVENT WaitForEvent; 757163898Smarcel EFI_SIGNAL_EVENT SignalEvent; 758163898Smarcel EFI_CLOSE_EVENT CloseEvent; 759163898Smarcel EFI_CHECK_EVENT CheckEvent; 76077943Sdfr 761163898Smarcel // 762163898Smarcel // Protocol handler functions 763163898Smarcel // 76477943Sdfr 765163898Smarcel EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; 766163898Smarcel EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; 767163898Smarcel EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; 768163898Smarcel EFI_HANDLE_PROTOCOL HandleProtocol; 769163898Smarcel VOID *Reserved; 770163898Smarcel EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; 771163898Smarcel EFI_LOCATE_HANDLE LocateHandle; 772163898Smarcel EFI_LOCATE_DEVICE_PATH LocateDevicePath; 773163898Smarcel EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; 77477943Sdfr 775163898Smarcel // 776163898Smarcel // Image functions 777163898Smarcel // 77877943Sdfr 779163898Smarcel EFI_IMAGE_LOAD LoadImage; 780163898Smarcel EFI_IMAGE_START StartImage; 781163898Smarcel EFI_EXIT Exit; 782163898Smarcel EFI_IMAGE_UNLOAD UnloadImage; 783163898Smarcel EFI_EXIT_BOOT_SERVICES ExitBootServices; 78477943Sdfr 785163898Smarcel // 786163898Smarcel // Misc functions 787163898Smarcel // 78877943Sdfr 789163898Smarcel EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; 790163898Smarcel EFI_STALL Stall; 791163898Smarcel EFI_SET_WATCHDOG_TIMER SetWatchdogTimer; 79277943Sdfr 793163898Smarcel // 794163898Smarcel // DriverSupport Services 795163898Smarcel // 796163898Smarcel EFI_CONNECT_CONTROLLER ConnectController; 797163898Smarcel EFI_DISCONNECT_CONTROLLER DisconnectController; 798163898Smarcel 799163898Smarcel // 800163898Smarcel // Open and Close Protocol Services 801163898Smarcel // 802163898Smarcel EFI_OPEN_PROTOCOL OpenProtocol; 803163898Smarcel EFI_CLOSE_PROTOCOL CloseProtocol; 804163898Smarcel EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation; 805163898Smarcel 806163898Smarcel // 807163898Smarcel // Library Services to reduce size of drivers 808163898Smarcel // 809163898Smarcel EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle; 810163898Smarcel EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer; 811163898Smarcel EFI_LOCATE_PROTOCOL LocateProtocol; 812163898Smarcel 813163898Smarcel EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces; 814163898Smarcel EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces; 815163898Smarcel 816163898Smarcel // 817163898Smarcel // CRC32 services 818163898Smarcel // 819163898Smarcel EFI_CALCULATE_CRC32 CalculateCrc32; 820163898Smarcel 821163898Smarcel // 822163898Smarcel // Memory Utility Services 823163898Smarcel // 824163898Smarcel EFI_COPY_MEM CopyMem; 825163898Smarcel EFI_SET_MEM SetMem; 826163898Smarcel 82777943Sdfr} EFI_BOOT_SERVICES; 82877943Sdfr 82977943Sdfr 830163898Smarcel// 831163898Smarcel// EFI Configuration Table and GUID definitions 832163898Smarcel// 83377943Sdfr 83477943Sdfr#define MPS_TABLE_GUID \ 835163898Smarcel { 0xeb9d2d2f, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } 83677943Sdfr 83777943Sdfr#define ACPI_TABLE_GUID \ 838163898Smarcel { 0xeb9d2d30, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } 83977943Sdfr 84077943Sdfr#define ACPI_20_TABLE_GUID \ 841163898Smarcel { 0x8868e871, 0xe4f1, 0x11d3, 0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81 } 84277943Sdfr 84377943Sdfr#define SMBIOS_TABLE_GUID \ 844163898Smarcel { 0xeb9d2d31, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } 84577943Sdfr 84677943Sdfr#define SAL_SYSTEM_TABLE_GUID \ 847163898Smarcel { 0xeb9d2d32, 0x2d88, 0x11d3, 0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d } 84877943Sdfr 84977943Sdfr 85077943Sdfrtypedef struct _EFI_CONFIGURATION_TABLE { 851163898Smarcel EFI_GUID VendorGuid; 852163898Smarcel VOID *VendorTable; 85377943Sdfr} EFI_CONFIGURATION_TABLE; 85477943Sdfr 85577943Sdfr 856163898Smarcel// 857163898Smarcel// EFI System Table 858163898Smarcel// 85977943Sdfr 86077943Sdfr 86177943Sdfr 86277943Sdfr 86377943Sdfr#define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249 864163898Smarcel#define EFI_SYSTEM_TABLE_REVISION ((EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)) 865163898Smarcel#define EFI_1_10_SYSTEM_TABLE_REVISION ((1<<16) | 10) 866163898Smarcel#define EFI_1_02_SYSTEM_TABLE_REVISION ((1<<16) | 02) 86777943Sdfr 86877943Sdfrtypedef struct _EFI_SYSTEM_TABLE { 869163898Smarcel EFI_TABLE_HEADER Hdr; 87077943Sdfr 871163898Smarcel CHAR16 *FirmwareVendor; 872163898Smarcel UINT32 FirmwareRevision; 87377943Sdfr 874163898Smarcel EFI_HANDLE ConsoleInHandle; 875163898Smarcel SIMPLE_INPUT_INTERFACE *ConIn; 87677943Sdfr 877163898Smarcel EFI_HANDLE ConsoleOutHandle; 878163898Smarcel SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut; 87977943Sdfr 880163898Smarcel EFI_HANDLE StandardErrorHandle; 881163898Smarcel SIMPLE_TEXT_OUTPUT_INTERFACE *StdErr; 88277943Sdfr 883163898Smarcel EFI_RUNTIME_SERVICES *RuntimeServices; 884163898Smarcel EFI_BOOT_SERVICES *BootServices; 88577943Sdfr 886163898Smarcel UINTN NumberOfTableEntries; 887163898Smarcel EFI_CONFIGURATION_TABLE *ConfigurationTable; 88877943Sdfr 88977943Sdfr} EFI_SYSTEM_TABLE; 89077943Sdfr 89177943Sdfr#endif 892