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