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