Home | History | Annotate | Line # | Download | only in inc
efiapi.h revision 1.1.1.3
      1      1.1  jakllsch /*	$NetBSD: efiapi.h,v 1.1.1.3 2021/09/30 18:50:09 jmcneill 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.1.1.2  jmcneill #define EVT_EFI_SIGNAL_MAX                  4
    124  1.1.1.2  jmcneill 
    125  1.1.1.2  jmcneill #define EFI_EVENT_TIMER                         EVT_TIMER
    126  1.1.1.2  jmcneill #define EFI_EVENT_RUNTIME                       EVT_RUNTIME
    127  1.1.1.2  jmcneill #define EFI_EVENT_RUNTIME_CONTEXT               EVT_RUNTIME_CONTEXT
    128  1.1.1.2  jmcneill #define EFI_EVENT_NOTIFY_WAIT                   EVT_NOTIFY_WAIT
    129  1.1.1.2  jmcneill #define EFI_EVENT_NOTIFY_SIGNAL                 EVT_NOTIFY_SIGNAL
    130  1.1.1.2  jmcneill #define EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES     EVT_SIGNAL_EXIT_BOOT_SERVICES
    131  1.1.1.2  jmcneill #define EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE
    132  1.1.1.2  jmcneill #define EFI_EVENT_EFI_SIGNAL_MASK               EVT_EFI_SIGNAL_MASK
    133  1.1.1.2  jmcneill #define EFI_EVENT_EFI_SIGNAL_MAX                EVT_EFI_SIGNAL_MAX
    134  1.1.1.2  jmcneill 
    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.1.1.2  jmcneill #define TPL_APPLICATION       4
    199  1.1.1.2  jmcneill #define TPL_CALLBACK          8
    200  1.1.1.2  jmcneill #define TPL_NOTIFY           16
    201  1.1.1.2  jmcneill #define TPL_HIGH_LEVEL       31
    202  1.1.1.2  jmcneill #define EFI_TPL_APPLICATION  TPL_APPLICATION
    203  1.1.1.2  jmcneill #define EFI_TPL_CALLBACK     TPL_CALLBACK
    204  1.1.1.2  jmcneill #define EFI_TPL_NOTIFY       TPL_NOTIFY
    205  1.1.1.2  jmcneill #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.1.1.2  jmcneill #define EFI_VARIABLE_NON_VOLATILE                          0x00000001
    228  1.1.1.2  jmcneill #define EFI_VARIABLE_BOOTSERVICE_ACCESS                    0x00000002
    229  1.1.1.2  jmcneill #define EFI_VARIABLE_RUNTIME_ACCESS                        0x00000004
    230  1.1.1.2  jmcneill #define EFI_VARIABLE_HARDWARE_ERROR_RECORD                 0x00000008
    231  1.1.1.2  jmcneill #define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS            0x00000010
    232  1.1.1.2  jmcneill #define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020
    233  1.1.1.2  jmcneill #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.1.1.2  jmcneill #if !defined(EFI_IMAGE_MACHINE_EBC)
    332  1.1.1.2  jmcneill #define EFI_IMAGE_MACHINE_EBC      0x0EBC
    333  1.1.1.2  jmcneill #endif
    334  1.1.1.2  jmcneill 
    335  1.1.1.2  jmcneill #if !defined(EFI_IMAGE_MACHINE_X64)
    336  1.1.1.2  jmcneill #define EFI_IMAGE_MACHINE_X64       0x8664
    337  1.1.1.2  jmcneill #endif
    338  1.1.1.2  jmcneill 
    339  1.1.1.2  jmcneill #if !defined(EFI_IMAGE_MACHINE_ARMTHUMB_MIXED)
    340  1.1.1.2  jmcneill #define EFI_IMAGE_MACHINE_ARMTHUMB_MIXED 0x01C2
    341  1.1.1.2  jmcneill #endif
    342  1.1.1.2  jmcneill 
    343  1.1.1.2  jmcneill #if !defined(EFI_IMAGE_MACHINE_AARCH64)
    344  1.1.1.2  jmcneill #define EFI_IMAGE_MACHINE_AARCH64   0xAA64
    345  1.1.1.2  jmcneill #endif
    346  1.1.1.2  jmcneill 
    347  1.1.1.3  jmcneill #if !defined(EFI_IMAGE_MACHINE_RISCV32)
    348  1.1.1.3  jmcneill #define EFI_IMAGE_MACHINE_RISCV32   0x5032
    349  1.1.1.3  jmcneill #endif
    350  1.1.1.3  jmcneill 
    351  1.1.1.3  jmcneill #if !defined(EFI_IMAGE_MACHINE_RISCV64)
    352  1.1.1.3  jmcneill #define EFI_IMAGE_MACHINE_RISCV64   0x5064
    353  1.1.1.3  jmcneill #endif
    354  1.1.1.3  jmcneill 
    355  1.1.1.3  jmcneill #if !defined(EFI_IMAGE_MACHINE_RISCV128)
    356  1.1.1.3  jmcneill #define EFI_IMAGE_MACHINE_RISCV128  0x5128
    357  1.1.1.3  jmcneill #endif
    358  1.1.1.3  jmcneill 
    359      1.1  jakllsch // Image Entry prototype
    360      1.1  jakllsch 
    361      1.1  jakllsch typedef
    362      1.1  jakllsch EFI_STATUS
    363      1.1  jakllsch (EFIAPI *EFI_IMAGE_ENTRY_POINT) (
    364      1.1  jakllsch     IN EFI_HANDLE                   ImageHandle,
    365      1.1  jakllsch     IN struct _EFI_SYSTEM_TABLE     *SystemTable
    366      1.1  jakllsch     );
    367      1.1  jakllsch 
    368      1.1  jakllsch typedef
    369      1.1  jakllsch EFI_STATUS
    370      1.1  jakllsch (EFIAPI *EFI_IMAGE_LOAD) (
    371      1.1  jakllsch     IN BOOLEAN                      BootPolicy,
    372      1.1  jakllsch     IN EFI_HANDLE                   ParentImageHandle,
    373      1.1  jakllsch     IN EFI_DEVICE_PATH              *FilePath,
    374      1.1  jakllsch     IN VOID                         *SourceBuffer   OPTIONAL,
    375      1.1  jakllsch     IN UINTN                        SourceSize,
    376      1.1  jakllsch     OUT EFI_HANDLE                  *ImageHandle
    377      1.1  jakllsch     );
    378      1.1  jakllsch 
    379      1.1  jakllsch typedef
    380      1.1  jakllsch EFI_STATUS
    381      1.1  jakllsch (EFIAPI *EFI_IMAGE_START) (
    382      1.1  jakllsch     IN EFI_HANDLE                   ImageHandle,
    383      1.1  jakllsch     OUT UINTN                       *ExitDataSize,
    384      1.1  jakllsch     OUT CHAR16                      **ExitData  OPTIONAL
    385      1.1  jakllsch     );
    386      1.1  jakllsch 
    387      1.1  jakllsch typedef
    388      1.1  jakllsch EFI_STATUS
    389      1.1  jakllsch (EFIAPI *EFI_EXIT) (
    390      1.1  jakllsch     IN EFI_HANDLE                   ImageHandle,
    391      1.1  jakllsch     IN EFI_STATUS                   ExitStatus,
    392      1.1  jakllsch     IN UINTN                        ExitDataSize,
    393      1.1  jakllsch     IN CHAR16                       *ExitData OPTIONAL
    394      1.1  jakllsch     );
    395      1.1  jakllsch 
    396      1.1  jakllsch 
    397      1.1  jakllsch // Image handle
    398  1.1.1.2  jmcneill /*#define LOADED_IMAGE_PROTOCOL      \
    399      1.1  jakllsch     { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
    400      1.1  jakllsch 
    401      1.1  jakllsch #define EFI_IMAGE_INFORMATION_REVISION      0x1000
    402      1.1  jakllsch typedef struct {
    403      1.1  jakllsch     UINT32                          Revision;
    404      1.1  jakllsch     EFI_HANDLE                      ParentHandle;
    405      1.1  jakllsch     struct _EFI_SYSTEM_TABLE        *SystemTable;
    406      1.1  jakllsch 
    407      1.1  jakllsch     // Source location of image
    408      1.1  jakllsch     EFI_HANDLE                      DeviceHandle;
    409      1.1  jakllsch     EFI_DEVICE_PATH                 *FilePath;
    410      1.1  jakllsch     VOID                            *Reserved;
    411      1.1  jakllsch 
    412      1.1  jakllsch     // Images load options
    413      1.1  jakllsch     UINT32                          LoadOptionsSize;
    414      1.1  jakllsch     VOID                            *LoadOptions;
    415      1.1  jakllsch 
    416      1.1  jakllsch     // Location of where image was loaded
    417      1.1  jakllsch     VOID                            *ImageBase;
    418      1.1  jakllsch     UINT64                          ImageSize;
    419      1.1  jakllsch     EFI_MEMORY_TYPE                 ImageCodeType;
    420      1.1  jakllsch     EFI_MEMORY_TYPE                 ImageDataType;
    421      1.1  jakllsch 
    422      1.1  jakllsch     // If the driver image supports a dynamic unload request
    423      1.1  jakllsch     EFI_IMAGE_UNLOAD                Unload;
    424      1.1  jakllsch 
    425  1.1.1.2  jmcneill } EFI_LOADED_IMAGE;*/
    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_EXIT_BOOT_SERVICES) (
    431      1.1  jakllsch     IN EFI_HANDLE                   ImageHandle,
    432      1.1  jakllsch     IN UINTN                        MapKey
    433      1.1  jakllsch     );
    434      1.1  jakllsch 
    435      1.1  jakllsch //
    436      1.1  jakllsch // Misc
    437      1.1  jakllsch //
    438      1.1  jakllsch 
    439      1.1  jakllsch 
    440      1.1  jakllsch typedef
    441      1.1  jakllsch EFI_STATUS
    442      1.1  jakllsch (EFIAPI *EFI_STALL) (
    443      1.1  jakllsch     IN UINTN                    Microseconds
    444      1.1  jakllsch     );
    445      1.1  jakllsch 
    446      1.1  jakllsch typedef
    447      1.1  jakllsch EFI_STATUS
    448      1.1  jakllsch (EFIAPI *EFI_SET_WATCHDOG_TIMER) (
    449      1.1  jakllsch     IN UINTN                    Timeout,
    450      1.1  jakllsch     IN UINT64                   WatchdogCode,
    451      1.1  jakllsch     IN UINTN                    DataSize,
    452      1.1  jakllsch     IN CHAR16                   *WatchdogData OPTIONAL
    453      1.1  jakllsch     );
    454      1.1  jakllsch 
    455      1.1  jakllsch typedef
    456      1.1  jakllsch EFI_STATUS
    457      1.1  jakllsch (EFIAPI *EFI_CONNECT_CONTROLLER) (
    458      1.1  jakllsch     IN EFI_HANDLE               ControllerHandle,
    459      1.1  jakllsch     IN EFI_HANDLE               *DriverImageHandle OPTIONAL,
    460      1.1  jakllsch     IN EFI_DEVICE_PATH          *RemainingDevicePath OPTIONAL,
    461      1.1  jakllsch     IN BOOLEAN                  Recursive
    462      1.1  jakllsch     );
    463      1.1  jakllsch 
    464      1.1  jakllsch typedef
    465      1.1  jakllsch EFI_STATUS
    466      1.1  jakllsch (EFIAPI *EFI_DISCONNECT_CONTROLLER) (
    467      1.1  jakllsch     IN EFI_HANDLE               ControllerHandle,
    468      1.1  jakllsch     IN EFI_HANDLE               DriverImageHandle OPTIONAL,
    469      1.1  jakllsch     IN EFI_HANDLE               ChildHandle OPTIONAL
    470      1.1  jakllsch     );
    471      1.1  jakllsch 
    472      1.1  jakllsch #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL  0x00000001
    473      1.1  jakllsch #define EFI_OPEN_PROTOCOL_GET_PROTOCOL        0x00000002
    474      1.1  jakllsch #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL       0x00000004
    475      1.1  jakllsch #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008
    476      1.1  jakllsch #define EFI_OPEN_PROTOCOL_BY_DRIVER           0x00000010
    477      1.1  jakllsch #define EFI_OPEN_PROTOCOL_EXCLUSIVE           0x00000020
    478      1.1  jakllsch 
    479      1.1  jakllsch typedef
    480      1.1  jakllsch EFI_STATUS
    481      1.1  jakllsch (EFIAPI *EFI_OPEN_PROTOCOL) (
    482      1.1  jakllsch     IN EFI_HANDLE               Handle,
    483      1.1  jakllsch     IN EFI_GUID                 *Protocol,
    484      1.1  jakllsch     OUT VOID                    **Interface OPTIONAL,
    485      1.1  jakllsch     IN EFI_HANDLE               AgentHandle,
    486      1.1  jakllsch     IN EFI_HANDLE               ControllerHandle,
    487      1.1  jakllsch     IN UINT32                   Attributes
    488      1.1  jakllsch     );
    489      1.1  jakllsch 
    490      1.1  jakllsch typedef
    491      1.1  jakllsch EFI_STATUS
    492      1.1  jakllsch (EFIAPI *EFI_CLOSE_PROTOCOL) (
    493      1.1  jakllsch     IN EFI_HANDLE               Handle,
    494      1.1  jakllsch     IN EFI_GUID                 *Protocol,
    495      1.1  jakllsch     IN EFI_HANDLE               AgentHandle,
    496      1.1  jakllsch     IN EFI_HANDLE               ControllerHandle
    497      1.1  jakllsch     );
    498      1.1  jakllsch 
    499      1.1  jakllsch typedef struct {
    500      1.1  jakllsch     EFI_HANDLE                  AgentHandle;
    501      1.1  jakllsch     EFI_HANDLE                  ControllerHandle;
    502      1.1  jakllsch     UINT32                      Attributes;
    503      1.1  jakllsch     UINT32                      OpenCount;
    504      1.1  jakllsch } EFI_OPEN_PROTOCOL_INFORMATION_ENTRY;
    505      1.1  jakllsch 
    506      1.1  jakllsch typedef
    507      1.1  jakllsch EFI_STATUS
    508      1.1  jakllsch (EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION) (
    509      1.1  jakllsch     IN EFI_HANDLE               Handle,
    510      1.1  jakllsch     IN EFI_GUID                 *Protocol,
    511      1.1  jakllsch     OUT EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer,
    512      1.1  jakllsch     OUT UINTN                   *EntryCount
    513      1.1  jakllsch     );
    514      1.1  jakllsch 
    515      1.1  jakllsch typedef
    516      1.1  jakllsch EFI_STATUS
    517      1.1  jakllsch (EFIAPI *EFI_PROTOCOLS_PER_HANDLE) (
    518      1.1  jakllsch     IN EFI_HANDLE               Handle,
    519      1.1  jakllsch     OUT EFI_GUID                ***ProtocolBuffer,
    520      1.1  jakllsch     OUT UINTN                   *ProtocolBufferCount
    521      1.1  jakllsch     );
    522      1.1  jakllsch 
    523      1.1  jakllsch typedef enum {
    524      1.1  jakllsch     AllHandles,
    525      1.1  jakllsch     ByRegisterNotify,
    526      1.1  jakllsch     ByProtocol
    527      1.1  jakllsch } EFI_LOCATE_SEARCH_TYPE;
    528      1.1  jakllsch 
    529      1.1  jakllsch typedef
    530      1.1  jakllsch EFI_STATUS
    531      1.1  jakllsch (EFIAPI *EFI_LOCATE_HANDLE_BUFFER) (
    532      1.1  jakllsch     IN EFI_LOCATE_SEARCH_TYPE   SearchType,
    533      1.1  jakllsch     IN EFI_GUID                 *Protocol OPTIONAL,
    534      1.1  jakllsch     IN VOID                     *SearchKey OPTIONAL,
    535      1.1  jakllsch     IN OUT UINTN                *NoHandles,
    536      1.1  jakllsch     OUT EFI_HANDLE              **Buffer
    537      1.1  jakllsch     );
    538      1.1  jakllsch 
    539      1.1  jakllsch typedef
    540      1.1  jakllsch EFI_STATUS
    541      1.1  jakllsch (EFIAPI *EFI_LOCATE_PROTOCOL) (
    542      1.1  jakllsch     IN EFI_GUID                 *Protocol,
    543      1.1  jakllsch     IN VOID                     *Registration OPTIONAL,
    544      1.1  jakllsch     OUT VOID                    **Interface
    545      1.1  jakllsch     );
    546      1.1  jakllsch 
    547      1.1  jakllsch typedef
    548      1.1  jakllsch EFI_STATUS
    549      1.1  jakllsch (EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
    550      1.1  jakllsch     IN OUT EFI_HANDLE           *Handle,
    551      1.1  jakllsch     ...
    552      1.1  jakllsch     );
    553      1.1  jakllsch 
    554      1.1  jakllsch typedef
    555      1.1  jakllsch EFI_STATUS
    556      1.1  jakllsch (EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
    557      1.1  jakllsch     IN OUT EFI_HANDLE           Handle,
    558      1.1  jakllsch     ...
    559      1.1  jakllsch     );
    560      1.1  jakllsch 
    561      1.1  jakllsch typedef
    562      1.1  jakllsch EFI_STATUS
    563      1.1  jakllsch (EFIAPI *EFI_CALCULATE_CRC32) (
    564      1.1  jakllsch     IN VOID                     *Data,
    565      1.1  jakllsch     IN UINTN                    DataSize,
    566      1.1  jakllsch     OUT UINT32                  *Crc32
    567      1.1  jakllsch     );
    568      1.1  jakllsch 
    569      1.1  jakllsch typedef
    570      1.1  jakllsch VOID
    571      1.1  jakllsch (EFIAPI *EFI_COPY_MEM) (
    572      1.1  jakllsch     IN VOID                     *Destination,
    573      1.1  jakllsch     IN VOID                     *Source,
    574      1.1  jakllsch     IN UINTN                    Length
    575      1.1  jakllsch     );
    576      1.1  jakllsch 
    577      1.1  jakllsch typedef
    578      1.1  jakllsch VOID
    579      1.1  jakllsch (EFIAPI *EFI_SET_MEM) (
    580      1.1  jakllsch     IN VOID                     *Buffer,
    581      1.1  jakllsch     IN UINTN                    Size,
    582      1.1  jakllsch     IN UINT8                    Value
    583      1.1  jakllsch     );
    584      1.1  jakllsch 
    585      1.1  jakllsch 
    586      1.1  jakllsch typedef
    587      1.1  jakllsch EFI_STATUS
    588      1.1  jakllsch (EFIAPI *EFI_CREATE_EVENT_EX) (
    589      1.1  jakllsch     IN UINT32                   Type,
    590      1.1  jakllsch     IN EFI_TPL                  NotifyTpl,
    591      1.1  jakllsch     IN EFI_EVENT_NOTIFY         NotifyFunction OPTIONAL,
    592      1.1  jakllsch     IN const VOID               *NotifyContext OPTIONAL,
    593  1.1.1.3  jmcneill     IN const EFI_GUID           *EventGroup OPTIONAL,
    594      1.1  jakllsch     OUT EFI_EVENT               *Event
    595      1.1  jakllsch     );
    596      1.1  jakllsch 
    597      1.1  jakllsch typedef enum {
    598      1.1  jakllsch     EfiResetCold,
    599      1.1  jakllsch     EfiResetWarm,
    600      1.1  jakllsch     EfiResetShutdown
    601      1.1  jakllsch } EFI_RESET_TYPE;
    602      1.1  jakllsch 
    603      1.1  jakllsch typedef
    604      1.1  jakllsch EFI_STATUS
    605      1.1  jakllsch (EFIAPI *EFI_RESET_SYSTEM) (
    606      1.1  jakllsch     IN EFI_RESET_TYPE           ResetType,
    607      1.1  jakllsch     IN EFI_STATUS               ResetStatus,
    608      1.1  jakllsch     IN UINTN                    DataSize,
    609      1.1  jakllsch     IN CHAR16                   *ResetData OPTIONAL
    610      1.1  jakllsch     );
    611      1.1  jakllsch 
    612      1.1  jakllsch typedef
    613      1.1  jakllsch EFI_STATUS
    614      1.1  jakllsch (EFIAPI *EFI_GET_NEXT_MONOTONIC_COUNT) (
    615      1.1  jakllsch     OUT UINT64                  *Count
    616      1.1  jakllsch     );
    617      1.1  jakllsch 
    618      1.1  jakllsch typedef
    619      1.1  jakllsch EFI_STATUS
    620      1.1  jakllsch (EFIAPI *EFI_GET_NEXT_HIGH_MONO_COUNT) (
    621      1.1  jakllsch     OUT UINT32                  *HighCount
    622      1.1  jakllsch     );
    623      1.1  jakllsch 
    624  1.1.1.2  jmcneill typedef struct {
    625  1.1.1.2  jmcneill     UINT64                      Length;
    626  1.1.1.2  jmcneill     union {
    627  1.1.1.2  jmcneill         EFI_PHYSICAL_ADDRESS    DataBlock;
    628  1.1.1.2  jmcneill        EFI_PHYSICAL_ADDRESS    ContinuationPointer;
    629  1.1.1.2  jmcneill     } Union;
    630  1.1.1.2  jmcneill } EFI_CAPSULE_BLOCK_DESCRIPTOR;
    631  1.1.1.2  jmcneill 
    632  1.1.1.2  jmcneill typedef struct {
    633  1.1.1.2  jmcneill     EFI_GUID                    CapsuleGuid;
    634  1.1.1.2  jmcneill     UINT32                      HeaderSize;
    635  1.1.1.2  jmcneill     UINT32                      Flags;
    636  1.1.1.2  jmcneill     UINT32                      CapsuleImageSize;
    637  1.1.1.2  jmcneill } EFI_CAPSULE_HEADER;
    638  1.1.1.2  jmcneill 
    639  1.1.1.2  jmcneill #define CAPSULE_FLAGS_PERSIST_ACROSS_RESET    0x00010000
    640  1.1.1.2  jmcneill #define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE   0x00020000
    641  1.1.1.2  jmcneill #define CAPSULE_FLAGS_INITIATE_RESET          0x00040000
    642  1.1.1.2  jmcneill 
    643  1.1.1.2  jmcneill typedef
    644  1.1.1.2  jmcneill EFI_STATUS
    645  1.1.1.2  jmcneill (EFIAPI *EFI_UPDATE_CAPSULE) (
    646  1.1.1.2  jmcneill     IN EFI_CAPSULE_HEADER       **CapsuleHeaderArray,
    647  1.1.1.2  jmcneill     IN UINTN                    CapsuleCount,
    648  1.1.1.2  jmcneill     IN EFI_PHYSICAL_ADDRESS     ScatterGatherList OPTIONAL
    649  1.1.1.2  jmcneill     );
    650  1.1.1.2  jmcneill 
    651  1.1.1.2  jmcneill typedef
    652  1.1.1.2  jmcneill EFI_STATUS
    653  1.1.1.2  jmcneill (EFIAPI *EFI_QUERY_CAPSULE_CAPABILITIES) (
    654  1.1.1.2  jmcneill     IN  EFI_CAPSULE_HEADER       **CapsuleHeaderArray,
    655  1.1.1.2  jmcneill     IN  UINTN                    CapsuleCount,
    656  1.1.1.2  jmcneill     OUT UINT64                   *MaximumCapsuleSize,
    657  1.1.1.2  jmcneill     OUT EFI_RESET_TYPE           *ResetType
    658  1.1.1.2  jmcneill     );
    659  1.1.1.2  jmcneill 
    660  1.1.1.2  jmcneill typedef
    661  1.1.1.2  jmcneill EFI_STATUS
    662  1.1.1.2  jmcneill (EFIAPI *EFI_QUERY_VARIABLE_INFO) (
    663  1.1.1.2  jmcneill     IN  UINT32                  Attributes,
    664  1.1.1.2  jmcneill     OUT UINT64                  *MaximumVariableStorageSize,
    665  1.1.1.2  jmcneill     OUT UINT64                  *RemainingVariableStorageSize,
    666  1.1.1.2  jmcneill     OUT UINT64                  *MaximumVariableSize
    667  1.1.1.2  jmcneill     );
    668  1.1.1.2  jmcneill 
    669      1.1  jakllsch //
    670      1.1  jakllsch // Protocol handler functions
    671      1.1  jakllsch //
    672      1.1  jakllsch 
    673      1.1  jakllsch typedef enum {
    674      1.1  jakllsch     EFI_NATIVE_INTERFACE,
    675      1.1  jakllsch     EFI_PCODE_INTERFACE
    676      1.1  jakllsch } EFI_INTERFACE_TYPE;
    677      1.1  jakllsch 
    678      1.1  jakllsch typedef
    679      1.1  jakllsch EFI_STATUS
    680      1.1  jakllsch (EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) (
    681      1.1  jakllsch     IN OUT EFI_HANDLE           *Handle,
    682      1.1  jakllsch     IN EFI_GUID                 *Protocol,
    683      1.1  jakllsch     IN EFI_INTERFACE_TYPE       InterfaceType,
    684      1.1  jakllsch     IN VOID                     *Interface
    685      1.1  jakllsch     );
    686      1.1  jakllsch 
    687      1.1  jakllsch typedef
    688      1.1  jakllsch EFI_STATUS
    689      1.1  jakllsch (EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) (
    690      1.1  jakllsch     IN EFI_HANDLE               Handle,
    691      1.1  jakllsch     IN EFI_GUID                 *Protocol,
    692      1.1  jakllsch     IN VOID                     *OldInterface,
    693      1.1  jakllsch     IN VOID                     *NewInterface
    694      1.1  jakllsch     );
    695      1.1  jakllsch 
    696      1.1  jakllsch typedef
    697      1.1  jakllsch EFI_STATUS
    698      1.1  jakllsch (EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) (
    699      1.1  jakllsch     IN EFI_HANDLE               Handle,
    700      1.1  jakllsch     IN EFI_GUID                 *Protocol,
    701      1.1  jakllsch     IN VOID                     *Interface
    702      1.1  jakllsch     );
    703      1.1  jakllsch 
    704      1.1  jakllsch typedef
    705      1.1  jakllsch EFI_STATUS
    706      1.1  jakllsch (EFIAPI *EFI_HANDLE_PROTOCOL) (
    707      1.1  jakllsch     IN EFI_HANDLE               Handle,
    708      1.1  jakllsch     IN EFI_GUID                 *Protocol,
    709      1.1  jakllsch     OUT VOID                    **Interface
    710      1.1  jakllsch     );
    711      1.1  jakllsch 
    712      1.1  jakllsch typedef
    713      1.1  jakllsch EFI_STATUS
    714      1.1  jakllsch (EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) (
    715      1.1  jakllsch     IN EFI_GUID                 *Protocol,
    716      1.1  jakllsch     IN EFI_EVENT                Event,
    717      1.1  jakllsch     OUT VOID                    **Registration
    718      1.1  jakllsch     );
    719      1.1  jakllsch 
    720      1.1  jakllsch typedef
    721      1.1  jakllsch EFI_STATUS
    722      1.1  jakllsch (EFIAPI *EFI_LOCATE_HANDLE) (
    723      1.1  jakllsch     IN EFI_LOCATE_SEARCH_TYPE   SearchType,
    724      1.1  jakllsch     IN EFI_GUID                 *Protocol OPTIONAL,
    725      1.1  jakllsch     IN VOID                     *SearchKey OPTIONAL,
    726      1.1  jakllsch     IN OUT UINTN                *BufferSize,
    727      1.1  jakllsch     OUT EFI_HANDLE              *Buffer
    728      1.1  jakllsch     );
    729      1.1  jakllsch 
    730      1.1  jakllsch typedef
    731      1.1  jakllsch EFI_STATUS
    732      1.1  jakllsch (EFIAPI *EFI_LOCATE_DEVICE_PATH) (
    733      1.1  jakllsch     IN EFI_GUID                 *Protocol,
    734      1.1  jakllsch     IN OUT EFI_DEVICE_PATH      **DevicePath,
    735      1.1  jakllsch     OUT EFI_HANDLE              *Device
    736      1.1  jakllsch     );
    737      1.1  jakllsch 
    738      1.1  jakllsch typedef
    739      1.1  jakllsch EFI_STATUS
    740      1.1  jakllsch (EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) (
    741      1.1  jakllsch     IN EFI_GUID                 *Guid,
    742      1.1  jakllsch     IN VOID                     *Table
    743      1.1  jakllsch     );
    744      1.1  jakllsch 
    745      1.1  jakllsch typedef
    746      1.1  jakllsch EFI_STATUS
    747      1.1  jakllsch (EFIAPI *EFI_RESERVED_SERVICE) (
    748      1.1  jakllsch     );
    749      1.1  jakllsch 
    750      1.1  jakllsch //
    751      1.1  jakllsch // Standard EFI table header
    752      1.1  jakllsch //
    753      1.1  jakllsch 
    754  1.1.1.2  jmcneill typedef struct _EFI_TABLE_HEADER {
    755      1.1  jakllsch     UINT64                      Signature;
    756      1.1  jakllsch     UINT32                      Revision;
    757      1.1  jakllsch     UINT32                      HeaderSize;
    758      1.1  jakllsch     UINT32                      CRC32;
    759      1.1  jakllsch     UINT32                      Reserved;
    760      1.1  jakllsch } EFI_TABLE_HEADER;
    761      1.1  jakllsch 
    762      1.1  jakllsch 
    763      1.1  jakllsch //
    764      1.1  jakllsch // EFI Runtime Serivces Table
    765      1.1  jakllsch //
    766      1.1  jakllsch 
    767      1.1  jakllsch #define EFI_RUNTIME_SERVICES_SIGNATURE  0x56524553544e5552
    768      1.1  jakllsch #define EFI_RUNTIME_SERVICES_REVISION   (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
    769      1.1  jakllsch 
    770      1.1  jakllsch typedef struct  {
    771      1.1  jakllsch     EFI_TABLE_HEADER                Hdr;
    772      1.1  jakllsch 
    773      1.1  jakllsch     //
    774      1.1  jakllsch     // Time services
    775      1.1  jakllsch     //
    776      1.1  jakllsch 
    777      1.1  jakllsch     EFI_GET_TIME                    GetTime;
    778      1.1  jakllsch     EFI_SET_TIME                    SetTime;
    779      1.1  jakllsch     EFI_GET_WAKEUP_TIME             GetWakeupTime;
    780      1.1  jakllsch     EFI_SET_WAKEUP_TIME             SetWakeupTime;
    781      1.1  jakllsch 
    782      1.1  jakllsch     //
    783      1.1  jakllsch     // Virtual memory services
    784      1.1  jakllsch     //
    785      1.1  jakllsch 
    786      1.1  jakllsch     EFI_SET_VIRTUAL_ADDRESS_MAP     SetVirtualAddressMap;
    787      1.1  jakllsch     EFI_CONVERT_POINTER             ConvertPointer;
    788      1.1  jakllsch 
    789      1.1  jakllsch     //
    790      1.1  jakllsch     // Variable serviers
    791      1.1  jakllsch     //
    792      1.1  jakllsch 
    793      1.1  jakllsch     EFI_GET_VARIABLE                GetVariable;
    794      1.1  jakllsch     EFI_GET_NEXT_VARIABLE_NAME      GetNextVariableName;
    795      1.1  jakllsch     EFI_SET_VARIABLE                SetVariable;
    796      1.1  jakllsch 
    797      1.1  jakllsch     //
    798      1.1  jakllsch     // Misc
    799      1.1  jakllsch     //
    800      1.1  jakllsch 
    801      1.1  jakllsch     EFI_GET_NEXT_HIGH_MONO_COUNT    GetNextHighMonotonicCount;
    802      1.1  jakllsch     EFI_RESET_SYSTEM                ResetSystem;
    803      1.1  jakllsch 
    804  1.1.1.2  jmcneill     EFI_UPDATE_CAPSULE              UpdateCapsule;
    805  1.1.1.2  jmcneill     EFI_QUERY_CAPSULE_CAPABILITIES  QueryCapsuleCapabilities;
    806  1.1.1.2  jmcneill     EFI_QUERY_VARIABLE_INFO         QueryVariableInfo;
    807      1.1  jakllsch } EFI_RUNTIME_SERVICES;
    808      1.1  jakllsch 
    809      1.1  jakllsch 
    810      1.1  jakllsch //
    811      1.1  jakllsch // EFI Boot Services Table
    812      1.1  jakllsch //
    813      1.1  jakllsch 
    814      1.1  jakllsch #define EFI_BOOT_SERVICES_SIGNATURE     0x56524553544f4f42
    815      1.1  jakllsch #define EFI_BOOT_SERVICES_REVISION      (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
    816      1.1  jakllsch 
    817      1.1  jakllsch typedef struct _EFI_BOOT_SERVICES {
    818      1.1  jakllsch 
    819      1.1  jakllsch     EFI_TABLE_HEADER                Hdr;
    820      1.1  jakllsch 
    821      1.1  jakllsch     //
    822      1.1  jakllsch     // Task priority functions
    823      1.1  jakllsch     //
    824      1.1  jakllsch 
    825      1.1  jakllsch     EFI_RAISE_TPL                   RaiseTPL;
    826      1.1  jakllsch     EFI_RESTORE_TPL                 RestoreTPL;
    827      1.1  jakllsch 
    828      1.1  jakllsch     //
    829      1.1  jakllsch     // Memory functions
    830      1.1  jakllsch     //
    831      1.1  jakllsch 
    832      1.1  jakllsch     EFI_ALLOCATE_PAGES              AllocatePages;
    833      1.1  jakllsch     EFI_FREE_PAGES                  FreePages;
    834      1.1  jakllsch     EFI_GET_MEMORY_MAP              GetMemoryMap;
    835      1.1  jakllsch     EFI_ALLOCATE_POOL               AllocatePool;
    836      1.1  jakllsch     EFI_FREE_POOL                   FreePool;
    837      1.1  jakllsch 
    838      1.1  jakllsch     //
    839      1.1  jakllsch     // Event & timer functions
    840      1.1  jakllsch     //
    841      1.1  jakllsch 
    842      1.1  jakllsch     EFI_CREATE_EVENT                CreateEvent;
    843      1.1  jakllsch     EFI_SET_TIMER                   SetTimer;
    844      1.1  jakllsch     EFI_WAIT_FOR_EVENT              WaitForEvent;
    845      1.1  jakllsch     EFI_SIGNAL_EVENT                SignalEvent;
    846      1.1  jakllsch     EFI_CLOSE_EVENT                 CloseEvent;
    847      1.1  jakllsch     EFI_CHECK_EVENT                 CheckEvent;
    848      1.1  jakllsch 
    849      1.1  jakllsch     //
    850      1.1  jakllsch     // Protocol handler functions
    851      1.1  jakllsch     //
    852      1.1  jakllsch 
    853      1.1  jakllsch     EFI_INSTALL_PROTOCOL_INTERFACE  InstallProtocolInterface;
    854      1.1  jakllsch     EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface;
    855      1.1  jakllsch     EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface;
    856      1.1  jakllsch     EFI_HANDLE_PROTOCOL             HandleProtocol;
    857      1.1  jakllsch     EFI_HANDLE_PROTOCOL             PCHandleProtocol;
    858      1.1  jakllsch     EFI_REGISTER_PROTOCOL_NOTIFY    RegisterProtocolNotify;
    859      1.1  jakllsch     EFI_LOCATE_HANDLE               LocateHandle;
    860      1.1  jakllsch     EFI_LOCATE_DEVICE_PATH          LocateDevicePath;
    861      1.1  jakllsch     EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable;
    862      1.1  jakllsch 
    863      1.1  jakllsch     //
    864      1.1  jakllsch     // Image functions
    865      1.1  jakllsch     //
    866      1.1  jakllsch 
    867      1.1  jakllsch     EFI_IMAGE_LOAD                  LoadImage;
    868      1.1  jakllsch     EFI_IMAGE_START                 StartImage;
    869      1.1  jakllsch     EFI_EXIT                        Exit;
    870      1.1  jakllsch     EFI_IMAGE_UNLOAD                UnloadImage;
    871      1.1  jakllsch     EFI_EXIT_BOOT_SERVICES          ExitBootServices;
    872      1.1  jakllsch 
    873      1.1  jakllsch     //
    874      1.1  jakllsch     // Misc functions
    875      1.1  jakllsch     //
    876      1.1  jakllsch 
    877      1.1  jakllsch     EFI_GET_NEXT_MONOTONIC_COUNT    GetNextMonotonicCount;
    878      1.1  jakllsch     EFI_STALL                       Stall;
    879      1.1  jakllsch     EFI_SET_WATCHDOG_TIMER          SetWatchdogTimer;
    880      1.1  jakllsch 
    881      1.1  jakllsch     //
    882      1.1  jakllsch     // DriverSupport Services
    883      1.1  jakllsch     //
    884      1.1  jakllsch 
    885      1.1  jakllsch     EFI_CONNECT_CONTROLLER          ConnectController;
    886      1.1  jakllsch     EFI_DISCONNECT_CONTROLLER       DisconnectController;
    887      1.1  jakllsch 
    888      1.1  jakllsch     //
    889      1.1  jakllsch     // Open and Close Protocol Services
    890      1.1  jakllsch     //
    891      1.1  jakllsch     EFI_OPEN_PROTOCOL               OpenProtocol;
    892      1.1  jakllsch     EFI_CLOSE_PROTOCOL              CloseProtocol;
    893      1.1  jakllsch     EFI_OPEN_PROTOCOL_INFORMATION   OpenProtocolInformation;
    894      1.1  jakllsch 
    895      1.1  jakllsch     //
    896      1.1  jakllsch     // Library Services
    897      1.1  jakllsch     //
    898      1.1  jakllsch     EFI_PROTOCOLS_PER_HANDLE        ProtocolsPerHandle;
    899      1.1  jakllsch     EFI_LOCATE_HANDLE_BUFFER        LocateHandleBuffer;
    900      1.1  jakllsch     EFI_LOCATE_PROTOCOL             LocateProtocol;
    901      1.1  jakllsch     EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces;
    902      1.1  jakllsch     EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces;
    903      1.1  jakllsch 
    904      1.1  jakllsch     //
    905      1.1  jakllsch     // 32-bit CRC Services
    906      1.1  jakllsch     //
    907      1.1  jakllsch     EFI_CALCULATE_CRC32             CalculateCrc32;
    908      1.1  jakllsch 
    909      1.1  jakllsch     //
    910      1.1  jakllsch     // Misc Services
    911      1.1  jakllsch     //
    912      1.1  jakllsch     EFI_COPY_MEM                    CopyMem;
    913      1.1  jakllsch     EFI_SET_MEM                     SetMem;
    914      1.1  jakllsch     EFI_CREATE_EVENT_EX             CreateEventEx;
    915      1.1  jakllsch } EFI_BOOT_SERVICES;
    916      1.1  jakllsch 
    917      1.1  jakllsch 
    918      1.1  jakllsch //
    919      1.1  jakllsch // EFI Configuration Table and GUID definitions
    920      1.1  jakllsch //
    921      1.1  jakllsch 
    922      1.1  jakllsch #define MPS_TABLE_GUID    \
    923      1.1  jakllsch     { 0xeb9d2d2f, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
    924      1.1  jakllsch 
    925      1.1  jakllsch #define ACPI_TABLE_GUID    \
    926      1.1  jakllsch     { 0xeb9d2d30, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
    927      1.1  jakllsch 
    928      1.1  jakllsch #define ACPI_20_TABLE_GUID  \
    929      1.1  jakllsch     { 0x8868e871, 0xe4f1, 0x11d3, {0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} }
    930      1.1  jakllsch 
    931      1.1  jakllsch #define SMBIOS_TABLE_GUID    \
    932      1.1  jakllsch     { 0xeb9d2d31, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
    933      1.1  jakllsch 
    934  1.1.1.2  jmcneill #define SMBIOS3_TABLE_GUID    \
    935  1.1.1.2  jmcneill     { 0xf2fd1544, 0x9794, 0x4a2c, {0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94} }
    936  1.1.1.2  jmcneill 
    937      1.1  jakllsch #define SAL_SYSTEM_TABLE_GUID    \
    938      1.1  jakllsch     { 0xeb9d2d32, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
    939      1.1  jakllsch 
    940  1.1.1.3  jmcneill #define EFI_DTB_TABLE_GUID \
    941  1.1.1.3  jmcneill     { 0xb1b621d5, 0xf19c, 0x41a5, {0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0} }
    942      1.1  jakllsch 
    943      1.1  jakllsch typedef struct _EFI_CONFIGURATION_TABLE {
    944      1.1  jakllsch     EFI_GUID                VendorGuid;
    945      1.1  jakllsch     VOID                    *VendorTable;
    946      1.1  jakllsch } EFI_CONFIGURATION_TABLE;
    947      1.1  jakllsch 
    948      1.1  jakllsch 
    949      1.1  jakllsch //
    950      1.1  jakllsch // EFI System Table
    951      1.1  jakllsch //
    952      1.1  jakllsch 
    953      1.1  jakllsch 
    954      1.1  jakllsch 
    955      1.1  jakllsch 
    956      1.1  jakllsch #define EFI_SYSTEM_TABLE_SIGNATURE      0x5453595320494249
    957      1.1  jakllsch #define EFI_SYSTEM_TABLE_REVISION      (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
    958      1.1  jakllsch 
    959      1.1  jakllsch typedef struct _EFI_SYSTEM_TABLE {
    960      1.1  jakllsch     EFI_TABLE_HEADER                Hdr;
    961      1.1  jakllsch 
    962      1.1  jakllsch     CHAR16                          *FirmwareVendor;
    963      1.1  jakllsch     UINT32                          FirmwareRevision;
    964      1.1  jakllsch 
    965      1.1  jakllsch     EFI_HANDLE                      ConsoleInHandle;
    966      1.1  jakllsch     SIMPLE_INPUT_INTERFACE          *ConIn;
    967      1.1  jakllsch 
    968      1.1  jakllsch     EFI_HANDLE                      ConsoleOutHandle;
    969      1.1  jakllsch     SIMPLE_TEXT_OUTPUT_INTERFACE    *ConOut;
    970      1.1  jakllsch 
    971      1.1  jakllsch     EFI_HANDLE                      StandardErrorHandle;
    972      1.1  jakllsch     SIMPLE_TEXT_OUTPUT_INTERFACE    *StdErr;
    973      1.1  jakllsch 
    974      1.1  jakllsch     EFI_RUNTIME_SERVICES            *RuntimeServices;
    975      1.1  jakllsch     EFI_BOOT_SERVICES               *BootServices;
    976      1.1  jakllsch 
    977      1.1  jakllsch     UINTN                           NumberOfTableEntries;
    978      1.1  jakllsch     EFI_CONFIGURATION_TABLE         *ConfigurationTable;
    979      1.1  jakllsch 
    980      1.1  jakllsch } EFI_SYSTEM_TABLE;
    981      1.1  jakllsch 
    982      1.1  jakllsch #endif
    983      1.1  jakllsch 
    984