[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