/** @file | |
Null Platform Hook Library instance. | |
Copyright (c) 2010, Intel Corporation. All rights reserved.<BR> | |
SPDX-License-Identifier: BSD-2-Clause-Patent | |
**/ | |
#include <Base.h> | |
#include <Protocol/EmuThunk.h> | |
#include <Protocol/EmuGraphicsWindow.h> | |
#include <Protocol/EmuBlockIo.h> | |
#include <Protocol/SimpleFileSystem.h> | |
#include <Protocol/EmuThread.h> | |
#include <Library/BaseLib.h> | |
#include <Library/DevicePathToTextLib.h> | |
#include <Library/BaseMemoryLib.h> | |
#include <Library/DevicePathLib.h> | |
/** | |
Converts a Vendor device path structure to its string representative. | |
@param Str The string representative of input device. | |
@param DevPath The input device path structure. | |
@param DisplayOnly If DisplayOnly is TRUE, then the shorter text representation | |
of the display node is used, where applicable. If DisplayOnly | |
is FALSE, then the longer text representation of the display node | |
is used. | |
@param AllowShortcuts If AllowShortcuts is TRUE, then the shortcut forms of text | |
representation for a device node can be used, where applicable. | |
@return EFI_NOT_FOUND if no string representation exists. | |
@return EFI_SUCCESS a string representation was created. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
DevPathToTextVendorLib ( | |
IN OUT POOL_PRINT *Str, | |
IN VOID *DevPath, | |
IN BOOLEAN DisplayOnly, | |
IN BOOLEAN AllowShortcuts | |
) | |
{ | |
EMU_VENDOR_DEVICE_PATH_NODE *Vendor; | |
CHAR16 *Type; | |
Vendor = (EMU_VENDOR_DEVICE_PATH_NODE *)DevPath; | |
if (CompareGuid (&Vendor->VendorDevicePath.Guid, &gEmuThunkProtocolGuid)) { | |
CatPrint (Str, L"EmuThunk()"); | |
return EFI_SUCCESS; | |
} | |
if (CompareGuid (&Vendor->VendorDevicePath.Guid, &gEmuGraphicsWindowProtocolGuid)) { | |
CatPrint (Str, L"EmuGraphics(%d)", Vendor->Instance); | |
return EFI_SUCCESS; | |
} | |
if (CompareGuid (&Vendor->VendorDevicePath.Guid, &gEfiSimpleFileSystemProtocolGuid)) { | |
CatPrint (Str, L"EmuFs(%d)", Vendor->Instance); | |
return EFI_SUCCESS; | |
} | |
if (CompareGuid (&Vendor->VendorDevicePath.Guid, &gEmuBlockIoProtocolGuid)) { | |
CatPrint (Str, L"EmuBlk(%d)", Vendor->Instance); | |
return EFI_SUCCESS; | |
} | |
if (CompareGuid (&Vendor->VendorDevicePath.Guid, &gEmuThreadThunkProtocolGuid)) { | |
CatPrint (Str, L"EmuThread()"); | |
return EFI_SUCCESS; | |
} | |
return EFI_NOT_FOUND; | |
} | |
/** | |
Converts a text device path node to Hardware Vendor device path structure. | |
@param TextDeviceNode The input Text device path node. | |
@return A pointer to the newly-created Hardware Vendor device path structure. | |
**/ | |
EFI_DEVICE_PATH_PROTOCOL * | |
DevPathFromTextEmuThunk ( | |
IN CHAR16 *TextDeviceNode | |
) | |
{ | |
CHAR16 *Str; | |
VENDOR_DEVICE_PATH *Vendor; | |
Str = GetNextParamStr (&TextDeviceNode); | |
Vendor = (VENDOR_DEVICE_PATH *)CreateDeviceNode ( | |
HARDWARE_DEVICE_PATH, | |
HW_VENDOR_DP, | |
(UINT16)sizeof (VENDOR_DEVICE_PATH) | |
); | |
CopyGuid (&Vendor->Guid, &gEmuThunkProtocolGuid); | |
return (EFI_DEVICE_PATH_PROTOCOL *)Vendor; | |
} | |
/** | |
Converts a text device path node to Hardware Vendor device path structure. | |
@param TextDeviceNode The input Text device path node. | |
@return A pointer to the newly-created Hardware Vendor device path structure. | |
**/ | |
EFI_DEVICE_PATH_PROTOCOL * | |
DevPathFromTextEmuThread ( | |
IN CHAR16 *TextDeviceNode | |
) | |
{ | |
CHAR16 *Str; | |
VENDOR_DEVICE_PATH *Vendor; | |
Str = GetNextParamStr (&TextDeviceNode); | |
Vendor = (VENDOR_DEVICE_PATH *)CreateDeviceNode ( | |
HARDWARE_DEVICE_PATH, | |
HW_VENDOR_DP, | |
(UINT16)sizeof (VENDOR_DEVICE_PATH) | |
); | |
CopyGuid (&Vendor->Guid, &gEmuThreadThunkProtocolGuid); | |
return (EFI_DEVICE_PATH_PROTOCOL *)Vendor; | |
} | |
/** | |
Converts a text device path node to Hardware Vendor device path structure. | |
@param TextDeviceNode The input Text device path node. | |
@return A pointer to the newly-created Hardware Vendor device path structure. | |
**/ | |
EFI_DEVICE_PATH_PROTOCOL * | |
DevPathFromTextEmuFs ( | |
IN CHAR16 *TextDeviceNode | |
) | |
{ | |
CHAR16 *Str; | |
EMU_VENDOR_DEVICE_PATH_NODE *Vendor; | |
Str = GetNextParamStr (&TextDeviceNode); | |
Vendor = (EMU_VENDOR_DEVICE_PATH_NODE *)CreateDeviceNode ( | |
HARDWARE_DEVICE_PATH, | |
HW_VENDOR_DP, | |
(UINT16)sizeof (EMU_VENDOR_DEVICE_PATH_NODE) | |
); | |
CopyGuid (&Vendor->VendorDevicePath.Guid, &gEfiSimpleFileSystemProtocolGuid); | |
Vendor->Instance = (UINT32)StrDecimalToUintn (Str); | |
return (EFI_DEVICE_PATH_PROTOCOL *)Vendor; | |
} | |
/** | |
Register the Filter function | |
@param ImageHandle The firmware allocated handle for the EFI image. | |
@param SystemTable A pointer to the EFI System Table. | |
@retval EFI_SUCCESS The constructor executed correctly. | |
**/ | |
EFI_STATUS | |
EFIAPI | |
DevicePathToTextLibConstructor ( | |
IN EFI_HANDLE ImageHandle, | |
IN EFI_SYSTEM_TABLE *SystemTable | |
) | |
{ | |
DevPathToTextSetVendorDevicePathFilter (DevPathToTextVendorLib); | |
DevicePathFromTextAddFilter (L"EmuThunk", DevPathFromTextEmuThunk); | |
DevicePathFromTextAddFilter (L"EmuThread", DevPathFromTextEmuThread); | |
DevicePathFromTextAddFilter (L"EmuFs", DevPathFromTextEmuFs); | |
return EFI_SUCCESS; | |
} |