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