From ea01261940dcd243dad3478d9d25f3904a245b8e Mon Sep 17 00:00:00 2001 From: Laszlo Ersek Date: Thu, 21 Jan 2016 00:29:07 +0000 Subject: MdeModulePkg: SerialDxe: sync EFI_SERIAL_IO_MODE.Timeout with the spec In "11.8 Serial I/O Protocol", UEFI 2.5 requires: The default attributes for all UART-style serial device interfaces are: (a) 115,200 baud, (b) a 1 byte receive FIFO, (c) a 1,000,000 microsecond timeout per character, (d) no parity, (e) 8 data bits, (f) and 1 stop bit. It also says, about the EFI_SERIAL_IO_MODE.ControlMask member: (g) A mask of the Control bits that the device supports. The device must always support the Input Buffer Empty control bit. SerialDxe complies with requirement (b) via hard-coded constants. It complies with requirements (a), (d), (e) and (f) through PCD defaults (see MdePkg/MdePkg.dec): (a) 115,200 baud: gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|115200|UINT64|0x00000020 (d) no parity: # 1 - No Parity.
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultParity|1|UINT8|0x00000022 (e) 8 data bits: gEfiMdePkgTokenSpaceGuid.PcdUartDefaultDataBits|8|UINT8|0x00000021 (f) 1 stop bit: # 1 - One Stop Bit.
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultStopBits|1|UINT8|0x00000023 SerialDxe does not comply with requirements (c) and (g). In this patch, we fix (c), and leave (g) for later. Cc: Ard Biesheuvel Cc: Ryan Harkin Cc: Leif Lindholm Cc: Star Zeng Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Laszlo Ersek Tested-by: Ard Biesheuvel Reviewed-by: Ard Biesheuvel Tested-by: Ryan Harkin Reviewed-by: Star Zeng git-svn-id: https://svn.code.sf.net/p/edk2/code/trunk/edk2@19700 6f19259b-4bc3-4df7-8a09-765794883524 --- MdeModulePkg/Universal/SerialDxe/SerialIo.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/MdeModulePkg/Universal/SerialDxe/SerialIo.c b/MdeModulePkg/Universal/SerialDxe/SerialIo.c index 489a4a201a..f5b3064926 100644 --- a/MdeModulePkg/Universal/SerialDxe/SerialIo.c +++ b/MdeModulePkg/Universal/SerialDxe/SerialIo.c @@ -185,7 +185,7 @@ EFI_SERIAL_IO_MODE mSerialIoMode = { // value field set in SerialDxeInitialize()? //--------- ------------------- ----------------------------- 0, // ControlMask - 0, // Timeout + 1000 * 1000, // Timeout 0, // BaudRate yes 1, // ReceiveFifoDepth 0, // DataBits yes @@ -237,7 +237,7 @@ SerialReset ( // Set the Serial I/O mode // This->Mode->ReceiveFifoDepth = 1; - This->Mode->Timeout = 0; + This->Mode->Timeout = 1000 * 1000; This->Mode->BaudRate = PcdGet64 (PcdUartDefaultBaudRate); This->Mode->DataBits = (UINT32) PcdGet8 (PcdUartDefaultDataBits); This->Mode->Parity = (UINT32) PcdGet8 (PcdUartDefaultParity); -- cgit v1.2.3