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