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