Home | History | Annotate | Line # | Download | only in platform
      1 /******************************************************************************
      2  *
      3  * Name: acefiex.h - Extra OS specific defines, etc. for EFI
      4  *
      5  *****************************************************************************/
      6 
      7 /******************************************************************************
      8  *
      9  * 1. Copyright Notice
     10  *
     11  * Some or all of this work - Copyright (c) 1999 - 2025, Intel Corp.
     12  * All rights reserved.
     13  *
     14  * 2. License
     15  *
     16  * 2.1. This is your license from Intel Corp. under its intellectual property
     17  * rights. You may have additional license terms from the party that provided
     18  * you this software, covering your right to use that party's intellectual
     19  * property rights.
     20  *
     21  * 2.2. Intel grants, free of charge, to any person ("Licensee") obtaining a
     22  * copy of the source code appearing in this file ("Covered Code") an
     23  * irrevocable, perpetual, worldwide license under Intel's copyrights in the
     24  * base code distributed originally by Intel ("Original Intel Code") to copy,
     25  * make derivatives, distribute, use and display any portion of the Covered
     26  * Code in any form, with the right to sublicense such rights; and
     27  *
     28  * 2.3. Intel grants Licensee a non-exclusive and non-transferable patent
     29  * license (with the right to sublicense), under only those claims of Intel
     30  * patents that are infringed by the Original Intel Code, to make, use, sell,
     31  * offer to sell, and import the Covered Code and derivative works thereof
     32  * solely to the minimum extent necessary to exercise the above copyright
     33  * license, and in no event shall the patent license extend to any additions
     34  * to or modifications of the Original Intel Code. No other license or right
     35  * is granted directly or by implication, estoppel or otherwise;
     36  *
     37  * The above copyright and patent license is granted only if the following
     38  * conditions are met:
     39  *
     40  * 3. Conditions
     41  *
     42  * 3.1. Redistribution of Source with Rights to Further Distribute Source.
     43  * Redistribution of source code of any substantial portion of the Covered
     44  * Code or modification with rights to further distribute source must include
     45  * the above Copyright Notice, the above License, this list of Conditions,
     46  * and the following Disclaimer and Export Compliance provision. In addition,
     47  * Licensee must cause all Covered Code to which Licensee contributes to
     48  * contain a file documenting the changes Licensee made to create that Covered
     49  * Code and the date of any change. Licensee must include in that file the
     50  * documentation of any changes made by any predecessor Licensee. Licensee
     51  * must include a prominent statement that the modification is derived,
     52  * directly or indirectly, from Original Intel Code.
     53  *
     54  * 3.2. Redistribution of Source with no Rights to Further Distribute Source.
     55  * Redistribution of source code of any substantial portion of the Covered
     56  * Code or modification without rights to further distribute source must
     57  * include the following Disclaimer and Export Compliance provision in the
     58  * documentation and/or other materials provided with distribution. In
     59  * addition, Licensee may not authorize further sublicense of source of any
     60  * portion of the Covered Code, and must include terms to the effect that the
     61  * license from Licensee to its licensee is limited to the intellectual
     62  * property embodied in the software Licensee provides to its licensee, and
     63  * not to intellectual property embodied in modifications its licensee may
     64  * make.
     65  *
     66  * 3.3. Redistribution of Executable. Redistribution in executable form of any
     67  * substantial portion of the Covered Code or modification must reproduce the
     68  * above Copyright Notice, and the following Disclaimer and Export Compliance
     69  * provision in the documentation and/or other materials provided with the
     70  * distribution.
     71  *
     72  * 3.4. Intel retains all right, title, and interest in and to the Original
     73  * Intel Code.
     74  *
     75  * 3.5. Neither the name Intel nor any other trademark owned or controlled by
     76  * Intel shall be used in advertising or otherwise to promote the sale, use or
     77  * other dealings in products derived from or relating to the Covered Code
     78  * without prior written authorization from Intel.
     79  *
     80  * 4. Disclaimer and Export Compliance
     81  *
     82  * 4.1. INTEL MAKES NO WARRANTY OF ANY KIND REGARDING ANY SOFTWARE PROVIDED
     83  * HERE. ANY SOFTWARE ORIGINATING FROM INTEL OR DERIVED FROM INTEL SOFTWARE
     84  * IS PROVIDED "AS IS," AND INTEL WILL NOT PROVIDE ANY SUPPORT, ASSISTANCE,
     85  * INSTALLATION, TRAINING OR OTHER SERVICES. INTEL WILL NOT PROVIDE ANY
     86  * UPDATES, ENHANCEMENTS OR EXTENSIONS. INTEL SPECIFICALLY DISCLAIMS ANY
     87  * IMPLIED WARRANTIES OF MERCHANTABILITY, NONINFRINGEMENT AND FITNESS FOR A
     88  * PARTICULAR PURPOSE.
     89  *
     90  * 4.2. IN NO EVENT SHALL INTEL HAVE ANY LIABILITY TO LICENSEE, ITS LICENSEES
     91  * OR ANY OTHER THIRD PARTY, FOR ANY LOST PROFITS, LOST DATA, LOSS OF USE OR
     92  * COSTS OF PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES, OR FOR ANY INDIRECT,
     93  * SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THIS AGREEMENT, UNDER ANY
     94  * CAUSE OF ACTION OR THEORY OF LIABILITY, AND IRRESPECTIVE OF WHETHER INTEL
     95  * HAS ADVANCE NOTICE OF THE POSSIBILITY OF SUCH DAMAGES. THESE LIMITATIONS
     96  * SHALL APPLY NOTWITHSTANDING THE FAILURE OF THE ESSENTIAL PURPOSE OF ANY
     97  * LIMITED REMEDY.
     98  *
     99  * 4.3. Licensee shall not export, either directly or indirectly, any of this
    100  * software or system incorporating such software without first obtaining any
    101  * required license or other approval from the U. S. Department of Commerce or
    102  * any other agency or department of the United States Government. In the
    103  * event Licensee exports any such software from the United States or
    104  * re-exports any such software from a foreign destination, Licensee shall
    105  * ensure that the distribution and export/re-export of the software is in
    106  * compliance with all laws, regulations, orders, or other restrictions of the
    107  * U.S. Export Administration Regulations. Licensee agrees that neither it nor
    108  * any of its subsidiaries will export/re-export any technical data, process,
    109  * software, or service, directly or indirectly, to any country for which the
    110  * United States government or any agency thereof requires an export license,
    111  * other governmental approval, or letter of assurance, without first obtaining
    112  * such license, approval or letter.
    113  *
    114  *****************************************************************************
    115  *
    116  * Alternatively, you may choose to be licensed under the terms of the
    117  * following license:
    118  *
    119  * Redistribution and use in source and binary forms, with or without
    120  * modification, are permitted provided that the following conditions
    121  * are met:
    122  * 1. Redistributions of source code must retain the above copyright
    123  *    notice, this list of conditions, and the following disclaimer,
    124  *    without modification.
    125  * 2. Redistributions in binary form must reproduce at minimum a disclaimer
    126  *    substantially similar to the "NO WARRANTY" disclaimer below
    127  *    ("Disclaimer") and any redistribution must be conditioned upon
    128  *    including a substantially similar Disclaimer requirement for further
    129  *    binary redistribution.
    130  * 3. Neither the names of the above-listed copyright holders nor the names
    131  *    of any contributors may be used to endorse or promote products derived
    132  *    from this software without specific prior written permission.
    133  *
    134  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
    135  * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
    136  * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
    137  * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
    138  * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
    139  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
    140  * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
    141  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
    142  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
    143  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
    144  * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
    145  *
    146  * Alternatively, you may choose to be licensed under the terms of the
    147  * GNU General Public License ("GPL") version 2 as published by the Free
    148  * Software Foundation.
    149  *
    150  *****************************************************************************/
    151 
    152 #ifndef __ACEFIEX_H__
    153 #define __ACEFIEX_H__
    154 
    155 
    156 #ifndef ACPI_USE_SYSTEM_CLIBRARY
    157 
    158 typedef signed char                     int8_t;
    159 typedef short int                       int16_t;
    160 typedef int                             int32_t;
    161 typedef unsigned char                   uint8_t;
    162 typedef unsigned short int              uint16_t;
    163 typedef unsigned int                    uint32_t;
    164 typedef COMPILER_DEPENDENT_INT64        int64_t;
    165 typedef COMPILER_DEPENDENT_UINT64       uint64_t;
    166 
    167 #endif /* ACPI_USE_SYSTEM_CLIBRARY */
    168 
    169 #define ACPI_EFI_ERROR(a)               (((INTN) a) < 0)
    170 #define ACPI_EFI_SUCCESS                0
    171 #define ACPI_EFI_LOAD_ERROR             ACPI_EFI_ERR(1)
    172 #define ACPI_EFI_INVALID_PARAMETER      ACPI_EFI_ERR(2)
    173 #define ACPI_EFI_UNSUPPORTED            ACPI_EFI_ERR(3)
    174 #define ACPI_EFI_BAD_BUFFER_SIZE        ACPI_EFI_ERR(4)
    175 #define ACPI_EFI_BUFFER_TOO_SMALL       ACPI_EFI_ERR(5)
    176 #define ACPI_EFI_NOT_READY              ACPI_EFI_ERR(6)
    177 #define ACPI_EFI_DEVICE_ERROR           ACPI_EFI_ERR(7)
    178 #define ACPI_EFI_WRITE_PROTECTED        ACPI_EFI_ERR(8)
    179 #define ACPI_EFI_OUT_OF_RESOURCES       ACPI_EFI_ERR(9)
    180 #define ACPI_EFI_VOLUME_CORRUPTED       ACPI_EFI_ERR(10)
    181 #define ACPI_EFI_VOLUME_FULL            ACPI_EFI_ERR(11)
    182 #define ACPI_EFI_NO_MEDIA               ACPI_EFI_ERR(12)
    183 #define ACPI_EFI_MEDIA_CHANGED          ACPI_EFI_ERR(13)
    184 #define ACPI_EFI_NOT_FOUND              ACPI_EFI_ERR(14)
    185 #define ACPI_EFI_ACCESS_DENIED          ACPI_EFI_ERR(15)
    186 #define ACPI_EFI_NO_RESPONSE            ACPI_EFI_ERR(16)
    187 #define ACPI_EFI_NO_MAPPING             ACPI_EFI_ERR(17)
    188 #define ACPI_EFI_TIMEOUT                ACPI_EFI_ERR(18)
    189 #define ACPI_EFI_NOT_STARTED            ACPI_EFI_ERR(19)
    190 #define ACPI_EFI_ALREADY_STARTED        ACPI_EFI_ERR(20)
    191 #define ACPI_EFI_ABORTED                ACPI_EFI_ERR(21)
    192 #define ACPI_EFI_PROTOCOL_ERROR         ACPI_EFI_ERR(24)
    193 
    194 
    195 typedef UINTN ACPI_EFI_STATUS;
    196 typedef VOID *ACPI_EFI_HANDLE;
    197 typedef VOID *ACPI_EFI_EVENT;
    198 
    199 typedef struct {
    200     UINT32  Data1;
    201     UINT16  Data2;
    202     UINT16  Data3;
    203     UINT8   Data4[8];
    204 } ACPI_EFI_GUID;
    205 
    206 typedef struct {
    207     UINT16 Year;       /* 1998 - 20XX */
    208     UINT8  Month;      /* 1 - 12 */
    209     UINT8  Day;        /* 1 - 31 */
    210     UINT8  Hour;       /* 0 - 23 */
    211     UINT8  Minute;     /* 0 - 59 */
    212     UINT8  Second;     /* 0 - 59 */
    213     UINT8  Pad1;
    214     UINT32 Nanosecond; /* 0 - 999,999,999 */
    215     INT16  TimeZone;   /* -1440 to 1440 or 2047 */
    216     UINT8  Daylight;
    217     UINT8  Pad2;
    218 } ACPI_EFI_TIME;
    219 
    220 typedef struct _ACPI_EFI_DEVICE_PATH {
    221         UINT8                           Type;
    222         UINT8                           SubType;
    223         UINT8                           Length[2];
    224 } ACPI_EFI_DEVICE_PATH;
    225 
    226 typedef UINT64          ACPI_EFI_PHYSICAL_ADDRESS;
    227 typedef UINT64          ACPI_EFI_VIRTUAL_ADDRESS;
    228 
    229 typedef enum {
    230     AcpiEfiAllocateAnyPages,
    231     AcpiEfiAllocateMaxAddress,
    232     AcpiEfiAllocateAddress,
    233     AcpiEfiMaxAllocateType
    234 } ACPI_EFI_ALLOCATE_TYPE;
    235 
    236 typedef enum {
    237     AcpiEfiReservedMemoryType,
    238     AcpiEfiLoaderCode,
    239     AcpiEfiLoaderData,
    240     AcpiEfiBootServicesCode,
    241     AcpiEfiBootServicesData,
    242     AcpiEfiRuntimeServicesCode,
    243     AcpiEfiRuntimeServicesData,
    244     AcpiEfiConventionalMemory,
    245     AcpiEfiUnusableMemory,
    246     AcpiEfiACPIReclaimMemory,
    247     AcpiEfiACPIMemoryNVS,
    248     AcpiEfiMemoryMappedIO,
    249     AcpiEfiMemoryMappedIOPortSpace,
    250     AcpiEfiPalCode,
    251     AcpiEfiMaxMemoryType
    252 } ACPI_EFI_MEMORY_TYPE;
    253 
    254 /* possible caching types for the memory range */
    255 #define ACPI_EFI_MEMORY_UC      0x0000000000000001
    256 #define ACPI_EFI_MEMORY_WC      0x0000000000000002
    257 #define ACPI_EFI_MEMORY_WT      0x0000000000000004
    258 #define ACPI_EFI_MEMORY_WB      0x0000000000000008
    259 #define ACPI_EFI_MEMORY_UCE     0x0000000000000010
    260 
    261 /* physical memory protection on range */
    262 #define ACPI_EFI_MEMORY_WP      0x0000000000001000
    263 #define ACPI_EFI_MEMORY_RP      0x0000000000002000
    264 #define ACPI_EFI_MEMORY_XP      0x0000000000004000
    265 
    266 /* range requires a runtime mapping */
    267 #define ACPI_EFI_MEMORY_RUNTIME 0x8000000000000000
    268 
    269 #define ACPI_EFI_MEMORY_DESCRIPTOR_VERSION  1
    270 typedef struct {
    271     UINT32                          Type;
    272     UINT32                          Pad;
    273     ACPI_EFI_PHYSICAL_ADDRESS       PhysicalStart;
    274     ACPI_EFI_VIRTUAL_ADDRESS        VirtualStart;
    275     UINT64                          NumberOfPages;
    276     UINT64                          Attribute;
    277 } ACPI_EFI_MEMORY_DESCRIPTOR;
    278 
    279 typedef struct _ACPI_EFI_TABLE_HEARDER {
    280     UINT64                      Signature;
    281     UINT32                      Revision;
    282     UINT32                      HeaderSize;
    283     UINT32                      CRC32;
    284     UINT32                      Reserved;
    285 } ACPI_EFI_TABLE_HEADER;
    286 
    287 typedef
    288 ACPI_EFI_STATUS
    289 (ACPI_EFI_API *ACPI_EFI_UNKNOWN_INTERFACE) (
    290     void);
    291 
    292 
    293 /*
    294  * Text output protocol
    295  */
    296 #define ACPI_SIMPLE_TEXT_OUTPUT_PROTOCOL \
    297     { 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    298 
    299 typedef
    300 ACPI_EFI_STATUS
    301 (ACPI_EFI_API *ACPI_EFI_TEXT_RESET) (
    302     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    303     BOOLEAN                                     ExtendedVerification);
    304 
    305 typedef
    306 ACPI_EFI_STATUS
    307 (ACPI_EFI_API *ACPI_EFI_TEXT_OUTPUT_STRING) (
    308     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    309     CHAR16                                      *String);
    310 
    311 typedef
    312 ACPI_EFI_STATUS
    313 (ACPI_EFI_API *ACPI_EFI_TEXT_TEST_STRING) (
    314     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    315     CHAR16                                      *String);
    316 
    317 typedef
    318 ACPI_EFI_STATUS
    319 (ACPI_EFI_API *ACPI_EFI_TEXT_QUERY_MODE) (
    320     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    321     UINTN                                       ModeNumber,
    322     UINTN                                       *Columns,
    323     UINTN                                       *Rows);
    324 
    325 typedef
    326 ACPI_EFI_STATUS
    327 (ACPI_EFI_API *ACPI_EFI_TEXT_SET_MODE) (
    328     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    329     UINTN                                       ModeNumber);
    330 
    331 typedef
    332 ACPI_EFI_STATUS
    333 (ACPI_EFI_API *ACPI_EFI_TEXT_SET_ATTRIBUTE) (
    334     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    335     UINTN                                       Attribute);
    336 
    337 typedef
    338 ACPI_EFI_STATUS
    339 (ACPI_EFI_API *ACPI_EFI_TEXT_CLEAR_SCREEN) (
    340     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This);
    341 
    342 typedef
    343 ACPI_EFI_STATUS
    344 (ACPI_EFI_API *ACPI_EFI_TEXT_SET_CURSOR_POSITION) (
    345     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    346     UINTN                                       Column,
    347     UINTN                                       Row);
    348 
    349 typedef
    350 ACPI_EFI_STATUS
    351 (ACPI_EFI_API *ACPI_EFI_TEXT_ENABLE_CURSOR) (
    352     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    353     BOOLEAN                                     Enable);
    354 
    355 typedef struct {
    356     INT32                           MaxMode;
    357     INT32                           Mode;
    358     INT32                           Attribute;
    359     INT32                           CursorColumn;
    360     INT32                           CursorRow;
    361     BOOLEAN                         CursorVisible;
    362 } ACPI_SIMPLE_TEXT_OUTPUT_MODE;
    363 
    364 typedef struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE {
    365     ACPI_EFI_TEXT_RESET                 Reset;
    366 
    367     ACPI_EFI_TEXT_OUTPUT_STRING         OutputString;
    368     ACPI_EFI_TEXT_TEST_STRING           TestString;
    369 
    370     ACPI_EFI_TEXT_QUERY_MODE            QueryMode;
    371     ACPI_EFI_TEXT_SET_MODE              SetMode;
    372     ACPI_EFI_TEXT_SET_ATTRIBUTE         SetAttribute;
    373 
    374     ACPI_EFI_TEXT_CLEAR_SCREEN          ClearScreen;
    375     ACPI_EFI_TEXT_SET_CURSOR_POSITION   SetCursorPosition;
    376     ACPI_EFI_TEXT_ENABLE_CURSOR         EnableCursor;
    377 
    378     ACPI_SIMPLE_TEXT_OUTPUT_MODE        *Mode;
    379 } ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE;
    380 
    381 /*
    382  * Text input protocol
    383  */
    384 #define ACPI_SIMPLE_TEXT_INPUT_PROTOCOL  \
    385     { 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    386 
    387 typedef struct {
    388     UINT16                              ScanCode;
    389     CHAR16                              UnicodeChar;
    390 } ACPI_EFI_INPUT_KEY;
    391 
    392 /*
    393  * Baseline unicode control chars
    394  */
    395 #define CHAR_NULL                       0x0000
    396 #define CHAR_BACKSPACE                  0x0008
    397 #define CHAR_TAB                        0x0009
    398 #define CHAR_LINEFEED                   0x000A
    399 #define CHAR_CARRIAGE_RETURN            0x000D
    400 
    401 typedef
    402 ACPI_EFI_STATUS
    403 (ACPI_EFI_API *ACPI_EFI_INPUT_RESET) (
    404     struct _ACPI_SIMPLE_INPUT_INTERFACE         *This,
    405     BOOLEAN                                     ExtendedVerification);
    406 
    407 typedef
    408 ACPI_EFI_STATUS
    409 (ACPI_EFI_API *ACPI_EFI_INPUT_READ_KEY) (
    410     struct _ACPI_SIMPLE_INPUT_INTERFACE         *This,
    411     ACPI_EFI_INPUT_KEY                          *Key);
    412 
    413 typedef struct _ACPI_SIMPLE_INPUT_INTERFACE {
    414     ACPI_EFI_INPUT_RESET                    Reset;
    415     ACPI_EFI_INPUT_READ_KEY                 ReadKeyStroke;
    416     ACPI_EFI_EVENT                          WaitForKey;
    417 } ACPI_SIMPLE_INPUT_INTERFACE;
    418 
    419 
    420 /*
    421  * Simple file system protocol
    422  */
    423 #define ACPI_SIMPLE_FILE_SYSTEM_PROTOCOL \
    424     { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    425 
    426 typedef
    427 ACPI_EFI_STATUS
    428 (ACPI_EFI_API *ACPI_EFI_VOLUME_OPEN) (
    429     struct _ACPI_EFI_FILE_IO_INTERFACE          *This,
    430     struct _ACPI_EFI_FILE_HANDLE                **Root);
    431 
    432 #define ACPI_EFI_FILE_IO_INTERFACE_REVISION     0x00010000
    433 
    434 typedef struct _ACPI_EFI_FILE_IO_INTERFACE {
    435     UINT64                  Revision;
    436     ACPI_EFI_VOLUME_OPEN    OpenVolume;
    437 } ACPI_EFI_FILE_IO_INTERFACE;
    438 
    439 typedef
    440 ACPI_EFI_STATUS
    441 (ACPI_EFI_API *ACPI_EFI_FILE_OPEN) (
    442     struct _ACPI_EFI_FILE_HANDLE                *File,
    443     struct _ACPI_EFI_FILE_HANDLE                **NewHandle,
    444     CHAR16                                      *FileName,
    445     UINT64                                      OpenMode,
    446     UINT64                                      Attributes);
    447 
    448 /* Values for OpenMode used above */
    449 
    450 #define ACPI_EFI_FILE_MODE_READ     0x0000000000000001
    451 #define ACPI_EFI_FILE_MODE_WRITE    0x0000000000000002
    452 #define ACPI_EFI_FILE_MODE_CREATE   0x8000000000000000
    453 
    454 /* Values for Attribute used above */
    455 
    456 #define ACPI_EFI_FILE_READ_ONLY     0x0000000000000001
    457 #define ACPI_EFI_FILE_HIDDEN        0x0000000000000002
    458 #define ACPI_EFI_FILE_SYSTEM        0x0000000000000004
    459 #define ACPI_EFI_FILE_RESERVIED     0x0000000000000008
    460 #define ACPI_EFI_FILE_DIRECTORY     0x0000000000000010
    461 #define ACPI_EFI_FILE_ARCHIVE       0x0000000000000020
    462 #define ACPI_EFI_FILE_VALID_ATTR    0x0000000000000037
    463 
    464 typedef
    465 ACPI_EFI_STATUS
    466 (ACPI_EFI_API *ACPI_EFI_FILE_CLOSE) (
    467     struct _ACPI_EFI_FILE_HANDLE                *File);
    468 
    469 typedef
    470 ACPI_EFI_STATUS
    471 (ACPI_EFI_API *ACPI_EFI_FILE_DELETE) (
    472     struct _ACPI_EFI_FILE_HANDLE                *File);
    473 
    474 typedef
    475 ACPI_EFI_STATUS
    476 (ACPI_EFI_API *ACPI_EFI_FILE_READ) (
    477     struct _ACPI_EFI_FILE_HANDLE                *File,
    478     UINTN                                       *BufferSize,
    479     VOID                                        *Buffer);
    480 
    481 typedef
    482 ACPI_EFI_STATUS
    483 (ACPI_EFI_API *ACPI_EFI_FILE_WRITE) (
    484     struct _ACPI_EFI_FILE_HANDLE                *File,
    485     UINTN                                       *BufferSize,
    486     VOID                                        *Buffer);
    487 
    488 typedef
    489 ACPI_EFI_STATUS
    490 (ACPI_EFI_API *ACPI_EFI_FILE_SET_POSITION) (
    491     struct _ACPI_EFI_FILE_HANDLE                *File,
    492     UINT64                                      Position);
    493 
    494 typedef
    495 ACPI_EFI_STATUS
    496 (ACPI_EFI_API *ACPI_EFI_FILE_GET_POSITION) (
    497     struct _ACPI_EFI_FILE_HANDLE                *File,
    498     UINT64                                      *Position);
    499 
    500 #define ACPI_EFI_FILE_INFO_ID \
    501     { 0x9576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    502 
    503 typedef struct {
    504     UINT64 Size;
    505     UINT64 FileSize;
    506     UINT64 PhysicalSize;
    507     ACPI_EFI_TIME CreateTime;
    508     ACPI_EFI_TIME LastAccessTime;
    509     ACPI_EFI_TIME ModificationTime;
    510     UINT64 Attribute;
    511     CHAR16 FileName[];
    512 } ACPI_EFI_FILE_INFO;
    513 
    514 #define SIZE_OF_ACPI_EFI_FILE_INFO  ACPI_OFFSET(ACPI_EFI_FILE_INFO, FileName)
    515 
    516 typedef
    517 ACPI_EFI_STATUS
    518 (ACPI_EFI_API *ACPI_EFI_FILE_GET_INFO) (
    519     struct _ACPI_EFI_FILE_HANDLE                *File,
    520     ACPI_EFI_GUID                               *InformationType,
    521     UINTN                                       *BufferSize,
    522     VOID                                        *Buffer);
    523 
    524 typedef
    525 ACPI_EFI_STATUS
    526 (ACPI_EFI_API *ACPI_EFI_FILE_SET_INFO) (
    527     struct _ACPI_EFI_FILE_HANDLE                *File,
    528     ACPI_EFI_GUID                               *InformationType,
    529     UINTN                                       BufferSize,
    530     VOID                                        *Buffer);
    531 
    532 typedef
    533 ACPI_EFI_STATUS
    534 (ACPI_EFI_API *ACPI_EFI_FILE_FLUSH) (
    535     struct _ACPI_EFI_FILE_HANDLE                *File);
    536 
    537 
    538 #define ACPI_EFI_FILE_HANDLE_REVISION           0x00010000
    539 
    540 typedef struct _ACPI_EFI_FILE_HANDLE {
    541     UINT64                      Revision;
    542     ACPI_EFI_FILE_OPEN          Open;
    543     ACPI_EFI_FILE_CLOSE         Close;
    544     ACPI_EFI_FILE_DELETE        Delete;
    545     ACPI_EFI_FILE_READ          Read;
    546     ACPI_EFI_FILE_WRITE         Write;
    547     ACPI_EFI_FILE_GET_POSITION  GetPosition;
    548     ACPI_EFI_FILE_SET_POSITION  SetPosition;
    549     ACPI_EFI_FILE_GET_INFO      GetInfo;
    550     ACPI_EFI_FILE_SET_INFO      SetInfo;
    551     ACPI_EFI_FILE_FLUSH         Flush;
    552 } ACPI_EFI_FILE_STRUCT, *ACPI_EFI_FILE_HANDLE;
    553 
    554 
    555 /*
    556  * Loaded image protocol
    557  */
    558 #define ACPI_EFI_LOADED_IMAGE_PROTOCOL \
    559     { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
    560 
    561 typedef
    562 ACPI_EFI_STATUS
    563 (ACPI_EFI_API *ACPI_EFI_IMAGE_ENTRY_POINT) (
    564     ACPI_EFI_HANDLE                         ImageHandle,
    565     struct _ACPI_EFI_SYSTEM_TABLE           *SystemTable);
    566 
    567 typedef
    568 ACPI_EFI_STATUS
    569 (ACPI_EFI_API *ACPI_EFI_IMAGE_LOAD) (
    570     BOOLEAN                         BootPolicy,
    571     ACPI_EFI_HANDLE                 ParentImageHandle,
    572     ACPI_EFI_DEVICE_PATH            *FilePath,
    573     VOID                            *SourceBuffer,
    574     UINTN                           SourceSize,
    575     ACPI_EFI_HANDLE                 *ImageHandle);
    576 
    577 typedef
    578 ACPI_EFI_STATUS
    579 (ACPI_EFI_API *ACPI_EFI_IMAGE_START) (
    580     ACPI_EFI_HANDLE                 ImageHandle,
    581     UINTN                           *ExitDataSize,
    582     CHAR16                          **ExitData);
    583 
    584 typedef
    585 ACPI_EFI_STATUS
    586 (ACPI_EFI_API *ACPI_EFI_EXIT) (
    587     ACPI_EFI_HANDLE                 ImageHandle,
    588     ACPI_EFI_STATUS                 ExitStatus,
    589     UINTN                           ExitDataSize,
    590     CHAR16                          *ExitData);
    591 
    592 typedef
    593 ACPI_EFI_STATUS
    594 (ACPI_EFI_API *ACPI_EFI_IMAGE_UNLOAD) (
    595     ACPI_EFI_HANDLE                 ImageHandle);
    596 
    597 
    598 typedef
    599 ACPI_EFI_STATUS
    600 (ACPI_EFI_API *ACPI_EFI_STALL) (
    601     UINTN                           Microseconds);
    602 
    603 typedef
    604 ACPI_EFI_STATUS
    605 (ACPI_EFI_API *ACPI_EFI_SET_WATCHDOG_TIMER) (
    606     UINTN                           Timeout,
    607     UINT64                          WatchdogCode,
    608     UINTN                           DataSize,
    609     CHAR16                          *WatchdogData);
    610 
    611 
    612 #define EFI_IMAGE_INFORMATION_REVISION      0x1000
    613 typedef struct {
    614     UINT32                          Revision;
    615     ACPI_EFI_HANDLE                 ParentHandle;
    616     struct _ACPI_EFI_SYSTEM_TABLE   *SystemTable;
    617     ACPI_EFI_HANDLE                 DeviceHandle;
    618     ACPI_EFI_DEVICE_PATH            *FilePath;
    619     VOID                            *Reserved;
    620     UINT32                          LoadOptionsSize;
    621     VOID                            *LoadOptions;
    622     VOID                            *ImageBase;
    623     UINT64                          ImageSize;
    624     ACPI_EFI_MEMORY_TYPE            ImageCodeType;
    625     ACPI_EFI_MEMORY_TYPE            ImageDataType;
    626     ACPI_EFI_IMAGE_UNLOAD           Unload;
    627 
    628 } ACPI_EFI_LOADED_IMAGE;
    629 
    630 
    631 /*
    632  * EFI Memory
    633  */
    634 typedef
    635 ACPI_EFI_STATUS
    636 (ACPI_EFI_API *ACPI_EFI_ALLOCATE_PAGES) (
    637     ACPI_EFI_ALLOCATE_TYPE          Type,
    638     ACPI_EFI_MEMORY_TYPE            MemoryType,
    639     UINTN                           NoPages,
    640     ACPI_EFI_PHYSICAL_ADDRESS       *Memory);
    641 
    642 typedef
    643 ACPI_EFI_STATUS
    644 (ACPI_EFI_API *ACPI_EFI_FREE_PAGES) (
    645     ACPI_EFI_PHYSICAL_ADDRESS       Memory,
    646     UINTN                           NoPages);
    647 
    648 typedef
    649 ACPI_EFI_STATUS
    650 (ACPI_EFI_API *ACPI_EFI_GET_MEMORY_MAP) (
    651     UINTN                           *MemoryMapSize,
    652     ACPI_EFI_MEMORY_DESCRIPTOR      *MemoryMap,
    653     UINTN                           *MapKey,
    654     UINTN                           *DescriptorSize,
    655     UINT32                          *DescriptorVersion);
    656 
    657 #define NextMemoryDescriptor(Ptr,Size)  ((ACPI_EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size))
    658 
    659 typedef
    660 ACPI_EFI_STATUS
    661 (ACPI_EFI_API *ACPI_EFI_ALLOCATE_POOL) (
    662     ACPI_EFI_MEMORY_TYPE            PoolType,
    663     UINTN                           Size,
    664     VOID                            **Buffer);
    665 
    666 typedef
    667 ACPI_EFI_STATUS
    668 (ACPI_EFI_API *ACPI_EFI_FREE_POOL) (
    669     VOID                            *Buffer);
    670 
    671 
    672 /*
    673  * EFI Time
    674  */
    675 typedef struct {
    676     UINT32 Resolution;
    677     UINT32 Accuracy;
    678     BOOLEAN SetsToZero;
    679 } ACPI_EFI_TIME_CAPABILITIES;
    680 
    681 typedef
    682 ACPI_EFI_STATUS
    683 (ACPI_EFI_API *ACPI_EFI_GET_TIME) (
    684     ACPI_EFI_TIME                   *Time,
    685     ACPI_EFI_TIME_CAPABILITIES      *Capabilities);
    686 
    687 typedef
    688 ACPI_EFI_STATUS
    689 (ACPI_EFI_API *ACPI_EFI_SET_TIME) (
    690     ACPI_EFI_TIME                   *Time);
    691 
    692 
    693 /*
    694  * Protocol handler functions
    695  */
    696 typedef enum {
    697     ACPI_EFI_NATIVE_INTERFACE,
    698     ACPI_EFI_PCODE_INTERFACE
    699 } ACPI_EFI_INTERFACE_TYPE;
    700 
    701 typedef enum {
    702     AcpiEfiAllHandles,
    703     AcpiEfiByRegisterNotify,
    704     AcpiEfiByProtocol
    705 } ACPI_EFI_LOCATE_SEARCH_TYPE;
    706 
    707 typedef
    708 ACPI_EFI_STATUS
    709 (ACPI_EFI_API *ACPI_EFI_INSTALL_PROTOCOL_INTERFACE) (
    710     ACPI_EFI_HANDLE                 *Handle,
    711     ACPI_EFI_GUID                   *Protocol,
    712     ACPI_EFI_INTERFACE_TYPE         InterfaceType,
    713     VOID                            *Interface);
    714 
    715 typedef
    716 ACPI_EFI_STATUS
    717 (ACPI_EFI_API *ACPI_EFI_REINSTALL_PROTOCOL_INTERFACE) (
    718     ACPI_EFI_HANDLE                 Handle,
    719     ACPI_EFI_GUID                   *Protocol,
    720     VOID                            *OldInterface,
    721     VOID                            *NewInterface);
    722 
    723 typedef
    724 ACPI_EFI_STATUS
    725 (ACPI_EFI_API *ACPI_EFI_UNINSTALL_PROTOCOL_INTERFACE) (
    726     ACPI_EFI_HANDLE                 Handle,
    727     ACPI_EFI_GUID                   *Protocol,
    728     VOID                            *Interface);
    729 
    730 typedef
    731 ACPI_EFI_STATUS
    732 (ACPI_EFI_API *ACPI_EFI_HANDLE_PROTOCOL) (
    733     ACPI_EFI_HANDLE                 Handle,
    734     ACPI_EFI_GUID                   *Protocol,
    735     VOID                            **Interface);
    736 
    737 typedef
    738 ACPI_EFI_STATUS
    739 (ACPI_EFI_API *ACPI_EFI_REGISTER_PROTOCOL_NOTIFY) (
    740     ACPI_EFI_GUID                   *Protocol,
    741     ACPI_EFI_EVENT                  Event,
    742     VOID                            **Registration);
    743 
    744 typedef
    745 ACPI_EFI_STATUS
    746 (ACPI_EFI_API *ACPI_EFI_LOCATE_HANDLE) (
    747     ACPI_EFI_LOCATE_SEARCH_TYPE     SearchType,
    748     ACPI_EFI_GUID                   *Protocol,
    749     VOID                            *SearchKey,
    750     UINTN                           *BufferSize,
    751     ACPI_EFI_HANDLE                 *Buffer);
    752 
    753 typedef
    754 ACPI_EFI_STATUS
    755 (ACPI_EFI_API *ACPI_EFI_LOCATE_DEVICE_PATH) (
    756     ACPI_EFI_GUID                   *Protocol,
    757     ACPI_EFI_DEVICE_PATH            **DevicePath,
    758     ACPI_EFI_HANDLE                 *Device);
    759 
    760 typedef
    761 ACPI_EFI_STATUS
    762 (ACPI_EFI_API *ACPI_EFI_INSTALL_CONFIGURATION_TABLE) (
    763     ACPI_EFI_GUID                   *Guid,
    764     VOID                            *Table);
    765 
    766 #define ACPI_EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL  0x00000001
    767 #define ACPI_EFI_OPEN_PROTOCOL_GET_PROTOCOL        0x00000002
    768 #define ACPI_EFI_OPEN_PROTOCOL_TEST_PROTOCOL       0x00000004
    769 #define ACPI_EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008
    770 #define ACPI_EFI_OPEN_PROTOCOL_BY_DRIVER           0x00000010
    771 #define ACPI_EFI_OPEN_PROTOCOL_EXCLUSIVE           0x00000020
    772 
    773 typedef
    774 ACPI_EFI_STATUS
    775 (ACPI_EFI_API *ACPI_EFI_OPEN_PROTOCOL) (
    776     ACPI_EFI_HANDLE                 Handle,
    777     ACPI_EFI_GUID                   *Protocol,
    778     VOID                            **Interface,
    779     ACPI_EFI_HANDLE                 AgentHandle,
    780     ACPI_EFI_HANDLE                 ControllerHandle,
    781     UINT32                          Attributes);
    782 
    783 typedef
    784 ACPI_EFI_STATUS
    785 (ACPI_EFI_API *ACPI_EFI_CLOSE_PROTOCOL) (
    786     ACPI_EFI_HANDLE                 Handle,
    787     ACPI_EFI_GUID                   *Protocol,
    788     ACPI_EFI_HANDLE                 AgentHandle,
    789     ACPI_EFI_HANDLE                 ControllerHandle);
    790 
    791 typedef struct {
    792     ACPI_EFI_HANDLE                 AgentHandle;
    793     ACPI_EFI_HANDLE                 ControllerHandle;
    794     UINT32                          Attributes;
    795     UINT32                          OpenCount;
    796 } ACPI_EFI_OPEN_PROTOCOL_INFORMATION_ENTRY;
    797 
    798 typedef
    799 ACPI_EFI_STATUS
    800 (ACPI_EFI_API *ACPI_EFI_OPEN_PROTOCOL_INFORMATION) (
    801     ACPI_EFI_HANDLE                 Handle,
    802     ACPI_EFI_GUID                   *Protocol,
    803     ACPI_EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer,
    804     UINTN                           *EntryCount);
    805 
    806 typedef
    807 ACPI_EFI_STATUS
    808 (ACPI_EFI_API *ACPI_EFI_PROTOCOLS_PER_HANDLE) (
    809     ACPI_EFI_HANDLE                 Handle,
    810     ACPI_EFI_GUID                   ***ProtocolBuffer,
    811     UINTN                           *ProtocolBufferCount);
    812 
    813 typedef
    814 ACPI_EFI_STATUS
    815 (ACPI_EFI_API *ACPI_EFI_LOCATE_HANDLE_BUFFER) (
    816     ACPI_EFI_LOCATE_SEARCH_TYPE     SearchType,
    817     ACPI_EFI_GUID                   *Protocol,
    818     VOID                            *SearchKey,
    819     UINTN                           *NoHandles,
    820     ACPI_EFI_HANDLE                 **Buffer);
    821 
    822 typedef
    823 ACPI_EFI_STATUS
    824 (ACPI_EFI_API *ACPI_EFI_LOCATE_PROTOCOL) (
    825     ACPI_EFI_GUID                   *Protocol,
    826     VOID                            *Registration,
    827     VOID                            **Interface);
    828 
    829 typedef
    830 ACPI_EFI_STATUS
    831 (ACPI_EFI_API *ACPI_EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
    832     ACPI_EFI_HANDLE                 *Handle,
    833     ...);
    834 
    835 typedef
    836 ACPI_EFI_STATUS
    837 (ACPI_EFI_API *ACPI_EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
    838     ACPI_EFI_HANDLE                 Handle,
    839     ...);
    840 
    841 typedef
    842 ACPI_EFI_STATUS
    843 (ACPI_EFI_API *ACPI_EFI_CALCULATE_CRC32) (
    844     VOID                            *Data,
    845     UINTN                           DataSize,
    846     UINT32                          *Crc32);
    847 
    848 typedef
    849 VOID
    850 (ACPI_EFI_API *ACPI_EFI_COPY_MEM) (
    851     VOID                            *Destination,
    852     VOID                            *Source,
    853     UINTN                           Length);
    854 
    855 typedef
    856 VOID
    857 (ACPI_EFI_API *ACPI_EFI_SET_MEM) (
    858     VOID                            *Buffer,
    859     UINTN                           Size,
    860     UINT8                           Value);
    861 
    862 /*
    863  * EFI Boot Services Table
    864  */
    865 #define ACPI_EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42
    866 #define ACPI_EFI_BOOT_SERVICES_REVISION  (ACPI_EFI_SPECIFICATION_MAJOR_REVISION<<16) | (ACPI_EFI_SPECIFICATION_MINOR_REVISION)
    867 
    868 typedef struct _ACPI_EFI_BOOT_SERVICES {
    869     ACPI_EFI_TABLE_HEADER               Hdr;
    870 
    871 #if 0
    872     ACPI_EFI_RAISE_TPL                  RaiseTPL;
    873     ACPI_EFI_RESTORE_TPL                RestoreTPL;
    874 #else
    875     ACPI_EFI_UNKNOWN_INTERFACE          RaiseTPL;
    876     ACPI_EFI_UNKNOWN_INTERFACE          RestoreTPL;
    877 #endif
    878 
    879     ACPI_EFI_ALLOCATE_PAGES             AllocatePages;
    880     ACPI_EFI_FREE_PAGES                 FreePages;
    881     ACPI_EFI_GET_MEMORY_MAP             GetMemoryMap;
    882     ACPI_EFI_ALLOCATE_POOL              AllocatePool;
    883     ACPI_EFI_FREE_POOL                  FreePool;
    884 
    885 #if 0
    886     ACPI_EFI_CREATE_EVENT               CreateEvent;
    887     ACPI_EFI_SET_TIMER                  SetTimer;
    888     ACPI_EFI_WAIT_FOR_EVENT             WaitForEvent;
    889     ACPI_EFI_SIGNAL_EVENT               SignalEvent;
    890     ACPI_EFI_CLOSE_EVENT                CloseEvent;
    891     ACPI_EFI_CHECK_EVENT                CheckEvent;
    892 #else
    893     ACPI_EFI_UNKNOWN_INTERFACE          CreateEvent;
    894     ACPI_EFI_UNKNOWN_INTERFACE          SetTimer;
    895     ACPI_EFI_UNKNOWN_INTERFACE          WaitForEvent;
    896     ACPI_EFI_UNKNOWN_INTERFACE          SignalEvent;
    897     ACPI_EFI_UNKNOWN_INTERFACE          CloseEvent;
    898     ACPI_EFI_UNKNOWN_INTERFACE          CheckEvent;
    899 #endif
    900 
    901     ACPI_EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface;
    902     ACPI_EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface;
    903     ACPI_EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface;
    904     ACPI_EFI_HANDLE_PROTOCOL            HandleProtocol;
    905     ACPI_EFI_HANDLE_PROTOCOL            PCHandleProtocol;
    906     ACPI_EFI_REGISTER_PROTOCOL_NOTIFY   RegisterProtocolNotify;
    907     ACPI_EFI_LOCATE_HANDLE              LocateHandle;
    908     ACPI_EFI_LOCATE_DEVICE_PATH         LocateDevicePath;
    909     ACPI_EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable;
    910 
    911     ACPI_EFI_IMAGE_LOAD                 LoadImage;
    912     ACPI_EFI_IMAGE_START                StartImage;
    913     ACPI_EFI_EXIT                       Exit;
    914     ACPI_EFI_IMAGE_UNLOAD               UnloadImage;
    915 
    916 #if 0
    917     ACPI_EFI_EXIT_BOOT_SERVICES         ExitBootServices;
    918     ACPI_EFI_GET_NEXT_MONOTONIC_COUNT   GetNextMonotonicCount;
    919 #else
    920     ACPI_EFI_UNKNOWN_INTERFACE          ExitBootServices;
    921     ACPI_EFI_UNKNOWN_INTERFACE          GetNextMonotonicCount;
    922 #endif
    923     ACPI_EFI_STALL                      Stall;
    924     ACPI_EFI_SET_WATCHDOG_TIMER         SetWatchdogTimer;
    925 
    926 #if 0
    927     ACPI_EFI_CONNECT_CONTROLLER         ConnectController;
    928     ACPI_EFI_DISCONNECT_CONTROLLER      DisconnectController;
    929 #else
    930     ACPI_EFI_UNKNOWN_INTERFACE          ConnectController;
    931     ACPI_EFI_UNKNOWN_INTERFACE          DisconnectController;
    932 #endif
    933 
    934     ACPI_EFI_OPEN_PROTOCOL              OpenProtocol;
    935     ACPI_EFI_CLOSE_PROTOCOL             CloseProtocol;
    936     ACPI_EFI_OPEN_PROTOCOL_INFORMATION  OpenProtocolInformation;
    937     ACPI_EFI_PROTOCOLS_PER_HANDLE       ProtocolsPerHandle;
    938     ACPI_EFI_LOCATE_HANDLE_BUFFER       LocateHandleBuffer;
    939     ACPI_EFI_LOCATE_PROTOCOL            LocateProtocol;
    940     ACPI_EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces;
    941     ACPI_EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces;
    942 
    943     ACPI_EFI_CALCULATE_CRC32        CalculateCrc32;
    944 
    945     ACPI_EFI_COPY_MEM               CopyMem;
    946     ACPI_EFI_SET_MEM                SetMem;
    947 
    948 #if 0
    949     ACPI_EFI_CREATE_EVENT_EX        CreateEventEx;
    950 #else
    951     ACPI_EFI_UNKNOWN_INTERFACE      CreateEventEx;
    952 #endif
    953 } ACPI_EFI_BOOT_SERVICES;
    954 
    955 
    956 /*
    957  * EFI Runtime Services Table
    958  */
    959 #define ACPI_EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552
    960 #define ACPI_EFI_RUNTIME_SERVICES_REVISION  (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
    961 
    962 typedef struct _ACPI_EFI_RUNTIME_SERVICES {
    963     ACPI_EFI_TABLE_HEADER               Hdr;
    964 
    965     ACPI_EFI_GET_TIME                   GetTime;
    966     ACPI_EFI_SET_TIME                   SetTime;
    967 #if 0
    968     ACPI_EFI_GET_WAKEUP_TIME            GetWakeupTime;
    969     ACPI_EFI_SET_WAKEUP_TIME            SetWakeupTime;
    970 #else
    971     ACPI_EFI_UNKNOWN_INTERFACE          GetWakeupTime;
    972     ACPI_EFI_UNKNOWN_INTERFACE          SetWakeupTime;
    973 #endif
    974 
    975 #if 0
    976     ACPI_EFI_SET_VIRTUAL_ADDRESS_MAP    SetVirtualAddressMap;
    977     ACPI_EFI_CONVERT_POINTER            ConvertPointer;
    978 #else
    979     ACPI_EFI_UNKNOWN_INTERFACE          SetVirtualAddressMap;
    980     ACPI_EFI_UNKNOWN_INTERFACE          ConvertPointer;
    981 #endif
    982 
    983 #if 0
    984     ACPI_EFI_GET_VARIABLE               GetVariable;
    985     ACPI_EFI_GET_NEXT_VARIABLE_NAME     GetNextVariableName;
    986     ACPI_EFI_SET_VARIABLE               SetVariable;
    987 #else
    988     ACPI_EFI_UNKNOWN_INTERFACE          GetVariable;
    989     ACPI_EFI_UNKNOWN_INTERFACE          GetNextVariableName;
    990     ACPI_EFI_UNKNOWN_INTERFACE          SetVariable;
    991 #endif
    992 
    993 #if 0
    994     ACPI_EFI_GET_NEXT_HIGH_MONO_COUNT   GetNextHighMonotonicCount;
    995     ACPI_EFI_RESET_SYSTEM               ResetSystem;
    996 #else
    997     ACPI_EFI_UNKNOWN_INTERFACE          GetNextHighMonotonicCount;
    998     ACPI_EFI_UNKNOWN_INTERFACE          ResetSystem;
    999 #endif
   1000 
   1001 } ACPI_EFI_RUNTIME_SERVICES;
   1002 
   1003 
   1004 /*
   1005  * EFI System Table
   1006  */
   1007 
   1008 /*
   1009  * EFI Configuration Table and GUID definitions
   1010  */
   1011 #define ACPI_TABLE_GUID \
   1012     { 0xeb9d2d30, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
   1013 #define ACPI_20_TABLE_GUID \
   1014     { 0x8868e871, 0xe4f1, 0x11d3, {0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} }
   1015 
   1016 typedef struct _ACPI_EFI_CONFIGURATION_TABLE {
   1017     ACPI_EFI_GUID           VendorGuid;
   1018     VOID                    *VendorTable;
   1019 } ACPI_EFI_CONFIGURATION_TABLE;
   1020 
   1021 
   1022 #define ACPI_EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249
   1023 #define ACPI_EFI_SYSTEM_TABLE_REVISION  (ACPI_EFI_SPECIFICATION_MAJOR_REVISION<<16) | (ACPI_EFI_SPECIFICATION_MINOR_REVISION)
   1024 
   1025 typedef struct _ACPI_EFI_SYSTEM_TABLE {
   1026     ACPI_EFI_TABLE_HEADER               Hdr;
   1027 
   1028     CHAR16                              *FirmwareVendor;
   1029     UINT32                              FirmwareRevision;
   1030 
   1031     ACPI_EFI_HANDLE                     ConsoleInHandle;
   1032     ACPI_SIMPLE_INPUT_INTERFACE         *ConIn;
   1033 
   1034     ACPI_EFI_HANDLE                     ConsoleOutHandle;
   1035     ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *ConOut;
   1036 
   1037     ACPI_EFI_HANDLE                     StandardErrorHandle;
   1038     ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *StdErr;
   1039 
   1040     ACPI_EFI_RUNTIME_SERVICES           *RuntimeServices;
   1041     ACPI_EFI_BOOT_SERVICES              *BootServices;
   1042 
   1043     UINTN                               NumberOfTableEntries;
   1044     ACPI_EFI_CONFIGURATION_TABLE        *ConfigurationTable;
   1045 
   1046 } ACPI_EFI_SYSTEM_TABLE;
   1047 
   1048 
   1049 /*
   1050  * EFI PCI I/O Protocol
   1051  */
   1052 #define ACPI_EFI_PCI_IO_PROTOCOL \
   1053     { 0x4cf5b200, 0x68b8, 0x4ca5, {0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x2, 0x9a} }
   1054 
   1055 typedef enum {
   1056     AcpiEfiPciIoWidthUint8 = 0,
   1057     AcpiEfiPciIoWidthUint16,
   1058     AcpiEfiPciIoWidthUint32,
   1059     AcpiEfiPciIoWidthUint64,
   1060     AcpiEfiPciIoWidthFifoUint8,
   1061     AcpiEfiPciIoWidthFifoUint16,
   1062     AcpiEfiPciIoWidthFifoUint32,
   1063     AcpiEfiPciIoWidthFifoUint64,
   1064     AcpiEfiPciIoWidthFillUint8,
   1065     AcpiEfiPciIoWidthFillUint16,
   1066     AcpiEfiPciIoWidthFillUint32,
   1067     AcpiEfiPciIoWidthFillUint64,
   1068     AcpiEfiPciIoWidthMaximum
   1069 } ACPI_EFI_PCI_IO_PROTOCOL_WIDTH;
   1070 
   1071 typedef
   1072 ACPI_EFI_STATUS
   1073 (ACPI_EFI_API *ACPI_EFI_PCI_IO_PROTOCOL_CONFIG)(
   1074     struct _ACPI_EFI_PCI_IO             *This,
   1075     ACPI_EFI_PCI_IO_PROTOCOL_WIDTH      Width,
   1076     UINT32                              Offset,
   1077     UINTN                               Count,
   1078     VOID                                *Buffer);
   1079 
   1080 typedef struct {
   1081     ACPI_EFI_PCI_IO_PROTOCOL_CONFIG     Read;
   1082     ACPI_EFI_PCI_IO_PROTOCOL_CONFIG     Write;
   1083 } ACPI_EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS;
   1084 
   1085 typedef
   1086 ACPI_EFI_STATUS
   1087 (ACPI_EFI_API *ACPI_EFI_PCI_IO_PROTOCOL_GET_LOCATION)(
   1088     struct _ACPI_EFI_PCI_IO             *This,
   1089     UINTN                               *SegmentNumber,
   1090     UINTN                               *BusNumber,
   1091     UINTN                               *DeviceNumber,
   1092     UINTN                               *FunctionNumber);
   1093 
   1094 typedef struct _ACPI_EFI_PCI_IO {
   1095     ACPI_EFI_UNKNOWN_INTERFACE          PollMem;
   1096     ACPI_EFI_UNKNOWN_INTERFACE          PollIo;
   1097     ACPI_EFI_UNKNOWN_INTERFACE          Mem;
   1098     ACPI_EFI_UNKNOWN_INTERFACE          Io;
   1099     ACPI_EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS Pci;
   1100     ACPI_EFI_UNKNOWN_INTERFACE          CopyMem;
   1101     ACPI_EFI_UNKNOWN_INTERFACE          Map;
   1102     ACPI_EFI_UNKNOWN_INTERFACE          Unmap;
   1103     ACPI_EFI_UNKNOWN_INTERFACE          AllocateBuffer;
   1104     ACPI_EFI_UNKNOWN_INTERFACE          FreeBuffer;
   1105     ACPI_EFI_UNKNOWN_INTERFACE          Flush;
   1106     ACPI_EFI_PCI_IO_PROTOCOL_GET_LOCATION GetLocation;
   1107     ACPI_EFI_UNKNOWN_INTERFACE          Attributes;
   1108     ACPI_EFI_UNKNOWN_INTERFACE          GetBarAttributes;
   1109     ACPI_EFI_UNKNOWN_INTERFACE          SetBarAttributes;
   1110     UINT64                              RomSize;
   1111     VOID                                *RomImage;
   1112 } ACPI_EFI_PCI_IO;
   1113 
   1114 /* FILE abstraction */
   1115 
   1116 union acpi_efi_file {
   1117     struct _ACPI_EFI_FILE_HANDLE File;
   1118     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE ConOut;
   1119     struct _ACPI_SIMPLE_INPUT_INTERFACE ConIn;
   1120 };
   1121 
   1122 
   1123 /* EFI definitions */
   1124 
   1125 #if defined(_GNU_EFI) || defined(_EDK2_EFI)
   1126 
   1127 /*
   1128  * This is needed to hide platform specific code from ACPICA
   1129  */
   1130 UINT64 ACPI_EFI_API
   1131 DivU64x32 (
   1132     UINT64                  Dividend,
   1133     UINTN                   Divisor,
   1134     UINTN                   *Remainder);
   1135 
   1136 UINT64 ACPI_EFI_API
   1137 MultU64x32 (
   1138     UINT64                  Multiplicand,
   1139     UINTN                   Multiplier);
   1140 
   1141 UINT64 ACPI_EFI_API
   1142 LShiftU64 (
   1143     UINT64                  Operand,
   1144     UINTN                   Count);
   1145 
   1146 UINT64 ACPI_EFI_API
   1147 RShiftU64 (
   1148     UINT64                  Operand,
   1149     UINTN                   Count);
   1150 
   1151 /*
   1152  * EFI specific prototypes
   1153  */
   1154 ACPI_EFI_STATUS
   1155 efi_main (
   1156     ACPI_EFI_HANDLE         Image,
   1157     ACPI_EFI_SYSTEM_TABLE   *SystemTab);
   1158 
   1159 int
   1160 acpi_main (
   1161     int                     argc,
   1162     char                    *argv[]);
   1163 
   1164 #endif
   1165 
   1166 extern ACPI_EFI_GUID AcpiGbl_LoadedImageProtocol;
   1167 extern ACPI_EFI_GUID AcpiGbl_TextInProtocol;
   1168 extern ACPI_EFI_GUID AcpiGbl_TextOutProtocol;
   1169 extern ACPI_EFI_GUID AcpiGbl_FileSystemProtocol;
   1170 extern ACPI_EFI_GUID AcpiGbl_GenericFileInfo;
   1171 
   1172 #endif /* __ACEFIEX_H__ */
   1173