[edk2-devel] [edk2-platforms] [PATCH V1 4/5] BoardModulePkg: Add BdsSerialPortTerminalLib
Nate DeSimone
nathaniel.l.desimone at intel.com
Wed Jun 22 18:57:18 UTC 2022
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 at edk2.groups.io <devel at edk2.groups.io> On Behalf Of Nate DeSimone
Sent: Friday, June 17, 2022 9:06 PM
To: devel at edk2.groups.io
Cc: Dong, Eric <eric.dong at intel.com>; Oram, Isaac W <isaac.w.oram at intel.com>; Gao, Liming <gaoliming at byosoft.com.cn>; Chaganty, Rangasai V <rangasai.v.chaganty at intel.com>; Benjamin Doron <benjamin.doron00 at gmail.com>; Kubacki, Michael <michael.kubacki at microsoft.com>; Soller, Jeremy <jeremy at 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.dong at intel.com>
Cc: Isaac Oram <isaac.w.oram at intel.com>
Cc: Liming Gao <gaoliming at byosoft.com.cn>
Cc: Sai Chaganty <rangasai.v.chaganty at intel.com>
Cc: Benjamin Doron <benjamin.doron00 at gmail.com>
Cc: Michael Kubacki <michael.kubacki at microsoft.com>
Cc: Jeremy Soller <jeremy at system76.com>
Signed-off-by: Nate DeSimone <nathaniel.l.desimone at 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/1813853
Group Owner: devel+owner at edk2.groups.io
Unsubscribe: https://edk2.groups.io/g/devel/unsub [edk2-devel-archive at redhat.com]
-=-=-=-=-=-=-=-=-=-=-=-
More information about the edk2-devel-archive
mailing list