Home | History | Annotate | Line # | Download | only in inc
efilib.h revision 1.1.1.2
      1 /*	$NetBSD: efilib.h,v 1.1.1.2 2018/08/16 18:17: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 #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 VOID
    601 FloatToString (
    602     IN CHAR16   *Buffer,
    603     IN BOOLEAN  Comma,
    604     IN double    v
    605     );
    606 
    607 VOID
    608 TimeToString (
    609     OUT CHAR16      *Buffer,
    610     IN EFI_TIME     *Time
    611     );
    612 
    613 VOID
    614 GuidToString (
    615     OUT CHAR16      *Buffer,
    616     IN EFI_GUID     *Guid
    617     );
    618 
    619 VOID
    620 StatusToString (
    621     OUT CHAR16      *Buffer,
    622     EFI_STATUS      Status
    623     );
    624 
    625 VOID
    626 DumpHex (
    627     IN UINTN        Indent,
    628     IN UINTN        Offset,
    629     IN UINTN        DataSize,
    630     IN VOID         *UserData
    631     );
    632 
    633 BOOLEAN
    634 GrowBuffer(
    635     IN OUT EFI_STATUS   *Status,
    636     IN OUT VOID         **Buffer,
    637     IN UINTN            BufferSize
    638     );
    639 
    640 EFI_MEMORY_DESCRIPTOR *
    641 LibMemoryMap (
    642     OUT UINTN               *NoEntries,
    643     OUT UINTN               *MapKey,
    644     OUT UINTN               *DescriptorSize,
    645     OUT UINT32              *DescriptorVersion
    646     );
    647 
    648 VOID *
    649 LibGetVariable (
    650     IN CHAR16               *Name,
    651     IN EFI_GUID             *VendorGuid
    652     );
    653 
    654 VOID *
    655 LibGetVariableAndSize (
    656     IN CHAR16               *Name,
    657     IN EFI_GUID             *VendorGuid,
    658     OUT UINTN               *VarSize
    659     );
    660 
    661 EFI_STATUS
    662 LibDeleteVariable (
    663     IN CHAR16   *VarName,
    664     IN EFI_GUID *VarGuid
    665     );
    666 
    667 EFI_STATUS
    668 LibSetNVVariable (
    669     IN CHAR16   *VarName,
    670     IN EFI_GUID *VarGuid,
    671     IN UINTN	 DataSize,
    672     IN VOID     *Data
    673     );
    674 
    675 EFI_STATUS
    676 LibSetVariable (
    677     IN CHAR16   *VarName,
    678     IN EFI_GUID *VarGuid,
    679     IN UINTN	 DataSize,
    680     IN VOID     *Data
    681     );
    682 EFI_STATUS
    683 LibInsertToTailOfBootOrder (
    684     IN  UINT16  BootOption,
    685     IN  BOOLEAN OnlyInsertIfEmpty
    686     );
    687 
    688 EFI_STATUS
    689 LibLocateProtocol (
    690     IN  EFI_GUID    *ProtocolGuid,
    691     OUT VOID        **Interface
    692     );
    693 
    694 EFI_STATUS
    695 LibLocateHandle (
    696     IN EFI_LOCATE_SEARCH_TYPE   SearchType,
    697     IN EFI_GUID                 *Protocol OPTIONAL,
    698     IN VOID                     *SearchKey OPTIONAL,
    699     IN OUT UINTN                *NoHandles,
    700     OUT EFI_HANDLE              **Buffer
    701     );
    702 
    703 EFI_STATUS
    704 LibLocateHandleByDiskSignature (
    705     IN UINT8                        MBRType,
    706     IN UINT8                        SignatureType,
    707     IN VOID                         *Signature,
    708     IN OUT UINTN                    *NoHandles,
    709     OUT EFI_HANDLE                  **Buffer
    710     );
    711 
    712 EFI_STATUS
    713 LibInstallProtocolInterfaces (
    714     IN OUT EFI_HANDLE       *Handle,
    715     ...
    716     );
    717 
    718 VOID
    719 LibUninstallProtocolInterfaces (
    720     IN EFI_HANDLE           Handle,
    721     ...
    722     );
    723 
    724 EFI_STATUS
    725 LibReinstallProtocolInterfaces (
    726     IN OUT EFI_HANDLE           *Handle,
    727     ...
    728     );
    729 
    730 EFI_EVENT
    731 LibCreateProtocolNotifyEvent (
    732     IN EFI_GUID             *ProtocolGuid,
    733     IN EFI_TPL              NotifyTpl,
    734     IN EFI_EVENT_NOTIFY     NotifyFunction,
    735     IN VOID                 *NotifyContext,
    736     OUT VOID                *Registration
    737     );
    738 
    739 EFI_STATUS
    740 WaitForSingleEvent (
    741     IN EFI_EVENT        Event,
    742     IN UINT64           Timeout OPTIONAL
    743     );
    744 
    745 VOID
    746 WaitForEventWithTimeout (
    747     IN  EFI_EVENT       Event,
    748     IN  UINTN           Timeout,
    749     IN  UINTN           Row,
    750     IN  UINTN           Column,
    751     IN  CHAR16          *String,
    752     IN  EFI_INPUT_KEY   TimeoutKey,
    753     OUT EFI_INPUT_KEY   *Key
    754     );
    755 
    756 EFI_FILE_HANDLE
    757 LibOpenRoot (
    758     IN EFI_HANDLE           DeviceHandle
    759     );
    760 
    761 EFI_FILE_INFO *
    762 LibFileInfo (
    763     IN EFI_FILE_HANDLE      FHand
    764     );
    765 
    766 EFI_FILE_SYSTEM_INFO *
    767 LibFileSystemInfo (
    768     IN EFI_FILE_HANDLE      FHand
    769     );
    770 
    771 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *
    772 LibFileSystemVolumeLabelInfo (
    773     IN EFI_FILE_HANDLE      FHand
    774     );
    775 
    776 BOOLEAN
    777 ValidMBR(
    778     IN  MASTER_BOOT_RECORD  *Mbr,
    779     IN  EFI_BLOCK_IO        *BlkIo
    780     );
    781 
    782 BOOLEAN
    783 LibMatchDevicePaths (
    784     IN  EFI_DEVICE_PATH *Multi,
    785     IN  EFI_DEVICE_PATH *Single
    786     );
    787 
    788 EFI_DEVICE_PATH *
    789 LibDuplicateDevicePathInstance (
    790     IN EFI_DEVICE_PATH  *DevPath
    791     );
    792 
    793 EFI_DEVICE_PATH *
    794 DevicePathFromHandle (
    795     IN EFI_HANDLE           Handle
    796     );
    797 
    798 EFI_DEVICE_PATH *
    799 DevicePathInstance (
    800     IN OUT EFI_DEVICE_PATH  **DevicePath,
    801     OUT UINTN               *Size
    802     );
    803 
    804 UINTN
    805 DevicePathInstanceCount (
    806     IN EFI_DEVICE_PATH      *DevicePath
    807     );
    808 
    809 EFI_DEVICE_PATH *
    810 AppendDevicePath (
    811     IN EFI_DEVICE_PATH      *Src1,
    812     IN EFI_DEVICE_PATH      *Src2
    813     );
    814 
    815 EFI_DEVICE_PATH *
    816 AppendDevicePathNode (
    817     IN EFI_DEVICE_PATH      *Src1,
    818     IN EFI_DEVICE_PATH      *Src2
    819     );
    820 
    821 EFI_DEVICE_PATH*
    822 AppendDevicePathInstance (
    823     IN EFI_DEVICE_PATH  *Src,
    824     IN EFI_DEVICE_PATH  *Instance
    825     );
    826 
    827 EFI_DEVICE_PATH *
    828 FileDevicePath (
    829     IN EFI_HANDLE           Device  OPTIONAL,
    830     IN CHAR16               *FileName
    831     );
    832 
    833 UINTN
    834 DevicePathSize (
    835     IN EFI_DEVICE_PATH      *DevPath
    836     );
    837 
    838 EFI_DEVICE_PATH *
    839 DuplicateDevicePath (
    840     IN EFI_DEVICE_PATH      *DevPath
    841     );
    842 
    843 EFI_DEVICE_PATH *
    844 UnpackDevicePath (
    845     IN EFI_DEVICE_PATH      *DevPath
    846     );
    847 
    848 EFI_STATUS
    849 LibDevicePathToInterface (
    850     IN EFI_GUID             *Protocol,
    851     IN EFI_DEVICE_PATH      *FilePath,
    852     OUT VOID                **Interface
    853     );
    854 
    855 CHAR16 *
    856 DevicePathToStr (
    857     EFI_DEVICE_PATH         *DevPath
    858     );
    859 
    860 //
    861 // BugBug: I need my own include files
    862 //
    863 typedef struct {
    864     UINT8   Register;
    865     UINT8   Function;
    866     UINT8   Device;
    867     UINT8   Bus;
    868     UINT32  Reserved;
    869 } EFI_ADDRESS;
    870 
    871 typedef union {
    872     UINT64          Address;
    873     EFI_ADDRESS     EfiAddress;
    874 } EFI_PCI_ADDRESS_UNION;
    875 
    876 
    877 EFI_STATUS
    878 PciFindDeviceClass (
    879     IN  OUT EFI_PCI_ADDRESS_UNION   *Address,
    880     IN      UINT8                   BaseClass,
    881     IN      UINT8                   SubClass
    882     );
    883 
    884 EFI_STATUS
    885 PciFindDevice (
    886     IN  OUT EFI_PCI_ADDRESS_UNION   *DeviceAddress,
    887     IN      UINT16                  VendorId,
    888     IN      UINT16                  DeviceId,
    889     IN OUT  PCI_TYPE00              *Pci
    890     );
    891 
    892 //
    893 // SIMPLE_READ_FILE object used to access files
    894 //
    895 
    896 typedef VOID        *SIMPLE_READ_FILE;
    897 
    898 EFI_STATUS
    899 OpenSimpleReadFile (
    900     IN BOOLEAN                  BootPolicy,
    901     IN VOID                     *SourceBuffer   OPTIONAL,
    902     IN UINTN                    SourceSize,
    903     IN OUT EFI_DEVICE_PATH      **FilePath,
    904     OUT EFI_HANDLE              *DeviceHandle,
    905     OUT SIMPLE_READ_FILE        *SimpleReadHandle
    906     );
    907 
    908 EFI_STATUS
    909 ReadSimpleReadFile (
    910     IN SIMPLE_READ_FILE     SimpleReadHandle,
    911     IN UINTN                Offset,
    912     IN OUT UINTN            *ReadSize,
    913     OUT VOID                *Buffer
    914     );
    915 
    916 
    917 VOID
    918 CloseSimpleReadFile (
    919     IN SIMPLE_READ_FILE     SimpleReadHandle
    920     );
    921 
    922 VOID
    923 InitializeGuid (
    924     VOID
    925     );
    926 
    927 UINT8
    928 DecimaltoBCD(
    929     IN  UINT8 DecValue
    930     );
    931 
    932 UINT8
    933 BCDtoDecimal(
    934     IN  UINT8 BcdValue
    935     );
    936 
    937 EFI_STATUS
    938 LibGetSystemConfigurationTable(
    939     IN EFI_GUID *TableGuid,
    940     IN OUT VOID **Table
    941     );
    942 
    943 BOOLEAN
    944 LibIsValidTextGraphics (
    945     IN  CHAR16  Graphic,
    946     OUT CHAR8   *PcAnsi,    OPTIONAL
    947     OUT CHAR8   *Ascii      OPTIONAL
    948     );
    949 
    950 BOOLEAN
    951 IsValidAscii (
    952     IN  CHAR16  Ascii
    953     );
    954 
    955 BOOLEAN
    956 IsValidEfiCntlChar (
    957     IN  CHAR16  c
    958     );
    959 
    960 CHAR16 *
    961 LibGetUiString (
    962     IN  EFI_HANDLE      Handle,
    963     IN  UI_STRING_TYPE  StringType,
    964     IN  ISO_639_2       *LangCode,
    965     IN  BOOLEAN         ReturnDevicePathStrOnMismatch
    966     );
    967 
    968 CHAR8*
    969 LibGetSmbiosString (
    970     IN  SMBIOS_STRUCTURE_POINTER    *Smbios,
    971     IN  UINT16                      StringNumber
    972     );
    973 
    974 EFI_STATUS
    975 LibGetSmbiosSystemGuidAndSerialNumber (
    976     IN  EFI_GUID    *SystemGuid,
    977     OUT CHAR8       **SystemSerialNumber
    978     );
    979 
    980 
    981 EFI_STATUS
    982 InitializeGlobalIoDevice (
    983         IN  EFI_DEVICE_PATH             *DevicePath,
    984         IN  EFI_GUID                    *Protocol,
    985         IN  CHAR8                       *ErrorStr,
    986         OUT EFI_DEVICE_IO_INTERFACE     **GlobalIoFncs
    987         );
    988 
    989 UINT32
    990 ReadPort (
    991         IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
    992         IN  EFI_IO_WIDTH                Width,
    993         IN  UINTN                       Port
    994         );
    995 
    996 UINT32
    997 WritePort (
    998         IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
    999         IN  EFI_IO_WIDTH                Width,
   1000         IN  UINTN                       Port,
   1001         IN  UINTN                       Data
   1002         );
   1003 
   1004 UINT32
   1005 ReadPciConfig (
   1006         IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
   1007         IN  EFI_IO_WIDTH                Width,
   1008         IN  UINTN                       Port
   1009         );
   1010 
   1011 UINT32
   1012 WritePciConfig (
   1013         IN  EFI_DEVICE_IO_INTERFACE     *GlobalIoFncs,
   1014         IN  EFI_IO_WIDTH                Width,
   1015         IN  UINTN                       Port,
   1016         IN  UINTN                       Data
   1017         );
   1018 
   1019 extern EFI_DEVICE_IO_INTERFACE  *GlobalIoFncs;
   1020 
   1021 #define outp(_Port, _DataByte)  (UINT8)WritePort(GlobalIoFncs,  IO_UINT8,  (UINTN)_Port, (UINTN)_DataByte)
   1022 #define inp(_Port)              (UINT8)ReadPort(GlobalIoFncs,   IO_UINT8,  (UINTN)_Port)
   1023 #define outpw(_Port, _DataByte) (UINT16)WritePort(GlobalIoFncs, IO_UINT16, (UINTN)_Port, (UINTN)_DataByte)
   1024 #define inpw(_Port)             (UINT16)ReadPort(GlobalIoFncs,  IO_UINT16, (UINTN)_Port)
   1025 #define outpd(_Port, _DataByte) (UINT32)WritePort(GlobalIoFncs, IO_UINT32, (UINTN)_Port, (UINTN)_DataByte)
   1026 #define inpd(_Port)             (UINT32)ReadPort(GlobalIoFncs,  IO_UINT32, (UINTN)_Port)
   1027 
   1028 #define writepci8(_Addr, _DataByte)  (UINT8)WritePciConfig(GlobalIoFncs,  IO_UINT8,  (UINTN)_Addr, (UINTN)_DataByte)
   1029 #define readpci8(_Addr)              (UINT8)ReadPciConfig(GlobalIoFncs,   IO_UINT8,  (UINTN)_Addr)
   1030 #define writepci16(_Addr, _DataByte) (UINT16)WritePciConfig(GlobalIoFncs, IO_UINT16, (UINTN)_Addr, (UINTN)_DataByte)
   1031 #define readpci16(_Addr)             (UINT16)ReadPciConfig(GlobalIoFncs,  IO_UINT16, (UINTN)_Addr)
   1032 #define writepci32(_Addr, _DataByte) (UINT32)WritePciConfig(GlobalIoFncs, IO_UINT32, (UINTN)_Addr, (UINTN)_DataByte)
   1033 #define readpci32(_Addr)             (UINT32)ReadPciConfig(GlobalIoFncs,  IO_UINT32, (UINTN)_Addr)
   1034 
   1035 #define Pause()             WaitForSingleEvent (ST->ConIn->WaitForKey, 0)
   1036 #define Port80(_PostCode)   GlobalIoFncs->Io.Write (GlobalIoFncs, IO_UINT16, (UINT64)0x80, 1, &(_PostCode))
   1037 
   1038 #endif
   1039