[prev in list] [next in list] [prev in thread] [next in thread] 

List:       haiku-commits
Subject:    [haiku-commits] Change in haiku[master]: kernel/uart: fix GetChar for PL011
From:       Gerrit <review () review ! haiku-os ! org>
Date:       2021-11-24 13:34:35
Message-ID: gerrit.1637760873000.I47762de387b07c4fed46cc192cd3b81fdabfb270 () review ! haiku-os ! org
[Download RAW message or body]

From <karolyd577@gmail.com>:

karolyd577@gmail.com has uploaded this change for review. ( \
https://review.haiku-os.org/c/haiku/+/4732 )


Change subject: kernel/uart: fix GetChar for PL011
......................................................................

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
---
M src/system/kernel/arch/arm/arch_uart_pl011.cpp
1 file changed, 5 insertions(+), 1 deletion(-)



  git pull ssh://git.haiku-os.org:22/haiku refs/changes/32/4732/1

diff --git a/src/system/kernel/arch/arm/arch_uart_pl011.cpp \
b/src/system/kernel/arch/arm/arch_uart_pl011.cpp index b2f2388..194c6a1 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 @@
 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);
 	}

--
To view, visit https://review.haiku-os.org/c/haiku/+/4732
To unsubscribe, or for help writing mail filters, visit \
https://review.haiku-os.org/settings

Gerrit-Project: haiku
Gerrit-Branch: master
Gerrit-Change-Id: I47762de387b07c4fed46cc192cd3b81fdabfb270
Gerrit-Change-Number: 4732
Gerrit-PatchSet: 1
Gerrit-Owner: karolyd577@gmail.com
Gerrit-MessageType: newchange


[Attachment #3 (text/html)]

<p>karolyd577@gmail.com has uploaded this change for \
<strong>review</strong>.</p><p><a \
href="https://review.haiku-os.org/c/haiku/+/4732">View Change</a></p><pre \
style="font-family: monospace,monospace; white-space: pre-wrap;">kernel/uart: fix \
GetChar for PL011<br><br>Check RX buffer status when GetChar is called in no-wait \
mode.<br>This fixes an &#39;infinite keypress&#39; issue that used to occur<br>after \
16 keypresses.<br><br>Change-Id: \
I47762de387b07c4fed46cc192cd3b81fdabfb270<br>---<br>M \
src/system/kernel/arch/arm/arch_uart_pl011.cpp<br>1 file changed, 5 insertions(+), 1 \
deletion(-)<br><br></pre><pre style="font-family: monospace,monospace; white-space: \
pre-wrap;">git pull ssh://git.haiku-os.org:22/haiku refs/changes/32/4732/1</pre><pre \
style="font-family: monospace,monospace; white-space: pre-wrap;"><span>diff --git \
a/src/system/kernel/arch/arm/arch_uart_pl011.cpp \
b/src/system/kernel/arch/arm/arch_uart_pl011.cpp</span><br><span>index \
b2f2388..194c6a1 100644</span><br><span>--- \
a/src/system/kernel/arch/arm/arch_uart_pl011.cpp</span><br><span>+++ \
b/src/system/kernel/arch/arm/arch_uart_pl011.cpp</span><br><span>@@ -289,10 +289,14 \
@@</span><br><span> ArchUARTPL011::GetChar(bool wait)</span><br><span> \
{</span><br><span> 	if (Enabled() == true) {</span><br><span style="color: hsl(0, \
100%, 40%);">-		// Wait until a character is received?</span><br><span> 		if (wait) \
{</span><br><span style="color: hsl(120, 100%, 40%);">+			// Wait until a character \
is received</span><br><span> 			while ((In32(PL01x_FR) &amp; PL01x_FR_RXFE) != \
0)</span><br><span> 				Barrier();</span><br><span style="color: hsl(120, 100%, \
40%);">+		} else {</span><br><span style="color: hsl(120, 100%, 40%);">+			// Check \
if there is any data available in RX fifo</span><br><span style="color: hsl(120, \
100%, 40%);">+			if ((In32(PL01x_FR) &amp; PL01x_FR_RXFE) != 0)</span><br><span \
style="color: hsl(120, 100%, 40%);">+				return -1;</span><br><span> \
}</span><br><span> 		return In32(PL01x_DR);</span><br><span> \
}</span><br><span></span><br></pre><p>To view, visit <a \
href="https://review.haiku-os.org/c/haiku/+/4732">change 4732</a>. To unsubscribe, or \
for help writing mail filters, visit <a \
href="https://review.haiku-os.org/settings">settings</a>.</p><div itemscope \
itemtype="http://schema.org/EmailMessage"><div itemscope itemprop="action" \
itemtype="http://schema.org/ViewAction"><link itemprop="url" \
href="https://review.haiku-os.org/c/haiku/+/4732"/><meta itemprop="name" \
content="View Change"/></div></div>

<div style="display:none"> Gerrit-Project: haiku </div>
<div style="display:none"> Gerrit-Branch: master </div>
<div style="display:none"> Gerrit-Change-Id: \
I47762de387b07c4fed46cc192cd3b81fdabfb270 </div> <div style="display:none"> \
Gerrit-Change-Number: 4732 </div> <div style="display:none"> Gerrit-PatchSet: 1 \
</div> <div style="display:none"> Gerrit-Owner: karolyd577@gmail.com </div>
<div style="display:none"> Gerrit-MessageType: newchange </div>



[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic