1 #ifndef _EFILIB_INCLUDE_
2 #define _EFILIB_INCLUDE_
6 Copyright (c) 2000 Intel Corporation
24 #include "efilibplat.h"
28 #include "libsmbios.h"
31 // Public read-only data in the EFI library
34 extern EFI_SYSTEM_TABLE *ST;
35 extern EFI_BOOT_SERVICES *BS;
36 extern EFI_RUNTIME_SERVICES *RT;
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;
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;
72 extern EFI_GUID EfiPartTypeSystemPartitionGuid;
73 extern EFI_GUID EfiPartTypeLegacyMbrGuid;
75 extern EFI_GUID MpsTableGuid;
76 extern EFI_GUID AcpiTableGuid;
77 extern EFI_GUID SMBIOSTableGuid;
78 extern EFI_GUID SalSystemTableGuid;
81 // EFI Variable strings
83 #define LOAD_OPTION_ACTIVE 0x00000001
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"
101 #define LanguageCodeEnglish "eng"
103 extern EFI_DEVICE_PATH RootDevicePath[];
104 extern EFI_DEVICE_PATH EndDevicePath[];
105 extern EFI_DEVICE_PATH EndInstanceDevicePath[];
108 // Other public data in the EFI library
111 extern EFI_MEMORY_TYPE PoolAllocationType;
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
129 IN EFI_HANDLE ImageHandle,
130 IN EFI_SYSTEM_TABLE *SystemTable
134 InitializeUnicodeSupport (
145 IN OUT EFI_TABLE_HEADER *Hdr
151 IN OUT EFI_TABLE_HEADER *Hdr
157 IN OUT EFI_TABLE_HEADER *Hdr
164 IN OUT EFI_TABLE_HEADER *Hdr
310 IN UINT64 Multiplicand,
318 OUT UINTN *Remainder OPTIONAL
374 IN CHAR16 *Prompt OPTIONAL,
381 IN SIMPLE_TEXT_OUTPUT_INTERFACE *ConOut,
382 IN SIMPLE_INPUT_INTERFACE *ConIn,
383 IN CHAR16 *Prompt OPTIONAL,
416 IN OUT POOL_PRINT *Str,
431 IN SIMPLE_TEXT_OUTPUT_INTERFACE *Out,
438 IN SIMPLE_TEXT_OUTPUT_INTERFACE *Out,
492 IN OUT EFI_STATUS *Status,
493 IN OUT VOID **Buffer,
497 EFI_MEMORY_DESCRIPTOR *
499 OUT UINTN *NoEntries,
501 OUT UINTN *DescriptorSize,
502 OUT UINT32 *DescriptorVersion
508 IN EFI_GUID *VendorGuid
512 LibGetVariableAndSize (
514 IN EFI_GUID *VendorGuid,
525 LibInsertToTailOfBootOrder (
526 IN UINT16 BootOption,
527 IN BOOLEAN OnlyInsertIfEmpty
532 IN EFI_GUID *ProtocolGuid,
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
546 LibLocateHandleByDiskSignature (
548 IN UINT8 SignatureType,
550 IN OUT UINTN *NoHandles,
551 OUT EFI_HANDLE **Buffer
555 LibInstallProtocolInterfaces (
556 IN OUT EFI_HANDLE *Handle,
561 LibUninstallProtocolInterfaces (
562 IN EFI_HANDLE Handle,
567 LibReinstallProtocolInterfaces (
568 IN OUT EFI_HANDLE *Handle,
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
584 IN UINT64 Timeout OPTIONAL
588 WaitForEventWithTimeout (
594 IN EFI_INPUT_KEY TimeoutKey,
595 OUT EFI_INPUT_KEY *Key
600 IN EFI_HANDLE DeviceHandle
605 IN EFI_FILE_HANDLE FHand
608 EFI_FILE_SYSTEM_INFO *
610 IN EFI_FILE_HANDLE FHand
613 EFI_FILE_SYSTEM_VOLUME_LABEL_INFO *
614 LibFileSystemVolumeLabelInfo (
615 IN EFI_FILE_HANDLE FHand
620 IN MASTER_BOOT_RECORD *Mbr,
621 IN EFI_BLOCK_IO *BlkIo
625 LibMatchDevicePaths (
626 IN EFI_DEVICE_PATH *Multi,
627 IN EFI_DEVICE_PATH *Single
631 LibDuplicateDevicePathInstance (
632 IN EFI_DEVICE_PATH *DevPath
636 DevicePathFromHandle (
642 IN OUT EFI_DEVICE_PATH **DevicePath,
647 DevicePathInstanceCount (
648 IN EFI_DEVICE_PATH *DevicePath
653 IN EFI_DEVICE_PATH *Src1,
654 IN EFI_DEVICE_PATH *Src2
658 AppendDevicePathNode (
659 IN EFI_DEVICE_PATH *Src1,
660 IN EFI_DEVICE_PATH *Src2
664 AppendDevicePathInstance (
665 IN EFI_DEVICE_PATH *Src,
666 IN EFI_DEVICE_PATH *Instance
671 IN EFI_HANDLE Device OPTIONAL,
677 IN EFI_DEVICE_PATH *DevPath
681 DuplicateDevicePath (
682 IN EFI_DEVICE_PATH *DevPath
687 IN EFI_DEVICE_PATH *DevPath
691 LibDevicePathToInterface (
692 IN EFI_GUID *Protocol,
693 IN EFI_DEVICE_PATH *FilePath,
699 EFI_DEVICE_PATH *DevPath
703 // BugBug: I need my own include files
715 EFI_ADDRESS EfiAddress;
716 } EFI_PCI_ADDRESS_UNION;
721 IN OUT EFI_PCI_ADDRESS_UNION *Address,
728 IN OUT EFI_PCI_ADDRESS_UNION *DeviceAddress,
731 IN OUT PCI_TYPE00 *Pci
735 // SIMPLE_READ_FILE object used to access files
738 typedef VOID *SIMPLE_READ_FILE;
742 IN BOOLEAN BootPolicy,
743 IN VOID *SourceBuffer OPTIONAL,
745 IN OUT EFI_DEVICE_PATH **FilePath,
746 OUT EFI_HANDLE *DeviceHandle,
747 OUT SIMPLE_READ_FILE *SimpleReadHandle
752 IN SIMPLE_READ_FILE SimpleReadHandle,
754 IN OUT UINTN *ReadSize,
760 CloseSimpleReadFile (
761 IN SIMPLE_READ_FILE SimpleReadHandle
780 LibGetSystemConfigurationTable(
781 IN EFI_GUID *TableGuid,
786 LibIsValidTextGraphics (
788 OUT CHAR8 *PcAnsi, OPTIONAL
789 OUT CHAR8 *Ascii OPTIONAL
804 IN EFI_HANDLE Handle,
805 IN UI_STRING_TYPE StringType,
806 IN ISO_639_2 *LangCode,
807 IN BOOLEAN ReturnDevicePathStrOnMismatch
812 IN SMBIOS_STRUCTURE_POINTER *Smbios,
813 IN UINT16 StringNumber
817 LibGetSmbiosSystemGuidAndSerialNumber (
818 IN EFI_GUID *SystemGuid,
819 OUT CHAR8 **SystemSerialNumber
824 InitializeGlobalIoDevice (
825 IN EFI_DEVICE_PATH *DevicePath,
826 IN EFI_GUID *Protocol,
828 OUT EFI_DEVICE_IO_INTERFACE **GlobalIoFncs
833 IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
834 IN EFI_IO_WIDTH Width,
840 IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
841 IN EFI_IO_WIDTH Width,
848 IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
849 IN EFI_IO_WIDTH Width,
855 IN EFI_DEVICE_IO_INTERFACE *GlobalIoFncs,
856 IN EFI_IO_WIDTH Width,
861 extern EFI_DEVICE_IO_INTERFACE *GlobalIoFncs;
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)
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)
877 #define Pause() WaitForSingleEvent (ST->ConIn->WaitForKey, 0)
878 #define Port80(_PostCode) GlobalIoFncs->Io.Write (GlobalIoFncs, IO_UINT16, (UINT64)0x80, 1, &(_PostCode))