1/******************************************************************************
2 *
3 * Name: acefiex.h - Extra OS specific defines, etc. for EFI
4 *
5 *****************************************************************************/
6
7/*
8 * Copyright (C) 2000 - 2023, 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
50typedef signed char                     int8_t;
51typedef short int                       int16_t;
52typedef int                             int32_t;
53typedef unsigned char                   uint8_t;
54typedef unsigned short int              uint16_t;
55typedef unsigned int                    uint32_t;
56typedef COMPILER_DEPENDENT_INT64        int64_t;
57typedef 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
87typedef UINTN ACPI_EFI_STATUS;
88typedef VOID *ACPI_EFI_HANDLE;
89typedef VOID *ACPI_EFI_EVENT;
90
91typedef struct {
92    UINT32  Data1;
93    UINT16  Data2;
94    UINT16  Data3;
95    UINT8   Data4[8];
96} ACPI_EFI_GUID;
97
98typedef 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
112typedef struct _ACPI_EFI_DEVICE_PATH {
113        UINT8                           Type;
114        UINT8                           SubType;
115        UINT8                           Length[2];
116} ACPI_EFI_DEVICE_PATH;
117
118typedef UINT64          ACPI_EFI_PHYSICAL_ADDRESS;
119typedef UINT64          ACPI_EFI_VIRTUAL_ADDRESS;
120
121typedef enum {
122    AcpiEfiAllocateAnyPages,
123    AcpiEfiAllocateMaxAddress,
124    AcpiEfiAllocateAddress,
125    AcpiEfiMaxAllocateType
126} ACPI_EFI_ALLOCATE_TYPE;
127
128typedef 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
162typedef 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
171typedef 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
179typedef
180ACPI_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
191typedef
192ACPI_EFI_STATUS
193(ACPI_EFI_API *ACPI_EFI_TEXT_RESET) (
194    struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
195    BOOLEAN                                     ExtendedVerification);
196
197typedef
198ACPI_EFI_STATUS
199(ACPI_EFI_API *ACPI_EFI_TEXT_OUTPUT_STRING) (
200    struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
201    CHAR16                                      *String);
202
203typedef
204ACPI_EFI_STATUS
205(ACPI_EFI_API *ACPI_EFI_TEXT_TEST_STRING) (
206    struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
207    CHAR16                                      *String);
208
209typedef
210ACPI_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
217typedef
218ACPI_EFI_STATUS
219(ACPI_EFI_API *ACPI_EFI_TEXT_SET_MODE) (
220    struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
221    UINTN                                       ModeNumber);
222
223typedef
224ACPI_EFI_STATUS
225(ACPI_EFI_API *ACPI_EFI_TEXT_SET_ATTRIBUTE) (
226    struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
227    UINTN                                       Attribute);
228
229typedef
230ACPI_EFI_STATUS
231(ACPI_EFI_API *ACPI_EFI_TEXT_CLEAR_SCREEN) (
232    struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This);
233
234typedef
235ACPI_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
241typedef
242ACPI_EFI_STATUS
243(ACPI_EFI_API *ACPI_EFI_TEXT_ENABLE_CURSOR) (
244    struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE   *This,
245    BOOLEAN                                     Enable);
246
247typedef 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
256typedef 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
279typedef 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
293typedef
294ACPI_EFI_STATUS
295(ACPI_EFI_API *ACPI_EFI_INPUT_RESET) (
296    struct _ACPI_SIMPLE_INPUT_INTERFACE         *This,
297    BOOLEAN                                     ExtendedVerification);
298
299typedef
300ACPI_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
305typedef 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
318typedef
319ACPI_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
326typedef struct _ACPI_EFI_FILE_IO_INTERFACE {
327    UINT64                  Revision;
328    ACPI_EFI_VOLUME_OPEN    OpenVolume;
329} ACPI_EFI_FILE_IO_INTERFACE;
330
331typedef
332ACPI_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
356typedef
357ACPI_EFI_STATUS
358(ACPI_EFI_API *ACPI_EFI_FILE_CLOSE) (
359    struct _ACPI_EFI_FILE_HANDLE                *File);
360
361typedef
362ACPI_EFI_STATUS
363(ACPI_EFI_API *ACPI_EFI_FILE_DELETE) (
364    struct _ACPI_EFI_FILE_HANDLE                *File);
365
366typedef
367ACPI_EFI_STATUS
368(ACPI_EFI_API *ACPI_EFI_FILE_READ) (
369    struct _ACPI_EFI_FILE_HANDLE                *File,
370    UINTN                                       *BufferSize,
371    VOID                                        *Buffer);
372
373typedef
374ACPI_EFI_STATUS
375(ACPI_EFI_API *ACPI_EFI_FILE_WRITE) (
376    struct _ACPI_EFI_FILE_HANDLE                *File,
377    UINTN                                       *BufferSize,
378    VOID                                        *Buffer);
379
380typedef
381ACPI_EFI_STATUS
382(ACPI_EFI_API *ACPI_EFI_FILE_SET_POSITION) (
383    struct _ACPI_EFI_FILE_HANDLE                *File,
384    UINT64                                      Position);
385
386typedef
387ACPI_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
395typedef 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[];
404} ACPI_EFI_FILE_INFO;
405
406#define SIZE_OF_ACPI_EFI_FILE_INFO  ACPI_OFFSET(ACPI_EFI_FILE_INFO, FileName)
407
408typedef
409ACPI_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
416typedef
417ACPI_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
424typedef
425ACPI_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
432typedef 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
453typedef
454ACPI_EFI_STATUS
455(ACPI_EFI_API *ACPI_EFI_IMAGE_ENTRY_POINT) (
456    ACPI_EFI_HANDLE                         ImageHandle,
457    struct _ACPI_EFI_SYSTEM_TABLE           *SystemTable);
458
459typedef
460ACPI_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
469typedef
470ACPI_EFI_STATUS
471(ACPI_EFI_API *ACPI_EFI_IMAGE_START) (
472    ACPI_EFI_HANDLE                 ImageHandle,
473    UINTN                           *ExitDataSize,
474    CHAR16                          **ExitData);
475
476typedef
477ACPI_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
484typedef
485ACPI_EFI_STATUS
486(ACPI_EFI_API *ACPI_EFI_IMAGE_UNLOAD) (
487    ACPI_EFI_HANDLE                 ImageHandle);
488
489
490typedef
491ACPI_EFI_STATUS
492(ACPI_EFI_API *ACPI_EFI_STALL) (
493    UINTN                           Microseconds);
494
495typedef
496ACPI_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
505typedef 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 */
526typedef
527ACPI_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
534typedef
535ACPI_EFI_STATUS
536(ACPI_EFI_API *ACPI_EFI_FREE_PAGES) (
537    ACPI_EFI_PHYSICAL_ADDRESS       Memory,
538    UINTN                           NoPages);
539
540typedef
541ACPI_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
551typedef
552ACPI_EFI_STATUS
553(ACPI_EFI_API *ACPI_EFI_ALLOCATE_POOL) (
554    ACPI_EFI_MEMORY_TYPE            PoolType,
555    UINTN                           Size,
556    VOID                            **Buffer);
557
558typedef
559ACPI_EFI_STATUS
560(ACPI_EFI_API *ACPI_EFI_FREE_POOL) (
561    VOID                            *Buffer);
562
563
564/*
565 * EFI Time
566 */
567typedef struct {
568    UINT32 Resolution;
569    UINT32 Accuracy;
570    BOOLEAN SetsToZero;
571} ACPI_EFI_TIME_CAPABILITIES;
572
573typedef
574ACPI_EFI_STATUS
575(ACPI_EFI_API *ACPI_EFI_GET_TIME) (
576    ACPI_EFI_TIME                   *Time,
577    ACPI_EFI_TIME_CAPABILITIES      *Capabilities);
578
579typedef
580ACPI_EFI_STATUS
581(ACPI_EFI_API *ACPI_EFI_SET_TIME) (
582    ACPI_EFI_TIME                   *Time);
583
584
585/*
586 * Protocol handler functions
587 */
588typedef enum {
589    ACPI_EFI_NATIVE_INTERFACE,
590    ACPI_EFI_PCODE_INTERFACE
591} ACPI_EFI_INTERFACE_TYPE;
592
593typedef enum {
594    AcpiEfiAllHandles,
595    AcpiEfiByRegisterNotify,
596    AcpiEfiByProtocol
597} ACPI_EFI_LOCATE_SEARCH_TYPE;
598
599typedef
600ACPI_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
607typedef
608ACPI_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
615typedef
616ACPI_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
622typedef
623ACPI_EFI_STATUS
624(ACPI_EFI_API *ACPI_EFI_HANDLE_PROTOCOL) (
625    ACPI_EFI_HANDLE                 Handle,
626    ACPI_EFI_GUID                   *Protocol,
627    VOID                            **Interface);
628
629typedef
630ACPI_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
636typedef
637ACPI_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
645typedef
646ACPI_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
652typedef
653ACPI_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
665typedef
666ACPI_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
675typedef
676ACPI_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
683typedef 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
690typedef
691ACPI_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
698typedef
699ACPI_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
705typedef
706ACPI_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
714typedef
715ACPI_EFI_STATUS
716(ACPI_EFI_API *ACPI_EFI_LOCATE_PROTOCOL) (
717    ACPI_EFI_GUID                   *Protocol,
718    VOID                            *Registration,
719    VOID                            **Interface);
720
721typedef
722ACPI_EFI_STATUS
723(ACPI_EFI_API *ACPI_EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
724    ACPI_EFI_HANDLE                 *Handle,
725    ...);
726
727typedef
728ACPI_EFI_STATUS
729(ACPI_EFI_API *ACPI_EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
730    ACPI_EFI_HANDLE                 Handle,
731    ...);
732
733typedef
734ACPI_EFI_STATUS
735(ACPI_EFI_API *ACPI_EFI_CALCULATE_CRC32) (
736    VOID                            *Data,
737    UINTN                           DataSize,
738    UINT32                          *Crc32);
739
740typedef
741VOID
742(ACPI_EFI_API *ACPI_EFI_COPY_MEM) (
743    VOID                            *Destination,
744    VOID                            *Source,
745    UINTN                           Length);
746
747typedef
748VOID
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
760typedef 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
854typedef 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
908typedef 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
917typedef 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
947typedef 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
963typedef
964ACPI_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
972typedef 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
977typedef
978ACPI_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
986typedef 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
1008union 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 */
1022UINT64 ACPI_EFI_API
1023DivU64x32 (
1024    UINT64                  Dividend,
1025    UINTN                   Divisor,
1026    UINTN                   *Remainder);
1027
1028UINT64 ACPI_EFI_API
1029MultU64x32 (
1030    UINT64                  Multiplicand,
1031    UINTN                   Multiplier);
1032
1033UINT64 ACPI_EFI_API
1034LShiftU64 (
1035    UINT64                  Operand,
1036    UINTN                   Count);
1037
1038UINT64 ACPI_EFI_API
1039RShiftU64 (
1040    UINT64                  Operand,
1041    UINTN                   Count);
1042
1043/*
1044 * EFI specific prototypes
1045 */
1046ACPI_EFI_STATUS
1047efi_main (
1048    ACPI_EFI_HANDLE         Image,
1049    ACPI_EFI_SYSTEM_TABLE   *SystemTab);
1050
1051int
1052acpi_main (
1053    int                     argc,
1054    char                    *argv[]);
1055
1056#endif
1057
1058extern ACPI_EFI_GUID AcpiGbl_LoadedImageProtocol;
1059extern ACPI_EFI_GUID AcpiGbl_TextInProtocol;
1060extern ACPI_EFI_GUID AcpiGbl_TextOutProtocol;
1061extern ACPI_EFI_GUID AcpiGbl_FileSystemProtocol;
1062extern ACPI_EFI_GUID AcpiGbl_GenericFileInfo;
1063
1064#endif /* __ACEFIEX_H__ */
1065