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