[prev in list] [next in list] [prev in thread] [next in thread]
List: haiku-commits
Subject: [haiku-commits] haiku: hrev55663 - src/system/kernel/arch/arm
From: Adrien Destugues <pulkomandy () gmail ! com>
Date: 2021-11-24 13:38:17
Message-ID: 20211124133817.A25EC40736 () turing ! freelists ! org
[Download RAW message or body]
hrev55663 adds 1 changeset to branch 'master'
old head: 750ed8dd4136fb19dd8876bad087848e5c31e33e
new head: 191fa37376cec123f2bf43d226a0d8e89c6fdc05
overview: https://git.haiku-os.org/haiku/log/?qt=range&q=191fa37376ce+%5E750ed8dd4136
----------------------------------------------------------------------------
191fa37376ce: kernel/uart: fix GetChar for PL011
Check RX buffer status when GetChar is called in no-wait mode.
This fixes an 'infinite keypress' issue that used to occur
after 16 keypresses.
Change-Id: I47762de387b07c4fed46cc192cd3b81fdabfb270
Reviewed-on: https://review.haiku-os.org/c/haiku/+/4732
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>
[ David Karoly <karolyd577@gmail.com> ]
----------------------------------------------------------------------------
Revision: hrev55663
Commit: 191fa37376cec123f2bf43d226a0d8e89c6fdc05
URL: https://git.haiku-os.org/haiku/commit/?id=191fa37376ce
Author: David Karoly <karolyd577@gmail.com>
Date: Wed Nov 24 13:29:41 2021 UTC
Committer: Adrien Destugues <pulkomandy@gmail.com>
Commit-Date: Wed Nov 24 13:38:14 2021 UTC
----------------------------------------------------------------------------
1 file changed, 5 insertions(+), 1 deletion(-)
src/system/kernel/arch/arm/arch_uart_pl011.cpp | 6 +++++-
----------------------------------------------------------------------------
diff --git a/src/system/kernel/arch/arm/arch_uart_pl011.cpp \
b/src/system/kernel/arch/arm/arch_uart_pl011.cpp index b2f23886e2..194c6a1a64 100644
--- a/src/system/kernel/arch/arm/arch_uart_pl011.cpp
+++ b/src/system/kernel/arch/arm/arch_uart_pl011.cpp
@@ -289,10 +289,14 @@ int
ArchUARTPL011::GetChar(bool wait)
{
if (Enabled() == true) {
- // Wait until a character is received?
if (wait) {
+ // Wait until a character is received
while ((In32(PL01x_FR) & PL01x_FR_RXFE) != 0)
Barrier();
+ } else {
+ // Check if there is any data available in RX fifo
+ if ((In32(PL01x_FR) & PL01x_FR_RXFE) != 0)
+ return -1;
}
return In32(PL01x_DR);
}
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic