1 /******************************************************************************
3 * Name: acefiex.h - Extra OS specific defines, etc. for EFI
5 *****************************************************************************/
8 * Copyright (C) 2000 - 2017, Intel Corp.
11 * Redistribution and use in source and binary forms, with or without
12 * modification, are permitted provided that the following conditions
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.
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.
48 #ifndef ACPI_USE_SYSTEM_CLIBRARY
50 typedef signed char int8_t;
51 typedef short int int16_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
;
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 */
106 UINT32 Nanosecond
; /* 0 - 999,999,999 */
107 INT16 TimeZone
; /* -1440 to 1440 or 2047 */
112 typedef struct _ACPI_EFI_DEVICE_PATH
{
116 } ACPI_EFI_DEVICE_PATH
;
118 typedef UINT64 ACPI_EFI_PHYSICAL_ADDRESS
;
119 typedef UINT64 ACPI_EFI_VIRTUAL_ADDRESS
;
122 AcpiEfiAllocateAnyPages
,
123 AcpiEfiAllocateMaxAddress
,
124 AcpiEfiAllocateAddress
,
125 AcpiEfiMaxAllocateType
126 } ACPI_EFI_ALLOCATE_TYPE
;
129 AcpiEfiReservedMemoryType
,
132 AcpiEfiBootServicesCode
,
133 AcpiEfiBootServicesData
,
134 AcpiEfiRuntimeServicesCode
,
135 AcpiEfiRuntimeServicesData
,
136 AcpiEfiConventionalMemory
,
137 AcpiEfiUnusableMemory
,
138 AcpiEfiACPIReclaimMemory
,
139 AcpiEfiACPIMemoryNVS
,
140 AcpiEfiMemoryMappedIO
,
141 AcpiEfiMemoryMappedIOPortSpace
,
144 } ACPI_EFI_MEMORY_TYPE
;
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
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
158 /* range requires a runtime mapping */
159 #define ACPI_EFI_MEMORY_RUNTIME 0x8000000000000000
161 #define ACPI_EFI_MEMORY_DESCRIPTOR_VERSION 1
165 ACPI_EFI_PHYSICAL_ADDRESS PhysicalStart
;
166 ACPI_EFI_VIRTUAL_ADDRESS VirtualStart
;
167 UINT64 NumberOfPages
;
169 } ACPI_EFI_MEMORY_DESCRIPTOR
;
171 typedef struct _ACPI_EFI_TABLE_HEARDER
{
177 } ACPI_EFI_TABLE_HEADER
;
181 (ACPI_EFI_API
*ACPI_EFI_UNKNOWN_INTERFACE
) (
186 * Text output protocol
188 #define ACPI_SIMPLE_TEXT_OUTPUT_PROTOCOL \
189 { 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
193 (ACPI_EFI_API
*ACPI_EFI_TEXT_RESET
) (
194 struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE
*This
,
195 BOOLEAN ExtendedVerification
);
199 (ACPI_EFI_API
*ACPI_EFI_TEXT_OUTPUT_STRING
) (
200 struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE
*This
,
205 (ACPI_EFI_API
*ACPI_EFI_TEXT_TEST_STRING
) (
206 struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE
*This
,
211 (ACPI_EFI_API
*ACPI_EFI_TEXT_QUERY_MODE
) (
212 struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE
*This
,
219 (ACPI_EFI_API
*ACPI_EFI_TEXT_SET_MODE
) (
220 struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE
*This
,
225 (ACPI_EFI_API
*ACPI_EFI_TEXT_SET_ATTRIBUTE
) (
226 struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE
*This
,
231 (ACPI_EFI_API
*ACPI_EFI_TEXT_CLEAR_SCREEN
) (
232 struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE
*This
);
236 (ACPI_EFI_API
*ACPI_EFI_TEXT_SET_CURSOR_POSITION
) (
237 struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE
*This
,
243 (ACPI_EFI_API
*ACPI_EFI_TEXT_ENABLE_CURSOR
) (
244 struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE
*This
,
253 BOOLEAN CursorVisible
;
254 } ACPI_SIMPLE_TEXT_OUTPUT_MODE
;
256 typedef struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE
{
257 ACPI_EFI_TEXT_RESET Reset
;
259 ACPI_EFI_TEXT_OUTPUT_STRING OutputString
;
260 ACPI_EFI_TEXT_TEST_STRING TestString
;
262 ACPI_EFI_TEXT_QUERY_MODE QueryMode
;
263 ACPI_EFI_TEXT_SET_MODE SetMode
;
264 ACPI_EFI_TEXT_SET_ATTRIBUTE SetAttribute
;
266 ACPI_EFI_TEXT_CLEAR_SCREEN ClearScreen
;
267 ACPI_EFI_TEXT_SET_CURSOR_POSITION SetCursorPosition
;
268 ACPI_EFI_TEXT_ENABLE_CURSOR EnableCursor
;
270 ACPI_SIMPLE_TEXT_OUTPUT_MODE
*Mode
;
271 } ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE
;
274 * Text input protocol
276 #define ACPI_SIMPLE_TEXT_INPUT_PROTOCOL \
277 { 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
282 } ACPI_EFI_INPUT_KEY
;
285 * Baseline unicode control chars
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
295 (ACPI_EFI_API
*ACPI_EFI_INPUT_RESET
) (
296 struct _ACPI_SIMPLE_INPUT_INTERFACE
*This
,
297 BOOLEAN ExtendedVerification
);
301 (ACPI_EFI_API
*ACPI_EFI_INPUT_READ_KEY
) (
302 struct _ACPI_SIMPLE_INPUT_INTERFACE
*This
,
303 ACPI_EFI_INPUT_KEY
*Key
);
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
;
313 * Simple file system protocol
315 #define ACPI_SIMPLE_FILE_SYSTEM_PROTOCOL \
316 { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
320 (ACPI_EFI_API
*ACPI_EFI_VOLUME_OPEN
) (
321 struct _ACPI_EFI_FILE_IO_INTERFACE
*This
,
322 struct _ACPI_EFI_FILE_HANDLE
**Root
);
324 #define ACPI_EFI_FILE_IO_INTERFACE_REVISION 0x00010000
326 typedef struct _ACPI_EFI_FILE_IO_INTERFACE
{
328 ACPI_EFI_VOLUME_OPEN OpenVolume
;
329 } ACPI_EFI_FILE_IO_INTERFACE
;
333 (ACPI_EFI_API
*ACPI_EFI_FILE_OPEN
) (
334 struct _ACPI_EFI_FILE_HANDLE
*File
,
335 struct _ACPI_EFI_FILE_HANDLE
**NewHandle
,
340 /* Values for OpenMode used above */
342 #define ACPI_EFI_FILE_MODE_READ 0x0000000000000001
343 #define ACPI_EFI_FILE_MODE_WRITE 0x0000000000000002
344 #define ACPI_EFI_FILE_MODE_CREATE 0x8000000000000000
346 /* Values for Attribute used above */
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
358 (ACPI_EFI_API
*ACPI_EFI_FILE_CLOSE
) (
359 struct _ACPI_EFI_FILE_HANDLE
*File
);
363 (ACPI_EFI_API
*ACPI_EFI_FILE_DELETE
) (
364 struct _ACPI_EFI_FILE_HANDLE
*File
);
368 (ACPI_EFI_API
*ACPI_EFI_FILE_READ
) (
369 struct _ACPI_EFI_FILE_HANDLE
*File
,
375 (ACPI_EFI_API
*ACPI_EFI_FILE_WRITE
) (
376 struct _ACPI_EFI_FILE_HANDLE
*File
,
382 (ACPI_EFI_API
*ACPI_EFI_FILE_SET_POSITION
) (
383 struct _ACPI_EFI_FILE_HANDLE
*File
,
388 (ACPI_EFI_API
*ACPI_EFI_FILE_GET_POSITION
) (
389 struct _ACPI_EFI_FILE_HANDLE
*File
,
392 #define ACPI_EFI_FILE_INFO_ID \
393 { 0x9576e92, 0x6d3f, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
399 ACPI_EFI_TIME CreateTime
;
400 ACPI_EFI_TIME LastAccessTime
;
401 ACPI_EFI_TIME ModificationTime
;
404 } ACPI_EFI_FILE_INFO
;
406 #define SIZE_OF_ACPI_EFI_FILE_INFO ACPI_OFFSET(ACPI_EFI_FILE_INFO, FileName)
410 (ACPI_EFI_API
*ACPI_EFI_FILE_GET_INFO
) (
411 struct _ACPI_EFI_FILE_HANDLE
*File
,
412 ACPI_EFI_GUID
*InformationType
,
418 (ACPI_EFI_API
*ACPI_EFI_FILE_SET_INFO
) (
419 struct _ACPI_EFI_FILE_HANDLE
*File
,
420 ACPI_EFI_GUID
*InformationType
,
426 (ACPI_EFI_API
*ACPI_EFI_FILE_FLUSH
) (
427 struct _ACPI_EFI_FILE_HANDLE
*File
);
430 #define ACPI_EFI_FILE_HANDLE_REVISION 0x00010000
432 typedef struct _ACPI_EFI_FILE_HANDLE
{
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
;
448 * Loaded image protocol
450 #define ACPI_EFI_LOADED_IMAGE_PROTOCOL \
451 { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
455 (ACPI_EFI_API
*ACPI_EFI_IMAGE_ENTRY_POINT
) (
456 ACPI_EFI_HANDLE ImageHandle
,
457 struct _ACPI_EFI_SYSTEM_TABLE
*SystemTable
);
461 (ACPI_EFI_API
*ACPI_EFI_IMAGE_LOAD
) (
463 ACPI_EFI_HANDLE ParentImageHandle
,
464 ACPI_EFI_DEVICE_PATH
*FilePath
,
467 ACPI_EFI_HANDLE
*ImageHandle
);
471 (ACPI_EFI_API
*ACPI_EFI_IMAGE_START
) (
472 ACPI_EFI_HANDLE ImageHandle
,
478 (ACPI_EFI_API
*ACPI_EFI_EXIT
) (
479 ACPI_EFI_HANDLE ImageHandle
,
480 ACPI_EFI_STATUS ExitStatus
,
486 (ACPI_EFI_API
*ACPI_EFI_IMAGE_UNLOAD
) (
487 ACPI_EFI_HANDLE ImageHandle
);
492 (ACPI_EFI_API
*ACPI_EFI_STALL
) (
497 (ACPI_EFI_API
*ACPI_EFI_SET_WATCHDOG_TIMER
) (
501 CHAR16
*WatchdogData
);
504 #define EFI_IMAGE_INFORMATION_REVISION 0x1000
507 ACPI_EFI_HANDLE ParentHandle
;
508 struct _ACPI_EFI_SYSTEM_TABLE
*SystemTable
;
509 ACPI_EFI_HANDLE DeviceHandle
;
510 ACPI_EFI_DEVICE_PATH
*FilePath
;
512 UINT32 LoadOptionsSize
;
516 ACPI_EFI_MEMORY_TYPE ImageCodeType
;
517 ACPI_EFI_MEMORY_TYPE ImageDataType
;
518 ACPI_EFI_IMAGE_UNLOAD Unload
;
520 } ACPI_EFI_LOADED_IMAGE
;
528 (ACPI_EFI_API
*ACPI_EFI_ALLOCATE_PAGES
) (
529 ACPI_EFI_ALLOCATE_TYPE Type
,
530 ACPI_EFI_MEMORY_TYPE MemoryType
,
532 ACPI_EFI_PHYSICAL_ADDRESS
*Memory
);
536 (ACPI_EFI_API
*ACPI_EFI_FREE_PAGES
) (
537 ACPI_EFI_PHYSICAL_ADDRESS Memory
,
542 (ACPI_EFI_API
*ACPI_EFI_GET_MEMORY_MAP
) (
543 UINTN
*MemoryMapSize
,
544 ACPI_EFI_MEMORY_DESCRIPTOR
*MemoryMap
,
546 UINTN
*DescriptorSize
,
547 UINT32
*DescriptorVersion
);
549 #define NextMemoryDescriptor(Ptr,Size) ((ACPI_EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size))
553 (ACPI_EFI_API
*ACPI_EFI_ALLOCATE_POOL
) (
554 ACPI_EFI_MEMORY_TYPE PoolType
,
560 (ACPI_EFI_API
*ACPI_EFI_FREE_POOL
) (
571 } ACPI_EFI_TIME_CAPABILITIES
;
575 (ACPI_EFI_API
*ACPI_EFI_GET_TIME
) (
577 ACPI_EFI_TIME_CAPABILITIES
*Capabilities
);
581 (ACPI_EFI_API
*ACPI_EFI_SET_TIME
) (
582 ACPI_EFI_TIME
*Time
);
586 * Protocol handler functions
589 ACPI_EFI_NATIVE_INTERFACE
,
590 ACPI_EFI_PCODE_INTERFACE
591 } ACPI_EFI_INTERFACE_TYPE
;
595 AcpiEfiByRegisterNotify
,
597 } ACPI_EFI_LOCATE_SEARCH_TYPE
;
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
,
609 (ACPI_EFI_API
*ACPI_EFI_REINSTALL_PROTOCOL_INTERFACE
) (
610 ACPI_EFI_HANDLE Handle
,
611 ACPI_EFI_GUID
*Protocol
,
617 (ACPI_EFI_API
*ACPI_EFI_UNINSTALL_PROTOCOL_INTERFACE
) (
618 ACPI_EFI_HANDLE Handle
,
619 ACPI_EFI_GUID
*Protocol
,
624 (ACPI_EFI_API
*ACPI_EFI_HANDLE_PROTOCOL
) (
625 ACPI_EFI_HANDLE Handle
,
626 ACPI_EFI_GUID
*Protocol
,
631 (ACPI_EFI_API
*ACPI_EFI_REGISTER_PROTOCOL_NOTIFY
) (
632 ACPI_EFI_GUID
*Protocol
,
633 ACPI_EFI_EVENT Event
,
634 VOID
**Registration
);
638 (ACPI_EFI_API
*ACPI_EFI_LOCATE_HANDLE
) (
639 ACPI_EFI_LOCATE_SEARCH_TYPE SearchType
,
640 ACPI_EFI_GUID
*Protocol
,
643 ACPI_EFI_HANDLE
*Buffer
);
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
);
654 (ACPI_EFI_API
*ACPI_EFI_INSTALL_CONFIGURATION_TABLE
) (
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
667 (ACPI_EFI_API
*ACPI_EFI_OPEN_PROTOCOL
) (
668 ACPI_EFI_HANDLE Handle
,
669 ACPI_EFI_GUID
*Protocol
,
671 ACPI_EFI_HANDLE AgentHandle
,
672 ACPI_EFI_HANDLE ControllerHandle
,
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
);
684 ACPI_EFI_HANDLE AgentHandle
;
685 ACPI_EFI_HANDLE ControllerHandle
;
688 } ACPI_EFI_OPEN_PROTOCOL_INFORMATION_ENTRY
;
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
,
700 (ACPI_EFI_API
*ACPI_EFI_PROTOCOLS_PER_HANDLE
) (
701 ACPI_EFI_HANDLE Handle
,
702 ACPI_EFI_GUID
***ProtocolBuffer
,
703 UINTN
*ProtocolBufferCount
);
707 (ACPI_EFI_API
*ACPI_EFI_LOCATE_HANDLE_BUFFER
) (
708 ACPI_EFI_LOCATE_SEARCH_TYPE SearchType
,
709 ACPI_EFI_GUID
*Protocol
,
712 ACPI_EFI_HANDLE
**Buffer
);
716 (ACPI_EFI_API
*ACPI_EFI_LOCATE_PROTOCOL
) (
717 ACPI_EFI_GUID
*Protocol
,
723 (ACPI_EFI_API
*ACPI_EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES
) (
724 ACPI_EFI_HANDLE
*Handle
,
729 (ACPI_EFI_API
*ACPI_EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES
) (
730 ACPI_EFI_HANDLE Handle
,
735 (ACPI_EFI_API
*ACPI_EFI_CALCULATE_CRC32
) (
742 (ACPI_EFI_API
*ACPI_EFI_COPY_MEM
) (
749 (ACPI_EFI_API
*ACPI_EFI_SET_MEM
) (
755 * EFI Boot Services Table
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)
760 typedef struct _ACPI_EFI_BOOT_SERVICES
{
761 ACPI_EFI_TABLE_HEADER Hdr
;
764 ACPI_EFI_RAISE_TPL RaiseTPL
;
765 ACPI_EFI_RESTORE_TPL RestoreTPL
;
767 ACPI_EFI_UNKNOWN_INTERFACE RaiseTPL
;
768 ACPI_EFI_UNKNOWN_INTERFACE RestoreTPL
;
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
;
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
;
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
;
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
;
803 ACPI_EFI_IMAGE_LOAD LoadImage
;
804 ACPI_EFI_IMAGE_START StartImage
;
806 ACPI_EFI_IMAGE_UNLOAD UnloadImage
;
809 ACPI_EFI_EXIT_BOOT_SERVICES ExitBootServices
;
810 ACPI_EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount
;
812 ACPI_EFI_UNKNOWN_INTERFACE ExitBootServices
;
813 ACPI_EFI_UNKNOWN_INTERFACE GetNextMonotonicCount
;
815 ACPI_EFI_STALL Stall
;
816 ACPI_EFI_SET_WATCHDOG_TIMER SetWatchdogTimer
;
819 ACPI_EFI_CONNECT_CONTROLLER ConnectController
;
820 ACPI_EFI_DISCONNECT_CONTROLLER DisconnectController
;
822 ACPI_EFI_UNKNOWN_INTERFACE ConnectController
;
823 ACPI_EFI_UNKNOWN_INTERFACE DisconnectController
;
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
;
835 ACPI_EFI_CALCULATE_CRC32 CalculateCrc32
;
837 ACPI_EFI_COPY_MEM CopyMem
;
838 ACPI_EFI_SET_MEM SetMem
;
841 ACPI_EFI_CREATE_EVENT_EX CreateEventEx
;
843 ACPI_EFI_UNKNOWN_INTERFACE CreateEventEx
;
845 } ACPI_EFI_BOOT_SERVICES
;
849 * EFI Runtime Services Table
851 #define ACPI_EFI_RUNTIME_SERVICES_SIGNATURE 0x56524553544e5552
852 #define ACPI_EFI_RUNTIME_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION)
854 typedef struct _ACPI_EFI_RUNTIME_SERVICES
{
855 ACPI_EFI_TABLE_HEADER Hdr
;
857 ACPI_EFI_GET_TIME GetTime
;
858 ACPI_EFI_SET_TIME SetTime
;
860 ACPI_EFI_GET_WAKEUP_TIME GetWakeupTime
;
861 ACPI_EFI_SET_WAKEUP_TIME SetWakeupTime
;
863 ACPI_EFI_UNKNOWN_INTERFACE GetWakeupTime
;
864 ACPI_EFI_UNKNOWN_INTERFACE SetWakeupTime
;
868 ACPI_EFI_SET_VIRTUAL_ADDRESS_MAP SetVirtualAddressMap
;
869 ACPI_EFI_CONVERT_POINTER ConvertPointer
;
871 ACPI_EFI_UNKNOWN_INTERFACE SetVirtualAddressMap
;
872 ACPI_EFI_UNKNOWN_INTERFACE ConvertPointer
;
876 ACPI_EFI_GET_VARIABLE GetVariable
;
877 ACPI_EFI_GET_NEXT_VARIABLE_NAME GetNextVariableName
;
878 ACPI_EFI_SET_VARIABLE SetVariable
;
880 ACPI_EFI_UNKNOWN_INTERFACE GetVariable
;
881 ACPI_EFI_UNKNOWN_INTERFACE GetNextVariableName
;
882 ACPI_EFI_UNKNOWN_INTERFACE SetVariable
;
886 ACPI_EFI_GET_NEXT_HIGH_MONO_COUNT GetNextHighMonotonicCount
;
887 ACPI_EFI_RESET_SYSTEM ResetSystem
;
889 ACPI_EFI_UNKNOWN_INTERFACE GetNextHighMonotonicCount
;
890 ACPI_EFI_UNKNOWN_INTERFACE ResetSystem
;
893 } ACPI_EFI_RUNTIME_SERVICES
;
901 * EFI Configuration Table and GUID definitions
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} }
908 typedef struct _ACPI_EFI_CONFIGURATION_TABLE
{
909 ACPI_EFI_GUID VendorGuid
;
911 } ACPI_EFI_CONFIGURATION_TABLE
;
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)
917 typedef struct _ACPI_EFI_SYSTEM_TABLE
{
918 ACPI_EFI_TABLE_HEADER Hdr
;
920 CHAR16
*FirmwareVendor
;
921 UINT32 FirmwareRevision
;
923 ACPI_EFI_HANDLE ConsoleInHandle
;
924 ACPI_SIMPLE_INPUT_INTERFACE
*ConIn
;
926 ACPI_EFI_HANDLE ConsoleOutHandle
;
927 ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE
*ConOut
;
929 ACPI_EFI_HANDLE StandardErrorHandle
;
930 ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE
*StdErr
;
932 ACPI_EFI_RUNTIME_SERVICES
*RuntimeServices
;
933 ACPI_EFI_BOOT_SERVICES
*BootServices
;
935 UINTN NumberOfTableEntries
;
936 ACPI_EFI_CONFIGURATION_TABLE
*ConfigurationTable
;
938 } ACPI_EFI_SYSTEM_TABLE
;
942 * EFI PCI I/O Protocol
944 #define ACPI_EFI_PCI_IO_PROTOCOL \
945 { 0x4cf5b200, 0x68b8, 0x4ca5, {0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x2, 0x9a} }
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
;
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
,
973 ACPI_EFI_PCI_IO_PROTOCOL_CONFIG Read
;
974 ACPI_EFI_PCI_IO_PROTOCOL_CONFIG Write
;
975 } ACPI_EFI_PCI_IO_PROTOCOL_CONFIG_ACCESS
;
979 (ACPI_EFI_API
*ACPI_EFI_PCI_IO_PROTOCOL_GET_LOCATION
)(
980 struct _ACPI_EFI_PCI_IO
*This
,
981 UINTN
*SegmentNumber
,
984 UINTN
*FunctionNumber
);
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
;
1006 /* FILE abstraction */
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
;
1015 /* EFI definitions */
1017 #if defined(_GNU_EFI) || defined(_EDK2_EFI)
1020 * This is needed to hide platform specific code from ACPICA
1030 UINT64 Multiplicand
,
1044 * EFI specific prototypes
1048 ACPI_EFI_HANDLE Image
,
1049 ACPI_EFI_SYSTEM_TABLE
*SystemTab
);
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
;
1064 #endif /* __ACEFIEX_H__ */