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