From af1a266670d040d2f4083ff309d732d648afba2a Mon Sep 17 00:00:00 2001 From: Angelos Mouzakitis Date: Tue, 10 Oct 2023 14:33:42 +0000 Subject: Add submodule dependency files Change-Id: Iaf8d18082d3991dec7c0ebbea540f092188eb4ec --- .../Library/DevicePathTextLib/DevicePathTextLib.c | 177 +++++++++++++++++++++ 1 file changed, 177 insertions(+) create mode 100644 roms/edk2/EmulatorPkg/Library/DevicePathTextLib/DevicePathTextLib.c (limited to 'roms/edk2/EmulatorPkg/Library/DevicePathTextLib/DevicePathTextLib.c') diff --git a/roms/edk2/EmulatorPkg/Library/DevicePathTextLib/DevicePathTextLib.c b/roms/edk2/EmulatorPkg/Library/DevicePathTextLib/DevicePathTextLib.c new file mode 100644 index 000000000..e636207a0 --- /dev/null +++ b/roms/edk2/EmulatorPkg/Library/DevicePathTextLib/DevicePathTextLib.c @@ -0,0 +1,177 @@ +/** @file + Null Platform Hook Library instance. + + Copyright (c) 2010, Intel Corporation. All rights reserved.
+ SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include + +#include +#include +#include +#include +#include + +#include +#include +#include +#include + + +/** + 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; +} -- cgit