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