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 - 2018, 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
158typedef signed char                     int8_t;
159typedef short int                       int16_t;
160typedef int                             int32_t;
161typedef unsigned char                   uint8_t;
162typedef unsigned short int              uint16_t;
163typedef unsigned int                    uint32_t;
164typedef COMPILER_DEPENDENT_INT64        int64_t;
165typedef 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
195typedef UINTN ACPI_EFI_STATUS;
196typedef VOID *ACPI_EFI_HANDLE;
197typedef VOID *ACPI_EFI_EVENT;
198
199typedef struct {
200    UINT32  Data1;
201    UINT16  Data2;
202    UINT16  Data3;
203    UINT8   Data4[8];
204} ACPI_EFI_GUID;
205
206typedef 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
220typedef struct _ACPI_EFI_DEVICE_PATH {
221        UINT8                           Type;
222        UINT8                           SubType;
223        UINT8                           Length[2];
224} ACPI_EFI_DEVICE_PATH;
225
226typedef UINT64          ACPI_EFI_PHYSICAL_ADDRESS;
227typedef UINT64          ACPI_EFI_VIRTUAL_ADDRESS;
228
229typedef enum {
230    AcpiEfiAllocateAnyPages,
231    AcpiEfiAllocateMaxAddress,
232    AcpiEfiAllocateAddress,
233    AcpiEfiMaxAllocateType
234} ACPI_EFI_ALLOCATE_TYPE;
235
236typedef 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
270typedef 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
279typedef 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
287typedef
288ACPI_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
299typedef
300ACPI_EFI_STATUS
301(ACPI_EFI_API *ACPI_EFI_TEXT_RESET) (
302    struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
303    BOOLEAN                                     ExtendedVerification);
304
305typedef
306ACPI_EFI_STATUS
307(ACPI_EFI_API *ACPI_EFI_TEXT_OUTPUT_STRING) (
308    struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
309    CHAR16                                      *String);
310
311typedef
312ACPI_EFI_STATUS
313(ACPI_EFI_API *ACPI_EFI_TEXT_TEST_STRING) (
314    struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
315    CHAR16                                      *String);
316
317typedef
318ACPI_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
325typedef
326ACPI_EFI_STATUS
327(ACPI_EFI_API *ACPI_EFI_TEXT_SET_MODE) (
328    struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
329    UINTN                                       ModeNumber);
330
331typedef
332ACPI_EFI_STATUS
333(ACPI_EFI_API *ACPI_EFI_TEXT_SET_ATTRIBUTE) (
334    struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
335    UINTN                                       Attribute);
336
337typedef
338ACPI_EFI_STATUS
339(ACPI_EFI_API *ACPI_EFI_TEXT_CLEAR_SCREEN) (
340    struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This);
341
342typedef
343ACPI_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
349typedef
350ACPI_EFI_STATUS
351(ACPI_EFI_API *ACPI_EFI_TEXT_ENABLE_CURSOR) (
352    struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
353    BOOLEAN                                     Enable);
354
355typedef 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
364typedef 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
387typedef 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
401typedef
402ACPI_EFI_STATUS
403(ACPI_EFI_API *ACPI_EFI_INPUT_RESET) (
404    struct _ACPI_SIMPLE_INPUT_INTERFACE         *This,
405    BOOLEAN                                     ExtendedVerification);
406
407typedef
408ACPI_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
413typedef 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
426typedef
427ACPI_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
434typedef struct _ACPI_EFI_FILE_IO_INTERFACE {
435    UINT64                  Revision;
436    ACPI_EFI_VOLUME_OPEN    OpenVolume;
437} ACPI_EFI_FILE_IO_INTERFACE;
438
439typedef
440ACPI_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
464typedef
465ACPI_EFI_STATUS
466(ACPI_EFI_API *ACPI_EFI_FILE_CLOSE) (
467    struct _ACPI_EFI_FILE_HANDLE                *File);
468
469typedef
470ACPI_EFI_STATUS
471(ACPI_EFI_API *ACPI_EFI_FILE_DELETE) (
472    struct _ACPI_EFI_FILE_HANDLE                *File);
473
474typedef
475ACPI_EFI_STATUS
476(ACPI_EFI_API *ACPI_EFI_FILE_READ) (
477    struct _ACPI_EFI_FILE_HANDLE                *File,
478    UINTN                                       *BufferSize,
479    VOID                                        *Buffer);
480
481typedef
482ACPI_EFI_STATUS
483(ACPI_EFI_API *ACPI_EFI_FILE_WRITE) (
484    struct _ACPI_EFI_FILE_HANDLE                *File,
485    UINTN                                       *BufferSize,
486    VOID                                        *Buffer);
487
488typedef
489ACPI_EFI_STATUS
490(ACPI_EFI_API *ACPI_EFI_FILE_SET_POSITION) (
491    struct _ACPI_EFI_FILE_HANDLE                *File,
492    UINT64                                      Position);
493
494typedef
495ACPI_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
503typedef 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[1];
512} ACPI_EFI_FILE_INFO;
513
514#define SIZE_OF_ACPI_EFI_FILE_INFO  ACPI_OFFSET(ACPI_EFI_FILE_INFO, FileName)
515
516typedef
517ACPI_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
524typedef
525ACPI_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
532typedef
533ACPI_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
540typedef 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
561typedef
562ACPI_EFI_STATUS
563(ACPI_EFI_API *ACPI_EFI_IMAGE_ENTRY_POINT) (
564    ACPI_EFI_HANDLE                         ImageHandle,
565    struct _ACPI_EFI_SYSTEM_TABLE           *SystemTable);
566
567typedef
568ACPI_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
577typedef
578ACPI_EFI_STATUS
579(ACPI_EFI_API *ACPI_EFI_IMAGE_START) (
580    ACPI_EFI_HANDLE                 ImageHandle,
581    UINTN                           *ExitDataSize,
582    CHAR16                          **ExitData);
583
584typedef
585ACPI_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
592typedef
593ACPI_EFI_STATUS
594(ACPI_EFI_API *ACPI_EFI_IMAGE_UNLOAD) (
595    ACPI_EFI_HANDLE                 ImageHandle);
596
597
598typedef
599ACPI_EFI_STATUS
600(ACPI_EFI_API *ACPI_EFI_STALL) (
601    UINTN                           Microseconds);
602
603typedef
604ACPI_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
613typedef 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 */
634typedef
635ACPI_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
642typedef
643ACPI_EFI_STATUS
644(ACPI_EFI_API *ACPI_EFI_FREE_PAGES) (
645    ACPI_EFI_PHYSICAL_ADDRESS       Memory,
646    UINTN                           NoPages);
647
648typedef
649ACPI_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
659typedef
660ACPI_EFI_STATUS
661(ACPI_EFI_API *ACPI_EFI_ALLOCATE_POOL) (
662    ACPI_EFI_MEMORY_TYPE            PoolType,
663    UINTN                           Size,
664    VOID                            **Buffer);
665
666typedef
667ACPI_EFI_STATUS
668(ACPI_EFI_API *ACPI_EFI_FREE_POOL) (
669    VOID                            *Buffer);
670
671
672/*
673 * EFI Time
674 */
675typedef struct {
676    UINT32 Resolution;
677    UINT32 Accuracy;
678    BOOLEAN SetsToZero;
679} ACPI_EFI_TIME_CAPABILITIES;
680
681typedef
682ACPI_EFI_STATUS
683(ACPI_EFI_API *ACPI_EFI_GET_TIME) (
684    ACPI_EFI_TIME                   *Time,
685    ACPI_EFI_TIME_CAPABILITIES      *Capabilities);
686
687typedef
688ACPI_EFI_STATUS
689(ACPI_EFI_API *ACPI_EFI_SET_TIME) (
690    ACPI_EFI_TIME                   *Time);
691
692
693/*
694 * Protocol handler functions
695 */
696typedef enum {
697    ACPI_EFI_NATIVE_INTERFACE,
698    ACPI_EFI_PCODE_INTERFACE
699} ACPI_EFI_INTERFACE_TYPE;
700
701typedef enum {
702    AcpiEfiAllHandles,
703    AcpiEfiByRegisterNotify,
704    AcpiEfiByProtocol
705} ACPI_EFI_LOCATE_SEARCH_TYPE;
706
707typedef
708ACPI_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
715typedef
716ACPI_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
723typedef
724ACPI_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
730typedef
731ACPI_EFI_STATUS
732(ACPI_EFI_API *ACPI_EFI_HANDLE_PROTOCOL) (
733    ACPI_EFI_HANDLE                 Handle,
734    ACPI_EFI_GUID                   *Protocol,
735    VOID                            **Interface);
736
737typedef
738ACPI_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
744typedef
745ACPI_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
753typedef
754ACPI_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
760typedef
761ACPI_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
773typedef
774ACPI_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
783typedef
784ACPI_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
791typedef 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
798typedef
799ACPI_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
806typedef
807ACPI_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
813typedef
814ACPI_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
822typedef
823ACPI_EFI_STATUS
824(ACPI_EFI_API *ACPI_EFI_LOCATE_PROTOCOL) (
825    ACPI_EFI_GUID                   *Protocol,
826    VOID                            *Registration,
827    VOID                            **Interface);
828
829typedef
830ACPI_EFI_STATUS
831(ACPI_EFI_API *ACPI_EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
832    ACPI_EFI_HANDLE                 *Handle,
833    ...);
834
835typedef
836ACPI_EFI_STATUS
837(ACPI_EFI_API *ACPI_EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
838    ACPI_EFI_HANDLE                 Handle,
839    ...);
840
841typedef
842ACPI_EFI_STATUS
843(ACPI_EFI_API *ACPI_EFI_CALCULATE_CRC32) (
844    VOID                            *Data,
845    UINTN                           DataSize,
846    UINT32                          *Crc32);
847
848typedef
849VOID
850(ACPI_EFI_API *ACPI_EFI_COPY_MEM) (
851    VOID                            *Destination,
852    VOID                            *Source,
853    UINTN                           Length);
854
855typedef
856VOID
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
868typedef 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
962typedef 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
1016typedef 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
1025typedef 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
1055typedef 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
1071typedef
1072ACPI_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
1080typedef 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
1085typedef
1086ACPI_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
1094typedef 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
1116union 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 */
1130UINT64 ACPI_EFI_API
1131DivU64x32 (
1132    UINT64                  Dividend,
1133    UINTN                   Divisor,
1134    UINTN                   *Remainder);
1135
1136UINT64 ACPI_EFI_API
1137MultU64x32 (
1138    UINT64                  Multiplicand,
1139    UINTN                   Multiplier);
1140
1141UINT64 ACPI_EFI_API
1142LShiftU64 (
1143    UINT64                  Operand,
1144    UINTN                   Count);
1145
1146UINT64 ACPI_EFI_API
1147RShiftU64 (
1148    UINT64                  Operand,
1149    UINTN                   Count);
1150
1151/*
1152 * EFI specific prototypes
1153 */
1154ACPI_EFI_STATUS
1155efi_main (
1156    ACPI_EFI_HANDLE         Image,
1157    ACPI_EFI_SYSTEM_TABLE   *SystemTab);
1158
1159int
1160acpi_main (
1161    int                     argc,
1162    char                    *argv[]);
1163
1164#endif
1165
1166extern ACPI_EFI_GUID AcpiGbl_LoadedImageProtocol;
1167extern ACPI_EFI_GUID AcpiGbl_TextInProtocol;
1168extern ACPI_EFI_GUID AcpiGbl_TextOutProtocol;
1169extern ACPI_EFI_GUID AcpiGbl_FileSystemProtocol;
1170extern ACPI_EFI_GUID AcpiGbl_GenericFileInfo;
1171
1172#endif /* __ACEFIEX_H__ */
1173