1 /*	$NetBSD: efilib.h,v 1.1.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