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