Home | History | Annotate | Download | only in inc
      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