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