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