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