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