Home | History | Annotate | Line # | Download | only in inc
      1  1.3  jmcneill /*	$NetBSD: efiapi.h,v 1.4 2021/09/30 19:02:47 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.3  jmcneill #define EVT_EFI_SIGNAL_MAX                  4
    124  1.3  jmcneill 
    125  1.3  jmcneill #define EFI_EVENT_TIMER                         EVT_TIMER
    126  1.3  jmcneill #define EFI_EVENT_RUNTIME                       EVT_RUNTIME
    127  1.3  jmcneill #define EFI_EVENT_RUNTIME_CONTEXT               EVT_RUNTIME_CONTEXT
    128  1.3  jmcneill #define EFI_EVENT_NOTIFY_WAIT                   EVT_NOTIFY_WAIT
    129  1.3  jmcneill #define EFI_EVENT_NOTIFY_SIGNAL                 EVT_NOTIFY_SIGNAL
    130  1.3  jmcneill #define EFI_EVENT_SIGNAL_EXIT_BOOT_SERVICES     EVT_SIGNAL_EXIT_BOOT_SERVICES
    131  1.3  jmcneill #define EFI_EVENT_SIGNAL_VIRTUAL_ADDRESS_CHANGE EVT_SIGNAL_VIRTUAL_ADDRESS_CHANGE
    132  1.3  jmcneill #define EFI_EVENT_EFI_SIGNAL_MASK               EVT_EFI_SIGNAL_MASK
    133  1.3  jmcneill #define EFI_EVENT_EFI_SIGNAL_MAX                EVT_EFI_SIGNAL_MAX
    134  1.3  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.3  jmcneill #define TPL_APPLICATION       4
    199  1.3  jmcneill #define TPL_CALLBACK          8
    200  1.3  jmcneill #define TPL_NOTIFY           16
    201  1.3  jmcneill #define TPL_HIGH_LEVEL       31
    202  1.3  jmcneill #define EFI_TPL_APPLICATION  TPL_APPLICATION
    203  1.3  jmcneill #define EFI_TPL_CALLBACK     TPL_CALLBACK
    204  1.3  jmcneill #define EFI_TPL_NOTIFY       TPL_NOTIFY
    205  1.3  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.3  jmcneill #define EFI_VARIABLE_NON_VOLATILE                          0x00000001
    228  1.3  jmcneill #define EFI_VARIABLE_BOOTSERVICE_ACCESS                    0x00000002
    229  1.3  jmcneill #define EFI_VARIABLE_RUNTIME_ACCESS                        0x00000004
    230  1.3  jmcneill #define EFI_VARIABLE_HARDWARE_ERROR_RECORD                 0x00000008
    231  1.3  jmcneill #define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS            0x00000010
    232  1.3  jmcneill #define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS 0x00000020
    233  1.3  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.3  jmcneill #if !defined(EFI_IMAGE_MACHINE_EBC)
    332  1.3  jmcneill #define EFI_IMAGE_MACHINE_EBC      0x0EBC
    333  1.3  jmcneill #endif
    334  1.3  jmcneill 
    335  1.3  jmcneill #if !defined(EFI_IMAGE_MACHINE_X64)
    336  1.3  jmcneill #define EFI_IMAGE_MACHINE_X64       0x8664
    337  1.3  jmcneill #endif
    338  1.3  jmcneill 
    339  1.3  jmcneill #if !defined(EFI_IMAGE_MACHINE_ARMTHUMB_MIXED)
    340  1.3  jmcneill #define EFI_IMAGE_MACHINE_ARMTHUMB_MIXED 0x01C2
    341  1.3  jmcneill #endif
    342  1.3  jmcneill 
    343  1.3  jmcneill #if !defined(EFI_IMAGE_MACHINE_AARCH64)
    344  1.3  jmcneill #define EFI_IMAGE_MACHINE_AARCH64   0xAA64
    345  1.3  jmcneill #endif
    346  1.3  jmcneill 
    347  1.4  jmcneill #if !defined(EFI_IMAGE_MACHINE_RISCV32)
    348  1.4  jmcneill #define EFI_IMAGE_MACHINE_RISCV32   0x5032
    349  1.4  jmcneill #endif
    350  1.4  jmcneill 
    351  1.4  jmcneill #if !defined(EFI_IMAGE_MACHINE_RISCV64)
    352  1.4  jmcneill #define EFI_IMAGE_MACHINE_RISCV64   0x5064
    353  1.4  jmcneill #endif
    354  1.4  jmcneill 
    355  1.4  jmcneill #if !defined(EFI_IMAGE_MACHINE_RISCV128)
    356  1.4  jmcneill #define EFI_IMAGE_MACHINE_RISCV128  0x5128
    357  1.4  jmcneill #endif
    358  1.4  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.3  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.3  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.4  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.3  jmcneill typedef struct {
    625  1.3  jmcneill     UINT64                      Length;
    626  1.3  jmcneill     union {
    627  1.3  jmcneill         EFI_PHYSICAL_ADDRESS    DataBlock;
    628  1.3  jmcneill        EFI_PHYSICAL_ADDRESS    ContinuationPointer;
    629  1.3  jmcneill     } Union;
    630  1.3  jmcneill } EFI_CAPSULE_BLOCK_DESCRIPTOR;
    631  1.3  jmcneill 
    632  1.3  jmcneill typedef struct {
    633  1.3  jmcneill     EFI_GUID                    CapsuleGuid;
    634  1.3  jmcneill     UINT32                      HeaderSize;
    635  1.3  jmcneill     UINT32                      Flags;
    636  1.3  jmcneill     UINT32                      CapsuleImageSize;
    637  1.3  jmcneill } EFI_CAPSULE_HEADER;
    638  1.3  jmcneill 
    639  1.3  jmcneill #define CAPSULE_FLAGS_PERSIST_ACROSS_RESET    0x00010000
    640  1.3  jmcneill #define CAPSULE_FLAGS_POPULATE_SYSTEM_TABLE   0x00020000
    641  1.3  jmcneill #define CAPSULE_FLAGS_INITIATE_RESET          0x00040000
    642  1.3  jmcneill 
    643  1.3  jmcneill typedef
    644  1.3  jmcneill EFI_STATUS
    645  1.3  jmcneill (EFIAPI *EFI_UPDATE_CAPSULE) (
    646  1.3  jmcneill     IN EFI_CAPSULE_HEADER       **CapsuleHeaderArray,
    647  1.3  jmcneill     IN UINTN                    CapsuleCount,
    648  1.3  jmcneill     IN EFI_PHYSICAL_ADDRESS     ScatterGatherList OPTIONAL
    649  1.3  jmcneill     );
    650  1.3  jmcneill 
    651  1.3  jmcneill typedef
    652  1.3  jmcneill EFI_STATUS
    653  1.3  jmcneill (EFIAPI *EFI_QUERY_CAPSULE_CAPABILITIES) (
    654  1.3  jmcneill     IN  EFI_CAPSULE_HEADER       **CapsuleHeaderArray,
    655  1.3  jmcneill     IN  UINTN                    CapsuleCount,
    656  1.3  jmcneill     OUT UINT64                   *MaximumCapsuleSize,
    657  1.3  jmcneill     OUT EFI_RESET_TYPE           *ResetType
    658  1.3  jmcneill     );
    659  1.3  jmcneill 
    660  1.3  jmcneill typedef
    661  1.3  jmcneill EFI_STATUS
    662  1.3  jmcneill (EFIAPI *EFI_QUERY_VARIABLE_INFO) (
    663  1.3  jmcneill     IN  UINT32                  Attributes,
    664  1.3  jmcneill     OUT UINT64                  *MaximumVariableStorageSize,
    665  1.3  jmcneill     OUT UINT64                  *RemainingVariableStorageSize,
    666  1.3  jmcneill     OUT UINT64                  *MaximumVariableSize
    667  1.3  jmcneill     );
    668  1.3  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.3  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.3  jmcneill     EFI_UPDATE_CAPSULE              UpdateCapsule;
    805  1.3  jmcneill     EFI_QUERY_CAPSULE_CAPABILITIES  QueryCapsuleCapabilities;
    806  1.3  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.3  jmcneill #define SMBIOS3_TABLE_GUID    \
    935  1.3  jmcneill     { 0xf2fd1544, 0x9794, 0x4a2c, {0x99, 0x2e, 0xe5, 0xbb, 0xcf, 0x20, 0xe3, 0x94} }
    936  1.3  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.2     scole /* DIG64 Headless Console & Debug Port Table. */
    941  1.2     scole #define	HCDP_TABLE_GUID    \
    942  1.2     scole     { 0xf951938d, 0x620b, 0x42ef, {0x82, 0x79, 0xa8, 0x4b, 0x79, 0x61, 0x78, 0x98} }
    943  1.1  jakllsch 
    944  1.4  jmcneill #define EFI_DTB_TABLE_GUID \
    945  1.4  jmcneill     { 0xb1b621d5, 0xf19c, 0x41a5, {0x83, 0x0b, 0xd9, 0x15, 0x2c, 0x69, 0xaa, 0xe0} }
    946  1.4  jmcneill 
    947  1.1  jakllsch typedef struct _EFI_CONFIGURATION_TABLE {
    948  1.1  jakllsch     EFI_GUID                VendorGuid;
    949  1.1  jakllsch     VOID                    *VendorTable;
    950  1.1  jakllsch } EFI_CONFIGURATION_TABLE;
    951  1.1  jakllsch 
    952  1.1  jakllsch 
    953  1.1  jakllsch //
    954  1.1  jakllsch // EFI System Table
    955  1.1  jakllsch //
    956  1.1  jakllsch 
    957  1.1  jakllsch 
    958  1.1  jakllsch 
    959  1.1  jakllsch 
    960  1.1  jakllsch #define EFI_SYSTEM_TABLE_SIGNATURE      0x5453595320494249
    961  1.1  jakllsch #define EFI_SYSTEM_TABLE_REVISION      (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
    962  1.1  jakllsch 
    963  1.1  jakllsch typedef struct _EFI_SYSTEM_TABLE {
    964  1.1  jakllsch     EFI_TABLE_HEADER                Hdr;
    965  1.1  jakllsch 
    966  1.1  jakllsch     CHAR16                          *FirmwareVendor;
    967  1.1  jakllsch     UINT32                          FirmwareRevision;
    968  1.1  jakllsch 
    969  1.1  jakllsch     EFI_HANDLE                      ConsoleInHandle;
    970  1.1  jakllsch     SIMPLE_INPUT_INTERFACE          *ConIn;
    971  1.1  jakllsch 
    972  1.1  jakllsch     EFI_HANDLE                      ConsoleOutHandle;
    973  1.1  jakllsch     SIMPLE_TEXT_OUTPUT_INTERFACE    *ConOut;
    974  1.1  jakllsch 
    975  1.1  jakllsch     EFI_HANDLE                      StandardErrorHandle;
    976  1.1  jakllsch     SIMPLE_TEXT_OUTPUT_INTERFACE    *StdErr;
    977  1.1  jakllsch 
    978  1.1  jakllsch     EFI_RUNTIME_SERVICES            *RuntimeServices;
    979  1.1  jakllsch     EFI_BOOT_SERVICES               *BootServices;
    980  1.1  jakllsch 
    981  1.1  jakllsch     UINTN                           NumberOfTableEntries;
    982  1.1  jakllsch     EFI_CONFIGURATION_TABLE         *ConfigurationTable;
    983  1.1  jakllsch 
    984  1.1  jakllsch } EFI_SYSTEM_TABLE;
    985  1.1  jakllsch 
    986  1.1  jakllsch #endif
    987  1.1  jakllsch 
    988