1 /** @file
2   Main file for NULL named library for Serial Port Terminal Redirection library.
3 
4   Copyright (c) 2020, Intel Corporation. All rights reserved.<BR>
5   SPDX-License-Identifier: BSD-2-Clause-Patent
6 
7 **/
8 
9 #include "SerialPortTerminalLib.h"
10 
11 GLOBAL_REMOVE_IF_UNREFERENCED SERIAL_DEVICE_PATH mSerialDevicePath = {
12   {
13     {
14       HARDWARE_DEVICE_PATH,
15       HW_VENDOR_DP,
16       {
17         (UINT8) sizeof (VENDOR_DEVICE_PATH),
18         (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8)
19       }
20     },
21     EDKII_SERIAL_PORT_LIB_VENDOR_GUID
22   },
23   {
24     {
25       MESSAGING_DEVICE_PATH,
26       MSG_UART_DP,
27       {
28         (UINT8) sizeof (UART_DEVICE_PATH),
29         (UINT8) ((sizeof (UART_DEVICE_PATH)) >> 8)
30       }
31     },
32     0,                  // Reserved
33     0,                  // BaudRate
34     0,                  // DataBits
35     0,                  // Parity
36     0                   // StopBits
37   },
38   {
39     {
40       MESSAGING_DEVICE_PATH,
41       MSG_VENDOR_DP,
42       {
43         (UINT8) (sizeof (VENDOR_DEVICE_PATH)),
44         (UINT8) ((sizeof (VENDOR_DEVICE_PATH)) >> 8),
45       }
46     },
47     DEVICE_PATH_MESSAGING_PC_ANSI
48   },
49   gEndEntire
50 };
51 
52 /**
53   Updates the ConOut, ConIn, ErrOut variables with the serial terminal device path
54   @param                        none
55   @retval                       none
56 **/
57 VOID
58 AddSerialTerminal (
59   VOID
60   )
61 {
62   DEBUG ((DEBUG_INFO, "[AddSerialPortTerminal]\n"));
63 
64   //
65   // Append Serial Terminal into "ConIn"
66   //
67   EfiBootManagerUpdateConsoleVariable (ConOut, (EFI_DEVICE_PATH_PROTOCOL *) &mSerialDevicePath, NULL);
68   EfiBootManagerUpdateConsoleVariable (ConIn, (EFI_DEVICE_PATH_PROTOCOL *) &mSerialDevicePath, NULL);
69   EfiBootManagerUpdateConsoleVariable (ErrOut, (EFI_DEVICE_PATH_PROTOCOL *) &mSerialDevicePath, NULL);
70 }
71 
72 
73 /**
74   Constructor for the Serial Port Device controller library.
75 
76   @param ImageHandle    the image handle of the process
77   @param SystemTable    the EFI System Table pointer
78 
79   @retval EFI_SUCCESS        the shell command handlers were installed sucessfully
80   @retval EFI_UNSUPPORTED    the shell level required was not found.
81 **/
82 EFI_STATUS
83 EFIAPI
84 SerialPortTerminalLibConstructor (
85   IN EFI_HANDLE        ImageHandle,
86   IN EFI_SYSTEM_TABLE  *SystemTable
87   )
88 {
89   mSerialDevicePath.Uart.BaudRate = PcdGet64(PcdUartDefaultBaudRate);
90   mSerialDevicePath.Uart.DataBits = PcdGet8(PcdUartDefaultDataBits);
91   mSerialDevicePath.Uart.Parity   = PcdGet8(PcdUartDefaultParity);
92   mSerialDevicePath.Uart.StopBits = PcdGet8(PcdUartDefaultStopBits);
93   DEBUG ((DEBUG_INFO, "[SerialPortTerminalLibConstructor] [%d, %d, %d, %d]\n",
94       mSerialDevicePath.Uart.BaudRate,
95       mSerialDevicePath.Uart.DataBits,
96       mSerialDevicePath.Uart.Parity,
97       mSerialDevicePath.Uart.StopBits));
98 
99   AddSerialTerminal();
Melder_isHorizontalSpace(char32 kar)100 
101   return EFI_SUCCESS;
102 }
Melder_skipHorizontalSpace(char32 ** p_text)103