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