NetBSD-Bugs archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
Re: port-i386/44563: boot loader prompt doesn't read keyboard input on a MacBook1,1
The following reply was made to PR port-i386/44563; it has been noted by GNATS.
From: Taylor R Campbell <campbell+netbsd%mumble.net@localhost>
To: gnats-bugs%NetBSD.org@localhost, port-i386-maintainer%netbsd.org@localhost,
gnats-admin%netbsd.org@localhost, netbsd-bugs%netbsd.org@localhost
Cc:
Subject: Re: port-i386/44563: boot loader prompt doesn't read keyboard input on
a MacBook1,1
Date: Mon, 14 Feb 2011 22:19:54 +0000
Date: Sun, 13 Feb 2011 22:32:49 +0000 (UTC)
From: Taylor R Campbell <campbell+netbsd%mumble.net@localhost>
I tried adapting getchar in pcio.c to wait POLL_FREQ intervals
in a loop until iskey(0) returns true before calling consgetc,
but that didn't help.
I must have botched that, because I just tried it again and now it
works. Here are two patches, both of which I have confirmed to work.
The first is simpler but makes some redundant BIOS calls in awaitkey;
the second avoids them, and is more general but perhaps needlessly so.
Index: pcio.c
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/stand/lib/pcio.c,v
retrieving revision 1.23.8.2
diff -p -u -r1.23.8.2 pcio.c
--- pcio.c 28 Nov 2009 15:40:47 -0000 1.23.8.2
+++ pcio.c 14 Feb 2011 22:16:53 -0000
@@ -265,6 +265,8 @@ getchar(void)
default: /* to make gcc -Wall happy... */
case CONSDEV_PC:
#endif
+ while (!coniskey())
+ wait(POLL_FREQ);
c = congetc();
#ifdef CONSOLE_KEYMAP
{
Index: pcio.c
===================================================================
RCS file: /cvsroot/src/sys/arch/i386/stand/lib/pcio.c,v
retrieving revision 1.23.8.2
diff -p -u -r1.23.8.2 pcio.c
--- pcio.c 28 Nov 2009 15:40:47 -0000 1.23.8.2
+++ pcio.c 14 Feb 2011 22:16:12 -0000
@@ -256,8 +256,8 @@ putchar(int c)
internal_putchar(c);
}
-int
-getchar(void)
+static int
+internal_getchar(void)
{
int c;
#ifdef SUPPORT_SERIAL
@@ -321,6 +321,14 @@ iskey(int intr)
#endif /* SUPPORT_SERIAL */
}
+int
+getchar(void)
+{
+ while (!iskey(0))
+ wait(POLL_FREQ);
+ return internal_getchar();
+}
+
char
awaitkey(int timeout, int tell)
{
@@ -348,7 +356,7 @@ awaitkey(int timeout, int tell)
if (iskey(1)) {
/* flush input buffer */
while (iskey(0))
- c = getchar();
+ c = internal_getchar();
if (c == 0)
c = -1;
goto out;
Home |
Main Index |
Thread Index |
Old Index