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