Home | History | Annotate | Line # | Download | only in inc
efilib.h revision 1.1
      1 /*	$NetBSD: efilib.h,v 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