Home | History | Annotate | Line # | Download | only in inc
      1 /*	$NetBSD: efilib.h,v 1.3 2021/09/30 19:02:47 jmcneill 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 #if defined(_M_X64) || defined(__x86_64__) || defined(__amd64__)
     27 #include "x86_64/efilibplat.h"
     28 #elif defined(_M_IX86) || defined(__i386__)
     29 #include "ia32/efilibplat.h"
     30 #elif defined(_M_IA64) || defined(__ia64__)
     31 #include "ia64/efilibplat.h"
     32 #elif defined (_M_ARM64) || defined(__aarch64__)
     33 #include "aarch64/efilibplat.h"
     34 #elif defined (_M_ARM) || defined(__arm__)
     35 #include "arm/efilibplat.h"
     36 #elif defined (_M_MIPS64) || defined(__mips64__)
     37 #include "mips64el/efilibplat.h"
     38 #elif defined (__riscv) && __riscv_xlen == 64
     39 #include "riscv64/efilibplat.h"
     40 #endif
     41 #include "efilink.h"
     42 #include "efirtlib.h"
     43 #include "efistdarg.h"
     44 #include "pci22.h"
     45 #include "libsmbios.h"
     46 
     47 //
     48 // Public read-only data in the EFI library
     49 //
     50 
     51 extern EFI_SYSTEM_TABLE         *ST;
     52 #define gST                      ST
     53 extern EFI_BOOT_SERVICES        *BS;
     54 #define gBS                      BS
     55 extern EFI_RUNTIME_SERVICES     *RT;
     56 #define gRT                      RT
     57 
     58 extern EFI_GUID gEfiDevicePathProtocolGuid;
     59 #define DevicePathProtocol gEfiDevicePathProtocolGuid
     60 extern EFI_GUID gEfiDevicePathToTextProtocolGuid;
     61 #define DevicePathToTextProtocol gEfiDevicePathToTextProtocolGuid
     62 extern EFI_GUID gEfiDevicePathFromTextProtocolGuid;
     63 #define DevicePathFromTextProtocol gEfiDevicePathFromTextProtocolGuid
     64 extern EFI_GUID gEfiDevicePathUtilitiesProtocolGuid;
     65 #define DevicePathUtilitiesProtocol gEfiDevicePathUtilitiesProtocolGuid
     66 extern EFI_GUID gEfiLoadedImageProtocolGuid;
     67 #define LoadedImageProtocol gEfiLoadedImageProtocolGuid
     68 extern EFI_GUID gEfiSimpleTextInProtocolGuid;
     69 #define TextInProtocol gEfiSimpleTextInProtocolGuid
     70 extern EFI_GUID gEfiSimpleTextOutProtocolGuid;
     71 #define TextOutProtocol gEfiSimpleTextOutProtocolGuid
     72 extern EFI_GUID gEfiGraphicsOutputProtocolGuid;
     73 #define GraphicsOutputProtocol gEfiGraphicsOutputProtocolGuid
     74 extern EFI_GUID gEfiEdidDiscoveredProtocolGuid;
     75 #define EdidDiscoveredProtocol gEfiEdidDiscoveredProtocolGuid
     76 extern EFI_GUID gEfiEdidActiveProtocolGuid;
     77 #define EdidActiveProtocol gEfiEdidActiveProtocolGuid
     78 extern EFI_GUID gEfiEdidOverrideProtocolGuid;
     79 #define EdidOverrideProtocol gEfiEdidOverrideProtocolGuid
     80 extern EFI_GUID gEfiBlockIoProtocolGuid;
     81 #define BlockIoProtocol gEfiBlockIoProtocolGuid
     82 extern EFI_GUID gEfiBlockIo2ProtocolGuid;
     83 #define BlockIo2Protocol gEfiBlockIo2ProtocolGuid
     84 extern EFI_GUID gEfiDiskIoProtocolGuid;
     85 #define DiskIoProtocol gEfiDiskIoProtocolGuid
     86 extern EFI_GUID gEfiDiskIo2ProtocolGuid;
     87 #define DiskIo2Protocol gEfiDiskIo2ProtocolGuid
     88 extern EFI_GUID gEfiSimpleFileSystemProtocolGuid;
     89 #define FileSystemProtocol gEfiSimpleFileSystemProtocolGuid
     90 extern EFI_GUID gEfiLoadFileProtocolGuid;
     91 #define LoadFileProtocol gEfiLoadFileProtocolGuid
     92 extern EFI_GUID gEfiDeviceIoProtocolGuid;
     93 #define DeviceIoProtocol gEfiDeviceIoProtocolGuid
     94 extern EFI_GUID VariableStoreProtocol;
     95 extern EFI_GUID LegacyBootProtocol;
     96 extern EFI_GUID gEfiUnicodeCollationProtocolGuid;
     97 #define UnicodeCollationProtocol gEfiUnicodeCollationProtocolGuid
     98 extern EFI_GUID gEfiSerialIoProtocolGuid;
     99 #define SerialIoProtocol gEfiSerialIoProtocolGuid
    100 extern EFI_GUID VgaClassProtocol;
    101 extern EFI_GUID TextOutSpliterProtocol;
    102 extern EFI_GUID ErrorOutSpliterProtocol;
    103 extern EFI_GUID TextInSpliterProtocol;
    104 extern EFI_GUID gEfiSimpleNetworkProtocolGuid;
    105 #define SimpleNetworkProtocol gEfiSimpleNetworkProtocolGuid
    106 extern EFI_GUID gEfiPxeBaseCodeProtocolGuid;
    107 #define PxeBaseCodeProtocol gEfiPxeBaseCodeProtocolGuid
    108 extern EFI_GUID gEfiPxeBaseCodeCallbackProtocolGuid;
    109 #define PxeCallbackProtocol gEfiPxeBaseCodeCallbackProtocolGuid
    110 extern EFI_GUID gEfiNetworkInterfaceIdentifierProtocolGuid;
    111 #define NetworkInterfaceIdentifierProtocol gEfiNetworkInterfaceIdentifierProtocolGuid
    112 extern EFI_GUID gEFiUiInterfaceProtocolGuid;
    113 #define UiProtocol gEFiUiInterfaceProtocolGuid
    114 extern EFI_GUID InternalShellProtocol;
    115 extern EFI_GUID gEfiPciIoProtocolGuid;
    116 #define PciIoProtocol gEfiPciIoProtocolGuid
    117 extern EFI_GUID gEfiPciRootBridgeIoProtocolGuid;
    118 extern EFI_GUID gEfiDriverBindingProtocolGuid;
    119 #define DriverBindingProtocol gEfiDriverBindingProtocolGuid
    120 extern EFI_GUID gEfiComponentNameProtocolGuid;
    121 #define ComponentNameProtocol gEfiComponentNameProtocolGuid
    122 extern EFI_GUID gEfiComponentName2ProtocolGuid;
    123 #define ComponentName2Protocol gEfiComponentName2ProtocolGuid
    124 extern EFI_GUID gEfiHashProtocolGuid;
    125 #define HashProtocol gEfiHashProtocolGuid
    126 extern EFI_GUID gEfiPlatformDriverOverrideProtocolGuid;
    127 #define PlatformDriverOverrideProtocol gEfiPlatformDriverOverrideProtocolGuid
    128 extern EFI_GUID gEfiBusSpecificDriverOverrideProtocolGuid;
    129 #define BusSpecificDriverOverrideProtocol gEfiBusSpecificDriverOverrideProtocolGuid
    130 extern EFI_GUID gEfiDriverFamilyOverrideProtocolGuid;
    131 #define DriverFamilyOverrideProtocol gEfiDriverFamilyOverrideProtocolGuid
    132 extern EFI_GUID gEfiEbcProtocolGuid;
    133 
    134 extern EFI_GUID gEfiGlobalVariableGuid;
    135 #define EfiGlobalVariable gEfiGlobalVariableGuid
    136 extern EFI_GUID gEfiFileInfoGuid;
    137 #define GenericFileInfo gEfiFileInfoGuid
    138 extern EFI_GUID gEfiFileSystemInfoGuid;
    139 #define FileSystemInfo gEfiFileSystemInfoGuid
    140 extern EFI_GUID gEfiFileSystemVolumeLabelInfoIdGuid;
    141 #define FileSystemVolumeLabelInfo gEfiFileSystemVolumeLabelInfoIdGuid
    142 extern EFI_GUID gEfiPcAnsiGuid;
    143 #define PcAnsiProtocol gEfiPcAnsiGuid
    144 extern EFI_GUID gEfiVT100Guid;
    145 #define Vt100Protocol gEfiVT100Guid
    146 extern EFI_GUID gEfiVT100PlusGuid;
    147 extern EFI_GUID gEfiVTUTF8Guid;
    148 
    149 extern EFI_GUID NullGuid;
    150 extern EFI_GUID UnknownDevice;
    151 
    152 extern EFI_GUID EfiPartTypeSystemPartitionGuid;
    153 extern EFI_GUID EfiPartTypeLegacyMbrGuid;
    154 
    155 extern EFI_GUID MpsTableGuid;
    156 extern EFI_GUID AcpiTableGuid;
    157 extern EFI_GUID SMBIOSTableGuid;
    158 extern EFI_GUID SMBIOS3TableGuid;
    159 extern EFI_GUID SalSystemTableGuid;
    160 extern EFI_GUID EfiDtbTableGuid;
    161 
    162 extern EFI_GUID SimplePointerProtocol;
    163 extern EFI_GUID AbsolutePointerProtocol;
    164 
    165 extern EFI_GUID gEfiDebugImageInfoTableGuid;
    166 extern EFI_GUID gEfiDebugSupportProtocolGuid;
    167 
    168 extern EFI_GUID SimpleTextInputExProtocol;
    169 
    170 extern EFI_GUID ShellProtocolGuid;
    171 extern EFI_GUID ShellParametersProtocolGuid;
    172 extern EFI_GUID ShellDynamicCommandProtocolGuid;
    173 
    174 //
    175 // EFI Variable strings
    176 //
    177 #define LOAD_OPTION_ACTIVE      0x00000001
    178 
    179 #define VarLanguageCodes       L"LangCodes"
    180 #define VarLanguage            L"Lang"
    181 #define VarTimeout             L"Timeout"
    182 #define VarConsoleInp          L"ConIn"
    183 #define VarConsoleOut          L"ConOut"
    184 #define VarErrorOut            L"ErrOut"
    185 #define VarBootOption          L"Boot%04x"
    186 #define VarBootOrder           L"BootOrder"
    187 #define VarBootNext            L"BootNext"
    188 #define VarBootCurrent         L"BootCurrent"
    189 #define VarDriverOption        L"Driver%04x"
    190 #define VarDriverOrder         L"DriverOrder"
    191 #define VarConsoleInpDev       L"ConInDev"
    192 #define VarConsoleOutDev       L"ConOutDev"
    193 #define VarErrorOutDev         L"ErrOutDev"
    194 
    195 #define LanguageCodeEnglish    "eng"
    196 
    197 extern EFI_DEVICE_PATH RootDevicePath[];
    198 extern EFI_DEVICE_PATH EndDevicePath[];
    199 extern EFI_DEVICE_PATH EndInstanceDevicePath[];
    200 
    201 //
    202 // Other public data in the EFI library
    203 //
    204 
    205 extern EFI_MEMORY_TYPE PoolAllocationType;
    206 
    207 //
    208 // STATIC - Name is internal to the module
    209 // INTERNAL - Name is internal to the component (i.e., directory)
    210 // BOOTSERVCE - Name of a boot service function
    211 //
    212 
    213 #define STATIC
    214 #define INTERNAL
    215 #define BOOTSERVICE
    216 
    217 //
    218 // Prototypes
    219 //
    220 
    221 VOID
    222 InitializeLib (
    223     IN EFI_HANDLE           ImageHandle,
    224     IN EFI_SYSTEM_TABLE     *SystemTable
    225     );
    226 
    227 VOID
    228 InitializeUnicodeSupport (
    229     CHAR8 *LangCode
    230     );
    231 
    232 VOID
    233 EFIDebugVariable (
    234     VOID
    235     );
    236 
    237 VOID
    238 Exit(
    239     IN EFI_STATUS   ExitStatus,
    240     IN UINTN        ExitDataSize,
    241     IN CHAR16       *ExitData OPTIONAL
    242     );
    243 
    244 INTN
    245 GetShellArgcArgv(
    246     EFI_HANDLE ImageHandle,
    247     CHAR16 **Argv[]  /* Statically allocated */
    248     );
    249 
    250 VOID
    251 SetCrc (
    252     IN OUT EFI_TABLE_HEADER *Hdr
    253     );
    254 
    255 VOID
    256 SetCrcAltSize (
    257     IN UINTN                 Size,
    258     IN OUT EFI_TABLE_HEADER *Hdr
    259     );
    260 
    261 BOOLEAN
    262 CheckCrc (
    263     IN UINTN                 MaxSize,
    264     IN OUT EFI_TABLE_HEADER *Hdr
    265     );
    266 
    267 BOOLEAN
    268 CheckCrcAltSize (
    269     IN UINTN                 MaxSize,
    270     IN UINTN                 Size,
    271     IN OUT EFI_TABLE_HEADER *Hdr
    272     );
    273 
    274 UINT32
    275 CalculateCrc (
    276     UINT8 *pt,
    277     UINTN Size
    278     );
    279 
    280 VOID
    281 ZeroMem (
    282     IN VOID     *Buffer,
    283     IN UINTN     Size
    284     );
    285 
    286 VOID
    287 SetMem (
    288     IN VOID     *Buffer,
    289     IN UINTN    Size,
    290     IN UINT8    Value
    291     );
    292 
    293 VOID
    294 CopyMem (
    295     IN VOID     *Dest,
    296     IN CONST VOID     *Src,
    297     IN UINTN    len
    298     );
    299 
    300 INTN
    301 CompareMem (
    302     IN CONST VOID     *Dest,
    303     IN CONST VOID     *Src,
    304     IN UINTN    len
    305     );
    306 
    307 INTN
    308 StrCmp (
    309     IN CONST CHAR16   *s1,
    310     IN CONST CHAR16   *s2
    311     );
    312 
    313 INTN
    314 StrnCmp (
    315     IN CONST CHAR16   *s1,
    316     IN CONST CHAR16   *s2,
    317     IN UINTN    len
    318     );
    319 
    320 INTN
    321 StriCmp (
    322     IN CONST CHAR16   *s1,
    323     IN CONST CHAR16   *s2
    324     );
    325 
    326 VOID
    327 StrLwr (
    328     IN CHAR16   *Str
    329     );
    330 
    331 VOID
    332 StrUpr (
    333     IN CHAR16   *Str
    334     );
    335 
    336 VOID
    337 StrCpy (
    338     IN CHAR16   *Dest,
    339     IN CONST CHAR16    *Src
    340     );
    341 
    342 VOID
    343 StrnCpy (
    344     IN CHAR16   *Dest,
    345     IN CONST CHAR16    *Src,
    346     IN UINTN     Len
    347     );
    348 
    349 CHAR16 *
    350 StpCpy (
    351     IN CHAR16   *Dest,
    352     IN CONST CHAR16    *Src
    353     );
    354 
    355 CHAR16 *
    356 StpnCpy (
    357     IN CHAR16   *Dest,
    358     IN CONST CHAR16    *Src,
    359     IN UINTN     Len
    360     );
    361 
    362 VOID
    363 StrCat (
    364     IN CHAR16   *Dest,
    365     IN CONST CHAR16   *Src
    366     );
    367 
    368 VOID
    369 StrnCat (
    370     IN CHAR16   *Dest,
    371     IN CONST CHAR16   *Src,
    372     IN UINTN     Len
    373     );
    374 
    375 UINTN
    376 StrLen (
    377     IN CONST CHAR16   *s1
    378     );
    379 
    380 UINTN
    381 StrnLen (
    382     IN CONST CHAR16   *s1,
    383     IN UINTN           Len
    384     );
    385 
    386 UINTN
    387 StrSize (
    388     IN CONST CHAR16   *s1
    389     );
    390 
    391 CHAR16 *
    392 StrDuplicate (
    393     IN CONST CHAR16   *Src
    394     );
    395 
    396 UINTN
    397 strlena (
    398     IN CONST CHAR8    *s1
    399     );
    400 
    401 UINTN
    402 strcmpa (
    403     IN CONST CHAR8    *s1,
    404     IN CONST CHAR8    *s2
    405     );
    406 
    407 UINTN
    408 strncmpa (
    409     IN CONST CHAR8    *s1,
    410     IN CONST CHAR8    *s2,
    411     IN UINTN    len
    412     );
    413 
    414 UINTN
    415 xtoi (
    416     CONST CHAR16      *str
    417     );
    418 
    419 UINTN
    420 Atoi (
    421     CONST CHAR16  *str
    422     );
    423 
    424 BOOLEAN
    425 MetaMatch (
    426     IN CHAR16   *String,
    427     IN CHAR16   *Pattern
    428     );
    429 
    430 BOOLEAN
    431 MetaiMatch (
    432     IN CHAR16   *String,
    433     IN CHAR16   *Pattern
    434     );
    435 
    436 UINT64
    437 LShiftU64 (
    438     IN UINT64   Operand,
    439     IN UINTN    Count
    440     );
    441 
    442 UINT64
    443 RShiftU64 (
    444     IN UINT64   Operand,
    445     IN UINTN    Count
    446     );
    447 
    448 UINT64
    449 MultU64x32 (
    450     IN UINT64   Multiplicand,
    451     IN UINTN    Multiplier
    452     );
    453 
    454 UINT64
    455 DivU64x32 (
    456     IN UINT64   Dividend,
    457     IN UINTN    Divisor,
    458     OUT UINTN   *Remainder OPTIONAL
    459     );
    460 
    461 VOID
    462 InitializeLock (
    463     IN OUT FLOCK    *Lock,
    464     IN EFI_TPL  Priority
    465     );
    466 
    467 VOID
    468 AcquireLock (
    469     IN FLOCK    *Lock
    470     );
    471 
    472 VOID
    473 ReleaseLock (
    474     IN FLOCK    *Lock
    475     );
    476 
    477 
    478 INTN
    479 CompareGuid(
    480     IN EFI_GUID     *Guid1,
    481     IN EFI_GUID     *Guid2
    482     );
    483 
    484 VOID *
    485 AllocatePool (
    486     IN UINTN     Size
    487     );
    488 
    489 VOID *
    490 AllocateZeroPool (
    491     IN UINTN     Size
    492     );
    493 
    494 VOID *
    495 ReallocatePool (
    496     IN VOID                 *OldPool,
    497     IN UINTN                OldSize,
    498     IN UINTN                NewSize
    499     );
    500 
    501 VOID
    502 FreePool (
    503     IN VOID     *p
    504     );
    505 
    506 
    507 VOID
    508 Output (
    509     IN CHAR16   *Str
    510     );
    511 
    512 VOID
    513 Input (
    514     IN CHAR16   *Prompt OPTIONAL,
    515     OUT CHAR16  *InStr,
    516     IN UINTN    StrLen
    517     );
    518 
    519 VOID
    520 IInput (
    521     IN SIMPLE_TEXT_OUTPUT_INTERFACE     *ConOut,
    522     IN SIMPLE_INPUT_INTERFACE           *ConIn,
    523     IN CHAR16                           *Prompt OPTIONAL,
    524     OUT CHAR16                          *InStr,
    525     IN UINTN                            StrLen
    526     );
    527 
    528 UINTN
    529 Print (
    530     IN CONST CHAR16   *fmt,
    531     ...
    532     );
    533 
    534 UINTN
    535 VPrint (
    536     IN CONST CHAR16   *fmt,
    537     va_list           args
    538     );
    539 
    540 UINTN
    541 UnicodeSPrint (
    542     OUT CHAR16        *Str,
    543     IN UINTN          StrSize,
    544     IN CONST CHAR16   *fmt,
    545     ...
    546     );
    547 
    548 UINTN
    549 UnicodeVSPrint (
    550     OUT CHAR16        *Str,
    551     IN UINTN          StrSize,
    552     IN CONST CHAR16   *fmt,
    553     va_list           args
    554     );
    555 
    556 CHAR16 *
    557 VPoolPrint (
    558     IN CONST CHAR16     *fmt,
    559     va_list             args
    560     );
    561 
    562 CHAR16 *
    563 PoolPrint (
    564     IN CONST CHAR16     *fmt,
    565     ...
    566     );
    567 
    568 typedef struct {
    569     CHAR16      *str;
    570     UINTN       len;
    571     UINTN       maxlen;
    572 } POOL_PRINT;
    573 
    574 CHAR16 *
    575 CatPrint (
    576     IN OUT POOL_PRINT   *Str,
    577     IN CONST CHAR16     *fmt,
    578     ...
    579     );
    580 
    581 UINTN
    582 PrintAt (
    583     IN UINTN         Column,
    584     IN UINTN         Row,
    585     IN CONST CHAR16  *fmt,
    586     ...
    587     );
    588 
    589 UINTN
    590 IPrint (
    591     IN SIMPLE_TEXT_OUTPUT_INTERFACE    *Out,
    592     IN CONST CHAR16                    *fmt,
    593     ...
    594     );
    595 
    596 UINTN
    597 IPrintAt (
    598     IN SIMPLE_TEXT_OUTPUT_INTERFACE     *Out,
    599     IN UINTN                            Column,
    600     IN UINTN                            Row,
    601     IN CONST CHAR16                     *fmt,
    602     ...
    603     );
    604 
    605 UINTN
    606 AsciiPrint (
    607     IN CONST CHAR8    *fmt,
    608     ...
    609     );
    610 
    611 UINTN
    612 AsciiVSPrint(
    613     OUT CHAR8         *Str,
    614     IN  UINTN         StrSize,
    615     IN  CONST CHAR8   *fmt,
    616     va_list           args
    617 );
    618 
    619 //
    620 // For compatibility with previous gnu-efi versions
    621 //
    622 #define SPrint      UnicodeSPrint
    623 #define VSPrint     UnicodeVSPrint
    624 #define APrint      AsciiPrint
    625 
    626 VOID
    627 ValueToHex (
    628     IN CHAR16   *Buffer,
    629     IN UINT64   v
    630     );
    631 
    632 VOID
    633 ValueToString (
    634     IN CHAR16   *Buffer,
    635     IN BOOLEAN  Comma,
    636     IN INT64    v
    637     );
    638 
    639 #ifndef __NetBSD__
    640 VOID
    641 FloatToString (
    642     IN CHAR16   *Buffer,
    643     IN BOOLEAN  Comma,
    644     IN double    v
    645     );
    646 #endif
    647 
    648 VOID
    649 TimeToString (
    650     OUT CHAR16      *Buffer,
    651     IN EFI_TIME     *Time
    652     );
    653 
    654 VOID
    655 GuidToString (
    656     OUT CHAR16      *Buffer,
    657     IN EFI_GUID     *Guid
    658     );
    659 
    660 VOID
    661 StatusToString (
    662     OUT CHAR16      *Buffer,
    663     EFI_STATUS      Status
    664     );
    665 
    666 VOID
    667 DumpHex (
    668     IN UINTN        Indent,
    669     IN UINTN        Offset,
    670     IN UINTN        DataSize,
    671     IN VOID         *UserData
    672     );
    673 
    674 BOOLEAN
    675 GrowBuffer(
    676     IN OUT EFI_STATUS   *Status,
    677     IN OUT VOID         **Buffer,
    678     IN UINTN            BufferSize
    679     );
    680 
    681 EFI_MEMORY_DESCRIPTOR *
    682 LibMemoryMap (
    683     OUT UINTN               *NoEntries,
    684     OUT UINTN               *MapKey,
    685     OUT UINTN               *DescriptorSize,
    686     OUT UINT32              *DescriptorVersion
    687     );
    688 
    689 VOID *
    690 LibGetVariable (
    691     IN CHAR16               *Name,
    692     IN EFI_GUID             *VendorGuid
    693     );
    694 
    695 VOID *
    696 LibGetVariableAndSize (
    697     IN CHAR16               *Name,
    698     IN EFI_GUID             *VendorGuid,
    699     OUT UINTN               *VarSize
    700     );
    701 
    702 EFI_STATUS
    703 LibDeleteVariable (
    704     IN CHAR16   *VarName,
    705     IN EFI_GUID *VarGuid
    706     );
    707 
    708 EFI_STATUS
    709 LibSetNVVariable (
    710     IN CHAR16   *VarName,
    711     IN EFI_GUID *VarGuid,
    712     IN UINTN	 DataSize,
    713     IN VOID     *Data
    714     );
    715 
    716 EFI_STATUS
    717 LibSetVariable (
    718     IN CHAR16   *VarName,
    719     IN EFI_GUID *VarGuid,
    720     IN UINTN	 DataSize,
    721     IN VOID     *Data
    722     );
    723 EFI_STATUS
    724 LibInsertToTailOfBootOrder (
    725     IN  UINT16  BootOption,
    726     IN  BOOLEAN OnlyInsertIfEmpty
    727     );
    728 
    729 EFI_STATUS
    730 LibLocateProtocol (
    731     IN  EFI_GUID    *ProtocolGuid,
    732     OUT VOID        **Interface
    733     );
    734 
    735 EFI_STATUS
    736 LibLocateHandle (
    737     IN EFI_LOCATE_SEARCH_TYPE   SearchType,
    738     IN EFI_GUID                 *Protocol OPTIONAL,
    739     IN VOID                     *SearchKey OPTIONAL,
    740     IN OUT UINTN                *NoHandles,
    741     OUT EFI_HANDLE              **Buffer
    742     );
    743 
    744 EFI_STATUS
    745 LibLocateHandleByDiskSignature (
    746     IN UINT8                        MBRType,
    747     IN UINT8                        SignatureType,
    748     IN VOID                         *Signature,
    749     IN OUT UINTN                    *NoHandles,
    750     OUT EFI_HANDLE                  **Buffer
    751     );
    752 
    753 EFI_STATUS
    754 LibInstallProtocolInterfaces (
    755     IN OUT EFI_HANDLE       *Handle,
    756     ...
    757     );
    758 
    759 VOID
    760 LibUninstallProtocolInterfaces (
    761     IN EFI_HANDLE           Handle,
    762     ...
    763     );
    764 
    765 EFI_STATUS
    766 LibReinstallProtocolInterfaces (
    767     IN OUT EFI_HANDLE           *Handle,
    768     ...
    769     );
    770 
    771 EFI_EVENT
    772 LibCreateProtocolNotifyEvent (
    773     IN EFI_GUID             *ProtocolGuid,
    774     IN EFI_TPL              NotifyTpl,
    775     IN EFI_EVENT_NOTIFY     NotifyFunction,
    776     IN VOID                 *NotifyContext,
    777     OUT VOID                *Registration
    778     );
    779 
    780 EFI_STATUS
    781 WaitForSingleEvent (
    782     IN EFI_EVENT        Event,
    783     IN UINT64           Timeout OPTIONAL
    784     );
    785 
    786 VOID
    787 WaitForEventWithTimeout (
    788     IN  EFI_EVENT       Event,
    789     IN  UINTN           Timeout,
    790     IN  UINTN           Row,
    791     IN  UINTN           Column,
    792     IN  CHAR16          *String,
    793     IN  EFI_INPUT_KEY   TimeoutKey,
    794     OUT EFI_INPUT_KEY   *Key
    795     );
    796 
    797 EFI_FILE_HANDLE
    798 LibOpenRoot (
    799     IN EFI_HANDLE           DeviceHandle
    800     );
    801 
    802 EFI_FILE_INFO *
    803 LibFileInfo (
    804     IN EFI_FILE_HANDLE      FHand
    805     );
    806 
    807 EFI_FILE_SYSTEM_INFO *
    808 LibFileSystemInfo (
    809     IN EFI_FILE_HANDLE      FHand
    810     );
    811 
    812 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *
    813 LibFileSystemVolumeLabelInfo (
    814     IN EFI_FILE_HANDLE      FHand
    815     );
    816 
    817 BOOLEAN
    818 ValidMBR(
    819     IN  MASTER_BOOT_RECORD  *Mbr,
    820     IN  EFI_BLOCK_IO        *BlkIo
    821     );
    822 
    823 BOOLEAN
    824 LibMatchDevicePaths (
    825     IN  EFI_DEVICE_PATH *Multi,
    826     IN  EFI_DEVICE_PATH *Single
    827     );
    828 
    829 EFI_DEVICE_PATH *
    830 LibDuplicateDevicePathInstance (
    831     IN EFI_DEVICE_PATH  *DevPath
    832     );
    833 
    834 EFI_DEVICE_PATH *
    835 DevicePathFromHandle (
    836     IN EFI_HANDLE           Handle
    837     );
    838 
    839 EFI_DEVICE_PATH *
    840 DevicePathInstance (
    841     IN OUT EFI_DEVICE_PATH  **DevicePath,
    842     OUT UINTN               *Size
    843     );
    844 
    845 UINTN
    846 DevicePathInstanceCount (
    847     IN EFI_DEVICE_PATH      *DevicePath
    848     );
    849 
    850 EFI_DEVICE_PATH *
    851 AppendDevicePath (
    852     IN EFI_DEVICE_PATH      *Src1,
    853     IN EFI_DEVICE_PATH      *Src2
    854     );
    855 
    856 EFI_DEVICE_PATH *
    857 AppendDevicePathNode (
    858     IN EFI_DEVICE_PATH      *Src1,
    859     IN EFI_DEVICE_PATH      *Src2
    860     );
    861 
    862 EFI_DEVICE_PATH*
    863 AppendDevicePathInstance (
    864     IN EFI_DEVICE_PATH  *Src,
    865     IN EFI_DEVICE_PATH  *Instance
    866     );
    867 
    868 EFI_DEVICE_PATH *
    869 FileDevicePath (
    870     IN EFI_HANDLE           Device  OPTIONAL,
    871     IN CHAR16               *FileName
    872     );
    873 
    874 UINTN
    875 DevicePathSize (
    876     IN EFI_DEVICE_PATH      *DevPath
    877     );
    878 
    879 EFI_DEVICE_PATH *
    880 DuplicateDevicePath (
    881     IN EFI_DEVICE_PATH      *DevPath
    882     );
    883 
    884 EFI_DEVICE_PATH *
    885 UnpackDevicePath (
    886     IN EFI_DEVICE_PATH      *DevPath
    887     );
    888 
    889 EFI_STATUS
    890 LibDevicePathToInterface (
    891     IN EFI_GUID             *Protocol,
    892     IN EFI_DEVICE_PATH      *FilePath,
    893     OUT VOID                **Interface
    894     );
    895 
    896 CHAR16 *
    897 DevicePathToStr (
    898     EFI_DEVICE_PATH         *DevPath
    899     );
    900 
    901 //
    902 // BugBug: I need my own include files
    903 //
    904 typedef struct {
    905     UINT8   Register;
    906     UINT8   Function;
    907     UINT8   Device;
    908     UINT8   Bus;
    909     UINT32  Reserved;
    910 } EFI_ADDRESS;
    911 
    912 typedef union {
    913     UINT64          Address;
    914     EFI_ADDRESS     EfiAddress;
    915 } EFI_PCI_ADDRESS_UNION;
    916 
    917 
    918 EFI_STATUS
    919 PciFindDeviceClass (
    920     IN  OUT EFI_PCI_ADDRESS_UNION   *Address,
    921     IN      UINT8                   BaseClass,
    922     IN      UINT8                   SubClass
    923     );
    924 
    925 EFI_STATUS
    926 PciFindDevice (
    927     IN  OUT EFI_PCI_ADDRESS_UNION   *DeviceAddress,
    928     IN      UINT16                  VendorId,
    929     IN      UINT16                  DeviceId,
    930     IN OUT  PCI_TYPE00              *Pci
    931     );
    932 
    933 //
    934 // SIMPLE_READ_FILE object used to access files
    935 //
    936 
    937 typedef VOID        *SIMPLE_READ_FILE;
    938 
    939 EFI_STATUS
    940 OpenSimpleReadFile (
    941     IN BOOLEAN                  BootPolicy,
    942     IN VOID                     *SourceBuffer   OPTIONAL,
    943     IN UINTN                    SourceSize,
    944     IN OUT EFI_DEVICE_PATH      **FilePath,
    945     OUT EFI_HANDLE              *DeviceHandle,
    946     OUT SIMPLE_READ_FILE        *SimpleReadHandle
    947     );
    948 
    949 EFI_STATUS
    950 ReadSimpleReadFile (
    951     IN SIMPLE_READ_FILE     SimpleReadHandle,
    952     IN UINTN                Offset,
    953     IN OUT UINTN            *ReadSize,
    954     OUT VOID                *Buffer
    955     );
    956 
    957 
    958 VOID
    959 CloseSimpleReadFile (
    960     IN SIMPLE_READ_FILE     SimpleReadHandle
    961     );
    962 
    963 VOID
    964 InitializeGuid (
    965     VOID
    966     );
    967 
    968 UINT8
    969 DecimaltoBCD(
    970     IN  UINT8 DecValue
    971     );
    972 
    973 UINT8
    974 BCDtoDecimal(
    975     IN  UINT8 BcdValue
    976     );
    977 
    978 EFI_STATUS
    979 LibGetSystemConfigurationTable(
    980     IN EFI_GUID *TableGuid,
    981     IN OUT VOID **Table
    982     );
    983 
    984 BOOLEAN
    985 LibIsValidTextGraphics (
    986     IN  CHAR16  Graphic,
    987     OUT CHAR8   *PcAnsi,    OPTIONAL
    988     OUT CHAR8   *Ascii      OPTIONAL
    989     );
    990 
    991 BOOLEAN
    992 IsValidAscii (
    993     IN  CHAR16  Ascii
    994     );
    995 
    996 BOOLEAN
    997 IsValidEfiCntlChar (
    998     IN  CHAR16  c
    999     );
   1000 
   1001 CHAR16 *
   1002 LibGetUiString (
   1003     IN  EFI_HANDLE      Handle,
   1004     IN  UI_STRING_TYPE  StringType,
   1005     IN  ISO_639_2       *LangCode,
   1006     IN  BOOLEAN         ReturnDevicePathStrOnMismatch
   1007     );
   1008 
   1009 CHAR8*
   1010 LibGetSmbiosString (
   1011     IN  SMBIOS_STRUCTURE_POINTER    *Smbios,
   1012     IN  UINT16                      StringNumber
   1013     );
   1014 
   1015 EFI_STATUS
   1016 LibGetSmbiosSystemGuidAndSerialNumber (
   1017     IN  EFI_GUID    *SystemGuid,
   1018     OUT CHAR8       **SystemSerialNumber
   1019     );
   1020 
   1021 
   1022 EFI_STATUS
   1023 InitializeGlobalIoDevice (
   1024         IN  EFI_DEVICE_PATH             *DevicePath,
   1025         IN  EFI_GUID                    *Protocol,
   1026         IN  CHAR8                       *ErrorStr,
   1027         OUT EFI_DEVICE_IO_INTERFACE     **GlobalIoFncs
   1028         );
   1029 
   1030 UINT32
   1031 ReadPort (
   1032         IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
   1033         IN  EFI_IO_WIDTH                Width,
   1034         IN  UINTN                       Port
   1035         );
   1036 
   1037 UINT32
   1038 WritePort (
   1039         IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
   1040         IN  EFI_IO_WIDTH                Width,
   1041         IN  UINTN                       Port,
   1042         IN  UINTN                       Data
   1043         );
   1044 
   1045 UINT32
   1046 ReadPciConfig (
   1047         IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
   1048         IN  EFI_IO_WIDTH                Width,
   1049         IN  UINTN                       Port
   1050         );
   1051 
   1052 UINT32
   1053 WritePciConfig (
   1054         IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
   1055         IN  EFI_IO_WIDTH                Width,
   1056         IN  UINTN                       Port,
   1057         IN  UINTN                       Data
   1058         );
   1059 
   1060 VOID
   1061 Pause (
   1062     VOID
   1063 );
   1064 
   1065 extern EFI_DEVICE_IO_INTERFACE  *GlobalIoFncs;
   1066 
   1067 #define outp(_Port, _DataByte)  (UINT8)WritePort(GlobalIoFncs,  IO_UINT8,  (UINTN)_Port, (UINTN)_DataByte)
   1068 #define inp(_Port)              (UINT8)ReadPort(GlobalIoFncs,   IO_UINT8,  (UINTN)_Port)
   1069 #define outpw(_Port, _DataByte) (UINT16)WritePort(GlobalIoFncs, IO_UINT16, (UINTN)_Port, (UINTN)_DataByte)
   1070 #define inpw(_Port)             (UINT16)ReadPort(GlobalIoFncs,  IO_UINT16, (UINTN)_Port)
   1071 #define outpd(_Port, _DataByte) (UINT32)WritePort(GlobalIoFncs, IO_UINT32, (UINTN)_Port, (UINTN)_DataByte)
   1072 #define inpd(_Port)             (UINT32)ReadPort(GlobalIoFncs,  IO_UINT32, (UINTN)_Port)
   1073 
   1074 #define writepci8(_Addr, _DataByte)  (UINT8)WritePciConfig(GlobalIoFncs,  IO_UINT8,  (UINTN)_Addr, (UINTN)_DataByte)
   1075 #define readpci8(_Addr)              (UINT8)ReadPciConfig(GlobalIoFncs,   IO_UINT8,  (UINTN)_Addr)
   1076 #define writepci16(_Addr, _DataByte) (UINT16)WritePciConfig(GlobalIoFncs, IO_UINT16, (UINTN)_Addr, (UINTN)_DataByte)
   1077 #define readpci16(_Addr)             (UINT16)ReadPciConfig(GlobalIoFncs,  IO_UINT16, (UINTN)_Addr)
   1078 #define writepci32(_Addr, _DataByte) (UINT32)WritePciConfig(GlobalIoFncs, IO_UINT32, (UINTN)_Addr, (UINTN)_DataByte)
   1079 #define readpci32(_Addr)             (UINT32)ReadPciConfig(GlobalIoFncs,  IO_UINT32, (UINTN)_Addr)
   1080 
   1081 #define Port80(_PostCode)   GlobalIoFncs->Io.Write (GlobalIoFncs, IO_UINT16, (UINT64)0x80, 1, &(_PostCode))
   1082 
   1083 #endif
   1084