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 /* 835 * EFI PCI I/O Protocol 836 */ 837 #define ACPI_EFI_PCI_IO_PROTOCOL \ 838 { 0x4cf5b200, 0x68b8, 0x4ca5, {0x9e, 0xec, 0xb2, 0x3e, 0x3f, 0x50, 0x2, 0x9a} } 839 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; 855 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); 864 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; 869 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); 878 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; 898 899 /* GNU EFI definitions */ 900 901 #if defined(_GNU_EFI) 902 903 /* 904 * This is needed to hide platform specific code from ACPICA 905 */ 906 UINT64 907 DivU64x32 ( 908 UINT64 Dividend, 909 UINTN Divisor, 910 UINTN *Remainder); 911 912 /* 913 * EFI specific prototypes 914 */ 915 ACPI_EFI_STATUS 916 efi_main ( 917 ACPI_EFI_HANDLE Image, 918 ACPI_EFI_SYSTEM_TABLE *SystemTab); 919 920 int 921 acpi_main ( 922 int argc, 923 char *argv[]); 924 925 926 #endif 927 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; 932 933 #endif /* __ACEFIEX_H__ */ 934