[ACPICA]
[reactos.git] / reactos / drivers / bus / acpi / acpica / include / platform / acefiex.h
1 /******************************************************************************
2 *
3 * Name: acefiex.h - Extra OS specific defines, etc. for EFI
4 *
5 *****************************************************************************/
6
7 /*
8 * Copyright (C) 2000 - 2016, 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 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.
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 _ACPI_EFI_DEVICE_PATH {
99 UINT8 Type;
100 UINT8 SubType;
101 UINT8 Length[2];
102 } ACPI_EFI_DEVICE_PATH;
103
104 typedef UINT64 ACPI_EFI_PHYSICAL_ADDRESS;
105 typedef UINT64 ACPI_EFI_VIRTUAL_ADDRESS;
106
107 typedef enum {
108 AcpiEfiAllocateAnyPages,
109 AcpiEfiAllocateMaxAddress,
110 AcpiEfiAllocateAddress,
111 AcpiEfiMaxAllocateType
112 } ACPI_EFI_ALLOCATE_TYPE;
113
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;
131
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
138
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
143
144 /* range requires a runtime mapping */
145 #define ACPI_EFI_MEMORY_RUNTIME 0x8000000000000000
146
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;
156
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;
164
165 typedef
166 ACPI_EFI_STATUS
167 (ACPI_EFI_API *ACPI_EFI_UNKNOWN_INTERFACE) (
168 void);
169
170
171 /*
172 * Text output protocol
173 */
174 #define ACPI_SIMPLE_TEXT_OUTPUT_PROTOCOL \
175 { 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
176
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);
182
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);
188
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);
194
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);
202
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);
208
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);
214
215 typedef
216 ACPI_EFI_STATUS
217 (ACPI_EFI_API *ACPI_EFI_TEXT_CLEAR_SCREEN) (
218 struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE *This);
219
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);
226
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);
232
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;
241
242 typedef struct _ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE {
243 ACPI_EFI_TEXT_RESET Reset;
244
245 ACPI_EFI_TEXT_OUTPUT_STRING OutputString;
246 ACPI_EFI_TEXT_TEST_STRING TestString;
247
248 ACPI_EFI_TEXT_QUERY_MODE QueryMode;
249 ACPI_EFI_TEXT_SET_MODE SetMode;
250 ACPI_EFI_TEXT_SET_ATTRIBUTE SetAttribute;
251
252 ACPI_EFI_TEXT_CLEAR_SCREEN ClearScreen;
253 ACPI_EFI_TEXT_SET_CURSOR_POSITION SetCursorPosition;
254 ACPI_EFI_TEXT_ENABLE_CURSOR EnableCursor;
255
256 ACPI_SIMPLE_TEXT_OUTPUT_MODE *Mode;
257 } ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE;
258
259 /*
260 * Text input protocol
261 */
262 #define ACPI_SIMPLE_TEXT_INPUT_PROTOCOL \
263 { 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
264
265 typedef struct {
266 UINT16 ScanCode;
267 CHAR16 UnicodeChar;
268 } ACPI_EFI_INPUT_KEY;
269
270 /*
271 * Baseline unicode control chars
272 */
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
278
279 typedef
280 ACPI_EFI_STATUS
281 (ACPI_EFI_API *ACPI_EFI_INPUT_RESET) (
282 struct _ACPI_SIMPLE_INPUT_INTERFACE *This,
283 BOOLEAN ExtendedVerification);
284
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);
290
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;
296
297
298 /*
299 * Simple file system protocol
300 */
301 #define ACPI_SIMPLE_FILE_SYSTEM_PROTOCOL \
302 { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} }
303
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);
309
310 #define ACPI_EFI_FILE_IO_INTERFACE_REVISION 0x00010000
311
312 typedef struct _ACPI_EFI_FILE_IO_INTERFACE {
313 UINT64 Revision;
314 ACPI_EFI_VOLUME_OPEN OpenVolume;
315 } ACPI_EFI_FILE_IO_INTERFACE;
316
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);
325
326 /* Values for OpenMode used above */
327
328 #define ACPI_EFI_FILE_MODE_READ 0x0000000000000001
329 #define ACPI_EFI_FILE_MODE_WRITE 0x0000000000000002
330 #define ACPI_EFI_FILE_MODE_CREATE 0x8000000000000000
331
332 /* Values for Attribute used above */
333
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
341
342 typedef
343 ACPI_EFI_STATUS
344 (ACPI_EFI_API *ACPI_EFI_FILE_CLOSE) (
345 struct _ACPI_EFI_FILE_HANDLE *File);
346
347 typedef
348 ACPI_EFI_STATUS
349 (ACPI_EFI_API *ACPI_EFI_FILE_DELETE) (
350 struct _ACPI_EFI_FILE_HANDLE *File);
351
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);
358
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);
365
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);
371
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);
377
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);
385
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);
393
394 typedef
395 ACPI_EFI_STATUS
396 (ACPI_EFI_API *ACPI_EFI_FILE_FLUSH) (
397 struct _ACPI_EFI_FILE_HANDLE *File);
398
399
400 #define ACPI_EFI_FILE_HANDLE_REVISION 0x00010000
401
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;
415
416
417 /*
418 * Loaded image protocol
419 */
420 #define ACPI_EFI_LOADED_IMAGE_PROTOCOL \
421 { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} }
422
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);
428
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);
438
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);
445
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);
453
454 typedef
455 ACPI_EFI_STATUS
456 (ACPI_EFI_API *ACPI_EFI_IMAGE_UNLOAD) (
457 ACPI_EFI_HANDLE ImageHandle);
458
459
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;
475
476 } ACPI_EFI_LOADED_IMAGE;
477
478
479 /*
480 * EFI Memory
481 */
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);
489
490 typedef
491 ACPI_EFI_STATUS
492 (ACPI_EFI_API *ACPI_EFI_FREE_PAGES) (
493 ACPI_EFI_PHYSICAL_ADDRESS Memory,
494 UINTN NoPages);
495
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);
504
505 #define NextMemoryDescriptor(Ptr,Size) ((ACPI_EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size))
506
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);
513
514 typedef
515 ACPI_EFI_STATUS
516 (ACPI_EFI_API *ACPI_EFI_FREE_POOL) (
517 VOID *Buffer);
518
519
520 /*
521 * Protocol handler functions
522 */
523 typedef enum {
524 ACPI_EFI_NATIVE_INTERFACE,
525 ACPI_EFI_PCODE_INTERFACE
526 } ACPI_EFI_INTERFACE_TYPE;
527
528 typedef enum {
529 AcpiEfiAllHandles,
530 AcpiEfiByRegisterNotify,
531 AcpiEfiByProtocol
532 } ACPI_EFI_LOCATE_SEARCH_TYPE;
533
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);
541
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);
549
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);
556
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);
563
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);
570
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);
579
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);
586
587 typedef
588 ACPI_EFI_STATUS
589 (ACPI_EFI_API *ACPI_EFI_INSTALL_CONFIGURATION_TABLE) (
590 ACPI_EFI_GUID *Guid,
591 VOID *Table);
592
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
599
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);
609
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);
617
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;
624
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);
632
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);
639
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);
648
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);
655
656 typedef
657 ACPI_EFI_STATUS
658 (ACPI_EFI_API *ACPI_EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
659 ACPI_EFI_HANDLE *Handle,
660 ...);
661
662 typedef
663 ACPI_EFI_STATUS
664 (ACPI_EFI_API *ACPI_EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) (
665 ACPI_EFI_HANDLE Handle,
666 ...);
667
668 typedef
669 ACPI_EFI_STATUS
670 (ACPI_EFI_API *ACPI_EFI_CALCULATE_CRC32) (
671 VOID *Data,
672 UINTN DataSize,
673 UINT32 *Crc32);
674
675 typedef
676 VOID
677 (ACPI_EFI_API *ACPI_EFI_COPY_MEM) (
678 VOID *Destination,
679 VOID *Source,
680 UINTN Length);
681
682 typedef
683 VOID
684 (ACPI_EFI_API *ACPI_EFI_SET_MEM) (
685 VOID *Buffer,
686 UINTN Size,
687 UINT8 Value);
688
689 /*
690 * EFI Boot Services Table
691 */
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)
694
695 typedef struct _ACPI_EFI_BOOT_SERVICES {
696 ACPI_EFI_TABLE_HEADER Hdr;
697
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
705
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;
711
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
727
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;
737
738 ACPI_EFI_IMAGE_LOAD LoadImage;
739 ACPI_EFI_IMAGE_START StartImage;
740 ACPI_EFI_EXIT Exit;
741 ACPI_EFI_IMAGE_UNLOAD UnloadImage;
742
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
754
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
762
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;
771
772 ACPI_EFI_CALCULATE_CRC32 CalculateCrc32;
773
774 ACPI_EFI_COPY_MEM CopyMem;
775 ACPI_EFI_SET_MEM SetMem;
776
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;
783
784
785 /*
786 * EFI System Table
787 */
788
789 /*
790 * EFI Configuration Table and GUID definitions
791 */
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} }
796
797 typedef struct _ACPI_EFI_CONFIGURATION_TABLE {
798 ACPI_EFI_GUID VendorGuid;
799 VOID *VendorTable;
800 } ACPI_EFI_CONFIGURATION_TABLE;
801
802
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)
805
806 typedef struct _ACPI_EFI_SYSTEM_TABLE {
807 ACPI_EFI_TABLE_HEADER Hdr;
808
809 CHAR16 *FirmwareVendor;
810 UINT32 FirmwareRevision;
811
812 ACPI_EFI_HANDLE ConsoleInHandle;
813 ACPI_SIMPLE_INPUT_INTERFACE *ConIn;
814
815 ACPI_EFI_HANDLE ConsoleOutHandle;
816 ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut;
817
818 ACPI_EFI_HANDLE StandardErrorHandle;
819 ACPI_SIMPLE_TEXT_OUTPUT_INTERFACE *StdErr;
820
821 #if 0
822 ACPI_EFI_RUNTIME_SERVICES *RuntimeServices;
823 #else
824 ACPI_EFI_HANDLE *RuntimeServices;
825 #endif
826 ACPI_EFI_BOOT_SERVICES *BootServices;
827
828 UINTN NumberOfTableEntries;
829 ACPI_EFI_CONFIGURATION_TABLE *ConfigurationTable;
830
831 } ACPI_EFI_SYSTEM_TABLE;
832
833
834 /* GNU EFI definitions */
835
836 #if defined(_GNU_EFI)
837
838 /*
839 * This is needed to hide platform specific code from ACPICA
840 */
841 UINT64
842 DivU64x32 (
843 UINT64 Dividend,
844 UINTN Divisor,
845 UINTN *Remainder);
846
847 /*
848 * EFI specific prototypes
849 */
850 ACPI_EFI_STATUS
851 efi_main (
852 ACPI_EFI_HANDLE Image,
853 ACPI_EFI_SYSTEM_TABLE *SystemTab);
854
855 int
856 acpi_main (
857 int argc,
858 char *argv[]);
859
860
861 #endif
862
863 extern ACPI_EFI_GUID AcpiGbl_LoadedImageProtocol;
864 extern ACPI_EFI_GUID AcpiGbl_TextInProtocol;
865 extern ACPI_EFI_GUID AcpiGbl_TextOutProtocol;
866 extern ACPI_EFI_GUID AcpiGbl_FileSystemProtocol;
867
868 #endif /* __ACEFIEX_H__ */