Home | History | Annotate | Line # | Download | only in platform
acefiex.h revision 1.1.1.2.2.2
      1 /******************************************************************************
      2  *
      3  * Name: acefiex.h - Extra OS specific defines, etc. for EFI
      4  *
      5  *****************************************************************************/
      6 
      7 /*
      8  * Copyright (C) 2000 - 2017, Intel Corp.
      9  * All rights reserved.
     10  *
     11  * Redistribution and use in source and binary forms, with or without
     12  * modification, are permitted provided that the following conditions
     13  * are met:
     14  * 1. Redistributions of source code must retain the above copyright
     15  *    notice, this list of conditions, and the following disclaimer,
     16  *    without modification.
     17  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
     18  *    substantially similar to the "NO WARRANTY" disclaimer below
     19  *    ("Disclaimer") and any redistribution must be conditioned upon
     20  *    including a substantially similar Disclaimer requirement for further
     21  *    binary redistribution.
     22  * 3. Neither the names of the above-listed copyright holders nor the names
     23  *    of any contributors may be used to endorse or promote products derived
     24  *    from this software without specific prior written permission.
     25  *
     26  * Alternatively, this software may be distributed under the terms of the
     27  * GNU General Public License ("GPL") version 2 as published by the Free
     28  * Software Foundation.
     29  *
     30  * NO WARRANTY
     31  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
     32  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
     33  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTIBILITY AND FITNESS FOR
     34  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
     35  * HOLDERS OR CONTRIBUTORS BE LIABLE FOR SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
     36  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
     37  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
     38  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
     39  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
     40  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
     41  * POSSIBILITY OF SUCH DAMAGES.
     42  */
     43 
     44 #ifndef __ACEFIEX_H__
     45 #define __ACEFIEX_H__
     46 
     47 
     48 #ifndef ACPI_USE_SYSTEM_CLIBRARY
     49 
     50 typedef signed char                     int8_t;
     51 typedef short int                       int16_t;
     52 typedef int                             int32_t;
     53 typedef unsigned char                   uint8_t;
     54 typedef unsigned short int              uint16_t;
     55 typedef unsigned int                    uint32_t;
     56 typedef COMPILER_DEPENDENT_INT64        int64_t;
     57 typedef COMPILER_DEPENDENT_UINT64       uint64_t;
     58 
     59 #endif /* ACPI_USE_SYSTEM_CLIBRARY */
     60 
     61 #define ACPI_EFI_ERROR(a)               (((INTN) a) < 0)
     62 #define ACPI_EFI_SUCCESS                0
     63 #define ACPI_EFI_LOAD_ERROR             ACPI_EFI_ERR(1)
     64 #define ACPI_EFI_INVALID_PARAMETER      ACPI_EFI_ERR(2)
     65 #define ACPI_EFI_UNSUPPORTED            ACPI_EFI_ERR(3)
     66 #define ACPI_EFI_BAD_BUFFER_SIZE        ACPI_EFI_ERR(4)
     67 #define ACPI_EFI_BUFFER_TOO_SMALL       ACPI_EFI_ERR(5)
     68 #define ACPI_EFI_NOT_READY              ACPI_EFI_ERR(6)
     69 #define ACPI_EFI_DEVICE_ERROR           ACPI_EFI_ERR(7)
     70 #define ACPI_EFI_WRITE_PROTECTED        ACPI_EFI_ERR(8)
     71 #define ACPI_EFI_OUT_OF_RESOURCES       ACPI_EFI_ERR(9)
     72 #define ACPI_EFI_VOLUME_CORRUPTED       ACPI_EFI_ERR(10)
     73 #define ACPI_EFI_VOLUME_FULL            ACPI_EFI_ERR(11)
     74 #define ACPI_EFI_NO_MEDIA               ACPI_EFI_ERR(12)
     75 #define ACPI_EFI_MEDIA_CHANGED          ACPI_EFI_ERR(13)
     76 #define ACPI_EFI_NOT_FOUND              ACPI_EFI_ERR(14)
     77 #define ACPI_EFI_ACCESS_DENIED          ACPI_EFI_ERR(15)
     78 #define ACPI_EFI_NO_RESPONSE            ACPI_EFI_ERR(16)
     79 #define ACPI_EFI_NO_MAPPING             ACPI_EFI_ERR(17)
     80 #define ACPI_EFI_TIMEOUT                ACPI_EFI_ERR(18)
     81 #define ACPI_EFI_NOT_STARTED            ACPI_EFI_ERR(19)
     82 #define ACPI_EFI_ALREADY_STARTED        ACPI_EFI_ERR(20)
     83 #define ACPI_EFI_ABORTED                ACPI_EFI_ERR(21)
     84 #define ACPI_EFI_PROTOCOL_ERROR         ACPI_EFI_ERR(24)
     85 
     86 
     87 typedef UINTN ACPI_EFI_STATUS;
     88 typedef VOID *ACPI_EFI_HANDLE;
     89 typedef VOID *ACPI_EFI_EVENT;
     90 
     91 typedef struct {
     92     UINT32  Data1;
     93     UINT16  Data2;
     94     UINT16  Data3;
     95     UINT8   Data4[8];
     96 } ACPI_EFI_GUID;
     97 
     98 typedef struct {
     99     UINT16 Year;       /* 1998 - 20XX */
    100     UINT8  Month;      /* 1 - 12 */
    101     UINT8  Day;        /* 1 - 31 */
    102     UINT8  Hour;       /* 0 - 23 */
    103     UINT8  Minute;     /* 0 - 59 */
    104     UINT8  Second;     /* 0 - 59 */
    105     UINT8  Pad1;
    106     UINT32 Nanosecond; /* 0 - 999,999,999 */
    107     INT16  TimeZone;   /* -1440 to 1440 or 2047 */
    108     UINT8  Daylight;
    109     UINT8  Pad2;
    110 } ACPI_EFI_TIME;
    111 
    112 typedef struct _ACPI_EFI_DEVICE_PATH {
    113         UINT8                           Type;
    114         UINT8                           SubType;
    115         UINT8                           Length[2];
    116 } ACPI_EFI_DEVICE_PATH;
    117 
    118 typedef UINT64          ACPI_EFI_PHYSICAL_ADDRESS;
    119 typedef UINT64          ACPI_EFI_VIRTUAL_ADDRESS;
    120 
    121 typedef enum {
    122     AcpiEfiAllocateAnyPages,
    123     AcpiEfiAllocateMaxAddress,
    124     AcpiEfiAllocateAddress,
    125     AcpiEfiMaxAllocateType
    126 } ACPI_EFI_ALLOCATE_TYPE;
    127 
    128 typedef enum {
    129     AcpiEfiReservedMemoryType,
    130     AcpiEfiLoaderCode,
    131     AcpiEfiLoaderData,
    132     AcpiEfiBootServicesCode,
    133     AcpiEfiBootServicesData,
    134     AcpiEfiRuntimeServicesCode,
    135     AcpiEfiRuntimeServicesData,
    136     AcpiEfiConventionalMemory,
    137     AcpiEfiUnusableMemory,
    138     AcpiEfiACPIReclaimMemory,
    139     AcpiEfiACPIMemoryNVS,
    140     AcpiEfiMemoryMappedIO,
    141     AcpiEfiMemoryMappedIOPortSpace,
    142     AcpiEfiPalCode,
    143     AcpiEfiMaxMemoryType
    144 } ACPI_EFI_MEMORY_TYPE;
    145 
    146 /* possible caching types for the memory range */
    147 #define ACPI_EFI_MEMORY_UC      0x0000000000000001
    148 #define ACPI_EFI_MEMORY_WC      0x0000000000000002
    149 #define ACPI_EFI_MEMORY_WT      0x0000000000000004
    150 #define ACPI_EFI_MEMORY_WB      0x0000000000000008
    151 #define ACPI_EFI_MEMORY_UCE     0x0000000000000010
    152 
    153 /* physical memory protection on range */
    154 #define ACPI_EFI_MEMORY_WP      0x0000000000001000
    155 #define ACPI_EFI_MEMORY_RP      0x0000000000002000
    156 #define ACPI_EFI_MEMORY_XP      0x0000000000004000
    157 
    158 /* range requires a runtime mapping */
    159 #define ACPI_EFI_MEMORY_RUNTIME 0x8000000000000000
    160 
    161 #define ACPI_EFI_MEMORY_DESCRIPTOR_VERSION  1
    162 typedef struct {
    163     UINT32                          Type;
    164     UINT32                          Pad;
    165     ACPI_EFI_PHYSICAL_ADDRESS       PhysicalStart;
    166     ACPI_EFI_VIRTUAL_ADDRESS        VirtualStart;
    167     UINT64                          NumberOfPages;
    168     UINT64                          Attribute;
    169 } ACPI_EFI_MEMORY_DESCRIPTOR;
    170 
    171 typedef struct _ACPI_EFI_TABLE_HEARDER {
    172     UINT64                      Signature;
    173     UINT32                      Revision;
    174     UINT32                      HeaderSize;
    175     UINT32                      CRC32;
    176     UINT32                      Reserved;
    177 } ACPI_EFI_TABLE_HEADER;
    178 
    179 typedef
    180 ACPI_EFI_STATUS
    181 (ACPI_EFI_API *ACPI_EFI_UNKNOWN_INTERFACE) (
    182     void);
    183 
    184 
    185 /*
    186  * Text output protocol
    187  */
    188 #define ACPI_SIMPLE_TEXT_OUTPUT_PROTOCOL \
    189     { 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    190 
    191 typedef
    192 ACPI_EFI_STATUS
    193 (ACPI_EFI_API *ACPI_EFI_TEXT_RESET) (
    194     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    195     BOOLEAN                                     ExtendedVerification);
    196 
    197 typedef
    198 ACPI_EFI_STATUS
    199 (ACPI_EFI_API *ACPI_EFI_TEXT_OUTPUT_STRING) (
    200     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    201     CHAR16                                      *String);
    202 
    203 typedef
    204 ACPI_EFI_STATUS
    205 (ACPI_EFI_API *ACPI_EFI_TEXT_TEST_STRING) (
    206     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    207     CHAR16                                      *String);
    208 
    209 typedef
    210 ACPI_EFI_STATUS
    211 (ACPI_EFI_API *ACPI_EFI_TEXT_QUERY_MODE) (
    212     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    213     UINTN                                       ModeNumber,
    214     UINTN                                       *Columns,
    215     UINTN                                       *Rows);
    216 
    217 typedef
    218 ACPI_EFI_STATUS
    219 (ACPI_EFI_API *ACPI_EFI_TEXT_SET_MODE) (
    220     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    221     UINTN                                       ModeNumber);
    222 
    223 typedef
    224 ACPI_EFI_STATUS
    225 (ACPI_EFI_API *ACPI_EFI_TEXT_SET_ATTRIBUTE) (
    226     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    227     UINTN                                       Attribute);
    228 
    229 typedef
    230 ACPI_EFI_STATUS
    231 (ACPI_EFI_API *ACPI_EFI_TEXT_CLEAR_SCREEN) (
    232     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This);
    233 
    234 typedef
    235 ACPI_EFI_STATUS
    236 (ACPI_EFI_API *ACPI_EFI_TEXT_SET_CURSOR_POSITION) (
    237     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    238     UINTN                                       Column,
    239     UINTN                                       Row);
    240 
    241 typedef
    242 ACPI_EFI_STATUS
    243 (ACPI_EFI_API *ACPI_EFI_TEXT_ENABLE_CURSOR) (
    244     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    245     BOOLEAN                                     Enable);
    246 
    247 typedef struct {
    248     INT32                           MaxMode;
    249     INT32                           Mode;
    250     INT32                           Attribute;
    251     INT32                           CursorColumn;
    252     INT32                           CursorRow;
    253     BOOLEAN                         CursorVisible;
    254 } ACPI_SIMPLE_TEXT_OUTPUT_MODE;
    255 
    256 typedef struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE {
    257     ACPI_EFI_TEXT_RESET                 Reset;
    258 
    259     ACPI_EFI_TEXT_OUTPUT_STRING         OutputString;
    260     ACPI_EFI_TEXT_TEST_STRING           TestString;
    261 
    262     ACPI_EFI_TEXT_QUERY_MODE            QueryMode;
    263     ACPI_EFI_TEXT_SET_MODE              SetMode;
    264     ACPI_EFI_TEXT_SET_ATTRIBUTE         SetAttribute;
    265 
    266     ACPI_EFI_TEXT_CLEAR_SCREEN          ClearScreen;
    267     ACPI_EFI_TEXT_SET_CURSOR_POSITION   SetCursorPosition;
    268     ACPI_EFI_TEXT_ENABLE_CURSOR         EnableCursor;
    269 
    270     ACPI_SIMPLE_TEXT_OUTPUT_MODE        *Mode;
    271 } ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE;
    272 
    273 /*
    274  * Text input protocol
    275  */
    276 #define ACPI_SIMPLE_TEXT_INPUT_PROTOCOL  \
    277     { 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    278 
    279 typedef struct {
    280     UINT16                              ScanCode;
    281     CHAR16                              UnicodeChar;
    282 } ACPI_EFI_INPUT_KEY;
    283 
    284 /*
    285  * Baseline unicode control chars
    286  */
    287 #define CHAR_NULL                       0x0000
    288 #define CHAR_BACKSPACE                  0x0008
    289 #define CHAR_TAB                        0x0009
    290 #define CHAR_LINEFEED                   0x000A
    291 #define CHAR_CARRIAGE_RETURN            0x000D
    292 
    293 typedef
    294 ACPI_EFI_STATUS
    295 (ACPI_EFI_API *ACPI_EFI_INPUT_RESET) (
    296     struct _ACPI_SIMPLE_INPUT_INTERFACE         *This,
    297     BOOLEAN                                     ExtendedVerification);
    298 
    299 typedef
    300 ACPI_EFI_STATUS
    301 (ACPI_EFI_API *ACPI_EFI_INPUT_READ_KEY) (
    302     struct _ACPI_SIMPLE_INPUT_INTERFACE         *This,
    303     ACPI_EFI_INPUT_KEY                          *Key);
    304 
    305 typedef struct _ACPI_SIMPLE_INPUT_INTERFACE {
    306     ACPI_EFI_INPUT_RESET                    Reset;
    307     ACPI_EFI_INPUT_READ_KEY                 ReadKeyStroke;
    308     ACPI_EFI_EVENT                          WaitForKey;
    309 } ACPI_SIMPLE_INPUT_INTERFACE;
    310 
    311 
    312 /*
    313  * Simple file system protocol
    314  */
    315 #define ACPI_SIMPLE_FILE_SYSTEM_PROTOCOL \
    316     { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    317 
    318 typedef
    319 ACPI_EFI_STATUS
    320 (ACPI_EFI_API *ACPI_EFI_VOLUME_OPEN) (
    321     struct _ACPI_EFI_FILE_IO_INTERFACE          *This,
    322     struct _ACPI_EFI_FILE_HANDLE                **Root);
    323 
    324 #define ACPI_EFI_FILE_IO_INTERFACE_REVISION     0x00010000
    325 
    326 typedef struct _ACPI_EFI_FILE_IO_INTERFACE {
    327     UINT64                  Revision;
    328     ACPI_EFI_VOLUME_OPEN    OpenVolume;
    329 } ACPI_EFI_FILE_IO_INTERFACE;
    330 
    331 typedef
    332 ACPI_EFI_STATUS
    333 (ACPI_EFI_API *ACPI_EFI_FILE_OPEN) (
    334     struct _ACPI_EFI_FILE_HANDLE                *File,
    335     struct _ACPI_EFI_FILE_HANDLE                **NewHandle,
    336     CHAR16                                      *FileName,
    337     UINT64                                      OpenMode,
    338     UINT64                                      Attributes);
    339 
    340 /* Values for OpenMode used above */
    341 
    342 #define ACPI_EFI_FILE_MODE_READ     0x0000000000000001
    343 #define ACPI_EFI_FILE_MODE_WRITE    0x0000000000000002
    344 #define ACPI_EFI_FILE_MODE_CREATE   0x8000000000000000
    345 
    346 /* Values for Attribute used above */
    347 
    348 #define ACPI_EFI_FILE_READ_ONLY     0x0000000000000001
    349 #define ACPI_EFI_FILE_HIDDEN        0x0000000000000002
    350 #define ACPI_EFI_FILE_SYSTEM        0x0000000000000004
    351 #define ACPI_EFI_FILE_RESERVIED     0x0000000000000008
    352 #define ACPI_EFI_FILE_DIRECTORY     0x0000000000000010
    353 #define ACPI_EFI_FILE_ARCHIVE       0x0000000000000020
    354 #define ACPI_EFI_FILE_VALID_ATTR    0x0000000000000037
    355 
    356 typedef
    357 ACPI_EFI_STATUS
    358 (ACPI_EFI_API *ACPI_EFI_FILE_CLOSE) (
    359     struct _ACPI_EFI_FILE_HANDLE                *File);
    360 
    361 typedef
    362 ACPI_EFI_STATUS
    363 (ACPI_EFI_API *ACPI_EFI_FILE_DELETE) (
    364     struct _ACPI_EFI_FILE_HANDLE                *File);
    365 
    366 typedef
    367 ACPI_EFI_STATUS
    368 (ACPI_EFI_API *ACPI_EFI_FILE_READ) (
    369     struct _ACPI_EFI_FILE_HANDLE                *File,
    370     UINTN                                       *BufferSize,
    371     VOID                                        *Buffer);
    372 
    373 typedef
    374 ACPI_EFI_STATUS
    375 (ACPI_EFI_API *ACPI_EFI_FILE_WRITE) (
    376     struct _ACPI_EFI_FILE_HANDLE                *File,
    377     UINTN                                       *BufferSize,
    378     VOID                                        *Buffer);
    379 
    380 typedef
    381 ACPI_EFI_STATUS
    382 (ACPI_EFI_API *ACPI_EFI_FILE_SET_POSITION) (
    383     struct _ACPI_EFI_FILE_HANDLE                *File,
    384     UINT64                                      Position);
    385 
    386 typedef
    387 ACPI_EFI_STATUS
    388 (ACPI_EFI_API *ACPI_EFI_FILE_GET_POSITION) (
    389     struct _ACPI_EFI_FILE_HANDLE                *File,
    390     UINT64                                      *Position);
    391 
    392 #define ACPI_EFI_FILE_INFO_ID \
    393     { 0x9576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    394 
    395 typedef struct {
    396     UINT64 Size;
    397     UINT64 FileSize;
    398     UINT64 PhysicalSize;
    399     ACPI_EFI_TIME CreateTime;
    400     ACPI_EFI_TIME LastAccessTime;
    401     ACPI_EFI_TIME ModificationTime;
    402     UINT64 Attribute;
    403     CHAR16 FileName[1];
    404 } ACPI_EFI_FILE_INFO;
    405 
    406 #define SIZE_OF_ACPI_EFI_FILE_INFO  ACPI_OFFSET(ACPI_EFI_FILE_INFO, FileName)
    407 
    408 typedef
    409 ACPI_EFI_STATUS
    410 (ACPI_EFI_API *ACPI_EFI_FILE_GET_INFO) (
    411     struct _ACPI_EFI_FILE_HANDLE                *File,
    412     ACPI_EFI_GUID                               *InformationType,
    413     UINTN                                       *BufferSize,
    414     VOID                                        *Buffer);
    415 
    416 typedef
    417 ACPI_EFI_STATUS
    418 (ACPI_EFI_API *ACPI_EFI_FILE_SET_INFO) (
    419     struct _ACPI_EFI_FILE_HANDLE                *File,
    420     ACPI_EFI_GUID                               *InformationType,
    421     UINTN                                       BufferSize,
    422     VOID                                        *Buffer);
    423 
    424 typedef
    425 ACPI_EFI_STATUS
    426 (ACPI_EFI_API *ACPI_EFI_FILE_FLUSH) (
    427     struct _ACPI_EFI_FILE_HANDLE                *File);
    428 
    429 
    430 #define ACPI_EFI_FILE_HANDLE_REVISION           0x00010000
    431 
    432 typedef struct _ACPI_EFI_FILE_HANDLE {
    433     UINT64                      Revision;
    434     ACPI_EFI_FILE_OPEN          Open;
    435     ACPI_EFI_FILE_CLOSE         Close;
    436     ACPI_EFI_FILE_DELETE        Delete;
    437     ACPI_EFI_FILE_READ          Read;
    438     ACPI_EFI_FILE_WRITE         Write;
    439     ACPI_EFI_FILE_GET_POSITION  GetPosition;
    440     ACPI_EFI_FILE_SET_POSITION  SetPosition;
    441     ACPI_EFI_FILE_GET_INFO      GetInfo;
    442     ACPI_EFI_FILE_SET_INFO      SetInfo;
    443     ACPI_EFI_FILE_FLUSH         Flush;
    444 } ACPI_EFI_FILE_STRUCT, *ACPI_EFI_FILE_HANDLE;
    445 
    446 
    447 /*
    448  * Loaded image protocol
    449  */
    450 #define ACPI_EFI_LOADED_IMAGE_PROTOCOL \
    451     { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
    452 
    453 typedef
    454 ACPI_EFI_STATUS
    455 (ACPI_EFI_API *ACPI_EFI_IMAGE_ENTRY_POINT) (
    456     ACPI_EFI_HANDLE                         ImageHandle,
    457     struct _ACPI_EFI_SYSTEM_TABLE           *SystemTable);
    458 
    459 typedef
    460 ACPI_EFI_STATUS
    461 (ACPI_EFI_API *ACPI_EFI_IMAGE_LOAD) (
    462     BOOLEAN                         BootPolicy,
    463     ACPI_EFI_HANDLE                 ParentImageHandle,
    464     ACPI_EFI_DEVICE_PATH            *FilePath,
    465     VOID                            *SourceBuffer,
    466     UINTN                           SourceSize,
    467     ACPI_EFI_HANDLE                 *ImageHandle);
    468 
    469 typedef
    470 ACPI_EFI_STATUS
    471 (ACPI_EFI_API *ACPI_EFI_IMAGE_START) (
    472     ACPI_EFI_HANDLE                 ImageHandle,
    473     UINTN                           *ExitDataSize,
    474     CHAR16                          **ExitData);
    475 
    476 typedef
    477 ACPI_EFI_STATUS
    478 (ACPI_EFI_API *ACPI_EFI_EXIT) (
    479     ACPI_EFI_HANDLE                 ImageHandle,
    480     ACPI_EFI_STATUS                 ExitStatus,
    481     UINTN                           ExitDataSize,
    482     CHAR16                          *ExitData);
    483 
    484 typedef
    485 ACPI_EFI_STATUS
    486 (ACPI_EFI_API *ACPI_EFI_IMAGE_UNLOAD) (
    487     ACPI_EFI_HANDLE                 ImageHandle);
    488 
    489 
    490 typedef
    491 ACPI_EFI_STATUS
    492 (ACPI_EFI_API *ACPI_EFI_SET_WATCHDOG_TIMER) (
    493     UINTN                           Timeout,
    494     UINT64                          WatchdogCode,
    495     UINTN                           DataSize,
    496     CHAR16                          *WatchdogData);
    497 
    498 
    499 #define EFI_IMAGE_INFORMATION_REVISION      0x1000
    500 typedef struct {
    501     UINT32                          Revision;
    502     ACPI_EFI_HANDLE                 ParentHandle;
    503     struct _ACPI_EFI_SYSTEM_TABLE   *SystemTable;
    504     ACPI_EFI_HANDLE                 DeviceHandle;
    505     ACPI_EFI_DEVICE_PATH            *FilePath;
    506     VOID                            *Reserved;
    507     UINT32                          LoadOptionsSize;
    508     VOID                            *LoadOptions;
    509     VOID                            *ImageBase;
    510     UINT64                          ImageSize;
    511     ACPI_EFI_MEMORY_TYPE            ImageCodeType;
    512     ACPI_EFI_MEMORY_TYPE            ImageDataType;
    513     ACPI_EFI_IMAGE_UNLOAD           Unload;
    514 
    515 } ACPI_EFI_LOADED_IMAGE;
    516 
    517 
    518 /*
    519  * EFI Memory
    520  */
    521 typedef
    522 ACPI_EFI_STATUS
    523 (ACPI_EFI_API *ACPI_EFI_ALLOCATE_PAGES) (
    524     ACPI_EFI_ALLOCATE_TYPE          Type,
    525     ACPI_EFI_MEMORY_TYPE            MemoryType,
    526     UINTN                           NoPages,
    527     ACPI_EFI_PHYSICAL_ADDRESS       *Memory);
    528 
    529 typedef
    530 ACPI_EFI_STATUS
    531 (ACPI_EFI_API *ACPI_EFI_FREE_PAGES) (
    532     ACPI_EFI_PHYSICAL_ADDRESS       Memory,
    533     UINTN                           NoPages);
    534 
    535 typedef
    536 ACPI_EFI_STATUS
    537 (ACPI_EFI_API *ACPI_EFI_GET_MEMORY_MAP) (
    538     UINTN                           *MemoryMapSize,
    539     ACPI_EFI_MEMORY_DESCRIPTOR      *MemoryMap,
    540     UINTN                           *MapKey,
    541     UINTN                           *DescriptorSize,
    542     UINT32                          *DescriptorVersion);
    543 
    544 #define NextMemoryDescriptor(Ptr,Size)  ((ACPI_EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size))
    545 
    546 typedef
    547 ACPI_EFI_STATUS
    548 (ACPI_EFI_API *ACPI_EFI_ALLOCATE_POOL) (
    549     ACPI_EFI_MEMORY_TYPE            PoolType,
    550     UINTN                           Size,
    551     VOID                            **Buffer);
    552 
    553 typedef
    554 ACPI_EFI_STATUS
    555 (ACPI_EFI_API *ACPI_EFI_FREE_POOL) (
    556     VOID                            *Buffer);
    557 
    558 
    559 /*
    560  * Protocol handler functions
    561  */
    562 typedef enum {
    563     ACPI_EFI_NATIVE_INTERFACE,
    564     ACPI_EFI_PCODE_INTERFACE
    565 } ACPI_EFI_INTERFACE_TYPE;
    566 
    567 typedef enum {
    568     AcpiEfiAllHandles,
    569     AcpiEfiByRegisterNotify,
    570     AcpiEfiByProtocol
    571 } ACPI_EFI_LOCATE_SEARCH_TYPE;
    572 
    573 typedef
    574 ACPI_EFI_STATUS
    575 (ACPI_EFI_API *ACPI_EFI_INSTALL_PROTOCOL_INTERFACE) (
    576     ACPI_EFI_HANDLE                 *Handle,
    577     ACPI_EFI_GUID                   *Protocol,
    578     ACPI_EFI_INTERFACE_TYPE         InterfaceType,
    579     VOID                            *Interface);
    580 
    581 typedef
    582 ACPI_EFI_STATUS
    583 (ACPI_EFI_API *ACPI_EFI_REINSTALL_PROTOCOL_INTERFACE) (
    584     ACPI_EFI_HANDLE                 Handle,
    585     ACPI_EFI_GUID                   *Protocol,
    586     VOID                            *OldInterface,
    587     VOID                            *NewInterface);
    588 
    589 typedef
    590 ACPI_EFI_STATUS
    591 (ACPI_EFI_API *ACPI_EFI_UNINSTALL_PROTOCOL_INTERFACE) (
    592     ACPI_EFI_HANDLE                 Handle,
    593     ACPI_EFI_GUID                   *Protocol,
    594     VOID                            *Interface);
    595 
    596 typedef
    597 ACPI_EFI_STATUS
    598 (ACPI_EFI_API *ACPI_EFI_HANDLE_PROTOCOL) (
    599     ACPI_EFI_HANDLE                 Handle,
    600     ACPI_EFI_GUID                   *Protocol,
    601     VOID                            **Interface);
    602 
    603 typedef
    604 ACPI_EFI_STATUS
    605 (ACPI_EFI_API *ACPI_EFI_REGISTER_PROTOCOL_NOTIFY) (
    606     ACPI_EFI_GUID                   *Protocol,
    607     ACPI_EFI_EVENT                  Event,
    608     VOID                            **Registration);
    609 
    610 typedef
    611 ACPI_EFI_STATUS
    612 (ACPI_EFI_API *ACPI_EFI_LOCATE_HANDLE) (
    613     ACPI_EFI_LOCATE_SEARCH_TYPE     SearchType,
    614     ACPI_EFI_GUID                   *Protocol,
    615     VOID                            *SearchKey,
    616     UINTN                           *BufferSize,
    617     ACPI_EFI_HANDLE                 *Buffer);
    618 
    619 typedef
    620 ACPI_EFI_STATUS
    621 (ACPI_EFI_API *ACPI_EFI_LOCATE_DEVICE_PATH) (
    622     ACPI_EFI_GUID                   *Protocol,
    623     ACPI_EFI_DEVICE_PATH            **DevicePath,
    624     ACPI_EFI_HANDLE                 *Device);
    625 
    626 typedef
    627 ACPI_EFI_STATUS
    628 (ACPI_EFI_API *ACPI_EFI_INSTALL_CONFIGURATION_TABLE) (
    629     ACPI_EFI_GUID                   *Guid,
    630     VOID                            *Table);
    631 
    632 #define ACPI_EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL  0x00000001
    633 #define ACPI_EFI_OPEN_PROTOCOL_GET_PROTOCOL        0x00000002
    634 #define ACPI_EFI_OPEN_PROTOCOL_TEST_PROTOCOL       0x00000004
    635 #define ACPI_EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008
    636 #define ACPI_EFI_OPEN_PROTOCOL_BY_DRIVER           0x00000010
    637 #define ACPI_EFI_OPEN_PROTOCOL_EXCLUSIVE           0x00000020
    638 
    639 typedef
    640 ACPI_EFI_STATUS
    641 (ACPI_EFI_API *ACPI_EFI_OPEN_PROTOCOL) (
    642     ACPI_EFI_HANDLE                 Handle,
    643     ACPI_EFI_GUID                   *Protocol,
    644     VOID                            **Interface,
    645     ACPI_EFI_HANDLE                 AgentHandle,
    646     ACPI_EFI_HANDLE                 ControllerHandle,
    647     UINT32                          Attributes);
    648 
    649 typedef
    650 ACPI_EFI_STATUS
    651 (ACPI_EFI_API *ACPI_EFI_CLOSE_PROTOCOL) (
    652     ACPI_EFI_HANDLE                 Handle,
    653     ACPI_EFI_GUID                   *Protocol,
    654     ACPI_EFI_HANDLE                 AgentHandle,
    655     ACPI_EFI_HANDLE                 ControllerHandle);
    656 
    657 typedef struct {
    658     ACPI_EFI_HANDLE                 AgentHandle;
    659     ACPI_EFI_HANDLE                 ControllerHandle;
    660     UINT32                          Attributes;
    661     UINT32                          OpenCount;
    662 } ACPI_EFI_OPEN_PROTOCOL_INFORMATION_ENTRY;
    663 
    664 typedef
    665 ACPI_EFI_STATUS
    666 (ACPI_EFI_API *ACPI_EFI_OPEN_PROTOCOL_INFORMATION) (
    667     ACPI_EFI_HANDLE                 Handle,
    668     ACPI_EFI_GUID                   *Protocol,
    669     ACPI_EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer,
    670     UINTN                           *EntryCount);
    671 
    672 typedef
    673 ACPI_EFI_STATUS
    674 (ACPI_EFI_API *ACPI_EFI_PROTOCOLS_PER_HANDLE) (
    675     ACPI_EFI_HANDLE                 Handle,
    676     ACPI_EFI_GUID                   ***ProtocolBuffer,
    677     UINTN                           *ProtocolBufferCount);
    678 
    679 typedef
    680 ACPI_EFI_STATUS
    681 (ACPI_EFI_API *ACPI_EFI_LOCATE_HANDLE_BUFFER) (
    682     ACPI_EFI_LOCATE_SEARCH_TYPE     SearchType,
    683     ACPI_EFI_GUID                   *Protocol,
    684     VOID                            *SearchKey,
    685     UINTN                           *NoHandles,
    686     ACPI_EFI_HANDLE                 **Buffer);
    687 
    688 typedef
    689 ACPI_EFI_STATUS
    690 (ACPI_EFI_API *ACPI_EFI_LOCATE_PROTOCOL) (
    691     ACPI_EFI_GUID                   *Protocol,
    692     VOID                            *Registration,
    693     VOID                            **Interface);
    694 
    695 typedef
    696 ACPI_EFI_STATUS
    697 (ACPI_EFI_API *ACPI_EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
    698     ACPI_EFI_HANDLE                 *Handle,
    699     ...);
    700 
    701 typedef
    702 ACPI_EFI_STATUS
    703 (ACPI_EFI_API *ACPI_EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
    704     ACPI_EFI_HANDLE                 Handle,
    705     ...);
    706 
    707 typedef
    708 ACPI_EFI_STATUS
    709 (ACPI_EFI_API *ACPI_EFI_CALCULATE_CRC32) (
    710     VOID                            *Data,
    711     UINTN                           DataSize,
    712     UINT32                          *Crc32);
    713 
    714 typedef
    715 VOID
    716 (ACPI_EFI_API *ACPI_EFI_COPY_MEM) (
    717     VOID                            *Destination,
    718     VOID                            *Source,
    719     UINTN                           Length);
    720 
    721 typedef
    722 VOID
    723 (ACPI_EFI_API *ACPI_EFI_SET_MEM) (
    724     VOID                            *Buffer,
    725     UINTN                           Size,
    726     UINT8                           Value);
    727 
    728 /*
    729  * EFI Boot Services Table
    730  */
    731 #define ACPI_EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42
    732 #define ACPI_EFI_BOOT_SERVICES_REVISION  (ACPI_EFI_SPECIFICATION_MAJOR_REVISION<<16) | (ACPI_EFI_SPECIFICATION_MINOR_REVISION)
    733 
    734 typedef struct _ACPI_EFI_BOOT_SERVICES {
    735     ACPI_EFI_TABLE_HEADER               Hdr;
    736 
    737 #if 0
    738     ACPI_EFI_RAISE_TPL                  RaiseTPL;
    739     ACPI_EFI_RESTORE_TPL                RestoreTPL;
    740 #else
    741     ACPI_EFI_UNKNOWN_INTERFACE          RaiseTPL;
    742     ACPI_EFI_UNKNOWN_INTERFACE          RestoreTPL;
    743 #endif
    744 
    745     ACPI_EFI_ALLOCATE_PAGES             AllocatePages;
    746     ACPI_EFI_FREE_PAGES                 FreePages;
    747     ACPI_EFI_GET_MEMORY_MAP             GetMemoryMap;
    748     ACPI_EFI_ALLOCATE_POOL              AllocatePool;
    749     ACPI_EFI_FREE_POOL                  FreePool;
    750 
    751 #if 0
    752     ACPI_EFI_CREATE_EVENT               CreateEvent;
    753     ACPI_EFI_SET_TIMER                  SetTimer;
    754     ACPI_EFI_WAIT_FOR_EVENT             WaitForEvent;
    755     ACPI_EFI_SIGNAL_EVENT               SignalEvent;
    756     ACPI_EFI_CLOSE_EVENT                CloseEvent;
    757     ACPI_EFI_CHECK_EVENT                CheckEvent;
    758 #else
    759     ACPI_EFI_UNKNOWN_INTERFACE          CreateEvent;
    760     ACPI_EFI_UNKNOWN_INTERFACE          SetTimer;
    761     ACPI_EFI_UNKNOWN_INTERFACE          WaitForEvent;
    762     ACPI_EFI_UNKNOWN_INTERFACE          SignalEvent;
    763     ACPI_EFI_UNKNOWN_INTERFACE          CloseEvent;
    764     ACPI_EFI_UNKNOWN_INTERFACE          CheckEvent;
    765 #endif
    766 
    767     ACPI_EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface;
    768     ACPI_EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface;
    769     ACPI_EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface;
    770     ACPI_EFI_HANDLE_PROTOCOL            HandleProtocol;
    771     ACPI_EFI_HANDLE_PROTOCOL            PCHandleProtocol;
    772     ACPI_EFI_REGISTER_PROTOCOL_NOTIFY   RegisterProtocolNotify;
    773     ACPI_EFI_LOCATE_HANDLE              LocateHandle;
    774     ACPI_EFI_LOCATE_DEVICE_PATH         LocateDevicePath;
    775     ACPI_EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable;
    776 
    777     ACPI_EFI_IMAGE_LOAD                 LoadImage;
    778     ACPI_EFI_IMAGE_START                StartImage;
    779     ACPI_EFI_EXIT                       Exit;
    780     ACPI_EFI_IMAGE_UNLOAD               UnloadImage;
    781 
    782 #if 0
    783     ACPI_EFI_EXIT_BOOT_SERVICES         ExitBootServices;
    784     ACPI_EFI_GET_NEXT_MONOTONIC_COUNT   GetNextMonotonicCount;
    785     ACPI_EFI_STALL                      Stall;
    786 #else
    787     ACPI_EFI_UNKNOWN_INTERFACE          ExitBootServices;
    788     ACPI_EFI_UNKNOWN_INTERFACE          GetNextMonotonicCount;
    789     ACPI_EFI_UNKNOWN_INTERFACE          Stall;
    790 #endif
    791     ACPI_EFI_SET_WATCHDOG_TIMER         SetWatchdogTimer;
    792 
    793 #if 0
    794     ACPI_EFI_CONNECT_CONTROLLER         ConnectController;
    795     ACPI_EFI_DISCONNECT_CONTROLLER      DisconnectController;
    796 #else
    797     ACPI_EFI_UNKNOWN_INTERFACE          ConnectController;
    798     ACPI_EFI_UNKNOWN_INTERFACE          DisconnectController;
    799 #endif
    800 
    801     ACPI_EFI_OPEN_PROTOCOL              OpenProtocol;
    802     ACPI_EFI_CLOSE_PROTOCOL             CloseProtocol;
    803     ACPI_EFI_OPEN_PROTOCOL_INFORMATION  OpenProtocolInformation;
    804     ACPI_EFI_PROTOCOLS_PER_HANDLE       ProtocolsPerHandle;
    805     ACPI_EFI_LOCATE_HANDLE_BUFFER       LocateHandleBuffer;
    806     ACPI_EFI_LOCATE_PROTOCOL            LocateProtocol;
    807     ACPI_EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces;
    808     ACPI_EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces;
    809 
    810     ACPI_EFI_CALCULATE_CRC32        CalculateCrc32;
    811 
    812     ACPI_EFI_COPY_MEM               CopyMem;
    813     ACPI_EFI_SET_MEM                SetMem;
    814 
    815 #if 0
    816     ACPI_EFI_CREATE_EVENT_EX        CreateEventEx;
    817 #else
    818     ACPI_EFI_UNKNOWN_INTERFACE      CreateEventEx;
    819 #endif
    820 } ACPI_EFI_BOOT_SERVICES;
    821 
    822 
    823 /*
    824  * EFI System Table
    825  */
    826 
    827 /*
    828  * EFI Configuration Table and GUID definitions
    829  */
    830 #define ACPI_TABLE_GUID \
    831     { 0xeb9d2d30, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
    832 #define ACPI_20_TABLE_GUID \
    833     { 0x8868e871, 0xe4f1, 0x11d3, {0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} }
    834 
    835 typedef struct _ACPI_EFI_CONFIGURATION_TABLE {
    836     ACPI_EFI_GUID           VendorGuid;
    837     VOID                    *VendorTable;
    838 } ACPI_EFI_CONFIGURATION_TABLE;
    839 
    840 
    841 #define ACPI_EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249
    842 #define ACPI_EFI_SYSTEM_TABLE_REVISION  (ACPI_EFI_SPECIFICATION_MAJOR_REVISION<<16) | (ACPI_EFI_SPECIFICATION_MINOR_REVISION)
    843 
    844 typedef struct _ACPI_EFI_SYSTEM_TABLE {
    845     ACPI_EFI_TABLE_HEADER               Hdr;
    846 
    847     CHAR16                              *FirmwareVendor;
    848     UINT32                              FirmwareRevision;
    849 
    850     ACPI_EFI_HANDLE                     ConsoleInHandle;
    851     ACPI_SIMPLE_INPUT_INTERFACE         *ConIn;
    852 
    853     ACPI_EFI_HANDLE                     ConsoleOutHandle;
    854     ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *ConOut;
    855 
    856     ACPI_EFI_HANDLE                     StandardErrorHandle;
    857     ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *StdErr;
    858 
    859 #if 0
    860     ACPI_EFI_RUNTIME_SERVICES           *RuntimeServices;
    861 #else
    862     ACPI_EFI_HANDLE                     *RuntimeServices;
    863 #endif
    864     ACPI_EFI_BOOT_SERVICES              *BootServices;
    865 
    866     UINTN                               NumberOfTableEntries;
    867     ACPI_EFI_CONFIGURATION_TABLE        *ConfigurationTable;
    868 
    869 } ACPI_EFI_SYSTEM_TABLE;
    870 
    871 
    872 /*
    873  * EFI PCI I/O Protocol
    874  */
    875 #define ACPI_EFI_PCI_IO_PROTOCOL \
    876     { 0x4cf5b200, 0x68b8, 0x4ca5, {0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x2, 0x9a} }
    877 
    878 typedef enum {
    879     AcpiEfiPciIoWidthUint8 = 0,
    880     AcpiEfiPciIoWidthUint16,
    881     AcpiEfiPciIoWidthUint32,
    882     AcpiEfiPciIoWidthUint64,
    883     AcpiEfiPciIoWidthFifoUint8,
    884     AcpiEfiPciIoWidthFifoUint16,
    885     AcpiEfiPciIoWidthFifoUint32,
    886     AcpiEfiPciIoWidthFifoUint64,
    887     AcpiEfiPciIoWidthFillUint8,
    888     AcpiEfiPciIoWidthFillUint16,
    889     AcpiEfiPciIoWidthFillUint32,
    890     AcpiEfiPciIoWidthFillUint64,
    891     AcpiEfiPciIoWidthMaximum
    892 } ACPI_EFI_PCI_IO_PROTOCOL_WIDTH;
    893 
    894 typedef
    895 ACPI_EFI_STATUS
    896 (ACPI_EFI_API *ACPI_EFI_PCI_IO_PROTOCOL_CONFIG)(
    897     struct _ACPI_EFI_PCI_IO             *This,
    898     ACPI_EFI_PCI_IO_PROTOCOL_WIDTH      Width,
    899     UINT32                              Offset,
    900     UINTN                               Count,
    901     VOID                                *Buffer);
    902 
    903 typedef struct {
    904     ACPI_EFI_PCI_IO_PROTOCOL_CONFIG     Read;
    905     ACPI_EFI_PCI_IO_PROTOCOL_CONFIG     Write;
    906 } ACPI_EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS;
    907 
    908 typedef
    909 ACPI_EFI_STATUS
    910 (ACPI_EFI_API *ACPI_EFI_PCI_IO_PROTOCOL_GET_LOCATION)(
    911     struct _ACPI_EFI_PCI_IO             *This,
    912     UINTN                               *SegmentNumber,
    913     UINTN                               *BusNumber,
    914     UINTN                               *DeviceNumber,
    915     UINTN                               *FunctionNumber);
    916 
    917 typedef struct _ACPI_EFI_PCI_IO {
    918     ACPI_EFI_UNKNOWN_INTERFACE          PollMem;
    919     ACPI_EFI_UNKNOWN_INTERFACE          PollIo;
    920     ACPI_EFI_UNKNOWN_INTERFACE          Mem;
    921     ACPI_EFI_UNKNOWN_INTERFACE          Io;
    922     ACPI_EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS Pci;
    923     ACPI_EFI_UNKNOWN_INTERFACE          CopyMem;
    924     ACPI_EFI_UNKNOWN_INTERFACE          Map;
    925     ACPI_EFI_UNKNOWN_INTERFACE          Unmap;
    926     ACPI_EFI_UNKNOWN_INTERFACE          AllocateBuffer;
    927     ACPI_EFI_UNKNOWN_INTERFACE          FreeBuffer;
    928     ACPI_EFI_UNKNOWN_INTERFACE          Flush;
    929     ACPI_EFI_PCI_IO_PROTOCOL_GET_LOCATION GetLocation;
    930     ACPI_EFI_UNKNOWN_INTERFACE          Attributes;
    931     ACPI_EFI_UNKNOWN_INTERFACE          GetBarAttributes;
    932     ACPI_EFI_UNKNOWN_INTERFACE          SetBarAttributes;
    933     UINT64                              RomSize;
    934     VOID                                *RomImage;
    935 } ACPI_EFI_PCI_IO;
    936 
    937 /* FILE abstraction */
    938 
    939 union acpi_efi_file {
    940     struct _ACPI_EFI_FILE_HANDLE File;
    941     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE ConOut;
    942     struct _ACPI_SIMPLE_INPUT_INTERFACE ConIn;
    943 };
    944 
    945 
    946 /* GNU EFI definitions */
    947 
    948 #if defined(_GNU_EFI)
    949 
    950 /*
    951  * This is needed to hide platform specific code from ACPICA
    952  */
    953 UINT64
    954 DivU64x32 (
    955     UINT64                  Dividend,
    956     UINTN                   Divisor,
    957     UINTN                   *Remainder);
    958 
    959 /*
    960  * EFI specific prototypes
    961  */
    962 ACPI_EFI_STATUS
    963 efi_main (
    964     ACPI_EFI_HANDLE         Image,
    965     ACPI_EFI_SYSTEM_TABLE   *SystemTab);
    966 
    967 int
    968 acpi_main (
    969     int                     argc,
    970     char                    *argv[]);
    971 
    972 
    973 #endif
    974 
    975 extern ACPI_EFI_GUID AcpiGbl_LoadedImageProtocol;
    976 extern ACPI_EFI_GUID AcpiGbl_TextInProtocol;
    977 extern ACPI_EFI_GUID AcpiGbl_TextOutProtocol;
    978 extern ACPI_EFI_GUID AcpiGbl_FileSystemProtocol;
    979 extern ACPI_EFI_GUID AcpiGbl_GenericFileInfo;
    980 
    981 #endif /* __ACEFIEX_H__ */
    982