Revision: 19701
http://sourceforge.net/p/edk2/code/19701
Author: lersek
Date: 2016-01-21 00:29:12 +0000 (Thu, 21 Jan 2016)
Log Message:
-----------
MdeModulePkg: TerminalDxe: select the UART's default receive FIFO depth
The Serial IO protocol instances provided by SerialDxe and consumed by
TerminalDxe come with a Mode.ReceiveFifoDepth=1 default setting, as
required by UEFI 2.5.
Although TerminalDxe calls EFI_SERIAL_IO_PROTOCOL.SetAttributes() in the
TerminalDriverBindingStart() and TerminalConInTimerHandler() functions, it
only does so to change the Mode.Timeout member. Other members of Mode,
including Mode.ReceiveFifoDepth, are preserved.
On some platforms this causes the UART that underlies TerminalDxe not to
have enough room for bursts of scan codes, which translates to broken
parsing of escape sequences, e.g. cursor movement keys.
According to the UEFI spec, passing ReceiveFifoDepth=0 to
EFI_SERIAL_IO_PROTOCOL.SetAttributes() "will use the device's default FIFO
depth". While TerminalDxe could try to configure a receive FIFO depth that
matches the longest escape sequence it wishes to parse, in practice the
device-specific default FIFO depth -- which may well differ from the
spec-mandated SerialIo->Mode.ReceiveFifoDepth=1 default -- seems to work.
Hence let's just set that.
This issue was exposed by SVN r18971 / git commit 921e987b2b
("ArmPlatformPkg: Use SerialDxe in MdeModulePkg instead of EmbeddedPkg").
In that conversion, MdeModulePkg's SerialDxe started to initialize
Mode.ReceiveFifoDepth to 1 (in conformance with the spec), unlike the
prior, non-conformant initialization to 0 in EmbeddedPkg's SerialDxe.
Since TerminalDxe would never change ReceiveFifoDepth from the new default
value 1, and the ArmPlatformPkg/Drivers/PL011Uart library instance,
underlying SerialDxe through SerialPortLib, would obey it too, they would
collectively effect a receive queue depth of 1, rather than the default 16
or 32. This broke cursor keys on the ARM FVP and Juno platforms.
It is the client of EFI_SERIAL_IO_PROTOCOL that is responsible for
modifying the attributes, if the defaults are not appropriate, hence this
patch modifies TerminalDxe.
Cc: Ard Biesheuvel <[email protected]>
Cc: Ryan Harkin <[email protected]>
Cc: Leif Lindholm <[email protected]>
Cc: Star Zeng <[email protected]>
Reported-by: Ryan Harkin <[email protected]>
Reference: http://thread.gmane.org/gmane.comp.bios.edk2.devel/4779/focus=6553
Reference: http://thread.gmane.org/gmane.comp.bios.edk2.devel/6594
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Laszlo Ersek <[email protected]>
Tested-by: Ard Biesheuvel <[email protected]>
Reviewed-by: Ard Biesheuvel <[email protected]>
Tested-by: Ryan Harkin <[email protected]>
Reviewed-by: Star Zeng <[email protected]>
Revision Links:
--------------
http://sourceforge.net/p/edk2/code/18971
Modified Paths:
--------------
trunk/edk2/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
trunk/edk2/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
Modified: trunk/edk2/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
2016-01-21 00:29:07 UTC (rev 19700)
+++ trunk/edk2/MdeModulePkg/Universal/Console/TerminalDxe/Terminal.c
2016-01-21 00:29:12 UTC (rev 19701)
@@ -806,7 +806,7 @@
Status = TerminalDevice->SerialIo->SetAttributes (
TerminalDevice->SerialIo,
Mode->BaudRate,
- Mode->ReceiveFifoDepth,
+ 0, // the device's default FIFO depth
(UINT32) SerialInTimeOut,
(EFI_PARITY_TYPE) (Mode->Parity),
(UINT8) Mode->DataBits,
Modified: trunk/edk2/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
===================================================================
--- trunk/edk2/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
2016-01-21 00:29:07 UTC (rev 19700)
+++ trunk/edk2/MdeModulePkg/Universal/Console/TerminalDxe/TerminalConIn.c
2016-01-21 00:29:12 UTC (rev 19701)
@@ -547,7 +547,7 @@
Status = SerialIo->SetAttributes (
SerialIo,
Mode->BaudRate,
- Mode->ReceiveFifoDepth,
+ 0, // the device's default FIFO depth
(UINT32) SerialInTimeOut,
(EFI_PARITY_TYPE) (Mode->Parity),
(UINT8) Mode->DataBits,
------------------------------------------------------------------------------
Site24x7 APM Insight: Get Deep Visibility into Application Performance
APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month
Monitor end-to-end web transactions and take corrective actions now
Troubleshoot faster and improve end-user experience. Signup Now!
http://pubads.g.doubleclick.net/gampad/clk?id=267308311&iu=/4140
_______________________________________________
edk2-commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/edk2-commits