This appears to be mostly redundant with MinPlatformPkg\Library\SerialPortTerminalLib.
The only feature my implementation has the current one does not is the ability to change the terminal type. I'll add that feature to the existing library and remove this patch from the series. Thanks, Nate -----Original Message----- From: devel@edk2.groups.io <devel@edk2.groups.io> On Behalf Of Nate DeSimone Sent: Friday, June 17, 2022 9:06 PM To: devel@edk2.groups.io Cc: Dong, Eric <eric.d...@intel.com>; Oram, Isaac W <isaac.w.o...@intel.com>; Gao, Liming <gaolim...@byosoft.com.cn>; Chaganty, Rangasai V <rangasai.v.chaga...@intel.com>; Benjamin Doron <benjamin.doro...@gmail.com>; Kubacki, Michael <michael.kuba...@microsoft.com>; Soller, Jeremy <jer...@system76.com> Subject: [edk2-devel] [edk2-platforms] [PATCH V1 4/5] BoardModulePkg: Add BdsSerialPortTerminalLib BdsSerialPortTerminalLib add a terminal device to the Serial UART device created by MdeModulePkg/Universal/SerialDxe to the UEFI Console Variables (ConIn, ConOut, ErrOut). This allows BIOS Setup, UEFI Shell, etc. to be used on a headless system via a null modem and terminal emulation software. Cc: Eric Dong <eric.d...@intel.com> Cc: Isaac Oram <isaac.w.o...@intel.com> Cc: Liming Gao <gaolim...@byosoft.com.cn> Cc: Sai Chaganty <rangasai.v.chaga...@intel.com> Cc: Benjamin Doron <benjamin.doro...@gmail.com> Cc: Michael Kubacki <michael.kuba...@microsoft.com> Cc: Jeremy Soller <jer...@system76.com> Signed-off-by: Nate DeSimone <nathaniel.l.desim...@intel.com> --- .../Intel/BoardModulePkg/BoardModulePkg.dsc | 3 +- .../BdsSerialPortTerminalLib.c | 114 ++++++++++++++++++ .../BdsSerialPortTerminalLib.h | 53 ++++++++ .../BdsSerialPortTerminalLib.inf | 49 ++++++++ 4 files changed, 218 insertions(+), 1 deletion(-) create mode 100644 Platform/Intel/BoardModulePkg/Library/BdsSerialPortTerminalLib/BdsSerialPortTerminalLib.c create mode 100644 Platform/Intel/BoardModulePkg/Library/BdsSerialPortTerminalLib/BdsSerialPortTerminalLib.h create mode 100644 Platform/Intel/BoardModulePkg/Library/BdsSerialPortTerminalLib/BdsSerialPortTerminalLib.inf diff --git a/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc b/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc index 9f00592a19..c93b536f0d 100644 --- a/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc +++ b/Platform/Intel/BoardModulePkg/BoardModulePkg.dsc @@ -6,7 +6,7 @@ # INF files to generate AutoGen.c and AutoGen.h files # for the build infrastructure. # -# Copyright (c) 2019 - 2021, Intel Corporation. All rights reserved.<BR> +# Copyright (c) 2019 - 2022, Intel Corporation. All rights +reserved.<BR> # # SPDX-License-Identifier: BSD-2-Clause-Patent # @@ -91,3 +91,4 @@ BoardModulePkg/Library/PeiFirmwareBootMediaInfoLib/PeiFirmwareBootMediaInfoLib.inf BoardModulePkg/Library/BdsPs2KbcLib/BdsPs2KbcLib.inf + + BoardModulePkg/Library/BdsSerialPortTerminalLib/BdsSerialPortTerminalL + ib.inf diff --git a/Platform/Intel/BoardModulePkg/Library/BdsSerialPortTerminalLib/BdsSerialPortTerminalLib.c b/Platform/Intel/BoardModulePkg/Library/BdsSerialPortTerminalLib/BdsSerialPortTerminalLib.c new file mode 100644 index 0000000000..178ca2b3ac --- /dev/null +++ b/Platform/Intel/BoardModulePkg/Library/BdsSerialPortTerminalLib/Bds +++ SerialPortTerminalLib.c @@ -0,0 +1,114 @@ +/** @file + Main file for NULL named library that adds a Terminal Device +connected + to SerialDxe to the UEFI Console Variables. This allows BIOS Setup, +UEFI + Shell, etc. to be used on a headless system via a null modem and +terminal + emulator. + + Copyright (c) 2022, Intel Corporation. All rights reserved.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#include "BdsSerialPortTerminalLib.h" + +GLOBAL_REMOVE_IF_UNREFERENCED EFI_GUID *mTerminalType[] = { + &gEfiPcAnsiGuid, + &gEfiVT100Guid, + &gEfiVT100PlusGuid, + &gEfiVTUTF8Guid, + &gEfiTtyTermGuid +}; + +GLOBAL_REMOVE_IF_UNREFERENCED SERIAL_DEVICE_PATH mSerialDevicePath = { + { + { + HARDWARE_DEVICE_PATH, + HW_VENDOR_DP, + { + (UINT8) sizeof (VENDOR_DEVICE_PATH), + (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8) + } + }, + EDKII_SERIAL_PORT_LIB_VENDOR_GUID + }, + { + { + MESSAGING_DEVICE_PATH, + MSG_UART_DP, + { + (UINT8) sizeof (UART_DEVICE_PATH), + (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8) + } + }, + 0, // Reserved + 115200, // BaudRate + 8, // DataBits + 1, // Parity + 1 // StopBits + }, + { + { + MESSAGING_DEVICE_PATH, + MSG_VENDOR_DP, + { + (UINT8) (sizeof (VENDOR_DEVICE_PATH)), + (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8), + } + }, + DEVICE_PATH_MESSAGING_PC_ANSI + }, + gEndEntire +}; + +/** + Updates the ConOut, ConIn, ErrOut variables with the serial terminal device path + @param none + @retval none +**/ +VOID +AddSerialTerminal ( + VOID + ) +{ + DEBUG ((DEBUG_INFO, "[AddSerialPortTerminal]\n")); + + // + // Update the Terminal Device Configuration Parameters // + mSerialDevicePath.Uart.BaudRate = PcdGet64 (PcdUartDefaultBaudRate); + mSerialDevicePath.Uart.DataBits = PcdGet8 (PcdUartDefaultDataBits); + mSerialDevicePath.Uart.Parity = PcdGet8 (PcdUartDefaultParity); + mSerialDevicePath.Uart.StopBits = PcdGet8 (PcdUartDefaultStopBits); + CopyMem ( + (VOID *) &(mSerialDevicePath.TerminalType.Guid), + (VOID *) mTerminalType[PcdGet8 (PcdDefaultTerminalType)], + sizeof (EFI_GUID) + ); + + // + // Append Serial Terminal into "ConIn", "ConOut", and "ErrOut" + // + EfiBootManagerUpdateConsoleVariable (ConOut, +(EFI_DEVICE_PATH_PROTOCOL *) &mSerialDevicePath, NULL); + EfiBootManagerUpdateConsoleVariable (ConIn, (EFI_DEVICE_PATH_PROTOCOL +*) &mSerialDevicePath, NULL); + EfiBootManagerUpdateConsoleVariable (ErrOut, +(EFI_DEVICE_PATH_PROTOCOL *) &mSerialDevicePath, NULL); } + +/** + Constructor for the Serial Port Terminal Device library. + + @param ImageHandle The Image Handle of the process + @param SystemTable The EFI System Table pointer + + @retval EFI_SUCCESS The Serial Port Terminal Device was installed successfully +**/ +EFI_STATUS +EFIAPI +SerialPortTerminalLibConstructor ( + IN EFI_HANDLE ImageHandle, + IN EFI_SYSTEM_TABLE *SystemTable + ) +{ + AddSerialTerminal (); + + return EFI_SUCCESS; +} diff --git a/Platform/Intel/BoardModulePkg/Library/BdsSerialPortTerminalLib/BdsSerialPortTerminalLib.h b/Platform/Intel/BoardModulePkg/Library/BdsSerialPortTerminalLib/BdsSerialPortTerminalLib.h new file mode 100644 index 0000000000..39d6486712 --- /dev/null +++ b/Platform/Intel/BoardModulePkg/Library/BdsSerialPortTerminalLib/Bds +++ SerialPortTerminalLib.h @@ -0,0 +1,53 @@ +/** @file + Header file for NULL named library that adds a Terminal Device + connected to SerialDxe to the UEFI Console Variables. This allows +BIOS Setup, + UEFI Shell, etc. to be used on a headless system via a null modem and +terminal + emulator. + + Copyright (c) 2022, Intel Corporation. All rights reserved.<BR> + SPDX-License-Identifier: BSD-2-Clause-Patent + +**/ + +#ifndef BDS_SERIAL_PORT_TERMINAL_LIB_H_ #define +BDS_SERIAL_PORT_TERMINAL_LIB_H_ + +#include <Uefi.h> +#include <Guid/SerialPortLibVendor.h> +#include <Library/UefiLib.h> +#include <Library/BaseMemoryLib.h> +#include <Library/DevicePathLib.h> +#include <Library/DebugLib.h> +#include <Library/PcdLib.h> +#include <Library/UefiBootManagerLib.h> + +// +// Below is the platform console device path // typedef struct { + VENDOR_DEVICE_PATH Guid; + UART_DEVICE_PATH Uart; + VENDOR_DEVICE_PATH TerminalType; + EFI_DEVICE_PATH_PROTOCOL End; +} SERIAL_DEVICE_PATH; + +#define gPciRootBridge \ + { \ + { \ + ACPI_DEVICE_PATH, \ + ACPI_DP, \ + { \ + (UINT8) (sizeof (ACPI_HID_DEVICE_PATH)), \ + (UINT8) ((sizeof (ACPI_HID_DEVICE_PATH)) >> 8) \ + }, \ + }, \ + EISA_PNP_ID (0x0A03), \ + 0 \ + } + +#define gEndEntire \ + { \ + END_DEVICE_PATH_TYPE, END_ENTIRE_DEVICE_PATH_SUBTYPE, { +END_DEVICE_PATH_LENGTH, 0 } \ + } + +#endif diff --git a/Platform/Intel/BoardModulePkg/Library/BdsSerialPortTerminalLib/BdsSerialPortTerminalLib.inf b/Platform/Intel/BoardModulePkg/Library/BdsSerialPortTerminalLib/BdsSerialPortTerminalLib.inf new file mode 100644 index 0000000000..befaeee3e5 --- /dev/null +++ b/Platform/Intel/BoardModulePkg/Library/BdsSerialPortTerminalLib/Bds +++ SerialPortTerminalLib.inf @@ -0,0 +1,49 @@ +## @file +# Component information file for NULL named library that adds a +Terminal Device # connected to SerialDxe to the UEFI Console Variables. +This allows BIOS # Setup, UEFI Shell, etc. to be used on a headless +system via a null modem and # terminal emulator. +# +# Copyright (c) 2022, Intel Corporation. All rights reserved.<BR> # # +SPDX-License-Identifier: BSD-2-Clause-Patent # ## [Defines] + INF_VERSION = 0x00010006 + BASE_NAME = SerialPortTerminalLib + FILE_GUID = E12BFA46-95F2-4ADC-9774-7E38DE78741E + MODULE_TYPE = UEFI_DRIVER + VERSION_STRING = 1.2 + LIBRARY_CLASS = NULL|UEFI_DRIVER + CONSTRUCTOR = SerialPortTerminalLibConstructor + +[Packages] + MdePkg/MdePkg.dec + MdeModulePkg/MdeModulePkg.dec + +[Sources] + BdsSerialPortTerminalLib.c + BdsSerialPortTerminalLib.h + +[LibraryClasses] + BaseMemoryLib + DevicePathLib + DebugLib + UefiDriverEntryPoint + UefiBootManagerLib + UefiLib + +[Guids] + gEfiPcAnsiGuid + gEfiVT100Guid + gEfiVT100PlusGuid + gEfiVTUTF8Guid + gEfiTtyTermGuid + +[Pcd] + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity + gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits + gEfiMdePkgTokenSpaceGuid.PcdDefaultTerminalType -- 2.27.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#90694): https://edk2.groups.io/g/devel/message/90694 Mute This Topic: https://groups.io/mt/91928661/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-