Home | History | Annotate | Line # | Download | only in platform
acefiex.h revision 1.1.1.3
      1 /******************************************************************************
      2  *
      3  * Name: acefiex.h - Extra OS specific defines, etc. for EFI
      4  *
      5  *****************************************************************************/
      6 
      7 /*
      8  * Copyright (C) 2000 - 2016, 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 _ACPI_EFI_DEVICE_PATH {
     99         UINT8                           Type;
    100         UINT8                           SubType;
    101         UINT8                           Length[2];
    102 } ACPI_EFI_DEVICE_PATH;
    103 
    104 typedef UINT64          ACPI_EFI_PHYSICAL_ADDRESS;
    105 typedef UINT64          ACPI_EFI_VIRTUAL_ADDRESS;
    106 
    107 typedef enum {
    108     AcpiEfiAllocateAnyPages,
    109     AcpiEfiAllocateMaxAddress,
    110     AcpiEfiAllocateAddress,
    111     AcpiEfiMaxAllocateType
    112 } ACPI_EFI_ALLOCATE_TYPE;
    113 
    114 typedef enum {
    115     AcpiEfiReservedMemoryType,
    116     AcpiEfiLoaderCode,
    117     AcpiEfiLoaderData,
    118     AcpiEfiBootServicesCode,
    119     AcpiEfiBootServicesData,
    120     AcpiEfiRuntimeServicesCode,
    121     AcpiEfiRuntimeServicesData,
    122     AcpiEfiConventionalMemory,
    123     AcpiEfiUnusableMemory,
    124     AcpiEfiACPIReclaimMemory,
    125     AcpiEfiACPIMemoryNVS,
    126     AcpiEfiMemoryMappedIO,
    127     AcpiEfiMemoryMappedIOPortSpace,
    128     AcpiEfiPalCode,
    129     AcpiEfiMaxMemoryType
    130 } ACPI_EFI_MEMORY_TYPE;
    131 
    132 /* possible caching types for the memory range */
    133 #define ACPI_EFI_MEMORY_UC      0x0000000000000001
    134 #define ACPI_EFI_MEMORY_WC      0x0000000000000002
    135 #define ACPI_EFI_MEMORY_WT      0x0000000000000004
    136 #define ACPI_EFI_MEMORY_WB      0x0000000000000008
    137 #define ACPI_EFI_MEMORY_UCE     0x0000000000000010
    138 
    139 /* physical memory protection on range */
    140 #define ACPI_EFI_MEMORY_WP      0x0000000000001000
    141 #define ACPI_EFI_MEMORY_RP      0x0000000000002000
    142 #define ACPI_EFI_MEMORY_XP      0x0000000000004000
    143 
    144 /* range requires a runtime mapping */
    145 #define ACPI_EFI_MEMORY_RUNTIME 0x8000000000000000
    146 
    147 #define ACPI_EFI_MEMORY_DESCRIPTOR_VERSION  1
    148 typedef struct {
    149     UINT32                          Type;
    150     UINT32                          Pad;
    151     ACPI_EFI_PHYSICAL_ADDRESS       PhysicalStart;
    152     ACPI_EFI_VIRTUAL_ADDRESS        VirtualStart;
    153     UINT64                          NumberOfPages;
    154     UINT64                          Attribute;
    155 } ACPI_EFI_MEMORY_DESCRIPTOR;
    156 
    157 typedef struct _ACPI_EFI_TABLE_HEARDER {
    158     UINT64                      Signature;
    159     UINT32                      Revision;
    160     UINT32                      HeaderSize;
    161     UINT32                      CRC32;
    162     UINT32                      Reserved;
    163 } ACPI_EFI_TABLE_HEADER;
    164 
    165 typedef
    166 ACPI_EFI_STATUS
    167 (ACPI_EFI_API *ACPI_EFI_UNKNOWN_INTERFACE) (
    168     void);
    169 
    170 
    171 /*
    172  * Text output protocol
    173  */
    174 #define ACPI_SIMPLE_TEXT_OUTPUT_PROTOCOL \
    175     { 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    176 
    177 typedef
    178 ACPI_EFI_STATUS
    179 (ACPI_EFI_API *ACPI_EFI_TEXT_RESET) (
    180     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    181     BOOLEAN                                     ExtendedVerification);
    182 
    183 typedef
    184 ACPI_EFI_STATUS
    185 (ACPI_EFI_API *ACPI_EFI_TEXT_OUTPUT_STRING) (
    186     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    187     CHAR16                                      *String);
    188 
    189 typedef
    190 ACPI_EFI_STATUS
    191 (ACPI_EFI_API *ACPI_EFI_TEXT_TEST_STRING) (
    192     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    193     CHAR16                                      *String);
    194 
    195 typedef
    196 ACPI_EFI_STATUS
    197 (ACPI_EFI_API *ACPI_EFI_TEXT_QUERY_MODE) (
    198     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    199     UINTN                                       ModeNumber,
    200     UINTN                                       *Columns,
    201     UINTN                                       *Rows);
    202 
    203 typedef
    204 ACPI_EFI_STATUS
    205 (ACPI_EFI_API *ACPI_EFI_TEXT_SET_MODE) (
    206     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    207     UINTN                                       ModeNumber);
    208 
    209 typedef
    210 ACPI_EFI_STATUS
    211 (ACPI_EFI_API *ACPI_EFI_TEXT_SET_ATTRIBUTE) (
    212     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    213     UINTN                                       Attribute);
    214 
    215 typedef
    216 ACPI_EFI_STATUS
    217 (ACPI_EFI_API *ACPI_EFI_TEXT_CLEAR_SCREEN) (
    218     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This);
    219 
    220 typedef
    221 ACPI_EFI_STATUS
    222 (ACPI_EFI_API *ACPI_EFI_TEXT_SET_CURSOR_POSITION) (
    223     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    224     UINTN                                       Column,
    225     UINTN                                       Row);
    226 
    227 typedef
    228 ACPI_EFI_STATUS
    229 (ACPI_EFI_API *ACPI_EFI_TEXT_ENABLE_CURSOR) (
    230     struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
    231     BOOLEAN                                     Enable);
    232 
    233 typedef struct {
    234     INT32                           MaxMode;
    235     INT32                           Mode;
    236     INT32                           Attribute;
    237     INT32                           CursorColumn;
    238     INT32                           CursorRow;
    239     BOOLEAN                         CursorVisible;
    240 } ACPI_SIMPLE_TEXT_OUTPUT_MODE;
    241 
    242 typedef struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE {
    243     ACPI_EFI_TEXT_RESET                 Reset;
    244 
    245     ACPI_EFI_TEXT_OUTPUT_STRING         OutputString;
    246     ACPI_EFI_TEXT_TEST_STRING           TestString;
    247 
    248     ACPI_EFI_TEXT_QUERY_MODE            QueryMode;
    249     ACPI_EFI_TEXT_SET_MODE              SetMode;
    250     ACPI_EFI_TEXT_SET_ATTRIBUTE         SetAttribute;
    251 
    252     ACPI_EFI_TEXT_CLEAR_SCREEN          ClearScreen;
    253     ACPI_EFI_TEXT_SET_CURSOR_POSITION   SetCursorPosition;
    254     ACPI_EFI_TEXT_ENABLE_CURSOR         EnableCursor;
    255 
    256     ACPI_SIMPLE_TEXT_OUTPUT_MODE        *Mode;
    257 } ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE;
    258 
    259 /*
    260  * Text input protocol
    261  */
    262 #define ACPI_SIMPLE_TEXT_INPUT_PROTOCOL  \
    263     { 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    264 
    265 typedef struct {
    266     UINT16                              ScanCode;
    267     CHAR16                              UnicodeChar;
    268 } ACPI_EFI_INPUT_KEY;
    269 
    270 /*
    271  * Baseline unicode control chars
    272  */
    273 #define CHAR_NULL                       0x0000
    274 #define CHAR_BACKSPACE                  0x0008
    275 #define CHAR_TAB                        0x0009
    276 #define CHAR_LINEFEED                   0x000A
    277 #define CHAR_CARRIAGE_RETURN            0x000D
    278 
    279 typedef
    280 ACPI_EFI_STATUS
    281 (ACPI_EFI_API *ACPI_EFI_INPUT_RESET) (
    282     struct _ACPI_SIMPLE_INPUT_INTERFACE         *This,
    283     BOOLEAN                                     ExtendedVerification);
    284 
    285 typedef
    286 ACPI_EFI_STATUS
    287 (ACPI_EFI_API *ACPI_EFI_INPUT_READ_KEY) (
    288     struct _ACPI_SIMPLE_INPUT_INTERFACE         *This,
    289     ACPI_EFI_INPUT_KEY                          *Key);
    290 
    291 typedef struct _ACPI_SIMPLE_INPUT_INTERFACE {
    292     ACPI_EFI_INPUT_RESET                    Reset;
    293     ACPI_EFI_INPUT_READ_KEY                 ReadKeyStroke;
    294     ACPI_EFI_EVENT                          WaitForKey;
    295 } ACPI_SIMPLE_INPUT_INTERFACE;
    296 
    297 
    298 /*
    299  * Simple file system protocol
    300  */
    301 #define ACPI_SIMPLE_FILE_SYSTEM_PROTOCOL \
    302     { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
    303 
    304 typedef
    305 ACPI_EFI_STATUS
    306 (ACPI_EFI_API *ACPI_EFI_VOLUME_OPEN) (
    307     struct _ACPI_EFI_FILE_IO_INTERFACE          *This,
    308     struct _ACPI_EFI_FILE_HANDLE                **Root);
    309 
    310 #define ACPI_EFI_FILE_IO_INTERFACE_REVISION     0x00010000
    311 
    312 typedef struct _ACPI_EFI_FILE_IO_INTERFACE {
    313     UINT64                  Revision;
    314     ACPI_EFI_VOLUME_OPEN    OpenVolume;
    315 } ACPI_EFI_FILE_IO_INTERFACE;
    316 
    317 typedef
    318 ACPI_EFI_STATUS
    319 (ACPI_EFI_API *ACPI_EFI_FILE_OPEN) (
    320     struct _ACPI_EFI_FILE_HANDLE                *File,
    321     struct _ACPI_EFI_FILE_HANDLE                **NewHandle,
    322     CHAR16                                      *FileName,
    323     UINT64                                      OpenMode,
    324     UINT64                                      Attributes);
    325 
    326 /* Values for OpenMode used above */
    327 
    328 #define ACPI_EFI_FILE_MODE_READ     0x0000000000000001
    329 #define ACPI_EFI_FILE_MODE_WRITE    0x0000000000000002
    330 #define ACPI_EFI_FILE_MODE_CREATE   0x8000000000000000
    331 
    332 /* Values for Attribute used above */
    333 
    334 #define ACPI_EFI_FILE_READ_ONLY     0x0000000000000001
    335 #define ACPI_EFI_FILE_HIDDEN        0x0000000000000002
    336 #define ACPI_EFI_FILE_SYSTEM        0x0000000000000004
    337 #define ACPI_EFI_FILE_RESERVIED     0x0000000000000008
    338 #define ACPI_EFI_FILE_DIRECTORY     0x0000000000000010
    339 #define ACPI_EFI_FILE_ARCHIVE       0x0000000000000020
    340 #define ACPI_EFI_FILE_VALID_ATTR    0x0000000000000037
    341 
    342 typedef
    343 ACPI_EFI_STATUS
    344 (ACPI_EFI_API *ACPI_EFI_FILE_CLOSE) (
    345     struct _ACPI_EFI_FILE_HANDLE                *File);
    346 
    347 typedef
    348 ACPI_EFI_STATUS
    349 (ACPI_EFI_API *ACPI_EFI_FILE_DELETE) (
    350     struct _ACPI_EFI_FILE_HANDLE                *File);
    351 
    352 typedef
    353 ACPI_EFI_STATUS
    354 (ACPI_EFI_API *ACPI_EFI_FILE_READ) (
    355     struct _ACPI_EFI_FILE_HANDLE                *File,
    356     UINTN                                       *BufferSize,
    357     VOID                                        *Buffer);
    358 
    359 typedef
    360 ACPI_EFI_STATUS
    361 (ACPI_EFI_API *ACPI_EFI_FILE_WRITE) (
    362     struct _ACPI_EFI_FILE_HANDLE                *File,
    363     UINTN                                       *BufferSize,
    364     VOID                                        *Buffer);
    365 
    366 typedef
    367 ACPI_EFI_STATUS
    368 (ACPI_EFI_API *ACPI_EFI_FILE_SET_POSITION) (
    369     struct _ACPI_EFI_FILE_HANDLE                *File,
    370     UINT64                                      Position);
    371 
    372 typedef
    373 ACPI_EFI_STATUS
    374 (ACPI_EFI_API *ACPI_EFI_FILE_GET_POSITION) (
    375     struct _ACPI_EFI_FILE_HANDLE                *File,
    376     UINT64                                      *Position);
    377 
    378 typedef
    379 ACPI_EFI_STATUS
    380 (ACPI_EFI_API *ACPI_EFI_FILE_GET_INFO) (
    381     struct _ACPI_EFI_FILE_HANDLE                *File,
    382     ACPI_EFI_GUID                               *InformationType,
    383     UINTN                                       *BufferSize,
    384     VOID                                        *Buffer);
    385 
    386 typedef
    387 ACPI_EFI_STATUS
    388 (ACPI_EFI_API *ACPI_EFI_FILE_SET_INFO) (
    389     struct _ACPI_EFI_FILE_HANDLE                *File,
    390     ACPI_EFI_GUID                               *InformationType,
    391     UINTN                                       BufferSize,
    392     VOID                                        *Buffer);
    393 
    394 typedef
    395 ACPI_EFI_STATUS
    396 (ACPI_EFI_API *ACPI_EFI_FILE_FLUSH) (
    397     struct _ACPI_EFI_FILE_HANDLE                *File);
    398 
    399 
    400 #define ACPI_EFI_FILE_HANDLE_REVISION           0x00010000
    401 
    402 typedef struct _ACPI_EFI_FILE_HANDLE {
    403     UINT64                      Revision;
    404     ACPI_EFI_FILE_OPEN          Open;
    405     ACPI_EFI_FILE_CLOSE         Close;
    406     ACPI_EFI_FILE_DELETE        Delete;
    407     ACPI_EFI_FILE_READ          Read;
    408     ACPI_EFI_FILE_WRITE         Write;
    409     ACPI_EFI_FILE_GET_POSITION  GetPosition;
    410     ACPI_EFI_FILE_SET_POSITION  SetPosition;
    411     ACPI_EFI_FILE_GET_INFO      GetInfo;
    412     ACPI_EFI_FILE_SET_INFO      SetInfo;
    413     ACPI_EFI_FILE_FLUSH         Flush;
    414 } ACPI_EFI_FILE_STRUCT, *ACPI_EFI_FILE_HANDLE;
    415 
    416 
    417 /*
    418  * Loaded image protocol
    419  */
    420 #define ACPI_EFI_LOADED_IMAGE_PROTOCOL \
    421     { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
    422 
    423 typedef
    424 ACPI_EFI_STATUS
    425 (ACPI_EFI_API *ACPI_EFI_IMAGE_ENTRY_POINT) (
    426     ACPI_EFI_HANDLE                         ImageHandle,
    427     struct _ACPI_EFI_SYSTEM_TABLE           *SystemTable);
    428 
    429 typedef
    430 ACPI_EFI_STATUS
    431 (ACPI_EFI_API *ACPI_EFI_IMAGE_LOAD) (
    432     BOOLEAN                         BootPolicy,
    433     ACPI_EFI_HANDLE                 ParentImageHandle,
    434     ACPI_EFI_DEVICE_PATH            *FilePath,
    435     VOID                            *SourceBuffer,
    436     UINTN                           SourceSize,
    437     ACPI_EFI_HANDLE                 *ImageHandle);
    438 
    439 typedef
    440 ACPI_EFI_STATUS
    441 (ACPI_EFI_API *ACPI_EFI_IMAGE_START) (
    442     ACPI_EFI_HANDLE                 ImageHandle,
    443     UINTN                           *ExitDataSize,
    444     CHAR16                          **ExitData);
    445 
    446 typedef
    447 ACPI_EFI_STATUS
    448 (ACPI_EFI_API *ACPI_EFI_EXIT) (
    449     ACPI_EFI_HANDLE                 ImageHandle,
    450     ACPI_EFI_STATUS                 ExitStatus,
    451     UINTN                           ExitDataSize,
    452     CHAR16                          *ExitData);
    453 
    454 typedef
    455 ACPI_EFI_STATUS
    456 (ACPI_EFI_API *ACPI_EFI_IMAGE_UNLOAD) (
    457     ACPI_EFI_HANDLE                 ImageHandle);
    458 
    459 
    460 #define EFI_IMAGE_INFORMATION_REVISION      0x1000
    461 typedef struct {
    462     UINT32                          Revision;
    463     ACPI_EFI_HANDLE                 ParentHandle;
    464     struct _ACPI_EFI_SYSTEM_TABLE   *SystemTable;
    465     ACPI_EFI_HANDLE                 DeviceHandle;
    466     ACPI_EFI_DEVICE_PATH            *FilePath;
    467     VOID                            *Reserved;
    468     UINT32                          LoadOptionsSize;
    469     VOID                            *LoadOptions;
    470     VOID                            *ImageBase;
    471     UINT64                          ImageSize;
    472     ACPI_EFI_MEMORY_TYPE            ImageCodeType;
    473     ACPI_EFI_MEMORY_TYPE            ImageDataType;
    474     ACPI_EFI_IMAGE_UNLOAD           Unload;
    475 
    476 } ACPI_EFI_LOADED_IMAGE;
    477 
    478 
    479 /*
    480  * EFI Memory
    481  */
    482 typedef
    483 ACPI_EFI_STATUS
    484 (ACPI_EFI_API *ACPI_EFI_ALLOCATE_PAGES) (
    485     ACPI_EFI_ALLOCATE_TYPE          Type,
    486     ACPI_EFI_MEMORY_TYPE            MemoryType,
    487     UINTN                           NoPages,
    488     ACPI_EFI_PHYSICAL_ADDRESS       *Memory);
    489 
    490 typedef
    491 ACPI_EFI_STATUS
    492 (ACPI_EFI_API *ACPI_EFI_FREE_PAGES) (
    493     ACPI_EFI_PHYSICAL_ADDRESS       Memory,
    494     UINTN                           NoPages);
    495 
    496 typedef
    497 ACPI_EFI_STATUS
    498 (ACPI_EFI_API *ACPI_EFI_GET_MEMORY_MAP) (
    499     UINTN                           *MemoryMapSize,
    500     ACPI_EFI_MEMORY_DESCRIPTOR      *MemoryMap,
    501     UINTN                           *MapKey,
    502     UINTN                           *DescriptorSize,
    503     UINT32                          *DescriptorVersion);
    504 
    505 #define NextMemoryDescriptor(Ptr,Size)  ((ACPI_EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size))
    506 
    507 typedef
    508 ACPI_EFI_STATUS
    509 (ACPI_EFI_API *ACPI_EFI_ALLOCATE_POOL) (
    510     ACPI_EFI_MEMORY_TYPE            PoolType,
    511     UINTN                           Size,
    512     VOID                            **Buffer);
    513 
    514 typedef
    515 ACPI_EFI_STATUS
    516 (ACPI_EFI_API *ACPI_EFI_FREE_POOL) (
    517     VOID                            *Buffer);
    518 
    519 
    520 /*
    521  * Protocol handler functions
    522  */
    523 typedef enum {
    524     ACPI_EFI_NATIVE_INTERFACE,
    525     ACPI_EFI_PCODE_INTERFACE
    526 } ACPI_EFI_INTERFACE_TYPE;
    527 
    528 typedef enum {
    529     AcpiEfiAllHandles,
    530     AcpiEfiByRegisterNotify,
    531     AcpiEfiByProtocol
    532 } ACPI_EFI_LOCATE_SEARCH_TYPE;
    533 
    534 typedef
    535 ACPI_EFI_STATUS
    536 (ACPI_EFI_API *ACPI_EFI_INSTALL_PROTOCOL_INTERFACE) (
    537     ACPI_EFI_HANDLE                 *Handle,
    538     ACPI_EFI_GUID                   *Protocol,
    539     ACPI_EFI_INTERFACE_TYPE         InterfaceType,
    540     VOID                            *Interface);
    541 
    542 typedef
    543 ACPI_EFI_STATUS
    544 (ACPI_EFI_API *ACPI_EFI_REINSTALL_PROTOCOL_INTERFACE) (
    545     ACPI_EFI_HANDLE                 Handle,
    546     ACPI_EFI_GUID                   *Protocol,
    547     VOID                            *OldInterface,
    548     VOID                            *NewInterface);
    549 
    550 typedef
    551 ACPI_EFI_STATUS
    552 (ACPI_EFI_API *ACPI_EFI_UNINSTALL_PROTOCOL_INTERFACE) (
    553     ACPI_EFI_HANDLE                 Handle,
    554     ACPI_EFI_GUID                   *Protocol,
    555     VOID                            *Interface);
    556 
    557 typedef
    558 ACPI_EFI_STATUS
    559 (ACPI_EFI_API *ACPI_EFI_HANDLE_PROTOCOL) (
    560     ACPI_EFI_HANDLE                 Handle,
    561     ACPI_EFI_GUID                   *Protocol,
    562     VOID                            **Interface);
    563 
    564 typedef
    565 ACPI_EFI_STATUS
    566 (ACPI_EFI_API *ACPI_EFI_REGISTER_PROTOCOL_NOTIFY) (
    567     ACPI_EFI_GUID                   *Protocol,
    568     ACPI_EFI_EVENT                  Event,
    569     VOID                            **Registration);
    570 
    571 typedef
    572 ACPI_EFI_STATUS
    573 (ACPI_EFI_API *ACPI_EFI_LOCATE_HANDLE) (
    574     ACPI_EFI_LOCATE_SEARCH_TYPE     SearchType,
    575     ACPI_EFI_GUID                   *Protocol,
    576     VOID                            *SearchKey,
    577     UINTN                           *BufferSize,
    578     ACPI_EFI_HANDLE                 *Buffer);
    579 
    580 typedef
    581 ACPI_EFI_STATUS
    582 (ACPI_EFI_API *ACPI_EFI_LOCATE_DEVICE_PATH) (
    583     ACPI_EFI_GUID                   *Protocol,
    584     ACPI_EFI_DEVICE_PATH            **DevicePath,
    585     ACPI_EFI_HANDLE                 *Device);
    586 
    587 typedef
    588 ACPI_EFI_STATUS
    589 (ACPI_EFI_API *ACPI_EFI_INSTALL_CONFIGURATION_TABLE) (
    590     ACPI_EFI_GUID                   *Guid,
    591     VOID                            *Table);
    592 
    593 #define ACPI_EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL  0x00000001
    594 #define ACPI_EFI_OPEN_PROTOCOL_GET_PROTOCOL        0x00000002
    595 #define ACPI_EFI_OPEN_PROTOCOL_TEST_PROTOCOL       0x00000004
    596 #define ACPI_EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008
    597 #define ACPI_EFI_OPEN_PROTOCOL_BY_DRIVER           0x00000010
    598 #define ACPI_EFI_OPEN_PROTOCOL_EXCLUSIVE           0x00000020
    599 
    600 typedef
    601 ACPI_EFI_STATUS
    602 (ACPI_EFI_API *ACPI_EFI_OPEN_PROTOCOL) (
    603     ACPI_EFI_HANDLE                 Handle,
    604     ACPI_EFI_GUID                   *Protocol,
    605     VOID                            **Interface,
    606     ACPI_EFI_HANDLE                 AgentHandle,
    607     ACPI_EFI_HANDLE                 ControllerHandle,
    608     UINT32                          Attributes);
    609 
    610 typedef
    611 ACPI_EFI_STATUS
    612 (ACPI_EFI_API *ACPI_EFI_CLOSE_PROTOCOL) (
    613     ACPI_EFI_HANDLE                 Handle,
    614     ACPI_EFI_GUID                   *Protocol,
    615     ACPI_EFI_HANDLE                 AgentHandle,
    616     ACPI_EFI_HANDLE                 ControllerHandle);
    617 
    618 typedef struct {
    619     ACPI_EFI_HANDLE                 AgentHandle;
    620     ACPI_EFI_HANDLE                 ControllerHandle;
    621     UINT32                          Attributes;
    622     UINT32                          OpenCount;
    623 } ACPI_EFI_OPEN_PROTOCOL_INFORMATION_ENTRY;
    624 
    625 typedef
    626 ACPI_EFI_STATUS
    627 (ACPI_EFI_API *ACPI_EFI_OPEN_PROTOCOL_INFORMATION) (
    628     ACPI_EFI_HANDLE                 Handle,
    629     ACPI_EFI_GUID                   *Protocol,
    630     ACPI_EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer,
    631     UINTN                           *EntryCount);
    632 
    633 typedef
    634 ACPI_EFI_STATUS
    635 (ACPI_EFI_API *ACPI_EFI_PROTOCOLS_PER_HANDLE) (
    636     ACPI_EFI_HANDLE                 Handle,
    637     ACPI_EFI_GUID                   ***ProtocolBuffer,
    638     UINTN                           *ProtocolBufferCount);
    639 
    640 typedef
    641 ACPI_EFI_STATUS
    642 (ACPI_EFI_API *ACPI_EFI_LOCATE_HANDLE_BUFFER) (
    643     ACPI_EFI_LOCATE_SEARCH_TYPE     SearchType,
    644     ACPI_EFI_GUID                   *Protocol,
    645     VOID                            *SearchKey,
    646     UINTN                           *NoHandles,
    647     ACPI_EFI_HANDLE                 **Buffer);
    648 
    649 typedef
    650 ACPI_EFI_STATUS
    651 (ACPI_EFI_API *ACPI_EFI_LOCATE_PROTOCOL) (
    652     ACPI_EFI_GUID                   *Protocol,
    653     VOID                            *Registration,
    654     VOID                            **Interface);
    655 
    656 typedef
    657 ACPI_EFI_STATUS
    658 (ACPI_EFI_API *ACPI_EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
    659     ACPI_EFI_HANDLE                 *Handle,
    660     ...);
    661 
    662 typedef
    663 ACPI_EFI_STATUS
    664 (ACPI_EFI_API *ACPI_EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
    665     ACPI_EFI_HANDLE                 Handle,
    666     ...);
    667 
    668 typedef
    669 ACPI_EFI_STATUS
    670 (ACPI_EFI_API *ACPI_EFI_CALCULATE_CRC32) (
    671     VOID                            *Data,
    672     UINTN                           DataSize,
    673     UINT32                          *Crc32);
    674 
    675 typedef
    676 VOID
    677 (ACPI_EFI_API *ACPI_EFI_COPY_MEM) (
    678     VOID                            *Destination,
    679     VOID                            *Source,
    680     UINTN                           Length);
    681 
    682 typedef
    683 VOID
    684 (ACPI_EFI_API *ACPI_EFI_SET_MEM) (
    685     VOID                            *Buffer,
    686     UINTN                           Size,
    687     UINT8                           Value);
    688 
    689 /*
    690  * EFI Boot Services Table
    691  */
    692 #define ACPI_EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42
    693 #define ACPI_EFI_BOOT_SERVICES_REVISION  (ACPI_EFI_SPECIFICATION_MAJOR_REVISION<<16) | (ACPI_EFI_SPECIFICATION_MINOR_REVISION)
    694 
    695 typedef struct _ACPI_EFI_BOOT_SERVICES {
    696     ACPI_EFI_TABLE_HEADER               Hdr;
    697 
    698 #if 0
    699     ACPI_EFI_RAISE_TPL                  RaiseTPL;
    700     ACPI_EFI_RESTORE_TPL                RestoreTPL;
    701 #else
    702     ACPI_EFI_UNKNOWN_INTERFACE          RaiseTPL;
    703     ACPI_EFI_UNKNOWN_INTERFACE          RestoreTPL;
    704 #endif
    705 
    706     ACPI_EFI_ALLOCATE_PAGES             AllocatePages;
    707     ACPI_EFI_FREE_PAGES                 FreePages;
    708     ACPI_EFI_GET_MEMORY_MAP             GetMemoryMap;
    709     ACPI_EFI_ALLOCATE_POOL              AllocatePool;
    710     ACPI_EFI_FREE_POOL                  FreePool;
    711 
    712 #if 0
    713     ACPI_EFI_CREATE_EVENT               CreateEvent;
    714     ACPI_EFI_SET_TIMER                  SetTimer;
    715     ACPI_EFI_WAIT_FOR_EVENT             WaitForEvent;
    716     ACPI_EFI_SIGNAL_EVENT               SignalEvent;
    717     ACPI_EFI_CLOSE_EVENT                CloseEvent;
    718     ACPI_EFI_CHECK_EVENT                CheckEvent;
    719 #else
    720     ACPI_EFI_UNKNOWN_INTERFACE          CreateEvent;
    721     ACPI_EFI_UNKNOWN_INTERFACE          SetTimer;
    722     ACPI_EFI_UNKNOWN_INTERFACE          WaitForEvent;
    723     ACPI_EFI_UNKNOWN_INTERFACE          SignalEvent;
    724     ACPI_EFI_UNKNOWN_INTERFACE          CloseEvent;
    725     ACPI_EFI_UNKNOWN_INTERFACE          CheckEvent;
    726 #endif
    727 
    728     ACPI_EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface;
    729     ACPI_EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface;
    730     ACPI_EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface;
    731     ACPI_EFI_HANDLE_PROTOCOL            HandleProtocol;
    732     ACPI_EFI_HANDLE_PROTOCOL            PCHandleProtocol;
    733     ACPI_EFI_REGISTER_PROTOCOL_NOTIFY   RegisterProtocolNotify;
    734     ACPI_EFI_LOCATE_HANDLE              LocateHandle;
    735     ACPI_EFI_LOCATE_DEVICE_PATH         LocateDevicePath;
    736     ACPI_EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable;
    737 
    738     ACPI_EFI_IMAGE_LOAD                 LoadImage;
    739     ACPI_EFI_IMAGE_START                StartImage;
    740     ACPI_EFI_EXIT                       Exit;
    741     ACPI_EFI_IMAGE_UNLOAD               UnloadImage;
    742 
    743 #if 0
    744     ACPI_EFI_EXIT_BOOT_SERVICES         ExitBootServices;
    745     ACPI_EFI_GET_NEXT_MONOTONIC_COUNT   GetNextMonotonicCount;
    746     ACPI_EFI_STALL                      Stall;
    747     ACPI_EFI_SET_WATCHDOG_TIMER         SetWatchdogTimer;
    748 #else
    749     ACPI_EFI_UNKNOWN_INTERFACE          ExitBootServices;
    750     ACPI_EFI_UNKNOWN_INTERFACE          GetNextMonotonicCount;
    751     ACPI_EFI_UNKNOWN_INTERFACE          Stall;
    752     ACPI_EFI_UNKNOWN_INTERFACE          SetWatchdogTimer;
    753 #endif
    754 
    755 #if 0
    756     ACPI_EFI_CONNECT_CONTROLLER         ConnectController;
    757     ACPI_EFI_DISCONNECT_CONTROLLER      DisconnectController;
    758 #else
    759     ACPI_EFI_UNKNOWN_INTERFACE          ConnectController;
    760     ACPI_EFI_UNKNOWN_INTERFACE          DisconnectController;
    761 #endif
    762 
    763     ACPI_EFI_OPEN_PROTOCOL              OpenProtocol;
    764     ACPI_EFI_CLOSE_PROTOCOL             CloseProtocol;
    765     ACPI_EFI_OPEN_PROTOCOL_INFORMATION  OpenProtocolInformation;
    766     ACPI_EFI_PROTOCOLS_PER_HANDLE       ProtocolsPerHandle;
    767     ACPI_EFI_LOCATE_HANDLE_BUFFER       LocateHandleBuffer;
    768     ACPI_EFI_LOCATE_PROTOCOL            LocateProtocol;
    769     ACPI_EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces;
    770     ACPI_EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces;
    771 
    772     ACPI_EFI_CALCULATE_CRC32        CalculateCrc32;
    773 
    774     ACPI_EFI_COPY_MEM               CopyMem;
    775     ACPI_EFI_SET_MEM                SetMem;
    776 
    777 #if 0
    778     ACPI_EFI_CREATE_EVENT_EX        CreateEventEx;
    779 #else
    780     ACPI_EFI_UNKNOWN_INTERFACE      CreateEventEx;
    781 #endif
    782 } ACPI_EFI_BOOT_SERVICES;
    783 
    784 
    785 /*
    786  * EFI System Table
    787  */
    788 
    789 /*
    790  * EFI Configuration Table and GUID definitions
    791  */
    792 #define ACPI_TABLE_GUID \
    793     { 0xeb9d2d30, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} }
    794 #define ACPI_20_TABLE_GUID \
    795     { 0x8868e871, 0xe4f1, 0x11d3, {0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} }
    796 
    797 typedef struct _ACPI_EFI_CONFIGURATION_TABLE {
    798     ACPI_EFI_GUID           VendorGuid;
    799     VOID                    *VendorTable;
    800 } ACPI_EFI_CONFIGURATION_TABLE;
    801 
    802 
    803 #define ACPI_EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249
    804 #define ACPI_EFI_SYSTEM_TABLE_REVISION  (ACPI_EFI_SPECIFICATION_MAJOR_REVISION<<16) | (ACPI_EFI_SPECIFICATION_MINOR_REVISION)
    805 
    806 typedef struct _ACPI_EFI_SYSTEM_TABLE {
    807     ACPI_EFI_TABLE_HEADER               Hdr;
    808 
    809     CHAR16                              *FirmwareVendor;
    810     UINT32                              FirmwareRevision;
    811 
    812     ACPI_EFI_HANDLE                     ConsoleInHandle;
    813     ACPI_SIMPLE_INPUT_INTERFACE         *ConIn;
    814 
    815     ACPI_EFI_HANDLE                     ConsoleOutHandle;
    816     ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *ConOut;
    817 
    818     ACPI_EFI_HANDLE                     StandardErrorHandle;
    819     ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *StdErr;
    820 
    821 #if 0
    822     ACPI_EFI_RUNTIME_SERVICES           *RuntimeServices;
    823 #else
    824     ACPI_EFI_HANDLE                     *RuntimeServices;
    825 #endif
    826     ACPI_EFI_BOOT_SERVICES              *BootServices;
    827 
    828     UINTN                               NumberOfTableEntries;
    829     ACPI_EFI_CONFIGURATION_TABLE        *ConfigurationTable;
    830 
    831 } ACPI_EFI_SYSTEM_TABLE;
    832 
    833 
    834 /*
    835  * EFI PCI I/O Protocol
    836  */
    837 #define ACPI_EFI_PCI_IO_PROTOCOL \
    838     { 0x4cf5b200, 0x68b8, 0x4ca5, {0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x2, 0x9a} }
    839 
    840 typedef enum {
    841     AcpiEfiPciIoWidthUint8 = 0,
    842     AcpiEfiPciIoWidthUint16,
    843     AcpiEfiPciIoWidthUint32,
    844     AcpiEfiPciIoWidthUint64,
    845     AcpiEfiPciIoWidthFifoUint8,
    846     AcpiEfiPciIoWidthFifoUint16,
    847     AcpiEfiPciIoWidthFifoUint32,
    848     AcpiEfiPciIoWidthFifoUint64,
    849     AcpiEfiPciIoWidthFillUint8,
    850     AcpiEfiPciIoWidthFillUint16,
    851     AcpiEfiPciIoWidthFillUint32,
    852     AcpiEfiPciIoWidthFillUint64,
    853     AcpiEfiPciIoWidthMaximum
    854 } ACPI_EFI_PCI_IO_PROTOCOL_WIDTH;
    855 
    856 typedef
    857 ACPI_EFI_STATUS
    858 (ACPI_EFI_API *ACPI_EFI_PCI_IO_PROTOCOL_CONFIG)(
    859     struct _ACPI_EFI_PCI_IO             *This,
    860     ACPI_EFI_PCI_IO_PROTOCOL_WIDTH      Width,
    861     UINT32                              Offset,
    862     UINTN                               Count,
    863     VOID                                *Buffer);
    864 
    865 typedef struct {
    866     ACPI_EFI_PCI_IO_PROTOCOL_CONFIG     Read;
    867     ACPI_EFI_PCI_IO_PROTOCOL_CONFIG     Write;
    868 } ACPI_EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS;
    869 
    870 typedef
    871 ACPI_EFI_STATUS
    872 (ACPI_EFI_API *ACPI_EFI_PCI_IO_PROTOCOL_GET_LOCATION)(
    873     struct _ACPI_EFI_PCI_IO             *This,
    874     UINTN                               *SegmentNumber,
    875     UINTN                               *BusNumber,
    876     UINTN                               *DeviceNumber,
    877     UINTN                               *FunctionNumber);
    878 
    879 typedef struct _ACPI_EFI_PCI_IO {
    880     ACPI_EFI_UNKNOWN_INTERFACE          PollMem;
    881     ACPI_EFI_UNKNOWN_INTERFACE          PollIo;
    882     ACPI_EFI_UNKNOWN_INTERFACE          Mem;
    883     ACPI_EFI_UNKNOWN_INTERFACE          Io;
    884     ACPI_EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS Pci;
    885     ACPI_EFI_UNKNOWN_INTERFACE          CopyMem;
    886     ACPI_EFI_UNKNOWN_INTERFACE          Map;
    887     ACPI_EFI_UNKNOWN_INTERFACE          Unmap;
    888     ACPI_EFI_UNKNOWN_INTERFACE          AllocateBuffer;
    889     ACPI_EFI_UNKNOWN_INTERFACE          FreeBuffer;
    890     ACPI_EFI_UNKNOWN_INTERFACE          Flush;
    891     ACPI_EFI_PCI_IO_PROTOCOL_GET_LOCATION GetLocation;
    892     ACPI_EFI_UNKNOWN_INTERFACE          Attributes;
    893     ACPI_EFI_UNKNOWN_INTERFACE          GetBarAttributes;
    894     ACPI_EFI_UNKNOWN_INTERFACE          SetBarAttributes;
    895     UINT64                              RomSize;
    896     VOID                                *RomImage;
    897 } ACPI_EFI_PCI_IO;
    898 
    899 /* GNU EFI definitions */
    900 
    901 #if defined(_GNU_EFI)
    902 
    903 /*
    904  * This is needed to hide platform specific code from ACPICA
    905  */
    906 UINT64
    907 DivU64x32 (
    908     UINT64                  Dividend,
    909     UINTN                   Divisor,
    910     UINTN                   *Remainder);
    911 
    912 /*
    913  * EFI specific prototypes
    914  */
    915 ACPI_EFI_STATUS
    916 efi_main (
    917     ACPI_EFI_HANDLE         Image,
    918     ACPI_EFI_SYSTEM_TABLE   *SystemTab);
    919 
    920 int
    921 acpi_main (
    922     int                     argc,
    923     char                    *argv[]);
    924 
    925 
    926 #endif
    927 
    928 extern ACPI_EFI_GUID AcpiGbl_LoadedImageProtocol;
    929 extern ACPI_EFI_GUID AcpiGbl_TextInProtocol;
    930 extern ACPI_EFI_GUID AcpiGbl_TextOutProtocol;
    931 extern ACPI_EFI_GUID AcpiGbl_FileSystemProtocol;
    932 
    933 #endif /* __ACEFIEX_H__ */
    934