--- /dev/null
+/** @file\r
+ MDE UEFI library functions and macros\r
+\r
+ Copyright (c) 2006 - 2007, Intel Corporation \r
+ All rights reserved. This program and the accompanying materials \r
+ are licensed and made available under the terms and conditions of the BSD License \r
+ which accompanies this distribution. The full text of the license may be found at \r
+ http://opensource.org/licenses/bsd-license.php \r
+\r
+ THE PROGRAM IS DISTRIBUTED UNDER THE BSD LICENSE ON AN "AS IS" BASIS, \r
+ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED. \r
+\r
+**/\r
+\r
+#ifndef __UEFI_LIB_H__\r
+#define __UEFI_LIB_H__\r
+\r
+//\r
+// Unicode String Table\r
+//\r
+typedef struct {\r
+ CHAR8 *Language;\r
+ CHAR16 *UnicodeString;\r
+} EFI_UNICODE_STRING_TABLE;\r
+\r
+//\r
+// EFI Lock Status\r
+//\r
+typedef enum {\r
+ EfiLockUninitialized = 0,\r
+ EfiLockReleased = 1,\r
+ EfiLockAcquired = 2\r
+} EFI_LOCK_STATE;\r
+\r
+//\r
+// EFI Lock \r
+//\r
+typedef struct {\r
+ EFI_TPL Tpl;\r
+ EFI_TPL OwnerTpl;\r
+ EFI_LOCK_STATE Lock;\r
+} EFI_LOCK;\r
+\r
+\r
+/**\r
+ This function searches the list of configuration tables stored in the EFI System \r
+ Table for a table with a GUID that matches TableGuid. If a match is found, \r
+ then a pointer to the configuration table is returned in Table, and EFI_SUCCESS \r
+ is returned. If a matching GUID is not found, then EFI_NOT_FOUND is returned.\r
+\r
+ @param TableGuid Pointer to table's GUID type..\r
+ @param Table Pointer to the table associated with TableGuid in the EFI System Table.\r
+\r
+ @retval EFI_SUCCESS A configuration table matching TableGuid was found.\r
+ @retval EFI_NOT_FOUND A configuration table matching TableGuid could not be found.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiGetSystemConfigurationTable ( \r
+ IN EFI_GUID *TableGuid,\r
+ OUT VOID **Table\r
+ );\r
+\r
+/**\r
+ This function causes the notification function to be executed for every protocol \r
+ of type ProtocolGuid instance that exists in the system when this function is \r
+ invoked. In addition, every time a protocol of type ProtocolGuid instance is \r
+ installed or reinstalled, the notification function is also executed.\r
+\r
+ @param ProtocolGuid Supplies GUID of the protocol upon whose installation the event is fired.\r
+ @param NotifyTpl Supplies the task priority level of the event notifications.\r
+ @param NotifyFunction Supplies the function to notify when the event is signaled.\r
+ @param NotifyContext The context parameter to pass to NotifyFunction.\r
+ @param Registration A pointer to a memory location to receive the registration value.\r
+\r
+ @return The notification event that was created. \r
+\r
+**/\r
+EFI_EVENT\r
+EFIAPI\r
+EfiCreateProtocolNotifyEvent(\r
+ IN EFI_GUID *ProtocolGuid,\r
+ IN EFI_TPL NotifyTpl,\r
+ IN EFI_EVENT_NOTIFY NotifyFunction,\r
+ IN VOID *NotifyContext, OPTIONAL\r
+ OUT VOID **Registration\r
+ );\r
+\r
+/**\r
+ This function creates an event using NotifyTpl, NoifyFunction, and NotifyContext.\r
+ This event is signaled with EfiNamedEventSignal(). This provide the ability for \r
+ one or more listeners on the same event named by the GUID specified by Name.\r
+\r
+ @param Name Supplies GUID name of the event.\r
+ @param NotifyTpl Supplies the task priority level of the event notifications.\r
+ @param NotifyFunction Supplies the function to notify when the event is signaled.\r
+ @param NotifyContext The context parameter to pass to NotifyFunction. \r
+ @param Registration A pointer to a memory location to receive the registration value.\r
+\r
+ @retval EFI_SUCCESS A named event was created.\r
+ @retval EFI_OUT_OF_RESOURCES There are not enough resource to create the named event.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiNamedEventListen (\r
+ IN CONST EFI_GUID *Name,\r
+ IN EFI_TPL NotifyTpl,\r
+ IN EFI_EVENT_NOTIFY NotifyFunction,\r
+ IN CONST VOID *NotifyContext, OPTIONAL\r
+ OUT VOID *Registration OPTIONAL\r
+ );\r
+\r
+/**\r
+ This function signals the named event specified by Name. The named event must \r
+ have been created with EfiNamedEventListen().\r
+\r
+ @param Name Supplies GUID name of the event.\r
+\r
+ @retval EFI_SUCCESS A named event was signaled.\r
+ @retval EFI_OUT_OF_RESOURCES There are not enough resource to signal the named event.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiNamedEventSignal (\r
+ IN CONST EFI_GUID *Name\r
+ );\r
+\r
+/** \r
+ Returns the current TPL.\r
+\r
+ This function returns the current TPL. There is no EFI service to directly \r
+ retrieve the current TPL. Instead, the RaiseTPL() function is used to raise \r
+ the TPL to TPL_HIGH_LEVEL. This will return the current TPL. The TPL level \r
+ can then immediately be restored back to the current TPL level with a call \r
+ to RestoreTPL().\r
+\r
+ @param VOID\r
+\r
+ @retvale EFI_TPL The current TPL.\r
+\r
+**/\r
+EFI_TPL\r
+EFIAPI\r
+EfiGetCurrentTpl (\r
+ VOID\r
+ );\r
+\r
+/**\r
+ This function initializes a basic mutual exclusion lock to the released state \r
+ and returns the lock. Each lock provides mutual exclusion access at its task \r
+ priority level. Since there is no preemption or multiprocessor support in EFI,\r
+ acquiring the lock only consists of raising to the locks TPL.\r
+\r
+ @param Lock A pointer to the lock data structure to initialize.\r
+ @param Priority EFI TPL associated with the lock.\r
+\r
+ @return The lock.\r
+\r
+**/\r
+EFI_LOCK *\r
+EFIAPI\r
+EfiInitializeLock (\r
+ IN OUT EFI_LOCK *Lock,\r
+ IN EFI_TPL Priority\r
+ );\r
+\r
+/**\r
+ This macro initializes the contents of a basic mutual exclusion lock to the \r
+ released state. Each lock provides mutual exclusion access at its task \r
+ priority level. Since there is no preemption or multiprocessor support in EFI,\r
+ acquiring the lock only consists of raising to the locks TPL.\r
+\r
+ @param Lock A pointer to the lock data structure to initialize.\r
+ @param Priority The task priority level of the lock.\r
+\r
+ @return The lock.\r
+\r
+**/\r
+#define EFI_INITIALIZE_LOCK_VARIABLE(Priority) \\r
+ {Priority, EFI_TPL_APPLICATION, EfiLockReleased }\r
+\r
+\r
+/**\r
+ \r
+ Macro that calls DebugAssert() if an EFI_LOCK structure is not in the locked state.\r
+\r
+ If the DEBUG_PROPERTY_DEBUG_ASSERT_ENABLED bit of PcdDebugProperyMask is set, \r
+ then this macro evaluates the EFI_LOCK structure specified by Lock. If Lock \r
+ is not in the locked state, then DebugAssert() is called passing in the source \r
+ filename, source line number, and Lock.\r
+\r
+ If Lock is NULL, then ASSERT().\r
+\r
+ @param LockParameter A pointer to the lock to acquire.\r
+\r
+**/\r
+#define ASSERT_LOCKED(LockParameter) \\r
+ do { \\r
+ if (DebugAssertEnabled ()) { \\r
+ ASSERT (LockParameter != NULL); \\r
+ if ((LockParameter)->Lock != EfiLockAcquired) { \\r
+ _ASSERT (LockParameter not locked); \\r
+ } \\r
+ } \\r
+ } while (FALSE)\r
+\r
+\r
+/**\r
+ This function raises the system's current task priority level to the task \r
+ priority level of the mutual exclusion lock. Then, it places the lock in the \r
+ acquired state.\r
+\r
+ @param Priority The task priority level of the lock.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+EfiAcquireLock (\r
+ IN EFI_LOCK *Lock\r
+ );\r
+\r
+/**\r
+ This function raises the system's current task priority level to the task \r
+ priority level of the mutual exclusion lock. Then, it attempts to place the \r
+ lock in the acquired state.\r
+\r
+ @param Lock A pointer to the lock to acquire.\r
+\r
+ @retval EFI_SUCCESS The lock was acquired.\r
+ @retval EFI_ACCESS_DENIED The lock could not be acquired because it is already owned.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiAcquireLockOrFail (\r
+ IN EFI_LOCK *Lock\r
+ );\r
+\r
+/**\r
+ This function transitions a mutual exclusion lock from the acquired state to \r
+ the released state, and restores the system's task priority level to its \r
+ previous level.\r
+\r
+ @param Lock A pointer to the lock to release.\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+EfiReleaseLock (\r
+ IN EFI_LOCK *Lock\r
+ );\r
+\r
+/**
+ Tests whether a controller handle is being managed by a specific driver.
+
+ This function tests whether the driver specified by DriverBindingHandle is\r
+ currently managing the controller specified by ControllerHandle. This test\r
+ is performed by evaluating if the the protocol specified by ProtocolGuid is\r
+ present on ControllerHandle and is was opened by DriverBindingHandle with an\r
+ attribute of EFI_OPEN_PROTOCOL_BY_DRIVER. \r
+ If ProtocolGuid is NULL, then ASSERT().\r
+
+ @param ControllerHandle A handle for a controller to test.
+ @param DriverBindingHandle Specifies the driver binding handle for the
+ driver.
+ @param ProtocolGuid Specifies the protocol that the driver specified
+ by DriverBindingHandle opens in its Start()
+ function.
+
+ @retval EFI_SUCCESS ControllerHandle is managed by the driver
+ specifed by DriverBindingHandle.
+ @retval EFI_UNSUPPORTED ControllerHandle is not managed by the driver
+ specifed by DriverBindingHandle.
+
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiTestManagedDevice (\r
+ IN CONST EFI_HANDLE ControllerHandle,\r
+ IN CONST EFI_HANDLE DriverBindingHandle,\r
+ IN CONST EFI_GUID *ProtocolGuid\r
+ );\r
+\r
+/**
+ Tests whether a child handle is a child device of the controller.
+
+ This function tests whether ChildHandle is one of the children of\r
+ ControllerHandle. This test is performed by checking to see if the protocol\r
+ specified by ProtocolGuid is present on ControllerHandle and opened by\r
+ ChildHandle with an attribute of EFI_OPEN_PROTOCOL_BY_CHILD_CONTROLLER.\r
+ If ProtocolGuid is NULL, then ASSERT().\r
+
+ @param ControllerHandle A handle for a (parent) controller to test.
+ @param ChildHandle A child handle to test.
+ @param ConsumsedGuid Supplies the protocol that the child controller
+ opens on its parent controller.
+
+ @retval EFI_SUCCESS ChildHandle is a child of the ControllerHandle.
+ @retval EFI_UNSUPPORTED ChildHandle is not a child of the
+ ControllerHandle.
+
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiTestChildHandle (\r
+ IN CONST EFI_HANDLE ControllerHandle,\r
+ IN CONST EFI_HANDLE ChildHandle,\r
+ IN CONST EFI_GUID *ProtocolGuid\r
+ );\r
+\r
+/**\r
+ This function looks up a Unicode string in UnicodeStringTable. If Language is \r
+ a member of SupportedLanguages and a Unicode string is found in UnicodeStringTable\r
+ that matches the language code specified by Language, then it is returned in \r
+ UnicodeString.\r
+\r
+ @param Language A pointer to the ISO 639-2 language code for the \r
+ Unicode string to look up and return.\r
+ @param SupportedLanguages A pointer to the set of ISO 639-2 language codes \r
+ that the Unicode string table supports. Language \r
+ must be a member of this set.\r
+ @param UnicodeStringTable A pointer to the table of Unicode strings.\r
+ @param UnicodeString A pointer to the Unicode string from UnicodeStringTable\r
+ that matches the language specified by Language.\r
+\r
+ @retval EFI_SUCCESS The Unicode string that matches the language \r
+ specified by Language was found\r
+ in the table of Unicoide strings UnicodeStringTable, \r
+ and it was returned in UnicodeString.\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+ @retval EFI_INVALID_PARAMETER UnicodeString is NULL.\r
+ @retval EFI_UNSUPPORTED SupportedLanguages is NULL.\r
+ @retval EFI_UNSUPPORTED UnicodeStringTable is NULL.\r
+ @retval EFI_UNSUPPORTED The language specified by Language is not a \r
+ member of SupportedLanguages.\r
+ @retval EFI_UNSUPPORTED The language specified by Language is not \r
+ supported by UnicodeStringTable.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+LookupUnicodeString (\r
+ IN CONST CHAR8 *Language,\r
+ IN CONST CHAR8 *SupportedLanguages,\r
+ IN CONST EFI_UNICODE_STRING_TABLE *UnicodeStringTable,\r
+ OUT CHAR16 **UnicodeString\r
+ );\r
+\r
+/**\r
+ This function adds a Unicode string to UnicodeStringTable.\r
+ If Language is a member of SupportedLanguages then UnicodeString is added to \r
+ UnicodeStringTable. New buffers are allocated for both Language and \r
+ UnicodeString. The contents of Language and UnicodeString are copied into \r
+ these new buffers. These buffers are automatically freed when \r
+ FreeUnicodeStringTable() is called.\r
+\r
+ @param Language A pointer to the ISO 639-2 language code for the Unicode \r
+ string to add.\r
+ @param SupportedLanguages A pointer to the set of ISO 639-2 language codes\r
+ that the Unicode string table supports.\r
+ Language must be a member of this set.\r
+ @param UnicodeStringTable A pointer to the table of Unicode strings.\r
+ @param UnicodeString A pointer to the Unicode string to add.\r
+\r
+ @retval EFI_SUCCESS The Unicode string that matches the language \r
+ specified by Language was found in the table of \r
+ Unicode strings UnicodeStringTable, and it was \r
+ returned in UnicodeString.\r
+ @retval EFI_INVALID_PARAMETER Language is NULL.\r
+ @retval EFI_INVALID_PARAMETER UnicodeString is NULL.\r
+ @retval EFI_INVALID_PARAMETER UnicodeString is an empty string.\r
+ @retval EFI_UNSUPPORTED SupportedLanguages is NULL.\r
+ @retval EFI_ALREADY_STARTED A Unicode string with language Language is \r
+ already present in UnicodeStringTable.\r
+ @retval EFI_OUT_OF_RESOURCES There is not enough memory to add another \r
+ Unicode string to UnicodeStringTable.\r
+ @retval EFI_UNSUPPORTED The language specified by Language is not a \r
+ member of SupportedLanguages.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+AddUnicodeString (\r
+ IN CONST CHAR8 *Language,\r
+ IN CONST CHAR8 *SupportedLanguages,\r
+ IN EFI_UNICODE_STRING_TABLE **UnicodeStringTable,\r
+ IN CONST CHAR16 *UnicodeString\r
+ );\r
+\r
+/**\r
+ This function frees the table of Unicode strings in UnicodeStringTable.\r
+ If UnicodeStringTable is NULL, then EFI_SUCCESS is returned.\r
+ Otherwise, each language code, and each Unicode string in the Unicode string \r
+ table are freed, and EFI_SUCCESS is returned.\r
+\r
+ @param UnicodeStringTable A pointer to the table of Unicode strings.\r
+\r
+ @retval EFI_SUCCESS The Unicode string table was freed.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+FreeUnicodeStringTable (\r
+ IN EFI_UNICODE_STRING_TABLE *UnicodeStringTable\r
+ );\r
+\r
+/**\r
+ This function computes and returns the width of the Unicode character \r
+ specified by UnicodeChar.\r
+\r
+ @param UnicodeChar A Unicode character.\r
+\r
+ @retval 0 The width if UnicodeChar could not be determined.\r
+ @retval 1 UnicodeChar is a narrow glyph.\r
+ @retval 2 UnicodeChar is a wide glyph.\r
+\r
+**/\r
+UINTN\r
+EFIAPI\r
+GetGlyphWidth (\r
+ IN CHAR16 UnicodeChar\r
+ );\r
+\r
+/**\r
+ This function computes and returns the display length of\r
+ the Null-terminated Unicode string specified by String.\r
+ If String is NULL, then 0 is returned.\r
+ If any of the widths of the Unicode characters in String\r
+ can not be determined, then 0 is returned.\r
+\r
+ @param String A pointer to a Null-terminated Unicode string.\r
+\r
+ @return The display length of the Null-terminated Unicode string specified by String.\r
+ \r
+**/\r
+UINTN\r
+EFIAPI\r
+UnicodeStringDisplayLength (\r
+ IN CONST CHAR16 *String\r
+ );\r
+\r
+//\r
+// Functions that abstract early Framework contamination of UEFI.\r
+//\r
+/**\r
+ Signal a Ready to Boot Event. \r
+ \r
+ Create a Ready to Boot Event. Signal it and close it. This causes other \r
+ events of the same event group to be signaled in other modules. \r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+EfiSignalEventReadyToBoot (\r
+ VOID\r
+ );\r
+\r
+/**\r
+ Signal a Legacy Boot Event. \r
+ \r
+ Create a legacy Boot Event. Signal it and close it. This causes other \r
+ events of the same event group to be signaled in other modules. \r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+EfiSignalEventLegacyBoot (\r
+ VOID\r
+ );\r
+\r
+/**\r
+ Create a Legacy Boot Event. \r
+ \r
+ Tiano extended the CreateEvent Type enum to add a legacy boot event type. \r
+ This was bad as Tiano did not own the enum. In UEFI 2.0 CreateEventEx was\r
+ added and now it's possible to not voilate the UEFI specification by \r
+ declaring a GUID for the legacy boot event class. This library supports\r
+ the EDK/EFI 1.10 form and EDK II/UEFI 2.0 form and allows common code to \r
+ work both ways.\r
+\r
+ @param LegacyBootEvent Returns the EFI event returned from gBS->CreateEvent(Ex).\r
+\r
+ @retval EFI_SUCCESS Event was created.\r
+ @retval Other Event was not created.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiCreateEventLegacyBoot (\r
+ OUT EFI_EVENT *LegacyBootEvent\r
+ );\r
+\r
+/**\r
+ Create an EFI event in the Legacy Boot Event Group and allows\r
+ the caller to specify a notification function. \r
+ \r
+ This function abstracts the creation of the Legacy Boot Event.\r
+ The Framework moved from a proprietary to UEFI 2.0 based mechanism.\r
+ This library abstracts the caller from how this event is created to prevent\r
+ to code form having to change with the version of the specification supported.\r
+ If LegacyBootEvent is NULL, then ASSERT().\r
+\r
+ @param NotifyTpl The task priority level of the event.\r
+ @param NotifyFunction The notification function to call when the event is signaled.\r
+ @param NotifyContext The content to pass to NotifyFunction when the event is signaled.\r
+ @param LegacyBootEvent Returns the EFI event returned from gBS->CreateEvent(Ex).\r
+\r
+ @retval EFI_SUCCESS Event was created.\r
+ @retval Other Event was not created.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiCreateEventLegacyBootEx (\r
+ IN EFI_TPL NotifyTpl,\r
+ IN EFI_EVENT_NOTIFY NotifyFunction, OPTIONAL\r
+ IN VOID *NotifyContext, OPTIONAL\r
+ OUT EFI_EVENT *LegacyBootEvent\r
+ );\r
+\r
+/**\r
+ Create a Read to Boot Event. \r
+ \r
+ Tiano extended the CreateEvent Type enum to add a ready to boot event type. \r
+ This was bad as Tiano did not own the enum. In UEFI 2.0 CreateEventEx was\r
+ added and now it's possible to not voilate the UEFI specification and use \r
+ the ready to boot event class defined in UEFI 2.0. This library supports\r
+ the EDK/EFI 1.10 form and EDKII/UEFI 2.0 form and allows common code to \r
+ work both ways.\r
+\r
+ @param LegacyBootEvent Returns the EFI event returned from gBS->CreateEvent(Ex).\r
+\r
+ @retval EFI_SUCCESS Event was created.\r
+ @retval Other Event was not created.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiCreateEventReadyToBoot (\r
+ OUT EFI_EVENT *ReadyToBootEvent\r
+ );\r
+\r
+/**\r
+ Create an EFI event in the Ready To Boot Event Group and allows\r
+ the caller to specify a notification function. \r
+ \r
+ This function abstracts the creation of the Ready to Boot Event.\r
+ The Framework moved from a proprietary to UEFI 2.0 based mechanism.\r
+ This library abstracts the caller from how this event is created to prevent\r
+ to code form having to change with the version of the specification supported.\r
+ If ReadyToBootEvent is NULL, then ASSERT().\r
+\r
+ @param NotifyTpl The task priority level of the event.\r
+ @param NotifyFunction The notification function to call when the event is signaled.\r
+ @param NotifyContext The content to pass to NotifyFunction when the event is signaled.\r
+ @param LegacyBootEvent Returns the EFI event returned from gBS->CreateEvent(Ex).\r
+\r
+ @retval EFI_SUCCESS Event was created.\r
+ @retval Other Event was not created.\r
+\r
+**/\r
+EFI_STATUS\r
+EFIAPI\r
+EfiCreateEventReadyToBootEx (\r
+ IN EFI_TPL NotifyTpl,\r
+ IN EFI_EVENT_NOTIFY NotifyFunction, OPTIONAL\r
+ IN VOID *NotifyContext, OPTIONAL\r
+ OUT EFI_EVENT *ReadyToBootEvent\r
+ );\r
+\r
+/**\r
+ Initialize a Firmware Volume (FV) Media Device Path node.\r
+ \r
+ Tiano extended the EFI 1.10 device path nodes. Tiano does not own this enum\r
+ so as we move to UEFI 2.0 support we must use a mechanism that conforms with\r
+ the UEFI 2.0 specification to define the FV device path. An UEFI GUIDed \r
+ device path is defined for Tiano extensions of device path. If the code \r
+ is compiled to conform with the UEFI 2.0 specification use the new device path\r
+ else use the old form for backwards compatability.\r
+\r
+ @param FvDevicePathNode Pointer to a FV device path node to initialize\r
+ @param NameGuid FV file name to use in FvDevicePathNode\r
+\r
+**/\r
+VOID\r
+EFIAPI\r
+EfiInitializeFwVolDevicepathNode (\r
+ IN OUT MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvDevicePathNode,\r
+ IN CONST EFI_GUID *NameGuid\r
+ );\r
+\r
+/**\r
+ Check to see if the Firmware Volume (FV) Media Device Path is valid \r
+ \r
+ Tiano extended the EFI 1.10 device path nodes. Tiano does not own this enum\r
+ so as we move to UEFI 2.0 support we must use a mechanism that conforms with\r
+ the UEFI 2.0 specification to define the FV device path. An UEFI GUIDed \r
+ device path is defined for Tiano extensions of device path. If the code \r
+ is compiled to conform with the UEFI 2.0 specification use the new device path\r
+ else use the old form for backwards compatability. The return value to this\r
+ function points to a location in FvDevicePathNode and it does not allocate\r
+ new memory for the GUID pointer that is returned.\r
+\r
+ @param FvDevicePathNode Pointer to FV device path to check.\r
+\r
+ @retval NULL FvDevicePathNode is not valid.\r
+ @retval Other FvDevicePathNode is valid and pointer to NameGuid was returned.\r
+\r
+**/\r
+EFI_GUID *\r
+EFIAPI\r
+EfiGetNameGuidFromFwVolDevicePathNode (\r
+ IN CONST MEDIA_FW_VOL_FILEPATH_DEVICE_PATH *FvDevicePathNode\r
+ );\r
+\r
+/** \r
+ Prints a formatted Unicode string to the console output device specified by \r
+ ConOut defined in the EFI_SYSTEM_TABLE.\r
+\r
+ This function prints a formatted Unicode string to the console output device \r
+ specified by ConOut in EFI_SYSTEM_TABLE and returns the number of Unicode \r
+ characters that printed to ConOut. If the length of the formatted Unicode \r
+ string is greater than PcdUefiLibMaxPrintBufferSize, then only the first \r
+ PcdUefiLibMaxPrintBufferSize characters are sent to ConOut.\r
+\r
+ @param Format Null-terminated Unicode format string.\r
+ @param ... VARARG list consumed to process Format.\r
+ If Format is NULL, then ASSERT().\r
+ If Format is not aligned on a 16-bit boundary, then ASSERT().\r
+\r
+**/\r
+UINTN\r
+EFIAPI\r
+Print (\r
+ IN CONST CHAR16 *Format,\r
+ ...\r
+ );\r
+\r
+/** \r
+ Prints a formatted Unicode string to the console output device specified by \r
+ StdErr defined in the EFI_SYSTEM_TABLE.\r
+\r
+ This function prints a formatted Unicode string to the console output device \r
+ specified by StdErr in EFI_SYSTEM_TABLE and returns the number of Unicode \r
+ characters that printed to StdErr. If the length of the formatted Unicode \r
+ string is greater than PcdUefiLibMaxPrintBufferSize, then only the first \r
+ PcdUefiLibMaxPrintBufferSize characters are sent to StdErr.\r
+\r
+ @param Format Null-terminated Unicode format string.\r
+ @param ... VARARG list consumed to process Format.\r
+ If Format is NULL, then ASSERT().\r
+ If Format is not aligned on a 16-bit boundary, then ASSERT().\r
+\r
+**/\r
+UINTN\r
+EFIAPI\r
+ErrorPrint (\r
+ IN CONST CHAR16 *Format,\r
+ ...\r
+ );\r
+\r
+/** \r
+ Prints a formatted ASCII string to the console output device specified by \r
+ ConOut defined in the EFI_SYSTEM_TABLE.\r
+\r
+ This function prints a formatted ASCII string to the console output device \r
+ specified by ConOut in EFI_SYSTEM_TABLE and returns the number of ASCII \r
+ characters that printed to ConOut. If the length of the formatted ASCII \r
+ string is greater than PcdUefiLibMaxPrintBufferSize, then only the first \r
+ PcdUefiLibMaxPrintBufferSize characters are sent to ConOut.\r
+\r
+ @param Format Null-terminated ASCII format string.\r
+ @param ... VARARG list consumed to process Format.\r
+ If Format is NULL, then ASSERT().\r
+ If Format is not aligned on a 16-bit boundary, then ASSERT().\r
+\r
+**/\r
+UINTN\r
+EFIAPI\r
+AsciiPrint (\r
+ IN CONST CHAR8 *Format,\r
+ ...\r
+ );\r
+\r
+/** \r
+ Prints a formatted ASCII string to the console output device specified by \r
+ StdErr defined in the EFI_SYSTEM_TABLE.\r
+\r
+ This function prints a formatted ASCII string to the console output device \r
+ specified by StdErr in EFI_SYSTEM_TABLE and returns the number of ASCII \r
+ characters that printed to StdErr. If the length of the formatted ASCII \r
+ string is greater than PcdUefiLibMaxPrintBufferSize, then only the first \r
+ PcdUefiLibMaxPrintBufferSize characters are sent to StdErr.\r
+\r
+ @param Format Null-terminated ASCII format string.\r
+ @param ... VARARG list consumed to process Format.\r
+ If Format is NULL, then ASSERT().\r
+ If Format is not aligned on a 16-bit boundary, then ASSERT().\r
+\r
+**/\r
+UINTN\r
+EFIAPI\r
+AsciiErrorPrint (\r
+ IN CONST CHAR8 *Format,\r
+ ...\r
+ );\r
+\r
+#endif\r