Home | History | Annotate | Line # | Download | only in inc
efiapi.h revision 1.2.14.1
      1  1.2.14.1  pgoyette /*	$NetBSD: efiapi.h,v 1.2.14.1 2018/09/06 06:56:38 pgoyette Exp $	*/
      2       1.1  jakllsch 
      3       1.1  jakllsch #ifndef _EFI_API_H
      4       1.1  jakllsch #define _EFI_API_H
      5       1.1  jakllsch 
      6       1.1  jakllsch /*++
      7       1.1  jakllsch 
      8       1.1  jakllsch Copyright (c) 1998  Intel Corporation
      9       1.1  jakllsch 
     10       1.1  jakllsch Module Name:
     11       1.1  jakllsch 
     12       1.1  jakllsch     efiapi.h
     13       1.1  jakllsch 
     14       1.1  jakllsch Abstract:
     15       1.1  jakllsch 
     16       1.1  jakllsch     Global EFI runtime & boot service interfaces
     17       1.1  jakllsch 
     18       1.1  jakllsch 
     19       1.1  jakllsch 
     20       1.1  jakllsch 
     21       1.1  jakllsch Revision History
     22       1.1  jakllsch 
     23       1.1  jakllsch --*/
     24       1.1  jakllsch 
     25       1.1  jakllsch //
     26       1.1  jakllsch // EFI Specification Revision
     27       1.1  jakllsch //
     28       1.1  jakllsch 
     29       1.1  jakllsch #define EFI_SPECIFICATION_MAJOR_REVISION 1
     30       1.1  jakllsch #define EFI_SPECIFICATION_MINOR_REVISION 02
     31       1.1  jakllsch 
     32       1.1  jakllsch //
     33       1.1  jakllsch // Declare forward referenced data structures
     34       1.1  jakllsch //
     35       1.1  jakllsch 
     36       1.1  jakllsch INTERFACE_DECL(_EFI_SYSTEM_TABLE);
     37       1.1  jakllsch 
     38       1.1  jakllsch //
     39       1.1  jakllsch // EFI Memory
     40       1.1  jakllsch //
     41       1.1  jakllsch 
     42       1.1  jakllsch typedef
     43       1.1  jakllsch EFI_STATUS
     44       1.1  jakllsch (EFIAPI *EFI_ALLOCATE_PAGES) (
     45       1.1  jakllsch     IN EFI_ALLOCATE_TYPE            Type,
     46       1.1  jakllsch     IN EFI_MEMORY_TYPE              MemoryType,
     47       1.1  jakllsch     IN UINTN                        NoPages,
     48       1.1  jakllsch     OUT EFI_PHYSICAL_ADDRESS        *Memory
     49       1.1  jakllsch     );
     50       1.1  jakllsch 
     51       1.1  jakllsch typedef
     52       1.1  jakllsch EFI_STATUS
     53       1.1  jakllsch (EFIAPI *EFI_FREE_PAGES) (
     54       1.1  jakllsch     IN EFI_PHYSICAL_ADDRESS         Memory,
     55       1.1  jakllsch     IN UINTN                        NoPages
     56       1.1  jakllsch     );
     57       1.1  jakllsch 
     58       1.1  jakllsch typedef
     59       1.1  jakllsch EFI_STATUS
     60       1.1  jakllsch (EFIAPI *EFI_GET_MEMORY_MAP) (
     61       1.1  jakllsch     IN OUT UINTN                    *MemoryMapSize,
     62       1.1  jakllsch     IN OUT EFI_MEMORY_DESCRIPTOR    *MemoryMap,
     63       1.1  jakllsch     OUT UINTN                       *MapKey,
     64       1.1  jakllsch     OUT UINTN                       *DescriptorSize,
     65       1.1  jakllsch     OUT UINT32                      *DescriptorVersion
     66       1.1  jakllsch     );
     67       1.1  jakllsch 
     68       1.1  jakllsch #define NextMemoryDescriptor(Ptr,Size)  ((EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size))
     69       1.1  jakllsch 
     70       1.1  jakllsch 
     71       1.1  jakllsch typedef
     72       1.1  jakllsch EFI_STATUS
     73       1.1  jakllsch (EFIAPI *EFI_ALLOCATE_POOL) (
     74       1.1  jakllsch     IN EFI_MEMORY_TYPE              PoolType,
     75       1.1  jakllsch     IN UINTN                        Size,
     76       1.1  jakllsch     OUT VOID                        **Buffer
     77       1.1  jakllsch     );
     78       1.1  jakllsch 
     79       1.1  jakllsch typedef
     80       1.1  jakllsch EFI_STATUS
     81       1.1  jakllsch (EFIAPI *EFI_FREE_POOL) (
     82       1.1  jakllsch     IN VOID                         *Buffer
     83       1.1  jakllsch     );
     84       1.1  jakllsch 
     85       1.1  jakllsch typedef
     86       1.1  jakllsch EFI_STATUS
     87       1.1  jakllsch (EFIAPI *EFI_SET_VIRTUAL_ADDRESS_MAP) (
     88       1.1  jakllsch     IN UINTN                        MemoryMapSize,
     89       1.1  jakllsch     IN UINTN                        DescriptorSize,
     90       1.1  jakllsch     IN UINT32                       DescriptorVersion,
     91       1.1  jakllsch     IN EFI_MEMORY_DESCRIPTOR        *VirtualMap
     92       1.1  jakllsch     );
     93       1.1  jakllsch 
     94       1.1  jakllsch 
     95       1.1  jakllsch #define EFI_OPTIONAL_PTR            0x00000001
     96       1.1  jakllsch #define EFI_INTERNAL_FNC            0x00000002      // Pointer to internal runtime fnc
     97       1.1  jakllsch #define EFI_INTERNAL_PTR            0x00000004      // Pointer to internal runtime data
     98       1.1  jakllsch 
     99       1.1  jakllsch 
    100       1.1  jakllsch typedef
    101       1.1  jakllsch EFI_STATUS
    102       1.1  jakllsch (EFIAPI *EFI_CONVERT_POINTER) (
    103       1.1  jakllsch     IN UINTN                        DebugDisposition,
    104       1.1  jakllsch     IN OUT VOID                     **Address
    105       1.1  jakllsch     );
    106       1.1  jakllsch 
    107       1.1  jakllsch 
    108       1.1  jakllsch //
    109       1.1  jakllsch // EFI Events
    110       1.1  jakllsch //
    111       1.1  jakllsch 
    112       1.1  jakllsch #define EVT_TIMER                           0x80000000
    113       1.1  jakllsch #define EVT_RUNTIME                         0x40000000
    114       1.1  jakllsch #define EVT_RUNTIME_CONTEXT                 0x20000000
    115       1.1  jakllsch 
    116       1.1  jakllsch #define EVT_NOTIFY_WAIT                     0x00000100
    117       1.1  jakllsch #define EVT_NOTIFY_SIGNAL                   0x00000200
    118       1.1  jakllsch 
    119       1.1  jakllsch #define EVT_SIGNAL_EXIT_BOOT_SERVICES       0x00000201
    120       1.1  jakllsch #define EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE   0x60000202
    121       1.1  jakllsch 
    122       1.1  jakllsch #define EVT_EFI_SIGNAL_MASK                 0x000000FF
    123  1.2.14.1  pgoyette #define EVT_EFI_SIGNAL_MAX                  4
    124  1.2.14.1  pgoyette 
    125  1.2.14.1  pgoyette #define EFI_EVENT_TIMER                         EVT_TIMER
    126  1.2.14.1  pgoyette #define EFI_EVENT_RUNTIME                       EVT_RUNTIME
    127  1.2.14.1  pgoyette #define EFI_EVENT_RUNTIME_CONTEXT               EVT_RUNTIME_CONTEXT
    128  1.2.14.1  pgoyette #define EFI_EVENT_NOTIFY_WAIT                   EVT_NOTIFY_WAIT
    129  1.2.14.1  pgoyette #define EFI_EVENT_NOTIFY_SIGNAL                 EVT_NOTIFY_SIGNAL
    130  1.2.14.1  pgoyette #define EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES     EVT_SIGNAL_EXIT_BOOT_SERVICES
    131  1.2.14.1  pgoyette #define EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE
    132  1.2.14.1  pgoyette #define EFI_EVENT_EFI_SIGNAL_MASK               EVT_EFI_SIGNAL_MASK
    133  1.2.14.1  pgoyette #define EFI_EVENT_EFI_SIGNAL_MAX                EVT_EFI_SIGNAL_MAX
    134  1.2.14.1  pgoyette 
    135       1.1  jakllsch 
    136       1.1  jakllsch typedef
    137       1.1  jakllsch VOID
    138       1.1  jakllsch (EFIAPI *EFI_EVENT_NOTIFY) (
    139       1.1  jakllsch     IN EFI_EVENT                Event,
    140       1.1  jakllsch     IN VOID                     *Context
    141       1.1  jakllsch     );
    142       1.1  jakllsch 
    143       1.1  jakllsch typedef
    144       1.1  jakllsch EFI_STATUS
    145       1.1  jakllsch (EFIAPI *EFI_CREATE_EVENT) (
    146       1.1  jakllsch     IN UINT32                       Type,
    147       1.1  jakllsch     IN EFI_TPL                      NotifyTpl,
    148       1.1  jakllsch     IN EFI_EVENT_NOTIFY             NotifyFunction,
    149       1.1  jakllsch     IN VOID                         *NotifyContext,
    150       1.1  jakllsch     OUT EFI_EVENT                   *Event
    151       1.1  jakllsch     );
    152       1.1  jakllsch 
    153       1.1  jakllsch typedef enum {
    154       1.1  jakllsch     TimerCancel,
    155       1.1  jakllsch     TimerPeriodic,
    156       1.1  jakllsch     TimerRelative,
    157       1.1  jakllsch     TimerTypeMax
    158       1.1  jakllsch } EFI_TIMER_DELAY;
    159       1.1  jakllsch 
    160       1.1  jakllsch typedef
    161       1.1  jakllsch EFI_STATUS
    162       1.1  jakllsch (EFIAPI *EFI_SET_TIMER) (
    163       1.1  jakllsch     IN EFI_EVENT                Event,
    164       1.1  jakllsch     IN EFI_TIMER_DELAY          Type,
    165       1.1  jakllsch     IN UINT64                   TriggerTime
    166       1.1  jakllsch     );
    167       1.1  jakllsch 
    168       1.1  jakllsch typedef
    169       1.1  jakllsch EFI_STATUS
    170       1.1  jakllsch (EFIAPI *EFI_SIGNAL_EVENT) (
    171       1.1  jakllsch     IN EFI_EVENT                Event
    172       1.1  jakllsch     );
    173       1.1  jakllsch 
    174       1.1  jakllsch typedef
    175       1.1  jakllsch EFI_STATUS
    176       1.1  jakllsch (EFIAPI *EFI_WAIT_FOR_EVENT) (
    177       1.1  jakllsch     IN UINTN                    NumberOfEvents,
    178       1.1  jakllsch     IN EFI_EVENT                *Event,
    179       1.1  jakllsch     OUT UINTN                   *Index
    180       1.1  jakllsch     );
    181       1.1  jakllsch 
    182       1.1  jakllsch typedef
    183       1.1  jakllsch EFI_STATUS
    184       1.1  jakllsch (EFIAPI *EFI_CLOSE_EVENT) (
    185       1.1  jakllsch     IN EFI_EVENT                Event
    186       1.1  jakllsch     );
    187       1.1  jakllsch 
    188       1.1  jakllsch typedef
    189       1.1  jakllsch EFI_STATUS
    190       1.1  jakllsch (EFIAPI *EFI_CHECK_EVENT) (
    191       1.1  jakllsch     IN EFI_EVENT                Event
    192       1.1  jakllsch     );
    193       1.1  jakllsch 
    194       1.1  jakllsch //
    195       1.1  jakllsch // Task priority level
    196       1.1  jakllsch //
    197       1.1  jakllsch 
    198  1.2.14.1  pgoyette #define TPL_APPLICATION       4
    199  1.2.14.1  pgoyette #define TPL_CALLBACK          8
    200  1.2.14.1  pgoyette #define TPL_NOTIFY           16
    201  1.2.14.1  pgoyette #define TPL_HIGH_LEVEL       31
    202  1.2.14.1  pgoyette #define EFI_TPL_APPLICATION  TPL_APPLICATION
    203  1.2.14.1  pgoyette #define EFI_TPL_CALLBACK     TPL_CALLBACK
    204  1.2.14.1  pgoyette #define EFI_TPL_NOTIFY       TPL_NOTIFY
    205  1.2.14.1  pgoyette #define EFI_TPL_HIGH_LEVEL   TPL_HIGH_LEVEL
    206       1.1  jakllsch typedef
    207       1.1  jakllsch EFI_TPL
    208       1.1  jakllsch (EFIAPI *EFI_RAISE_TPL) (
    209       1.1  jakllsch     IN EFI_TPL      NewTpl
    210       1.1  jakllsch     );
    211       1.1  jakllsch 
    212       1.1  jakllsch typedef
    213       1.1  jakllsch VOID
    214       1.1  jakllsch (EFIAPI *EFI_RESTORE_TPL) (
    215       1.1  jakllsch     IN EFI_TPL      OldTpl
    216       1.1  jakllsch     );
    217       1.1  jakllsch 
    218       1.1  jakllsch 
    219       1.1  jakllsch //
    220       1.1  jakllsch // EFI platform varibles
    221       1.1  jakllsch //
    222       1.1  jakllsch 
    223       1.1  jakllsch #define EFI_GLOBAL_VARIABLE     \
    224       1.1  jakllsch     { 0x8BE4DF61, 0x93CA, 0x11d2, {0xAA, 0x0D, 0x00, 0xE0, 0x98, 0x03, 0x2B, 0x8C} }
    225       1.1  jakllsch 
    226       1.1  jakllsch // Variable attributes
    227  1.2.14.1  pgoyette #define EFI_VARIABLE_NON_VOLATILE                          0x00000001
    228  1.2.14.1  pgoyette #define EFI_VARIABLE_BOOTSERVICE_ACCESS                    0x00000002
    229  1.2.14.1  pgoyette #define EFI_VARIABLE_RUNTIME_ACCESS                        0x00000004
    230  1.2.14.1  pgoyette #define EFI_VARIABLE_HARDWARE_ERROR_RECORD                 0x00000008
    231  1.2.14.1  pgoyette #define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS            0x00000010
    232  1.2.14.1  pgoyette #define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020
    233  1.2.14.1  pgoyette #define EFI_VARIABLE_APPEND_WRITE                          0x00000040
    234       1.1  jakllsch 
    235       1.1  jakllsch // Variable size limitation
    236       1.1  jakllsch #define EFI_MAXIMUM_VARIABLE_SIZE           1024
    237       1.1  jakllsch 
    238       1.1  jakllsch typedef
    239       1.1  jakllsch EFI_STATUS
    240       1.1  jakllsch (EFIAPI *EFI_GET_VARIABLE) (
    241       1.1  jakllsch     IN CHAR16                       *VariableName,
    242       1.1  jakllsch     IN EFI_GUID                     *VendorGuid,
    243       1.1  jakllsch     OUT UINT32                      *Attributes OPTIONAL,
    244       1.1  jakllsch     IN OUT UINTN                    *DataSize,
    245       1.1  jakllsch     OUT VOID                        *Data
    246       1.1  jakllsch     );
    247       1.1  jakllsch 
    248       1.1  jakllsch typedef
    249       1.1  jakllsch EFI_STATUS
    250       1.1  jakllsch (EFIAPI *EFI_GET_NEXT_VARIABLE_NAME) (
    251       1.1  jakllsch     IN OUT UINTN                    *VariableNameSize,
    252       1.1  jakllsch     IN OUT CHAR16                   *VariableName,
    253       1.1  jakllsch     IN OUT EFI_GUID                 *VendorGuid
    254       1.1  jakllsch     );
    255       1.1  jakllsch 
    256       1.1  jakllsch 
    257       1.1  jakllsch typedef
    258       1.1  jakllsch EFI_STATUS
    259       1.1  jakllsch (EFIAPI *EFI_SET_VARIABLE) (
    260       1.1  jakllsch     IN CHAR16                       *VariableName,
    261       1.1  jakllsch     IN EFI_GUID                     *VendorGuid,
    262       1.1  jakllsch     IN UINT32                       Attributes,
    263       1.1  jakllsch     IN UINTN                        DataSize,
    264       1.1  jakllsch     IN VOID                         *Data
    265       1.1  jakllsch     );
    266       1.1  jakllsch 
    267       1.1  jakllsch 
    268       1.1  jakllsch //
    269       1.1  jakllsch // EFI Time
    270       1.1  jakllsch //
    271       1.1  jakllsch 
    272       1.1  jakllsch typedef struct {
    273       1.1  jakllsch         UINT32                      Resolution;     // 1e-6 parts per million
    274       1.1  jakllsch         UINT32                      Accuracy;       // hertz
    275       1.1  jakllsch         BOOLEAN                     SetsToZero;     // Set clears sub-second time
    276       1.1  jakllsch } EFI_TIME_CAPABILITIES;
    277       1.1  jakllsch 
    278       1.1  jakllsch 
    279       1.1  jakllsch typedef
    280       1.1  jakllsch EFI_STATUS
    281       1.1  jakllsch (EFIAPI *EFI_GET_TIME) (
    282       1.1  jakllsch     OUT EFI_TIME                    *Time,
    283       1.1  jakllsch     OUT EFI_TIME_CAPABILITIES       *Capabilities OPTIONAL
    284       1.1  jakllsch     );
    285       1.1  jakllsch 
    286       1.1  jakllsch typedef
    287       1.1  jakllsch EFI_STATUS
    288       1.1  jakllsch (EFIAPI *EFI_SET_TIME) (
    289       1.1  jakllsch     IN EFI_TIME                     *Time
    290       1.1  jakllsch     );
    291       1.1  jakllsch 
    292       1.1  jakllsch typedef
    293       1.1  jakllsch EFI_STATUS
    294       1.1  jakllsch (EFIAPI *EFI_GET_WAKEUP_TIME) (
    295       1.1  jakllsch     OUT BOOLEAN                     *Enabled,
    296       1.1  jakllsch     OUT BOOLEAN                     *Pending,
    297       1.1  jakllsch     OUT EFI_TIME                    *Time
    298       1.1  jakllsch     );
    299       1.1  jakllsch 
    300       1.1  jakllsch typedef
    301       1.1  jakllsch EFI_STATUS
    302       1.1  jakllsch (EFIAPI *EFI_SET_WAKEUP_TIME) (
    303       1.1  jakllsch     IN BOOLEAN                      Enable,
    304       1.1  jakllsch     IN EFI_TIME                     *Time OPTIONAL
    305       1.1  jakllsch     );
    306       1.1  jakllsch 
    307       1.1  jakllsch 
    308       1.1  jakllsch //
    309       1.1  jakllsch // Image functions
    310       1.1  jakllsch //
    311       1.1  jakllsch 
    312       1.1  jakllsch 
    313       1.1  jakllsch // PE32+ Subsystem type for EFI images
    314       1.1  jakllsch 
    315       1.1  jakllsch #if !defined(IMAGE_SUBSYSTEM_EFI_APPLICATION)
    316       1.1  jakllsch #define IMAGE_SUBSYSTEM_EFI_APPLICATION             10
    317       1.1  jakllsch #define IMAGE_SUBSYSTEM_EFI_BOOT_SERVICE_DRIVER     11
    318       1.1  jakllsch #define IMAGE_SUBSYSTEM_EFI_RUNTIME_DRIVER          12
    319       1.1  jakllsch #endif
    320       1.1  jakllsch 
    321       1.1  jakllsch // PE32+ Machine type for EFI images
    322       1.1  jakllsch 
    323       1.1  jakllsch #if !defined(EFI_IMAGE_MACHINE_IA32)
    324       1.1  jakllsch #define EFI_IMAGE_MACHINE_IA32      0x014c
    325       1.1  jakllsch #endif
    326       1.1  jakllsch 
    327       1.1  jakllsch #if !defined(EFI_IMAGE_MACHINE_IA64)
    328       1.1  jakllsch #define EFI_IMAGE_MACHINE_IA64      0x0200
    329       1.1  jakllsch #endif
    330       1.1  jakllsch 
    331  1.2.14.1  pgoyette #if !defined(EFI_IMAGE_MACHINE_EBC)
    332  1.2.14.1  pgoyette #define EFI_IMAGE_MACHINE_EBC      0x0EBC
    333  1.2.14.1  pgoyette #endif
    334  1.2.14.1  pgoyette 
    335  1.2.14.1  pgoyette #if !defined(EFI_IMAGE_MACHINE_X64)
    336  1.2.14.1  pgoyette #define EFI_IMAGE_MACHINE_X64       0x8664
    337  1.2.14.1  pgoyette #endif
    338  1.2.14.1  pgoyette 
    339  1.2.14.1  pgoyette #if !defined(EFI_IMAGE_MACHINE_ARMTHUMB_MIXED)
    340  1.2.14.1  pgoyette #define EFI_IMAGE_MACHINE_ARMTHUMB_MIXED 0x01C2
    341  1.2.14.1  pgoyette #endif
    342  1.2.14.1  pgoyette 
    343  1.2.14.1  pgoyette #if !defined(EFI_IMAGE_MACHINE_AARCH64)
    344  1.2.14.1  pgoyette #define EFI_IMAGE_MACHINE_AARCH64   0xAA64
    345  1.2.14.1  pgoyette #endif
    346  1.2.14.1  pgoyette 
    347       1.1  jakllsch // Image Entry prototype
    348       1.1  jakllsch 
    349       1.1  jakllsch typedef
    350       1.1  jakllsch EFI_STATUS
    351       1.1  jakllsch (EFIAPI *EFI_IMAGE_ENTRY_POINT) (
    352       1.1  jakllsch     IN EFI_HANDLE                   ImageHandle,
    353       1.1  jakllsch     IN struct _EFI_SYSTEM_TABLE     *SystemTable
    354       1.1  jakllsch     );
    355       1.1  jakllsch 
    356       1.1  jakllsch typedef
    357       1.1  jakllsch EFI_STATUS
    358       1.1  jakllsch (EFIAPI *EFI_IMAGE_LOAD) (
    359       1.1  jakllsch     IN BOOLEAN                      BootPolicy,
    360       1.1  jakllsch     IN EFI_HANDLE                   ParentImageHandle,
    361       1.1  jakllsch     IN EFI_DEVICE_PATH              *FilePath,
    362       1.1  jakllsch     IN VOID                         *SourceBuffer   OPTIONAL,
    363       1.1  jakllsch     IN UINTN                        SourceSize,
    364       1.1  jakllsch     OUT EFI_HANDLE                  *ImageHandle
    365       1.1  jakllsch     );
    366       1.1  jakllsch 
    367       1.1  jakllsch typedef
    368       1.1  jakllsch EFI_STATUS
    369       1.1  jakllsch (EFIAPI *EFI_IMAGE_START) (
    370       1.1  jakllsch     IN EFI_HANDLE                   ImageHandle,
    371       1.1  jakllsch     OUT UINTN                       *ExitDataSize,
    372       1.1  jakllsch     OUT CHAR16                      **ExitData  OPTIONAL
    373       1.1  jakllsch     );
    374       1.1  jakllsch 
    375       1.1  jakllsch typedef
    376       1.1  jakllsch EFI_STATUS
    377       1.1  jakllsch (EFIAPI *EFI_EXIT) (
    378       1.1  jakllsch     IN EFI_HANDLE                   ImageHandle,
    379       1.1  jakllsch     IN EFI_STATUS                   ExitStatus,
    380       1.1  jakllsch     IN UINTN                        ExitDataSize,
    381       1.1  jakllsch     IN CHAR16                       *ExitData OPTIONAL
    382       1.1  jakllsch     );
    383       1.1  jakllsch 
    384       1.1  jakllsch 
    385       1.1  jakllsch // Image handle
    386  1.2.14.1  pgoyette /*#define LOADED_IMAGE_PROTOCOL      \
    387       1.1  jakllsch     { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
    388       1.1  jakllsch 
    389       1.1  jakllsch #define EFI_IMAGE_INFORMATION_REVISION      0x1000
    390       1.1  jakllsch typedef struct {
    391       1.1  jakllsch     UINT32                          Revision;
    392       1.1  jakllsch     EFI_HANDLE                      ParentHandle;
    393       1.1  jakllsch     struct _EFI_SYSTEM_TABLE        *SystemTable;
    394       1.1  jakllsch 
    395       1.1  jakllsch     // Source location of image
    396       1.1  jakllsch     EFI_HANDLE                      DeviceHandle;
    397       1.1  jakllsch     EFI_DEVICE_PATH                 *FilePath;
    398       1.1  jakllsch     VOID                            *Reserved;
    399       1.1  jakllsch 
    400       1.1  jakllsch     // Images load options
    401       1.1  jakllsch     UINT32                          LoadOptionsSize;
    402       1.1  jakllsch     VOID                            *LoadOptions;
    403       1.1  jakllsch 
    404       1.1  jakllsch     // Location of where image was loaded
    405       1.1  jakllsch     VOID                            *ImageBase;
    406       1.1  jakllsch     UINT64                          ImageSize;
    407       1.1  jakllsch     EFI_MEMORY_TYPE                 ImageCodeType;
    408       1.1  jakllsch     EFI_MEMORY_TYPE                 ImageDataType;
    409       1.1  jakllsch 
    410       1.1  jakllsch     // If the driver image supports a dynamic unload request
    411       1.1  jakllsch     EFI_IMAGE_UNLOAD                Unload;
    412       1.1  jakllsch 
    413  1.2.14.1  pgoyette } EFI_LOADED_IMAGE;*/
    414       1.1  jakllsch 
    415       1.1  jakllsch 
    416       1.1  jakllsch typedef
    417       1.1  jakllsch EFI_STATUS
    418       1.1  jakllsch (EFIAPI *EFI_EXIT_BOOT_SERVICES) (
    419       1.1  jakllsch     IN EFI_HANDLE                   ImageHandle,
    420       1.1  jakllsch     IN UINTN                        MapKey
    421       1.1  jakllsch     );
    422       1.1  jakllsch 
    423       1.1  jakllsch //
    424       1.1  jakllsch // Misc
    425       1.1  jakllsch //
    426       1.1  jakllsch 
    427       1.1  jakllsch 
    428       1.1  jakllsch typedef
    429       1.1  jakllsch EFI_STATUS
    430       1.1  jakllsch (EFIAPI *EFI_STALL) (
    431       1.1  jakllsch     IN UINTN                    Microseconds
    432       1.1  jakllsch     );
    433       1.1  jakllsch 
    434       1.1  jakllsch typedef
    435       1.1  jakllsch EFI_STATUS
    436       1.1  jakllsch (EFIAPI *EFI_SET_WATCHDOG_TIMER) (
    437       1.1  jakllsch     IN UINTN                    Timeout,
    438       1.1  jakllsch     IN UINT64                   WatchdogCode,
    439       1.1  jakllsch     IN UINTN                    DataSize,
    440       1.1  jakllsch     IN CHAR16                   *WatchdogData OPTIONAL
    441       1.1  jakllsch     );
    442       1.1  jakllsch 
    443       1.1  jakllsch typedef
    444       1.1  jakllsch EFI_STATUS
    445       1.1  jakllsch (EFIAPI *EFI_CONNECT_CONTROLLER) (
    446       1.1  jakllsch     IN EFI_HANDLE               ControllerHandle,
    447       1.1  jakllsch     IN EFI_HANDLE               *DriverImageHandle OPTIONAL,
    448       1.1  jakllsch     IN EFI_DEVICE_PATH          *RemainingDevicePath OPTIONAL,
    449       1.1  jakllsch     IN BOOLEAN                  Recursive
    450       1.1  jakllsch     );
    451       1.1  jakllsch 
    452       1.1  jakllsch typedef
    453       1.1  jakllsch EFI_STATUS
    454       1.1  jakllsch (EFIAPI *EFI_DISCONNECT_CONTROLLER) (
    455       1.1  jakllsch     IN EFI_HANDLE               ControllerHandle,
    456       1.1  jakllsch     IN EFI_HANDLE               DriverImageHandle OPTIONAL,
    457       1.1  jakllsch     IN EFI_HANDLE               ChildHandle OPTIONAL
    458       1.1  jakllsch     );
    459       1.1  jakllsch 
    460       1.1  jakllsch #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL  0x00000001
    461       1.1  jakllsch #define EFI_OPEN_PROTOCOL_GET_PROTOCOL        0x00000002
    462       1.1  jakllsch #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL       0x00000004
    463       1.1  jakllsch #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008
    464       1.1  jakllsch #define EFI_OPEN_PROTOCOL_BY_DRIVER           0x00000010
    465       1.1  jakllsch #define EFI_OPEN_PROTOCOL_EXCLUSIVE           0x00000020
    466       1.1  jakllsch 
    467       1.1  jakllsch typedef
    468       1.1  jakllsch EFI_STATUS
    469       1.1  jakllsch (EFIAPI *EFI_OPEN_PROTOCOL) (
    470       1.1  jakllsch     IN EFI_HANDLE               Handle,
    471       1.1  jakllsch     IN EFI_GUID                 *Protocol,
    472       1.1  jakllsch     OUT VOID                    **Interface OPTIONAL,
    473       1.1  jakllsch     IN EFI_HANDLE               AgentHandle,
    474       1.1  jakllsch     IN EFI_HANDLE               ControllerHandle,
    475       1.1  jakllsch     IN UINT32                   Attributes
    476       1.1  jakllsch     );
    477       1.1  jakllsch 
    478       1.1  jakllsch typedef
    479       1.1  jakllsch EFI_STATUS
    480       1.1  jakllsch (EFIAPI *EFI_CLOSE_PROTOCOL) (
    481       1.1  jakllsch     IN EFI_HANDLE               Handle,
    482       1.1  jakllsch     IN EFI_GUID                 *Protocol,
    483       1.1  jakllsch     IN EFI_HANDLE               AgentHandle,
    484       1.1  jakllsch     IN EFI_HANDLE               ControllerHandle
    485       1.1  jakllsch     );
    486       1.1  jakllsch 
    487       1.1  jakllsch typedef struct {
    488       1.1  jakllsch     EFI_HANDLE                  AgentHandle;
    489       1.1  jakllsch     EFI_HANDLE                  ControllerHandle;
    490       1.1  jakllsch     UINT32                      Attributes;
    491       1.1  jakllsch     UINT32                      OpenCount;
    492       1.1  jakllsch } EFI_OPEN_PROTOCOL_INFORMATION_ENTRY;
    493       1.1  jakllsch 
    494       1.1  jakllsch typedef
    495       1.1  jakllsch EFI_STATUS
    496       1.1  jakllsch (EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION) (
    497       1.1  jakllsch     IN EFI_HANDLE               Handle,
    498       1.1  jakllsch     IN EFI_GUID                 *Protocol,
    499       1.1  jakllsch     OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer,
    500       1.1  jakllsch     OUT UINTN                   *EntryCount
    501       1.1  jakllsch     );
    502       1.1  jakllsch 
    503       1.1  jakllsch typedef
    504       1.1  jakllsch EFI_STATUS
    505       1.1  jakllsch (EFIAPI *EFI_PROTOCOLS_PER_HANDLE) (
    506       1.1  jakllsch     IN EFI_HANDLE               Handle,
    507       1.1  jakllsch     OUT EFI_GUID                ***ProtocolBuffer,
    508       1.1  jakllsch     OUT UINTN                   *ProtocolBufferCount
    509       1.1  jakllsch     );
    510       1.1  jakllsch 
    511       1.1  jakllsch typedef enum {
    512       1.1  jakllsch     AllHandles,
    513       1.1  jakllsch     ByRegisterNotify,
    514       1.1  jakllsch     ByProtocol
    515       1.1  jakllsch } EFI_LOCATE_SEARCH_TYPE;
    516       1.1  jakllsch 
    517       1.1  jakllsch typedef
    518       1.1  jakllsch EFI_STATUS
    519       1.1  jakllsch (EFIAPI *EFI_LOCATE_HANDLE_BUFFER) (
    520       1.1  jakllsch     IN EFI_LOCATE_SEARCH_TYPE   SearchType,
    521       1.1  jakllsch     IN EFI_GUID                 *Protocol OPTIONAL,
    522       1.1  jakllsch     IN VOID                     *SearchKey OPTIONAL,
    523       1.1  jakllsch     IN OUT UINTN                *NoHandles,
    524       1.1  jakllsch     OUT EFI_HANDLE              **Buffer
    525       1.1  jakllsch     );
    526       1.1  jakllsch 
    527       1.1  jakllsch typedef
    528       1.1  jakllsch EFI_STATUS
    529       1.1  jakllsch (EFIAPI *EFI_LOCATE_PROTOCOL) (
    530       1.1  jakllsch     IN EFI_GUID                 *Protocol,
    531       1.1  jakllsch     IN VOID                     *Registration OPTIONAL,
    532       1.1  jakllsch     OUT VOID                    **Interface
    533       1.1  jakllsch     );
    534       1.1  jakllsch 
    535       1.1  jakllsch typedef
    536       1.1  jakllsch EFI_STATUS
    537       1.1  jakllsch (EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
    538       1.1  jakllsch     IN OUT EFI_HANDLE           *Handle,
    539       1.1  jakllsch     ...
    540       1.1  jakllsch     );
    541       1.1  jakllsch 
    542       1.1  jakllsch typedef
    543       1.1  jakllsch EFI_STATUS
    544       1.1  jakllsch (EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
    545       1.1  jakllsch     IN OUT EFI_HANDLE           Handle,
    546       1.1  jakllsch     ...
    547       1.1  jakllsch     );
    548       1.1  jakllsch 
    549       1.1  jakllsch typedef
    550       1.1  jakllsch EFI_STATUS
    551       1.1  jakllsch (EFIAPI *EFI_CALCULATE_CRC32) (
    552       1.1  jakllsch     IN VOID                     *Data,
    553       1.1  jakllsch     IN UINTN                    DataSize,
    554       1.1  jakllsch     OUT UINT32                  *Crc32
    555       1.1  jakllsch     );
    556       1.1  jakllsch 
    557       1.1  jakllsch typedef
    558       1.1  jakllsch VOID
    559       1.1  jakllsch (EFIAPI *EFI_COPY_MEM) (
    560       1.1  jakllsch     IN VOID                     *Destination,
    561       1.1  jakllsch     IN VOID                     *Source,
    562       1.1  jakllsch     IN UINTN                    Length
    563       1.1  jakllsch     );
    564       1.1  jakllsch 
    565       1.1  jakllsch typedef
    566       1.1  jakllsch VOID
    567       1.1  jakllsch (EFIAPI *EFI_SET_MEM) (
    568       1.1  jakllsch     IN VOID                     *Buffer,
    569       1.1  jakllsch     IN UINTN                    Size,
    570       1.1  jakllsch     IN UINT8                    Value
    571       1.1  jakllsch     );
    572       1.1  jakllsch 
    573       1.1  jakllsch 
    574       1.1  jakllsch typedef
    575       1.1  jakllsch EFI_STATUS
    576       1.1  jakllsch (EFIAPI *EFI_CREATE_EVENT_EX) (
    577       1.1  jakllsch     IN UINT32                   Type,
    578       1.1  jakllsch     IN EFI_TPL                  NotifyTpl,
    579       1.1  jakllsch     IN EFI_EVENT_NOTIFY         NotifyFunction OPTIONAL,
    580       1.1  jakllsch     IN const VOID               *NotifyContext OPTIONAL,
    581       1.1  jakllsch     IN const EFI_GUID           EventGroup OPTIONAL,
    582       1.1  jakllsch     OUT EFI_EVENT               *Event
    583       1.1  jakllsch     );
    584       1.1  jakllsch 
    585       1.1  jakllsch typedef enum {
    586       1.1  jakllsch     EfiResetCold,
    587       1.1  jakllsch     EfiResetWarm,
    588       1.1  jakllsch     EfiResetShutdown
    589       1.1  jakllsch } EFI_RESET_TYPE;
    590       1.1  jakllsch 
    591       1.1  jakllsch typedef
    592       1.1  jakllsch EFI_STATUS
    593       1.1  jakllsch (EFIAPI *EFI_RESET_SYSTEM) (
    594       1.1  jakllsch     IN EFI_RESET_TYPE           ResetType,
    595       1.1  jakllsch     IN EFI_STATUS               ResetStatus,
    596       1.1  jakllsch     IN UINTN                    DataSize,
    597       1.1  jakllsch     IN CHAR16                   *ResetData OPTIONAL
    598       1.1  jakllsch     );
    599       1.1  jakllsch 
    600       1.1  jakllsch typedef
    601       1.1  jakllsch EFI_STATUS
    602       1.1  jakllsch (EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) (
    603       1.1  jakllsch     OUT UINT64                  *Count
    604       1.1  jakllsch     );
    605       1.1  jakllsch 
    606       1.1  jakllsch typedef
    607       1.1  jakllsch EFI_STATUS
    608       1.1  jakllsch (EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) (
    609       1.1  jakllsch     OUT UINT32                  *HighCount
    610       1.1  jakllsch     );
    611       1.1  jakllsch 
    612  1.2.14.1  pgoyette typedef struct {
    613  1.2.14.1  pgoyette     UINT64                      Length;
    614  1.2.14.1  pgoyette     union {
    615  1.2.14.1  pgoyette         EFI_PHYSICAL_ADDRESS    DataBlock;
    616  1.2.14.1  pgoyette        EFI_PHYSICAL_ADDRESS    ContinuationPointer;
    617  1.2.14.1  pgoyette     } Union;
    618  1.2.14.1  pgoyette } EFI_CAPSULE_BLOCK_DESCRIPTOR;
    619  1.2.14.1  pgoyette 
    620  1.2.14.1  pgoyette typedef struct {
    621  1.2.14.1  pgoyette     EFI_GUID                    CapsuleGuid;
    622  1.2.14.1  pgoyette     UINT32                      HeaderSize;
    623  1.2.14.1  pgoyette     UINT32                      Flags;
    624  1.2.14.1  pgoyette     UINT32                      CapsuleImageSize;
    625  1.2.14.1  pgoyette } EFI_CAPSULE_HEADER;
    626  1.2.14.1  pgoyette 
    627  1.2.14.1  pgoyette #define CAPSULE_FLAGS_PERSIST_ACROSS_RESET    0x00010000
    628  1.2.14.1  pgoyette #define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE   0x00020000
    629  1.2.14.1  pgoyette #define CAPSULE_FLAGS_INITIATE_RESET          0x00040000
    630  1.2.14.1  pgoyette 
    631  1.2.14.1  pgoyette typedef
    632  1.2.14.1  pgoyette EFI_STATUS
    633  1.2.14.1  pgoyette (EFIAPI *EFI_UPDATE_CAPSULE) (
    634  1.2.14.1  pgoyette     IN EFI_CAPSULE_HEADER       **CapsuleHeaderArray,
    635  1.2.14.1  pgoyette     IN UINTN                    CapsuleCount,
    636  1.2.14.1  pgoyette     IN EFI_PHYSICAL_ADDRESS     ScatterGatherList OPTIONAL
    637  1.2.14.1  pgoyette     );
    638  1.2.14.1  pgoyette 
    639  1.2.14.1  pgoyette typedef
    640  1.2.14.1  pgoyette EFI_STATUS
    641  1.2.14.1  pgoyette (EFIAPI *EFI_QUERY_CAPSULE_CAPABILITIES) (
    642  1.2.14.1  pgoyette     IN  EFI_CAPSULE_HEADER       **CapsuleHeaderArray,
    643  1.2.14.1  pgoyette     IN  UINTN                    CapsuleCount,
    644  1.2.14.1  pgoyette     OUT UINT64                   *MaximumCapsuleSize,
    645  1.2.14.1  pgoyette     OUT EFI_RESET_TYPE           *ResetType
    646  1.2.14.1  pgoyette     );
    647  1.2.14.1  pgoyette 
    648  1.2.14.1  pgoyette typedef
    649  1.2.14.1  pgoyette EFI_STATUS
    650  1.2.14.1  pgoyette (EFIAPI *EFI_QUERY_VARIABLE_INFO) (
    651  1.2.14.1  pgoyette     IN  UINT32                  Attributes,
    652  1.2.14.1  pgoyette     OUT UINT64                  *MaximumVariableStorageSize,
    653  1.2.14.1  pgoyette     OUT UINT64                  *RemainingVariableStorageSize,
    654  1.2.14.1  pgoyette     OUT UINT64                  *MaximumVariableSize
    655  1.2.14.1  pgoyette     );
    656  1.2.14.1  pgoyette 
    657       1.1  jakllsch //
    658       1.1  jakllsch // Protocol handler functions
    659       1.1  jakllsch //
    660       1.1  jakllsch 
    661       1.1  jakllsch typedef enum {
    662       1.1  jakllsch     EFI_NATIVE_INTERFACE,
    663       1.1  jakllsch     EFI_PCODE_INTERFACE
    664       1.1  jakllsch } EFI_INTERFACE_TYPE;
    665       1.1  jakllsch 
    666       1.1  jakllsch typedef
    667       1.1  jakllsch EFI_STATUS
    668       1.1  jakllsch (EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) (
    669       1.1  jakllsch     IN OUT EFI_HANDLE           *Handle,
    670       1.1  jakllsch     IN EFI_GUID                 *Protocol,
    671       1.1  jakllsch     IN EFI_INTERFACE_TYPE       InterfaceType,
    672       1.1  jakllsch     IN VOID                     *Interface
    673       1.1  jakllsch     );
    674       1.1  jakllsch 
    675       1.1  jakllsch typedef
    676       1.1  jakllsch EFI_STATUS
    677       1.1  jakllsch (EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) (
    678       1.1  jakllsch     IN EFI_HANDLE               Handle,
    679       1.1  jakllsch     IN EFI_GUID                 *Protocol,
    680       1.1  jakllsch     IN VOID                     *OldInterface,
    681       1.1  jakllsch     IN VOID                     *NewInterface
    682       1.1  jakllsch     );
    683       1.1  jakllsch 
    684       1.1  jakllsch typedef
    685       1.1  jakllsch EFI_STATUS
    686       1.1  jakllsch (EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) (
    687       1.1  jakllsch     IN EFI_HANDLE               Handle,
    688       1.1  jakllsch     IN EFI_GUID                 *Protocol,
    689       1.1  jakllsch     IN VOID                     *Interface
    690       1.1  jakllsch     );
    691       1.1  jakllsch 
    692       1.1  jakllsch typedef
    693       1.1  jakllsch EFI_STATUS
    694       1.1  jakllsch (EFIAPI *EFI_HANDLE_PROTOCOL) (
    695       1.1  jakllsch     IN EFI_HANDLE               Handle,
    696       1.1  jakllsch     IN EFI_GUID                 *Protocol,
    697       1.1  jakllsch     OUT VOID                    **Interface
    698       1.1  jakllsch     );
    699       1.1  jakllsch 
    700       1.1  jakllsch typedef
    701       1.1  jakllsch EFI_STATUS
    702       1.1  jakllsch (EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) (
    703       1.1  jakllsch     IN EFI_GUID                 *Protocol,
    704       1.1  jakllsch     IN EFI_EVENT                Event,
    705       1.1  jakllsch     OUT VOID                    **Registration
    706       1.1  jakllsch     );
    707       1.1  jakllsch 
    708       1.1  jakllsch typedef
    709       1.1  jakllsch EFI_STATUS
    710       1.1  jakllsch (EFIAPI *EFI_LOCATE_HANDLE) (
    711       1.1  jakllsch     IN EFI_LOCATE_SEARCH_TYPE   SearchType,
    712       1.1  jakllsch     IN EFI_GUID                 *Protocol OPTIONAL,
    713       1.1  jakllsch     IN VOID                     *SearchKey OPTIONAL,
    714       1.1  jakllsch     IN OUT UINTN                *BufferSize,
    715       1.1  jakllsch     OUT EFI_HANDLE              *Buffer
    716       1.1  jakllsch     );
    717       1.1  jakllsch 
    718       1.1  jakllsch typedef
    719       1.1  jakllsch EFI_STATUS
    720       1.1  jakllsch (EFIAPI *EFI_LOCATE_DEVICE_PATH) (
    721       1.1  jakllsch     IN EFI_GUID                 *Protocol,
    722       1.1  jakllsch     IN OUT EFI_DEVICE_PATH      **DevicePath,
    723       1.1  jakllsch     OUT EFI_HANDLE              *Device
    724       1.1  jakllsch     );
    725       1.1  jakllsch 
    726       1.1  jakllsch typedef
    727       1.1  jakllsch EFI_STATUS
    728       1.1  jakllsch (EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) (
    729       1.1  jakllsch     IN EFI_GUID                 *Guid,
    730       1.1  jakllsch     IN VOID                     *Table
    731       1.1  jakllsch     );
    732       1.1  jakllsch 
    733       1.1  jakllsch typedef
    734       1.1  jakllsch EFI_STATUS
    735       1.1  jakllsch (EFIAPI *EFI_RESERVED_SERVICE) (
    736       1.1  jakllsch     );
    737       1.1  jakllsch 
    738       1.1  jakllsch //
    739       1.1  jakllsch // Standard EFI table header
    740       1.1  jakllsch //
    741       1.1  jakllsch 
    742  1.2.14.1  pgoyette typedef struct _EFI_TABLE_HEADER {
    743       1.1  jakllsch     UINT64                      Signature;
    744       1.1  jakllsch     UINT32                      Revision;
    745       1.1  jakllsch     UINT32                      HeaderSize;
    746       1.1  jakllsch     UINT32                      CRC32;
    747       1.1  jakllsch     UINT32                      Reserved;
    748       1.1  jakllsch } EFI_TABLE_HEADER;
    749       1.1  jakllsch 
    750       1.1  jakllsch 
    751       1.1  jakllsch //
    752       1.1  jakllsch // EFI Runtime Serivces Table
    753       1.1  jakllsch //
    754       1.1  jakllsch 
    755       1.1  jakllsch #define EFI_RUNTIME_SERVICES_SIGNATURE  0x56524553544e5552
    756       1.1  jakllsch #define EFI_RUNTIME_SERVICES_REVISION   (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
    757       1.1  jakllsch 
    758       1.1  jakllsch typedef struct  {
    759       1.1  jakllsch     EFI_TABLE_HEADER                Hdr;
    760       1.1  jakllsch 
    761       1.1  jakllsch     //
    762       1.1  jakllsch     // Time services
    763       1.1  jakllsch     //
    764       1.1  jakllsch 
    765       1.1  jakllsch     EFI_GET_TIME                    GetTime;
    766       1.1  jakllsch     EFI_SET_TIME                    SetTime;
    767       1.1  jakllsch     EFI_GET_WAKEUP_TIME             GetWakeupTime;
    768       1.1  jakllsch     EFI_SET_WAKEUP_TIME             SetWakeupTime;
    769       1.1  jakllsch 
    770       1.1  jakllsch     //
    771       1.1  jakllsch     // Virtual memory services
    772       1.1  jakllsch     //
    773       1.1  jakllsch 
    774       1.1  jakllsch     EFI_SET_VIRTUAL_ADDRESS_MAP     SetVirtualAddressMap;
    775       1.1  jakllsch     EFI_CONVERT_POINTER             ConvertPointer;
    776       1.1  jakllsch 
    777       1.1  jakllsch     //
    778       1.1  jakllsch     // Variable serviers
    779       1.1  jakllsch     //
    780       1.1  jakllsch 
    781       1.1  jakllsch     EFI_GET_VARIABLE                GetVariable;
    782       1.1  jakllsch     EFI_GET_NEXT_VARIABLE_NAME      GetNextVariableName;
    783       1.1  jakllsch     EFI_SET_VARIABLE                SetVariable;
    784       1.1  jakllsch 
    785       1.1  jakllsch     //
    786       1.1  jakllsch     // Misc
    787       1.1  jakllsch     //
    788       1.1  jakllsch 
    789       1.1  jakllsch     EFI_GET_NEXT_HIGH_MONO_COUNT    GetNextHighMonotonicCount;
    790       1.1  jakllsch     EFI_RESET_SYSTEM                ResetSystem;
    791       1.1  jakllsch 
    792  1.2.14.1  pgoyette     EFI_UPDATE_CAPSULE              UpdateCapsule;
    793  1.2.14.1  pgoyette     EFI_QUERY_CAPSULE_CAPABILITIES  QueryCapsuleCapabilities;
    794  1.2.14.1  pgoyette     EFI_QUERY_VARIABLE_INFO         QueryVariableInfo;
    795       1.1  jakllsch } EFI_RUNTIME_SERVICES;
    796       1.1  jakllsch 
    797       1.1  jakllsch 
    798       1.1  jakllsch //
    799       1.1  jakllsch // EFI Boot Services Table
    800       1.1  jakllsch //
    801       1.1  jakllsch 
    802       1.1  jakllsch #define EFI_BOOT_SERVICES_SIGNATURE     0x56524553544f4f42
    803       1.1  jakllsch #define EFI_BOOT_SERVICES_REVISION      (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
    804       1.1  jakllsch 
    805       1.1  jakllsch typedef struct _EFI_BOOT_SERVICES {
    806       1.1  jakllsch 
    807       1.1  jakllsch     EFI_TABLE_HEADER                Hdr;
    808       1.1  jakllsch 
    809       1.1  jakllsch     //
    810       1.1  jakllsch     // Task priority functions
    811       1.1  jakllsch     //
    812       1.1  jakllsch 
    813       1.1  jakllsch     EFI_RAISE_TPL                   RaiseTPL;
    814       1.1  jakllsch     EFI_RESTORE_TPL                 RestoreTPL;
    815       1.1  jakllsch 
    816       1.1  jakllsch     //
    817       1.1  jakllsch     // Memory functions
    818       1.1  jakllsch     //
    819       1.1  jakllsch 
    820       1.1  jakllsch     EFI_ALLOCATE_PAGES              AllocatePages;
    821       1.1  jakllsch     EFI_FREE_PAGES                  FreePages;
    822       1.1  jakllsch     EFI_GET_MEMORY_MAP              GetMemoryMap;
    823       1.1  jakllsch     EFI_ALLOCATE_POOL               AllocatePool;
    824       1.1  jakllsch     EFI_FREE_POOL                   FreePool;
    825       1.1  jakllsch 
    826       1.1  jakllsch     //
    827       1.1  jakllsch     // Event & timer functions
    828       1.1  jakllsch     //
    829       1.1  jakllsch 
    830       1.1  jakllsch     EFI_CREATE_EVENT                CreateEvent;
    831       1.1  jakllsch     EFI_SET_TIMER                   SetTimer;
    832       1.1  jakllsch     EFI_WAIT_FOR_EVENT              WaitForEvent;
    833       1.1  jakllsch     EFI_SIGNAL_EVENT                SignalEvent;
    834       1.1  jakllsch     EFI_CLOSE_EVENT                 CloseEvent;
    835       1.1  jakllsch     EFI_CHECK_EVENT                 CheckEvent;
    836       1.1  jakllsch 
    837       1.1  jakllsch     //
    838       1.1  jakllsch     // Protocol handler functions
    839       1.1  jakllsch     //
    840       1.1  jakllsch 
    841       1.1  jakllsch     EFI_INSTALL_PROTOCOL_INTERFACE  InstallProtocolInterface;
    842       1.1  jakllsch     EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface;
    843       1.1  jakllsch     EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface;
    844       1.1  jakllsch     EFI_HANDLE_PROTOCOL             HandleProtocol;
    845       1.1  jakllsch     EFI_HANDLE_PROTOCOL             PCHandleProtocol;
    846       1.1  jakllsch     EFI_REGISTER_PROTOCOL_NOTIFY    RegisterProtocolNotify;
    847       1.1  jakllsch     EFI_LOCATE_HANDLE               LocateHandle;
    848       1.1  jakllsch     EFI_LOCATE_DEVICE_PATH          LocateDevicePath;
    849       1.1  jakllsch     EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable;
    850       1.1  jakllsch 
    851       1.1  jakllsch     //
    852       1.1  jakllsch     // Image functions
    853       1.1  jakllsch     //
    854       1.1  jakllsch 
    855       1.1  jakllsch     EFI_IMAGE_LOAD                  LoadImage;
    856       1.1  jakllsch     EFI_IMAGE_START                 StartImage;
    857       1.1  jakllsch     EFI_EXIT                        Exit;
    858       1.1  jakllsch     EFI_IMAGE_UNLOAD                UnloadImage;
    859       1.1  jakllsch     EFI_EXIT_BOOT_SERVICES          ExitBootServices;
    860       1.1  jakllsch 
    861       1.1  jakllsch     //
    862       1.1  jakllsch     // Misc functions
    863       1.1  jakllsch     //
    864       1.1  jakllsch 
    865       1.1  jakllsch     EFI_GET_NEXT_MONOTONIC_COUNT    GetNextMonotonicCount;
    866       1.1  jakllsch     EFI_STALL                       Stall;
    867       1.1  jakllsch     EFI_SET_WATCHDOG_TIMER          SetWatchdogTimer;
    868       1.1  jakllsch 
    869       1.1  jakllsch     //
    870       1.1  jakllsch     // DriverSupport Services
    871       1.1  jakllsch     //
    872       1.1  jakllsch 
    873       1.1  jakllsch     EFI_CONNECT_CONTROLLER          ConnectController;
    874       1.1  jakllsch     EFI_DISCONNECT_CONTROLLER       DisconnectController;
    875       1.1  jakllsch 
    876       1.1  jakllsch     //
    877       1.1  jakllsch     // Open and Close Protocol Services
    878       1.1  jakllsch     //
    879       1.1  jakllsch     EFI_OPEN_PROTOCOL               OpenProtocol;
    880       1.1  jakllsch     EFI_CLOSE_PROTOCOL              CloseProtocol;
    881       1.1  jakllsch     EFI_OPEN_PROTOCOL_INFORMATION   OpenProtocolInformation;
    882       1.1  jakllsch 
    883       1.1  jakllsch     //
    884       1.1  jakllsch     // Library Services
    885       1.1  jakllsch     //
    886       1.1  jakllsch     EFI_PROTOCOLS_PER_HANDLE        ProtocolsPerHandle;
    887       1.1  jakllsch     EFI_LOCATE_HANDLE_BUFFER        LocateHandleBuffer;
    888       1.1  jakllsch     EFI_LOCATE_PROTOCOL             LocateProtocol;
    889       1.1  jakllsch     EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces;
    890       1.1  jakllsch     EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces;
    891       1.1  jakllsch 
    892       1.1  jakllsch     //
    893       1.1  jakllsch     // 32-bit CRC Services
    894       1.1  jakllsch     //
    895       1.1  jakllsch     EFI_CALCULATE_CRC32             CalculateCrc32;
    896       1.1  jakllsch 
    897       1.1  jakllsch     //
    898       1.1  jakllsch     // Misc Services
    899       1.1  jakllsch     //
    900       1.1  jakllsch     EFI_COPY_MEM                    CopyMem;
    901       1.1  jakllsch     EFI_SET_MEM                     SetMem;
    902       1.1  jakllsch     EFI_CREATE_EVENT_EX             CreateEventEx;
    903       1.1  jakllsch } EFI_BOOT_SERVICES;
    904       1.1  jakllsch 
    905       1.1  jakllsch 
    906       1.1  jakllsch //
    907       1.1  jakllsch // EFI Configuration Table and GUID definitions
    908       1.1  jakllsch //
    909       1.1  jakllsch 
    910       1.1  jakllsch #define MPS_TABLE_GUID    \
    911       1.1  jakllsch     { 0xeb9d2d2f, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
    912       1.1  jakllsch 
    913       1.1  jakllsch #define ACPI_TABLE_GUID    \
    914       1.1  jakllsch     { 0xeb9d2d30, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
    915       1.1  jakllsch 
    916       1.1  jakllsch #define ACPI_20_TABLE_GUID  \
    917       1.1  jakllsch     { 0x8868e871, 0xe4f1, 0x11d3, {0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} }
    918       1.1  jakllsch 
    919       1.1  jakllsch #define SMBIOS_TABLE_GUID    \
    920       1.1  jakllsch     { 0xeb9d2d31, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
    921       1.1  jakllsch 
    922  1.2.14.1  pgoyette #define SMBIOS3_TABLE_GUID    \
    923  1.2.14.1  pgoyette     { 0xf2fd1544, 0x9794, 0x4a2c, {0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94} }
    924  1.2.14.1  pgoyette 
    925       1.1  jakllsch #define SAL_SYSTEM_TABLE_GUID    \
    926       1.1  jakllsch     { 0xeb9d2d32, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
    927       1.1  jakllsch 
    928       1.2     scole /* DIG64 Headless Console & Debug Port Table. */
    929       1.2     scole #define	HCDP_TABLE_GUID    \
    930       1.2     scole     { 0xf951938d, 0x620b, 0x42ef, {0x82, 0x79, 0xa8, 0x4b, 0x79, 0x61, 0x78, 0x98} }
    931       1.1  jakllsch 
    932       1.1  jakllsch typedef struct _EFI_CONFIGURATION_TABLE {
    933       1.1  jakllsch     EFI_GUID                VendorGuid;
    934       1.1  jakllsch     VOID                    *VendorTable;
    935       1.1  jakllsch } EFI_CONFIGURATION_TABLE;
    936       1.1  jakllsch 
    937       1.1  jakllsch 
    938       1.1  jakllsch //
    939       1.1  jakllsch // EFI System Table
    940       1.1  jakllsch //
    941       1.1  jakllsch 
    942       1.1  jakllsch 
    943       1.1  jakllsch 
    944       1.1  jakllsch 
    945       1.1  jakllsch #define EFI_SYSTEM_TABLE_SIGNATURE      0x5453595320494249
    946       1.1  jakllsch #define EFI_SYSTEM_TABLE_REVISION      (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
    947       1.1  jakllsch 
    948       1.1  jakllsch typedef struct _EFI_SYSTEM_TABLE {
    949       1.1  jakllsch     EFI_TABLE_HEADER                Hdr;
    950       1.1  jakllsch 
    951       1.1  jakllsch     CHAR16                          *FirmwareVendor;
    952       1.1  jakllsch     UINT32                          FirmwareRevision;
    953       1.1  jakllsch 
    954       1.1  jakllsch     EFI_HANDLE                      ConsoleInHandle;
    955       1.1  jakllsch     SIMPLE_INPUT_INTERFACE          *ConIn;
    956       1.1  jakllsch 
    957       1.1  jakllsch     EFI_HANDLE                      ConsoleOutHandle;
    958       1.1  jakllsch     SIMPLE_TEXT_OUTPUT_INTERFACE    *ConOut;
    959       1.1  jakllsch 
    960       1.1  jakllsch     EFI_HANDLE                      StandardErrorHandle;
    961       1.1  jakllsch     SIMPLE_TEXT_OUTPUT_INTERFACE    *StdErr;
    962       1.1  jakllsch 
    963       1.1  jakllsch     EFI_RUNTIME_SERVICES            *RuntimeServices;
    964       1.1  jakllsch     EFI_BOOT_SERVICES               *BootServices;
    965       1.1  jakllsch 
    966       1.1  jakllsch     UINTN                           NumberOfTableEntries;
    967       1.1  jakllsch     EFI_CONFIGURATION_TABLE         *ConfigurationTable;
    968       1.1  jakllsch 
    969       1.1  jakllsch } EFI_SYSTEM_TABLE;
    970       1.1  jakllsch 
    971       1.1  jakllsch #endif
    972       1.1  jakllsch 
    973