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