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 #define EFI_ERROR(a) (((INTN) a) < 0) 49 #define EFI_SUCCESS 0 50 #define EFI_LOAD_ERROR EFIERR(1) 51 #define EFI_INVALID_PARAMETER EFIERR(2) 52 #define EFI_UNSUPPORTED EFIERR(3) 53 #define EFI_BAD_BUFFER_SIZE EFIERR(4) 54 #define EFI_BUFFER_TOO_SMALL EFIERR(5) 55 #define EFI_NOT_READY EFIERR(6) 56 #define EFI_DEVICE_ERROR EFIERR(7) 57 #define EFI_WRITE_PROTECTED EFIERR(8) 58 #define EFI_OUT_OF_RESOURCES EFIERR(9) 59 #define EFI_VOLUME_CORRUPTED EFIERR(10) 60 #define EFI_VOLUME_FULL EFIERR(11) 61 #define EFI_NO_MEDIA EFIERR(12) 62 #define EFI_MEDIA_CHANGED EFIERR(13) 63 #define EFI_NOT_FOUND EFIERR(14) 64 #define EFI_ACCESS_DENIED EFIERR(15) 65 #define EFI_NO_RESPONSE EFIERR(16) 66 #define EFI_NO_MAPPING EFIERR(17) 67 #define EFI_TIMEOUT EFIERR(18) 68 #define EFI_NOT_STARTED EFIERR(19) 69 #define EFI_ALREADY_STARTED EFIERR(20) 70 #define EFI_ABORTED EFIERR(21) 71 #define EFI_PROTOCOL_ERROR EFIERR(24) 72 73 74 typedef UINTN EFI_STATUS; 75 typedef VOID *EFI_HANDLE; 76 typedef VOID *EFI_EVENT; 77 78 typedef struct { 79 UINT32 Data1; 80 UINT16 Data2; 81 UINT16 Data3; 82 UINT8 Data4[8]; 83 } EFI_GUID; 84 85 typedef struct _EFI_DEVICE_PATH { 86 UINT8 Type; 87 UINT8 SubType; 88 UINT8 Length[2]; 89 } EFI_DEVICE_PATH; 90 91 typedef UINT64 EFI_PHYSICAL_ADDRESS; 92 typedef UINT64 EFI_VIRTUAL_ADDRESS; 93 94 typedef enum { 95 AllocateAnyPages, 96 AllocateMaxAddress, 97 AllocateAddress, 98 MaxAllocateType 99 } EFI_ALLOCATE_TYPE; 100 101 typedef enum { 102 EfiReservedMemoryType, 103 EfiLoaderCode, 104 EfiLoaderData, 105 EfiBootServicesCode, 106 EfiBootServicesData, 107 EfiRuntimeServicesCode, 108 EfiRuntimeServicesData, 109 EfiConventionalMemory, 110 EfiUnusableMemory, 111 EfiACPIReclaimMemory, 112 EfiACPIMemoryNVS, 113 EfiMemoryMappedIO, 114 EfiMemoryMappedIOPortSpace, 115 EfiPalCode, 116 EfiMaxMemoryType 117 } EFI_MEMORY_TYPE; 118 119 /* possible caching types for the memory range */ 120 #define EFI_MEMORY_UC 0x0000000000000001 121 #define EFI_MEMORY_WC 0x0000000000000002 122 #define EFI_MEMORY_WT 0x0000000000000004 123 #define EFI_MEMORY_WB 0x0000000000000008 124 #define EFI_MEMORY_UCE 0x0000000000000010 125 126 /* physical memory protection on range */ 127 #define EFI_MEMORY_WP 0x0000000000001000 128 #define EFI_MEMORY_RP 0x0000000000002000 129 #define EFI_MEMORY_XP 0x0000000000004000 130 131 /* range requires a runtime mapping */ 132 #define EFI_MEMORY_RUNTIME 0x8000000000000000 133 134 #define EFI_MEMORY_DESCRIPTOR_VERSION 1 135 typedef struct { 136 UINT32 Type; 137 UINT32 Pad; 138 EFI_PHYSICAL_ADDRESS PhysicalStart; 139 EFI_VIRTUAL_ADDRESS VirtualStart; 140 UINT64 NumberOfPages; 141 UINT64 Attribute; 142 } EFI_MEMORY_DESCRIPTOR; 143 144 typedef struct _EFI_TABLE_HEARDER { 145 UINT64 Signature; 146 UINT32 Revision; 147 UINT32 HeaderSize; 148 UINT32 CRC32; 149 UINT32 Reserved; 150 } EFI_TABLE_HEADER; 151 152 typedef 153 EFI_STATUS 154 (EFIAPI *EFI_UNKNOWN_INTERFACE) ( 155 void); 156 157 158 /* 159 * Text output protocol 160 */ 161 #define SIMPLE_TEXT_OUTPUT_PROTOCOL \ 162 { 0x387477c2, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 163 164 typedef 165 EFI_STATUS 166 (EFIAPI *EFI_TEXT_RESET) ( 167 struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 168 BOOLEAN ExtendedVerification); 169 170 typedef 171 EFI_STATUS 172 (EFIAPI *EFI_TEXT_OUTPUT_STRING) ( 173 struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 174 CHAR16 *String); 175 176 typedef 177 EFI_STATUS 178 (EFIAPI *EFI_TEXT_TEST_STRING) ( 179 struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 180 CHAR16 *String); 181 182 typedef 183 EFI_STATUS 184 (EFIAPI *EFI_TEXT_QUERY_MODE) ( 185 struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 186 UINTN ModeNumber, 187 UINTN *Columns, 188 UINTN *Rows); 189 190 typedef 191 EFI_STATUS 192 (EFIAPI *EFI_TEXT_SET_MODE) ( 193 struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 194 UINTN ModeNumber); 195 196 typedef 197 EFI_STATUS 198 (EFIAPI *EFI_TEXT_SET_ATTRIBUTE) ( 199 struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 200 UINTN Attribute); 201 202 typedef 203 EFI_STATUS 204 (EFIAPI *EFI_TEXT_CLEAR_SCREEN) ( 205 struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This); 206 207 typedef 208 EFI_STATUS 209 (EFIAPI *EFI_TEXT_SET_CURSOR_POSITION) ( 210 struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 211 UINTN Column, 212 UINTN Row); 213 214 typedef 215 EFI_STATUS 216 (EFIAPI *EFI_TEXT_ENABLE_CURSOR) ( 217 struct _SIMPLE_TEXT_OUTPUT_INTERFACE *This, 218 BOOLEAN Enable); 219 220 typedef struct { 221 INT32 MaxMode; 222 INT32 Mode; 223 INT32 Attribute; 224 INT32 CursorColumn; 225 INT32 CursorRow; 226 BOOLEAN CursorVisible; 227 } SIMPLE_TEXT_OUTPUT_MODE; 228 229 typedef struct _SIMPLE_TEXT_OUTPUT_INTERFACE { 230 EFI_TEXT_RESET Reset; 231 232 EFI_TEXT_OUTPUT_STRING OutputString; 233 EFI_TEXT_TEST_STRING TestString; 234 235 EFI_TEXT_QUERY_MODE QueryMode; 236 EFI_TEXT_SET_MODE SetMode; 237 EFI_TEXT_SET_ATTRIBUTE SetAttribute; 238 239 EFI_TEXT_CLEAR_SCREEN ClearScreen; 240 EFI_TEXT_SET_CURSOR_POSITION SetCursorPosition; 241 EFI_TEXT_ENABLE_CURSOR EnableCursor; 242 243 SIMPLE_TEXT_OUTPUT_MODE *Mode; 244 } SIMPLE_TEXT_OUTPUT_INTERFACE; 245 246 /* 247 * Text input protocol 248 */ 249 #define SIMPLE_TEXT_INPUT_PROTOCOL \ 250 { 0x387477c1, 0x69c7, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 251 252 typedef struct { 253 UINT16 ScanCode; 254 CHAR16 UnicodeChar; 255 } EFI_INPUT_KEY; 256 257 /* 258 * Baseline unicode control chars 259 */ 260 #define CHAR_NULL 0x0000 261 #define CHAR_BACKSPACE 0x0008 262 #define CHAR_TAB 0x0009 263 #define CHAR_LINEFEED 0x000A 264 #define CHAR_CARRIAGE_RETURN 0x000D 265 266 typedef 267 EFI_STATUS 268 (EFIAPI *EFI_INPUT_RESET) ( 269 struct _SIMPLE_INPUT_INTERFACE *This, 270 BOOLEAN ExtendedVerification); 271 272 typedef 273 EFI_STATUS 274 (EFIAPI *EFI_INPUT_READ_KEY) ( 275 struct _SIMPLE_INPUT_INTERFACE *This, 276 EFI_INPUT_KEY *Key); 277 278 typedef struct _SIMPLE_INPUT_INTERFACE { 279 EFI_INPUT_RESET Reset; 280 EFI_INPUT_READ_KEY ReadKeyStroke; 281 EFI_EVENT WaitForKey; 282 } SIMPLE_INPUT_INTERFACE; 283 284 285 /* 286 * Simple file system protocol 287 */ 288 #define SIMPLE_FILE_SYSTEM_PROTOCOL \ 289 { 0x964e5b22, 0x6459, 0x11d2, {0x8e, 0x39, 0x0, 0xa0, 0xc9, 0x69, 0x72, 0x3b} } 290 291 typedef 292 EFI_STATUS 293 (EFIAPI *EFI_VOLUME_OPEN) ( 294 struct _EFI_FILE_IO_INTERFACE *This, 295 struct _EFI_FILE_HANDLE **Root); 296 297 #define EFI_FILE_IO_INTERFACE_REVISION 0x00010000 298 299 typedef struct _EFI_FILE_IO_INTERFACE { 300 UINT64 Revision; 301 EFI_VOLUME_OPEN OpenVolume; 302 } EFI_FILE_IO_INTERFACE; 303 304 typedef 305 EFI_STATUS 306 (EFIAPI *EFI_FILE_OPEN) ( 307 struct _EFI_FILE_HANDLE *File, 308 struct _EFI_FILE_HANDLE **NewHandle, 309 CHAR16 *FileName, 310 UINT64 OpenMode, 311 UINT64 Attributes); 312 313 /* Values for OpenMode used above */ 314 315 #define EFI_FILE_MODE_READ 0x0000000000000001 316 #define EFI_FILE_MODE_WRITE 0x0000000000000002 317 #define EFI_FILE_MODE_CREATE 0x8000000000000000 318 319 /* Values for Attribute used above */ 320 321 #define EFI_FILE_READ_ONLY 0x0000000000000001 322 #define EFI_FILE_HIDDEN 0x0000000000000002 323 #define EFI_FILE_SYSTEM 0x0000000000000004 324 #define EFI_FILE_RESERVIED 0x0000000000000008 325 #define EFI_FILE_DIRECTORY 0x0000000000000010 326 #define EFI_FILE_ARCHIVE 0x0000000000000020 327 #define EFI_FILE_VALID_ATTR 0x0000000000000037 328 329 typedef 330 EFI_STATUS 331 (EFIAPI *EFI_FILE_CLOSE) ( 332 struct _EFI_FILE_HANDLE *File); 333 334 typedef 335 EFI_STATUS 336 (EFIAPI *EFI_FILE_DELETE) ( 337 struct _EFI_FILE_HANDLE *File); 338 339 typedef 340 EFI_STATUS 341 (EFIAPI *EFI_FILE_READ) ( 342 struct _EFI_FILE_HANDLE *File, 343 UINTN *BufferSize, 344 VOID *Buffer); 345 346 typedef 347 EFI_STATUS 348 (EFIAPI *EFI_FILE_WRITE) ( 349 struct _EFI_FILE_HANDLE *File, 350 UINTN *BufferSize, 351 VOID *Buffer); 352 353 typedef 354 EFI_STATUS 355 (EFIAPI *EFI_FILE_SET_POSITION) ( 356 struct _EFI_FILE_HANDLE *File, 357 UINT64 Position); 358 359 typedef 360 EFI_STATUS 361 (EFIAPI *EFI_FILE_GET_POSITION) ( 362 struct _EFI_FILE_HANDLE *File, 363 UINT64 *Position); 364 365 typedef 366 EFI_STATUS 367 (EFIAPI *EFI_FILE_GET_INFO) ( 368 struct _EFI_FILE_HANDLE *File, 369 EFI_GUID *InformationType, 370 UINTN *BufferSize, 371 VOID *Buffer); 372 373 typedef 374 EFI_STATUS 375 (EFIAPI *EFI_FILE_SET_INFO) ( 376 struct _EFI_FILE_HANDLE *File, 377 EFI_GUID *InformationType, 378 UINTN BufferSize, 379 VOID *Buffer); 380 381 typedef 382 EFI_STATUS 383 (EFIAPI *EFI_FILE_FLUSH) ( 384 struct _EFI_FILE_HANDLE *File); 385 386 387 #define EFI_FILE_HANDLE_REVISION 0x00010000 388 389 typedef struct _EFI_FILE_HANDLE { 390 UINT64 Revision; 391 EFI_FILE_OPEN Open; 392 EFI_FILE_CLOSE Close; 393 EFI_FILE_DELETE Delete; 394 EFI_FILE_READ Read; 395 EFI_FILE_WRITE Write; 396 EFI_FILE_GET_POSITION GetPosition; 397 EFI_FILE_SET_POSITION SetPosition; 398 EFI_FILE_GET_INFO GetInfo; 399 EFI_FILE_SET_INFO SetInfo; 400 EFI_FILE_FLUSH Flush; 401 } EFI_FILE, *EFI_FILE_HANDLE; 402 403 404 /* 405 * Loaded image protocol 406 */ 407 #define LOADED_IMAGE_PROTOCOL \ 408 { 0x5B1B31A1, 0x9562, 0x11d2, {0x8E, 0x3F, 0x00, 0xA0, 0xC9, 0x69, 0x72, 0x3B} } 409 410 typedef 411 EFI_STATUS 412 (EFIAPI *EFI_IMAGE_ENTRY_POINT) ( 413 EFI_HANDLE ImageHandle, 414 struct _EFI_SYSTEM_TABLE *SystemTable); 415 416 typedef 417 EFI_STATUS 418 (EFIAPI *EFI_IMAGE_LOAD) ( 419 BOOLEAN BootPolicy, 420 EFI_HANDLE ParentImageHandle, 421 EFI_DEVICE_PATH *FilePath, 422 VOID *SourceBuffer, 423 UINTN SourceSize, 424 EFI_HANDLE *ImageHandle); 425 426 typedef 427 EFI_STATUS 428 (EFIAPI *EFI_IMAGE_START) ( 429 EFI_HANDLE ImageHandle, 430 UINTN *ExitDataSize, 431 CHAR16 **ExitData); 432 433 typedef 434 EFI_STATUS 435 (EFIAPI *EFI_EXIT) ( 436 EFI_HANDLE ImageHandle, 437 EFI_STATUS ExitStatus, 438 UINTN ExitDataSize, 439 CHAR16 *ExitData); 440 441 typedef 442 EFI_STATUS 443 (EFIAPI *EFI_IMAGE_UNLOAD) ( 444 EFI_HANDLE ImageHandle); 445 446 447 #define EFI_IMAGE_INFORMATION_REVISION 0x1000 448 typedef struct { 449 UINT32 Revision; 450 EFI_HANDLE ParentHandle; 451 struct _EFI_SYSTEM_TABLE *SystemTable; 452 EFI_HANDLE DeviceHandle; 453 EFI_DEVICE_PATH *FilePath; 454 VOID *Reserved; 455 UINT32 LoadOptionsSize; 456 VOID *LoadOptions; 457 VOID *ImageBase; 458 UINT64 ImageSize; 459 EFI_MEMORY_TYPE ImageCodeType; 460 EFI_MEMORY_TYPE ImageDataType; 461 EFI_IMAGE_UNLOAD Unload; 462 463 } EFI_LOADED_IMAGE; 464 465 466 /* 467 * EFI Memory 468 */ 469 typedef 470 EFI_STATUS 471 (EFIAPI *EFI_ALLOCATE_PAGES) ( 472 EFI_ALLOCATE_TYPE Type, 473 EFI_MEMORY_TYPE MemoryType, 474 UINTN NoPages, 475 EFI_PHYSICAL_ADDRESS *Memory); 476 477 typedef 478 EFI_STATUS 479 (EFIAPI *EFI_FREE_PAGES) ( 480 EFI_PHYSICAL_ADDRESS Memory, 481 UINTN NoPages); 482 483 typedef 484 EFI_STATUS 485 (EFIAPI *EFI_GET_MEMORY_MAP) ( 486 UINTN *MemoryMapSize, 487 EFI_MEMORY_DESCRIPTOR *MemoryMap, 488 UINTN *MapKey, 489 UINTN *DescriptorSize, 490 UINT32 *DescriptorVersion); 491 492 #define NextMemoryDescriptor(Ptr,Size) ((EFI_MEMORY_DESCRIPTOR *) (((UINT8 *) Ptr) + Size)) 493 494 typedef 495 EFI_STATUS 496 (EFIAPI *EFI_ALLOCATE_POOL) ( 497 EFI_MEMORY_TYPE PoolType, 498 UINTN Size, 499 VOID **Buffer); 500 501 typedef 502 EFI_STATUS 503 (EFIAPI *EFI_FREE_POOL) ( 504 VOID *Buffer); 505 506 507 /* 508 * Protocol handler functions 509 */ 510 typedef enum { 511 EFI_NATIVE_INTERFACE, 512 EFI_PCODE_INTERFACE 513 } EFI_INTERFACE_TYPE; 514 515 typedef enum { 516 AllHandles, 517 ByRegisterNotify, 518 ByProtocol 519 } EFI_LOCATE_SEARCH_TYPE; 520 521 typedef 522 EFI_STATUS 523 (EFIAPI *EFI_INSTALL_PROTOCOL_INTERFACE) ( 524 EFI_HANDLE *Handle, 525 EFI_GUID *Protocol, 526 EFI_INTERFACE_TYPE InterfaceType, 527 VOID *Interface); 528 529 typedef 530 EFI_STATUS 531 (EFIAPI *EFI_REINSTALL_PROTOCOL_INTERFACE) ( 532 EFI_HANDLE Handle, 533 EFI_GUID *Protocol, 534 VOID *OldInterface, 535 VOID *NewInterface); 536 537 typedef 538 EFI_STATUS 539 (EFIAPI *EFI_UNINSTALL_PROTOCOL_INTERFACE) ( 540 EFI_HANDLE Handle, 541 EFI_GUID *Protocol, 542 VOID *Interface); 543 544 typedef 545 EFI_STATUS 546 (EFIAPI *EFI_HANDLE_PROTOCOL) ( 547 EFI_HANDLE Handle, 548 EFI_GUID *Protocol, 549 VOID **Interface); 550 551 typedef 552 EFI_STATUS 553 (EFIAPI *EFI_REGISTER_PROTOCOL_NOTIFY) ( 554 EFI_GUID *Protocol, 555 EFI_EVENT Event, 556 VOID **Registration); 557 558 typedef 559 EFI_STATUS 560 (EFIAPI *EFI_LOCATE_HANDLE) ( 561 EFI_LOCATE_SEARCH_TYPE SearchType, 562 EFI_GUID *Protocol, 563 VOID *SearchKey, 564 UINTN *BufferSize, 565 EFI_HANDLE *Buffer); 566 567 typedef 568 EFI_STATUS 569 (EFIAPI *EFI_LOCATE_DEVICE_PATH) ( 570 EFI_GUID *Protocol, 571 EFI_DEVICE_PATH **DevicePath, 572 EFI_HANDLE *Device); 573 574 typedef 575 EFI_STATUS 576 (EFIAPI *EFI_INSTALL_CONFIGURATION_TABLE) ( 577 EFI_GUID *Guid, 578 VOID *Table); 579 580 #define EFI_OPEN_PROTOCOL_BY_HANDLE_PROTOCOL 0x00000001 581 #define EFI_OPEN_PROTOCOL_GET_PROTOCOL 0x00000002 582 #define EFI_OPEN_PROTOCOL_TEST_PROTOCOL 0x00000004 583 #define EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER 0x00000008 584 #define EFI_OPEN_PROTOCOL_BY_DRIVER 0x00000010 585 #define EFI_OPEN_PROTOCOL_EXCLUSIVE 0x00000020 586 587 typedef 588 EFI_STATUS 589 (EFIAPI *EFI_OPEN_PROTOCOL) ( 590 EFI_HANDLE Handle, 591 EFI_GUID *Protocol, 592 VOID **Interface, 593 EFI_HANDLE AgentHandle, 594 EFI_HANDLE ControllerHandle, 595 UINT32 Attributes); 596 597 typedef 598 EFI_STATUS 599 (EFIAPI *EFI_CLOSE_PROTOCOL) ( 600 EFI_HANDLE Handle, 601 EFI_GUID *Protocol, 602 EFI_HANDLE AgentHandle, 603 EFI_HANDLE ControllerHandle); 604 605 typedef struct { 606 EFI_HANDLE AgentHandle; 607 EFI_HANDLE ControllerHandle; 608 UINT32 Attributes; 609 UINT32 OpenCount; 610 } EFI_OPEN_PROTOCOL_INFORMATION_ENTRY; 611 612 typedef 613 EFI_STATUS 614 (EFIAPI *EFI_OPEN_PROTOCOL_INFORMATION) ( 615 EFI_HANDLE Handle, 616 EFI_GUID *Protocol, 617 EFI_OPEN_PROTOCOL_INFORMATION_ENTRY **EntryBuffer, 618 UINTN *EntryCount); 619 620 typedef 621 EFI_STATUS 622 (EFIAPI *EFI_PROTOCOLS_PER_HANDLE) ( 623 EFI_HANDLE Handle, 624 EFI_GUID ***ProtocolBuffer, 625 UINTN *ProtocolBufferCount); 626 627 typedef 628 EFI_STATUS 629 (EFIAPI *EFI_LOCATE_HANDLE_BUFFER) ( 630 EFI_LOCATE_SEARCH_TYPE SearchType, 631 EFI_GUID *Protocol, 632 VOID *SearchKey, 633 UINTN *NoHandles, 634 EFI_HANDLE **Buffer); 635 636 typedef 637 EFI_STATUS 638 (EFIAPI *EFI_LOCATE_PROTOCOL) ( 639 EFI_GUID *Protocol, 640 VOID *Registration, 641 VOID **Interface); 642 643 typedef 644 EFI_STATUS 645 (EFIAPI *EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( 646 EFI_HANDLE *Handle, 647 ...); 648 649 typedef 650 EFI_STATUS 651 (EFIAPI *EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES) ( 652 EFI_HANDLE Handle, 653 ...); 654 655 typedef 656 EFI_STATUS 657 (EFIAPI *EFI_CALCULATE_CRC32) ( 658 VOID *Data, 659 UINTN DataSize, 660 UINT32 *Crc32); 661 662 typedef 663 VOID 664 (EFIAPI *EFI_COPY_MEM) ( 665 VOID *Destination, 666 VOID *Source, 667 UINTN Length); 668 669 typedef 670 VOID 671 (EFIAPI *EFI_SET_MEM) ( 672 VOID *Buffer, 673 UINTN Size, 674 UINT8 Value); 675 676 /* 677 * EFI Boot Services Table 678 */ 679 #define EFI_BOOT_SERVICES_SIGNATURE 0x56524553544f4f42 680 #define EFI_BOOT_SERVICES_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) 681 682 typedef struct _EFI_BOOT_SERVICES { 683 EFI_TABLE_HEADER Hdr; 684 685 #if 0 686 EFI_RAISE_TPL RaiseTPL; 687 EFI_RESTORE_TPL RestoreTPL; 688 #else 689 EFI_UNKNOWN_INTERFACE RaiseTPL; 690 EFI_UNKNOWN_INTERFACE RestoreTPL; 691 #endif 692 693 EFI_ALLOCATE_PAGES AllocatePages; 694 EFI_FREE_PAGES FreePages; 695 EFI_GET_MEMORY_MAP GetMemoryMap; 696 EFI_ALLOCATE_POOL AllocatePool; 697 EFI_FREE_POOL FreePool; 698 699 #if 0 700 EFI_CREATE_EVENT CreateEvent; 701 EFI_SET_TIMER SetTimer; 702 EFI_WAIT_FOR_EVENT WaitForEvent; 703 EFI_SIGNAL_EVENT SignalEvent; 704 EFI_CLOSE_EVENT CloseEvent; 705 EFI_CHECK_EVENT CheckEvent; 706 #else 707 EFI_UNKNOWN_INTERFACE CreateEvent; 708 EFI_UNKNOWN_INTERFACE SetTimer; 709 EFI_UNKNOWN_INTERFACE WaitForEvent; 710 EFI_UNKNOWN_INTERFACE SignalEvent; 711 EFI_UNKNOWN_INTERFACE CloseEvent; 712 EFI_UNKNOWN_INTERFACE CheckEvent; 713 #endif 714 715 EFI_INSTALL_PROTOCOL_INTERFACE InstallProtocolInterface; 716 EFI_REINSTALL_PROTOCOL_INTERFACE ReinstallProtocolInterface; 717 EFI_UNINSTALL_PROTOCOL_INTERFACE UninstallProtocolInterface; 718 EFI_HANDLE_PROTOCOL HandleProtocol; 719 EFI_HANDLE_PROTOCOL PCHandleProtocol; 720 EFI_REGISTER_PROTOCOL_NOTIFY RegisterProtocolNotify; 721 EFI_LOCATE_HANDLE LocateHandle; 722 EFI_LOCATE_DEVICE_PATH LocateDevicePath; 723 EFI_INSTALL_CONFIGURATION_TABLE InstallConfigurationTable; 724 725 EFI_IMAGE_LOAD LoadImage; 726 EFI_IMAGE_START StartImage; 727 EFI_EXIT Exit; 728 EFI_IMAGE_UNLOAD UnloadImage; 729 730 #if 0 731 EFI_EXIT_BOOT_SERVICES ExitBootServices; 732 EFI_GET_NEXT_MONOTONIC_COUNT GetNextMonotonicCount; 733 EFI_STALL Stall; 734 EFI_SET_WATCHDOG_TIMER SetWatchdogTimer; 735 #else 736 EFI_UNKNOWN_INTERFACE ExitBootServices; 737 EFI_UNKNOWN_INTERFACE GetNextMonotonicCount; 738 EFI_UNKNOWN_INTERFACE Stall; 739 EFI_UNKNOWN_INTERFACE SetWatchdogTimer; 740 #endif 741 742 #if 0 743 EFI_CONNECT_CONTROLLER ConnectController; 744 EFI_DISCONNECT_CONTROLLER DisconnectController; 745 #else 746 EFI_UNKNOWN_INTERFACE ConnectController; 747 EFI_UNKNOWN_INTERFACE DisconnectController; 748 #endif 749 750 EFI_OPEN_PROTOCOL OpenProtocol; 751 EFI_CLOSE_PROTOCOL CloseProtocol; 752 EFI_OPEN_PROTOCOL_INFORMATION OpenProtocolInformation; 753 EFI_PROTOCOLS_PER_HANDLE ProtocolsPerHandle; 754 EFI_LOCATE_HANDLE_BUFFER LocateHandleBuffer; 755 EFI_LOCATE_PROTOCOL LocateProtocol; 756 EFI_INSTALL_MULTIPLE_PROTOCOL_INTERFACES InstallMultipleProtocolInterfaces; 757 EFI_UNINSTALL_MULTIPLE_PROTOCOL_INTERFACES UninstallMultipleProtocolInterfaces; 758 759 EFI_CALCULATE_CRC32 CalculateCrc32; 760 761 EFI_COPY_MEM CopyMem; 762 EFI_SET_MEM SetMem; 763 764 #if 0 765 EFI_CREATE_EVENT_EX CreateEventEx; 766 #else 767 EFI_UNKNOWN_INTERFACE CreateEventEx; 768 #endif 769 } EFI_BOOT_SERVICES; 770 771 772 /* 773 * EFI System Table 774 */ 775 776 /* 777 * EFI Configuration Table and GUID definitions 778 */ 779 #define ACPI_TABLE_GUID \ 780 { 0xeb9d2d30, 0x2d88, 0x11d3, {0x9a, 0x16, 0x0, 0x90, 0x27, 0x3f, 0xc1, 0x4d} } 781 #define ACPI_20_TABLE_GUID \ 782 { 0x8868e871, 0xe4f1, 0x11d3, {0xbc, 0x22, 0x0, 0x80, 0xc7, 0x3c, 0x88, 0x81} } 783 784 typedef struct _EFI_CONFIGURATION_TABLE { 785 EFI_GUID VendorGuid; 786 VOID *VendorTable; 787 } EFI_CONFIGURATION_TABLE; 788 789 790 #define EFI_SYSTEM_TABLE_SIGNATURE 0x5453595320494249 791 #define EFI_SYSTEM_TABLE_REVISION (EFI_SPECIFICATION_MAJOR_REVISION<<16) | (EFI_SPECIFICATION_MINOR_REVISION) 792 793 typedef struct _EFI_SYSTEM_TABLE { 794 EFI_TABLE_HEADER Hdr; 795 796 CHAR16 *FirmwareVendor; 797 UINT32 FirmwareRevision; 798 799 EFI_HANDLE ConsoleInHandle; 800 SIMPLE_INPUT_INTERFACE *ConIn; 801 802 EFI_HANDLE ConsoleOutHandle; 803 SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut; 804 805 EFI_HANDLE StandardErrorHandle; 806 SIMPLE_TEXT_OUTPUT_INTERFACE *StdErr; 807 808 #if 0 809 EFI_RUNTIME_SERVICES *RuntimeServices; 810 #else 811 EFI_HANDLE *RuntimeServices; 812 #endif 813 EFI_BOOT_SERVICES *BootServices; 814 815 UINTN NumberOfTableEntries; 816 EFI_CONFIGURATION_TABLE *ConfigurationTable; 817 818 } EFI_SYSTEM_TABLE; 819 820 821 /* GNU EFI definitions */ 822 823 #if defined(_GNU_EFI) 824 825 /* 826 * This is needed to hide platform specific code from ACPICA 827 */ 828 UINT64 829 DivU64x32 ( 830 UINT64 Dividend, 831 UINTN Divisor, 832 UINTN *Remainder); 833 834 /* 835 * EFI specific prototypes 836 */ 837 EFI_STATUS 838 efi_main ( 839 EFI_HANDLE Image, 840 EFI_SYSTEM_TABLE *SystemTab); 841 842 int 843 acpi_main ( 844 int argc, 845 char *argv[]); 846 847 848 #endif 849 850 extern EFI_GUID AcpiGbl_LoadedImageProtocol; 851 extern EFI_GUID AcpiGbl_TextInProtocol; 852 extern EFI_GUID AcpiGbl_TextOutProtocol; 853 extern EFI_GUID AcpiGbl_FileSystemProtocol; 854 855 #endif /* __ACEFIEX_H__ */ 856