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