1 /* $NetBSD: efilib.h,v 1.3 2021/09/30 19:02:47 jmcneill Exp $ */ 2 3 #ifndef _EFILIB_INCLUDE_ 4 #define _EFILIB_INCLUDE_ 5 6 /*++ 7 8 Copyright (c) 2000 Intel Corporation 9 10 Module Name: 11 12 efilib.h 13 14 Abstract: 15 16 EFI library functions 17 18 19 20 Revision History 21 22 --*/ 23 24 #include "efidebug.h" 25 #include "efipart.h" 26 #if defined(_M_X64) || defined(__x86_64__) || defined(__amd64__) 27 #include "x86_64/efilibplat.h" 28 #elif defined(_M_IX86) || defined(__i386__) 29 #include "ia32/efilibplat.h" 30 #elif defined(_M_IA64) || defined(__ia64__) 31 #include "ia64/efilibplat.h" 32 #elif defined (_M_ARM64) || defined(__aarch64__) 33 #include "aarch64/efilibplat.h" 34 #elif defined (_M_ARM) || defined(__arm__) 35 #include "arm/efilibplat.h" 36 #elif defined (_M_MIPS64) || defined(__mips64__) 37 #include "mips64el/efilibplat.h" 38 #elif defined (__riscv) && __riscv_xlen == 64 39 #include "riscv64/efilibplat.h" 40 #endif 41 #include "efilink.h" 42 #include "efirtlib.h" 43 #include "efistdarg.h" 44 #include "pci22.h" 45 #include "libsmbios.h" 46 47 // 48 // Public read-only data in the EFI library 49 // 50 51 extern EFI_SYSTEM_TABLE *ST; 52 #define gST ST 53 extern EFI_BOOT_SERVICES *BS; 54 #define gBS BS 55 extern EFI_RUNTIME_SERVICES *RT; 56 #define gRT RT 57 58 extern EFI_GUID gEfiDevicePathProtocolGuid; 59 #define DevicePathProtocol gEfiDevicePathProtocolGuid 60 extern EFI_GUID gEfiDevicePathToTextProtocolGuid; 61 #define DevicePathToTextProtocol gEfiDevicePathToTextProtocolGuid 62 extern EFI_GUID gEfiDevicePathFromTextProtocolGuid; 63 #define DevicePathFromTextProtocol gEfiDevicePathFromTextProtocolGuid 64 extern EFI_GUID gEfiDevicePathUtilitiesProtocolGuid; 65 #define DevicePathUtilitiesProtocol gEfiDevicePathUtilitiesProtocolGuid 66 extern EFI_GUID gEfiLoadedImageProtocolGuid; 67 #define LoadedImageProtocol gEfiLoadedImageProtocolGuid 68 extern EFI_GUID gEfiSimpleTextInProtocolGuid; 69 #define TextInProtocol gEfiSimpleTextInProtocolGuid 70 extern EFI_GUID gEfiSimpleTextOutProtocolGuid; 71 #define TextOutProtocol gEfiSimpleTextOutProtocolGuid 72 extern EFI_GUID gEfiGraphicsOutputProtocolGuid; 73 #define GraphicsOutputProtocol gEfiGraphicsOutputProtocolGuid 74 extern EFI_GUID gEfiEdidDiscoveredProtocolGuid; 75 #define EdidDiscoveredProtocol gEfiEdidDiscoveredProtocolGuid 76 extern EFI_GUID gEfiEdidActiveProtocolGuid; 77 #define EdidActiveProtocol gEfiEdidActiveProtocolGuid 78 extern EFI_GUID gEfiEdidOverrideProtocolGuid; 79 #define EdidOverrideProtocol gEfiEdidOverrideProtocolGuid 80 extern EFI_GUID gEfiBlockIoProtocolGuid; 81 #define BlockIoProtocol gEfiBlockIoProtocolGuid 82 extern EFI_GUID gEfiBlockIo2ProtocolGuid; 83 #define BlockIo2Protocol gEfiBlockIo2ProtocolGuid 84 extern EFI_GUID gEfiDiskIoProtocolGuid; 85 #define DiskIoProtocol gEfiDiskIoProtocolGuid 86 extern EFI_GUID gEfiDiskIo2ProtocolGuid; 87 #define DiskIo2Protocol gEfiDiskIo2ProtocolGuid 88 extern EFI_GUID gEfiSimpleFileSystemProtocolGuid; 89 #define FileSystemProtocol gEfiSimpleFileSystemProtocolGuid 90 extern EFI_GUID gEfiLoadFileProtocolGuid; 91 #define LoadFileProtocol gEfiLoadFileProtocolGuid 92 extern EFI_GUID gEfiDeviceIoProtocolGuid; 93 #define DeviceIoProtocol gEfiDeviceIoProtocolGuid 94 extern EFI_GUID VariableStoreProtocol; 95 extern EFI_GUID LegacyBootProtocol; 96 extern EFI_GUID gEfiUnicodeCollationProtocolGuid; 97 #define UnicodeCollationProtocol gEfiUnicodeCollationProtocolGuid 98 extern EFI_GUID gEfiSerialIoProtocolGuid; 99 #define SerialIoProtocol gEfiSerialIoProtocolGuid 100 extern EFI_GUID VgaClassProtocol; 101 extern EFI_GUID TextOutSpliterProtocol; 102 extern EFI_GUID ErrorOutSpliterProtocol; 103 extern EFI_GUID TextInSpliterProtocol; 104 extern EFI_GUID gEfiSimpleNetworkProtocolGuid; 105 #define SimpleNetworkProtocol gEfiSimpleNetworkProtocolGuid 106 extern EFI_GUID gEfiPxeBaseCodeProtocolGuid; 107 #define PxeBaseCodeProtocol gEfiPxeBaseCodeProtocolGuid 108 extern EFI_GUID gEfiPxeBaseCodeCallbackProtocolGuid; 109 #define PxeCallbackProtocol gEfiPxeBaseCodeCallbackProtocolGuid 110 extern EFI_GUID gEfiNetworkInterfaceIdentifierProtocolGuid; 111 #define NetworkInterfaceIdentifierProtocol gEfiNetworkInterfaceIdentifierProtocolGuid 112 extern EFI_GUID gEFiUiInterfaceProtocolGuid; 113 #define UiProtocol gEFiUiInterfaceProtocolGuid 114 extern EFI_GUID InternalShellProtocol; 115 extern EFI_GUID gEfiPciIoProtocolGuid; 116 #define PciIoProtocol gEfiPciIoProtocolGuid 117 extern EFI_GUID gEfiPciRootBridgeIoProtocolGuid; 118 extern EFI_GUID gEfiDriverBindingProtocolGuid; 119 #define DriverBindingProtocol gEfiDriverBindingProtocolGuid 120 extern EFI_GUID gEfiComponentNameProtocolGuid; 121 #define ComponentNameProtocol gEfiComponentNameProtocolGuid 122 extern EFI_GUID gEfiComponentName2ProtocolGuid; 123 #define ComponentName2Protocol gEfiComponentName2ProtocolGuid 124 extern EFI_GUID gEfiHashProtocolGuid; 125 #define HashProtocol gEfiHashProtocolGuid 126 extern EFI_GUID gEfiPlatformDriverOverrideProtocolGuid; 127 #define PlatformDriverOverrideProtocol gEfiPlatformDriverOverrideProtocolGuid 128 extern EFI_GUID gEfiBusSpecificDriverOverrideProtocolGuid; 129 #define BusSpecificDriverOverrideProtocol gEfiBusSpecificDriverOverrideProtocolGuid 130 extern EFI_GUID gEfiDriverFamilyOverrideProtocolGuid; 131 #define DriverFamilyOverrideProtocol gEfiDriverFamilyOverrideProtocolGuid 132 extern EFI_GUID gEfiEbcProtocolGuid; 133 134 extern EFI_GUID gEfiGlobalVariableGuid; 135 #define EfiGlobalVariable gEfiGlobalVariableGuid 136 extern EFI_GUID gEfiFileInfoGuid; 137 #define GenericFileInfo gEfiFileInfoGuid 138 extern EFI_GUID gEfiFileSystemInfoGuid; 139 #define FileSystemInfo gEfiFileSystemInfoGuid 140 extern EFI_GUID gEfiFileSystemVolumeLabelInfoIdGuid; 141 #define FileSystemVolumeLabelInfo gEfiFileSystemVolumeLabelInfoIdGuid 142 extern EFI_GUID gEfiPcAnsiGuid; 143 #define PcAnsiProtocol gEfiPcAnsiGuid 144 extern EFI_GUID gEfiVT100Guid; 145 #define Vt100Protocol gEfiVT100Guid 146 extern EFI_GUID gEfiVT100PlusGuid; 147 extern EFI_GUID gEfiVTUTF8Guid; 148 149 extern EFI_GUID NullGuid; 150 extern EFI_GUID UnknownDevice; 151 152 extern EFI_GUID EfiPartTypeSystemPartitionGuid; 153 extern EFI_GUID EfiPartTypeLegacyMbrGuid; 154 155 extern EFI_GUID MpsTableGuid; 156 extern EFI_GUID AcpiTableGuid; 157 extern EFI_GUID SMBIOSTableGuid; 158 extern EFI_GUID SMBIOS3TableGuid; 159 extern EFI_GUID SalSystemTableGuid; 160 extern EFI_GUID EfiDtbTableGuid; 161 162 extern EFI_GUID SimplePointerProtocol; 163 extern EFI_GUID AbsolutePointerProtocol; 164 165 extern EFI_GUID gEfiDebugImageInfoTableGuid; 166 extern EFI_GUID gEfiDebugSupportProtocolGuid; 167 168 extern EFI_GUID SimpleTextInputExProtocol; 169 170 extern EFI_GUID ShellProtocolGuid; 171 extern EFI_GUID ShellParametersProtocolGuid; 172 extern EFI_GUID ShellDynamicCommandProtocolGuid; 173 174 // 175 // EFI Variable strings 176 // 177 #define LOAD_OPTION_ACTIVE 0x00000001 178 179 #define VarLanguageCodes L"LangCodes" 180 #define VarLanguage L"Lang" 181 #define VarTimeout L"Timeout" 182 #define VarConsoleInp L"ConIn" 183 #define VarConsoleOut L"ConOut" 184 #define VarErrorOut L"ErrOut" 185 #define VarBootOption L"Boot%04x" 186 #define VarBootOrder L"BootOrder" 187 #define VarBootNext L"BootNext" 188 #define VarBootCurrent L"BootCurrent" 189 #define VarDriverOption L"Driver%04x" 190 #define VarDriverOrder L"DriverOrder" 191 #define VarConsoleInpDev L"ConInDev" 192 #define VarConsoleOutDev L"ConOutDev" 193 #define VarErrorOutDev L"ErrOutDev" 194 195 #define LanguageCodeEnglish "eng" 196 197 extern EFI_DEVICE_PATH RootDevicePath[]; 198 extern EFI_DEVICE_PATH EndDevicePath[]; 199 extern EFI_DEVICE_PATH EndInstanceDevicePath[]; 200 201 // 202 // Other public data in the EFI library 203 // 204 205 extern EFI_MEMORY_TYPE PoolAllocationType; 206 207 // 208 // STATIC - Name is internal to the module 209 // INTERNAL - Name is internal to the component (i.e., directory) 210 // BOOTSERVCE - Name of a boot service function 211 // 212 213 #define STATIC 214 #define INTERNAL 215 #define BOOTSERVICE 216 217 // 218 // Prototypes 219 // 220 221 VOID 222 InitializeLib ( 223 IN EFI_HANDLE ImageHandle, 224 IN EFI_SYSTEM_TABLE *SystemTable 225 ); 226 227 VOID 228 InitializeUnicodeSupport ( 229 CHAR8 *LangCode 230 ); 231 232 VOID 233 EFIDebugVariable ( 234 VOID 235 ); 236 237 VOID 238 Exit( 239 IN EFI_STATUS ExitStatus, 240 IN UINTN ExitDataSize, 241 IN CHAR16 *ExitData OPTIONAL 242 ); 243 244 INTN 245 GetShellArgcArgv( 246 EFI_HANDLE ImageHandle, 247 CHAR16 **Argv[] /* Statically allocated */ 248 ); 249 250 VOID 251 SetCrc ( 252 IN OUT EFI_TABLE_HEADER *Hdr 253 ); 254 255 VOID 256 SetCrcAltSize ( 257 IN UINTN Size, 258 IN OUT EFI_TABLE_HEADER *Hdr 259 ); 260 261 BOOLEAN 262 CheckCrc ( 263 IN UINTN MaxSize, 264 IN OUT EFI_TABLE_HEADER *Hdr 265 ); 266 267 BOOLEAN 268 CheckCrcAltSize ( 269 IN UINTN MaxSize, 270 IN UINTN Size, 271 IN OUT EFI_TABLE_HEADER *Hdr 272 ); 273 274 UINT32 275 CalculateCrc ( 276 UINT8 *pt, 277 UINTN Size 278 ); 279 280 VOID 281 ZeroMem ( 282 IN VOID *Buffer, 283 IN UINTN Size 284 ); 285 286 VOID 287 SetMem ( 288 IN VOID *Buffer, 289 IN UINTN Size, 290 IN UINT8 Value 291 ); 292 293 VOID 294 CopyMem ( 295 IN VOID *Dest, 296 IN CONST VOID *Src, 297 IN UINTN len 298 ); 299 300 INTN 301 CompareMem ( 302 IN CONST VOID *Dest, 303 IN CONST VOID *Src, 304 IN UINTN len 305 ); 306 307 INTN 308 StrCmp ( 309 IN CONST CHAR16 *s1, 310 IN CONST CHAR16 *s2 311 ); 312 313 INTN 314 StrnCmp ( 315 IN CONST CHAR16 *s1, 316 IN CONST CHAR16 *s2, 317 IN UINTN len 318 ); 319 320 INTN 321 StriCmp ( 322 IN CONST CHAR16 *s1, 323 IN CONST CHAR16 *s2 324 ); 325 326 VOID 327 StrLwr ( 328 IN CHAR16 *Str 329 ); 330 331 VOID 332 StrUpr ( 333 IN CHAR16 *Str 334 ); 335 336 VOID 337 StrCpy ( 338 IN CHAR16 *Dest, 339 IN CONST CHAR16 *Src 340 ); 341 342 VOID 343 StrnCpy ( 344 IN CHAR16 *Dest, 345 IN CONST CHAR16 *Src, 346 IN UINTN Len 347 ); 348 349 CHAR16 * 350 StpCpy ( 351 IN CHAR16 *Dest, 352 IN CONST CHAR16 *Src 353 ); 354 355 CHAR16 * 356 StpnCpy ( 357 IN CHAR16 *Dest, 358 IN CONST CHAR16 *Src, 359 IN UINTN Len 360 ); 361 362 VOID 363 StrCat ( 364 IN CHAR16 *Dest, 365 IN CONST CHAR16 *Src 366 ); 367 368 VOID 369 StrnCat ( 370 IN CHAR16 *Dest, 371 IN CONST CHAR16 *Src, 372 IN UINTN Len 373 ); 374 375 UINTN 376 StrLen ( 377 IN CONST CHAR16 *s1 378 ); 379 380 UINTN 381 StrnLen ( 382 IN CONST CHAR16 *s1, 383 IN UINTN Len 384 ); 385 386 UINTN 387 StrSize ( 388 IN CONST CHAR16 *s1 389 ); 390 391 CHAR16 * 392 StrDuplicate ( 393 IN CONST CHAR16 *Src 394 ); 395 396 UINTN 397 strlena ( 398 IN CONST CHAR8 *s1 399 ); 400 401 UINTN 402 strcmpa ( 403 IN CONST CHAR8 *s1, 404 IN CONST CHAR8 *s2 405 ); 406 407 UINTN 408 strncmpa ( 409 IN CONST CHAR8 *s1, 410 IN CONST CHAR8 *s2, 411 IN UINTN len 412 ); 413 414 UINTN 415 xtoi ( 416 CONST CHAR16 *str 417 ); 418 419 UINTN 420 Atoi ( 421 CONST CHAR16 *str 422 ); 423 424 BOOLEAN 425 MetaMatch ( 426 IN CHAR16 *String, 427 IN CHAR16 *Pattern 428 ); 429 430 BOOLEAN 431 MetaiMatch ( 432 IN CHAR16 *String, 433 IN CHAR16 *Pattern 434 ); 435 436 UINT64 437 LShiftU64 ( 438 IN UINT64 Operand, 439 IN UINTN Count 440 ); 441 442 UINT64 443 RShiftU64 ( 444 IN UINT64 Operand, 445 IN UINTN Count 446 ); 447 448 UINT64 449 MultU64x32 ( 450 IN UINT64 Multiplicand, 451 IN UINTN Multiplier 452 ); 453 454 UINT64 455 DivU64x32 ( 456 IN UINT64 Dividend, 457 IN UINTN Divisor, 458 OUT UINTN *Remainder OPTIONAL 459 ); 460 461 VOID 462 InitializeLock ( 463 IN OUT FLOCK *Lock, 464 IN EFI_TPL Priority 465 ); 466 467 VOID 468 AcquireLock ( 469 IN FLOCK *Lock 470 ); 471 472 VOID 473 ReleaseLock ( 474 IN FLOCK *Lock 475 ); 476 477 478 INTN 479 CompareGuid( 480 IN EFI_GUID *Guid1, 481 IN EFI_GUID *Guid2 482 ); 483 484 VOID * 485 AllocatePool ( 486 IN UINTN Size 487 ); 488 489 VOID * 490 AllocateZeroPool ( 491 IN UINTN Size 492 ); 493 494 VOID * 495 ReallocatePool ( 496 IN VOID *OldPool, 497 IN UINTN OldSize, 498 IN UINTN NewSize 499 ); 500 501 VOID 502 FreePool ( 503 IN VOID *p 504 ); 505 506 507 VOID 508 Output ( 509 IN CHAR16 *Str 510 ); 511 512 VOID 513 Input ( 514 IN CHAR16 *Prompt OPTIONAL, 515 OUT CHAR16 *InStr, 516 IN UINTN StrLen 517 ); 518 519 VOID 520 IInput ( 521 IN SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut, 522 IN SIMPLE_INPUT_INTERFACE *ConIn, 523 IN CHAR16 *Prompt OPTIONAL, 524 OUT CHAR16 *InStr, 525 IN UINTN StrLen 526 ); 527 528 UINTN 529 Print ( 530 IN CONST CHAR16 *fmt, 531 ... 532 ); 533 534 UINTN 535 VPrint ( 536 IN CONST CHAR16 *fmt, 537 va_list args 538 ); 539 540 UINTN 541 UnicodeSPrint ( 542 OUT CHAR16 *Str, 543 IN UINTN StrSize, 544 IN CONST CHAR16 *fmt, 545 ... 546 ); 547 548 UINTN 549 UnicodeVSPrint ( 550 OUT CHAR16 *Str, 551 IN UINTN StrSize, 552 IN CONST CHAR16 *fmt, 553 va_list args 554 ); 555 556 CHAR16 * 557 VPoolPrint ( 558 IN CONST CHAR16 *fmt, 559 va_list args 560 ); 561 562 CHAR16 * 563 PoolPrint ( 564 IN CONST CHAR16 *fmt, 565 ... 566 ); 567 568 typedef struct { 569 CHAR16 *str; 570 UINTN len; 571 UINTN maxlen; 572 } POOL_PRINT; 573 574 CHAR16 * 575 CatPrint ( 576 IN OUT POOL_PRINT *Str, 577 IN CONST CHAR16 *fmt, 578 ... 579 ); 580 581 UINTN 582 PrintAt ( 583 IN UINTN Column, 584 IN UINTN Row, 585 IN CONST CHAR16 *fmt, 586 ... 587 ); 588 589 UINTN 590 IPrint ( 591 IN SIMPLE_TEXT_OUTPUT_INTERFACE *Out, 592 IN CONST CHAR16 *fmt, 593 ... 594 ); 595 596 UINTN 597 IPrintAt ( 598 IN SIMPLE_TEXT_OUTPUT_INTERFACE *Out, 599 IN UINTN Column, 600 IN UINTN Row, 601 IN CONST CHAR16 *fmt, 602 ... 603 ); 604 605 UINTN 606 AsciiPrint ( 607 IN CONST CHAR8 *fmt, 608 ... 609 ); 610 611 UINTN 612 AsciiVSPrint( 613 OUT CHAR8 *Str, 614 IN UINTN StrSize, 615 IN CONST CHAR8 *fmt, 616 va_list args 617 ); 618 619 // 620 // For compatibility with previous gnu-efi versions 621 // 622 #define SPrint UnicodeSPrint 623 #define VSPrint UnicodeVSPrint 624 #define APrint AsciiPrint 625 626 VOID 627 ValueToHex ( 628 IN CHAR16 *Buffer, 629 IN UINT64 v 630 ); 631 632 VOID 633 ValueToString ( 634 IN CHAR16 *Buffer, 635 IN BOOLEAN Comma, 636 IN INT64 v 637 ); 638 639 #ifndef __NetBSD__ 640 VOID 641 FloatToString ( 642 IN CHAR16 *Buffer, 643 IN BOOLEAN Comma, 644 IN double v 645 ); 646 #endif 647 648 VOID 649 TimeToString ( 650 OUT CHAR16 *Buffer, 651 IN EFI_TIME *Time 652 ); 653 654 VOID 655 GuidToString ( 656 OUT CHAR16 *Buffer, 657 IN EFI_GUID *Guid 658 ); 659 660 VOID 661 StatusToString ( 662 OUT CHAR16 *Buffer, 663 EFI_STATUS Status 664 ); 665 666 VOID 667 DumpHex ( 668 IN UINTN Indent, 669 IN UINTN Offset, 670 IN UINTN DataSize, 671 IN VOID *UserData 672 ); 673 674 BOOLEAN 675 GrowBuffer( 676 IN OUT EFI_STATUS *Status, 677 IN OUT VOID **Buffer, 678 IN UINTN BufferSize 679 ); 680 681 EFI_MEMORY_DESCRIPTOR * 682 LibMemoryMap ( 683 OUT UINTN *NoEntries, 684 OUT UINTN *MapKey, 685 OUT UINTN *DescriptorSize, 686 OUT UINT32 *DescriptorVersion 687 ); 688 689 VOID * 690 LibGetVariable ( 691 IN CHAR16 *Name, 692 IN EFI_GUID *VendorGuid 693 ); 694 695 VOID * 696 LibGetVariableAndSize ( 697 IN CHAR16 *Name, 698 IN EFI_GUID *VendorGuid, 699 OUT UINTN *VarSize 700 ); 701 702 EFI_STATUS 703 LibDeleteVariable ( 704 IN CHAR16 *VarName, 705 IN EFI_GUID *VarGuid 706 ); 707 708 EFI_STATUS 709 LibSetNVVariable ( 710 IN CHAR16 *VarName, 711 IN EFI_GUID *VarGuid, 712 IN UINTN DataSize, 713 IN VOID *Data 714 ); 715 716 EFI_STATUS 717 LibSetVariable ( 718 IN CHAR16 *VarName, 719 IN EFI_GUID *VarGuid, 720 IN UINTN DataSize, 721 IN VOID *Data 722 ); 723 EFI_STATUS 724 LibInsertToTailOfBootOrder ( 725 IN UINT16 BootOption, 726 IN BOOLEAN OnlyInsertIfEmpty 727 ); 728 729 EFI_STATUS 730 LibLocateProtocol ( 731 IN EFI_GUID *ProtocolGuid, 732 OUT VOID **Interface 733 ); 734 735 EFI_STATUS 736 LibLocateHandle ( 737 IN EFI_LOCATE_SEARCH_TYPE SearchType, 738 IN EFI_GUID *Protocol OPTIONAL, 739 IN VOID *SearchKey OPTIONAL, 740 IN OUT UINTN *NoHandles, 741 OUT EFI_HANDLE **Buffer 742 ); 743 744 EFI_STATUS 745 LibLocateHandleByDiskSignature ( 746 IN UINT8 MBRType, 747 IN UINT8 SignatureType, 748 IN VOID *Signature, 749 IN OUT UINTN *NoHandles, 750 OUT EFI_HANDLE **Buffer 751 ); 752 753 EFI_STATUS 754 LibInstallProtocolInterfaces ( 755 IN OUT EFI_HANDLE *Handle, 756 ... 757 ); 758 759 VOID 760 LibUninstallProtocolInterfaces ( 761 IN EFI_HANDLE Handle, 762 ... 763 ); 764 765 EFI_STATUS 766 LibReinstallProtocolInterfaces ( 767 IN OUT EFI_HANDLE *Handle, 768 ... 769 ); 770 771 EFI_EVENT 772 LibCreateProtocolNotifyEvent ( 773 IN EFI_GUID *ProtocolGuid, 774 IN EFI_TPL NotifyTpl, 775 IN EFI_EVENT_NOTIFY NotifyFunction, 776 IN VOID *NotifyContext, 777 OUT VOID *Registration 778 ); 779 780 EFI_STATUS 781 WaitForSingleEvent ( 782 IN EFI_EVENT Event, 783 IN UINT64 Timeout OPTIONAL 784 ); 785 786 VOID 787 WaitForEventWithTimeout ( 788 IN EFI_EVENT Event, 789 IN UINTN Timeout, 790 IN UINTN Row, 791 IN UINTN Column, 792 IN CHAR16 *String, 793 IN EFI_INPUT_KEY TimeoutKey, 794 OUT EFI_INPUT_KEY *Key 795 ); 796 797 EFI_FILE_HANDLE 798 LibOpenRoot ( 799 IN EFI_HANDLE DeviceHandle 800 ); 801 802 EFI_FILE_INFO * 803 LibFileInfo ( 804 IN EFI_FILE_HANDLE FHand 805 ); 806 807 EFI_FILE_SYSTEM_INFO * 808 LibFileSystemInfo ( 809 IN EFI_FILE_HANDLE FHand 810 ); 811 812 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO * 813 LibFileSystemVolumeLabelInfo ( 814 IN EFI_FILE_HANDLE FHand 815 ); 816 817 BOOLEAN 818 ValidMBR( 819 IN MASTER_BOOT_RECORD *Mbr, 820 IN EFI_BLOCK_IO *BlkIo 821 ); 822 823 BOOLEAN 824 LibMatchDevicePaths ( 825 IN EFI_DEVICE_PATH *Multi, 826 IN EFI_DEVICE_PATH *Single 827 ); 828 829 EFI_DEVICE_PATH * 830 LibDuplicateDevicePathInstance ( 831 IN EFI_DEVICE_PATH *DevPath 832 ); 833 834 EFI_DEVICE_PATH * 835 DevicePathFromHandle ( 836 IN EFI_HANDLE Handle 837 ); 838 839 EFI_DEVICE_PATH * 840 DevicePathInstance ( 841 IN OUT EFI_DEVICE_PATH **DevicePath, 842 OUT UINTN *Size 843 ); 844 845 UINTN 846 DevicePathInstanceCount ( 847 IN EFI_DEVICE_PATH *DevicePath 848 ); 849 850 EFI_DEVICE_PATH * 851 AppendDevicePath ( 852 IN EFI_DEVICE_PATH *Src1, 853 IN EFI_DEVICE_PATH *Src2 854 ); 855 856 EFI_DEVICE_PATH * 857 AppendDevicePathNode ( 858 IN EFI_DEVICE_PATH *Src1, 859 IN EFI_DEVICE_PATH *Src2 860 ); 861 862 EFI_DEVICE_PATH* 863 AppendDevicePathInstance ( 864 IN EFI_DEVICE_PATH *Src, 865 IN EFI_DEVICE_PATH *Instance 866 ); 867 868 EFI_DEVICE_PATH * 869 FileDevicePath ( 870 IN EFI_HANDLE Device OPTIONAL, 871 IN CHAR16 *FileName 872 ); 873 874 UINTN 875 DevicePathSize ( 876 IN EFI_DEVICE_PATH *DevPath 877 ); 878 879 EFI_DEVICE_PATH * 880 DuplicateDevicePath ( 881 IN EFI_DEVICE_PATH *DevPath 882 ); 883 884 EFI_DEVICE_PATH * 885 UnpackDevicePath ( 886 IN EFI_DEVICE_PATH *DevPath 887 ); 888 889 EFI_STATUS 890 LibDevicePathToInterface ( 891 IN EFI_GUID *Protocol, 892 IN EFI_DEVICE_PATH *FilePath, 893 OUT VOID **Interface 894 ); 895 896 CHAR16 * 897 DevicePathToStr ( 898 EFI_DEVICE_PATH *DevPath 899 ); 900 901 // 902 // BugBug: I need my own include files 903 // 904 typedef struct { 905 UINT8 Register; 906 UINT8 Function; 907 UINT8 Device; 908 UINT8 Bus; 909 UINT32 Reserved; 910 } EFI_ADDRESS; 911 912 typedef union { 913 UINT64 Address; 914 EFI_ADDRESS EfiAddress; 915 } EFI_PCI_ADDRESS_UNION; 916 917 918 EFI_STATUS 919 PciFindDeviceClass ( 920 IN OUT EFI_PCI_ADDRESS_UNION *Address, 921 IN UINT8 BaseClass, 922 IN UINT8 SubClass 923 ); 924 925 EFI_STATUS 926 PciFindDevice ( 927 IN OUT EFI_PCI_ADDRESS_UNION *DeviceAddress, 928 IN UINT16 VendorId, 929 IN UINT16 DeviceId, 930 IN OUT PCI_TYPE00 *Pci 931 ); 932 933 // 934 // SIMPLE_READ_FILE object used to access files 935 // 936 937 typedef VOID *SIMPLE_READ_FILE; 938 939 EFI_STATUS 940 OpenSimpleReadFile ( 941 IN BOOLEAN BootPolicy, 942 IN VOID *SourceBuffer OPTIONAL, 943 IN UINTN SourceSize, 944 IN OUT EFI_DEVICE_PATH **FilePath, 945 OUT EFI_HANDLE *DeviceHandle, 946 OUT SIMPLE_READ_FILE *SimpleReadHandle 947 ); 948 949 EFI_STATUS 950 ReadSimpleReadFile ( 951 IN SIMPLE_READ_FILE SimpleReadHandle, 952 IN UINTN Offset, 953 IN OUT UINTN *ReadSize, 954 OUT VOID *Buffer 955 ); 956 957 958 VOID 959 CloseSimpleReadFile ( 960 IN SIMPLE_READ_FILE SimpleReadHandle 961 ); 962 963 VOID 964 InitializeGuid ( 965 VOID 966 ); 967 968 UINT8 969 DecimaltoBCD( 970 IN UINT8 DecValue 971 ); 972 973 UINT8 974 BCDtoDecimal( 975 IN UINT8 BcdValue 976 ); 977 978 EFI_STATUS 979 LibGetSystemConfigurationTable( 980 IN EFI_GUID *TableGuid, 981 IN OUT VOID **Table 982 ); 983 984 BOOLEAN 985 LibIsValidTextGraphics ( 986 IN CHAR16 Graphic, 987 OUT CHAR8 *PcAnsi, OPTIONAL 988 OUT CHAR8 *Ascii OPTIONAL 989 ); 990 991 BOOLEAN 992 IsValidAscii ( 993 IN CHAR16 Ascii 994 ); 995 996 BOOLEAN 997 IsValidEfiCntlChar ( 998 IN CHAR16 c 999 ); 1000 1001 CHAR16 * 1002 LibGetUiString ( 1003 IN EFI_HANDLE Handle, 1004 IN UI_STRING_TYPE StringType, 1005 IN ISO_639_2 *LangCode, 1006 IN BOOLEAN ReturnDevicePathStrOnMismatch 1007 ); 1008 1009 CHAR8* 1010 LibGetSmbiosString ( 1011 IN SMBIOS_STRUCTURE_POINTER *Smbios, 1012 IN UINT16 StringNumber 1013 ); 1014 1015 EFI_STATUS 1016 LibGetSmbiosSystemGuidAndSerialNumber ( 1017 IN EFI_GUID *SystemGuid, 1018 OUT CHAR8 **SystemSerialNumber 1019 ); 1020 1021 1022 EFI_STATUS 1023 InitializeGlobalIoDevice ( 1024 IN EFI_DEVICE_PATH *DevicePath, 1025 IN EFI_GUID *Protocol, 1026 IN CHAR8 *ErrorStr, 1027 OUT EFI_DEVICE_IO_INTERFACE **GlobalIoFncs 1028 ); 1029 1030 UINT32 1031 ReadPort ( 1032 IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs, 1033 IN EFI_IO_WIDTH Width, 1034 IN UINTN Port 1035 ); 1036 1037 UINT32 1038 WritePort ( 1039 IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs, 1040 IN EFI_IO_WIDTH Width, 1041 IN UINTN Port, 1042 IN UINTN Data 1043 ); 1044 1045 UINT32 1046 ReadPciConfig ( 1047 IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs, 1048 IN EFI_IO_WIDTH Width, 1049 IN UINTN Port 1050 ); 1051 1052 UINT32 1053 WritePciConfig ( 1054 IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs, 1055 IN EFI_IO_WIDTH Width, 1056 IN UINTN Port, 1057 IN UINTN Data 1058 ); 1059 1060 VOID 1061 Pause ( 1062 VOID 1063 ); 1064 1065 extern EFI_DEVICE_IO_INTERFACE *GlobalIoFncs; 1066 1067 #define outp(_Port, _DataByte) (UINT8)WritePort(GlobalIoFncs, IO_UINT8, (UINTN)_Port, (UINTN)_DataByte) 1068 #define inp(_Port) (UINT8)ReadPort(GlobalIoFncs, IO_UINT8, (UINTN)_Port) 1069 #define outpw(_Port, _DataByte) (UINT16)WritePort(GlobalIoFncs, IO_UINT16, (UINTN)_Port, (UINTN)_DataByte) 1070 #define inpw(_Port) (UINT16)ReadPort(GlobalIoFncs, IO_UINT16, (UINTN)_Port) 1071 #define outpd(_Port, _DataByte) (UINT32)WritePort(GlobalIoFncs, IO_UINT32, (UINTN)_Port, (UINTN)_DataByte) 1072 #define inpd(_Port) (UINT32)ReadPort(GlobalIoFncs, IO_UINT32, (UINTN)_Port) 1073 1074 #define writepci8(_Addr, _DataByte) (UINT8)WritePciConfig(GlobalIoFncs, IO_UINT8, (UINTN)_Addr, (UINTN)_DataByte) 1075 #define readpci8(_Addr) (UINT8)ReadPciConfig(GlobalIoFncs, IO_UINT8, (UINTN)_Addr) 1076 #define writepci16(_Addr, _DataByte) (UINT16)WritePciConfig(GlobalIoFncs, IO_UINT16, (UINTN)_Addr, (UINTN)_DataByte) 1077 #define readpci16(_Addr) (UINT16)ReadPciConfig(GlobalIoFncs, IO_UINT16, (UINTN)_Addr) 1078 #define writepci32(_Addr, _DataByte) (UINT32)WritePciConfig(GlobalIoFncs, IO_UINT32, (UINTN)_Addr, (UINTN)_DataByte) 1079 #define readpci32(_Addr) (UINT32)ReadPciConfig(GlobalIoFncs, IO_UINT32, (UINTN)_Addr) 1080 1081 #define Port80(_PostCode) GlobalIoFncs->Io.Write (GlobalIoFncs, IO_UINT16, (UINT64)0x80, 1, &(_PostCode)) 1082 1083 #endif 1084