svn commit: r242557 - stable/9/sys/boot/common
Andriy Gapon
avg at FreeBSD.org
Sun Nov 4 13:32:17 UTC 2012
Author: avg
Date: Sun Nov 4 13:32:16 2012
New Revision: 242557
URL: http://svn.freebsd.org/changeset/base/242557
Log:
MFC r241299: boot/console: handle consoles that fail to probe
Modified:
stable/9/sys/boot/common/bootstrap.h
stable/9/sys/boot/common/console.c
Directory Properties:
stable/9/sys/ (props changed)
stable/9/sys/boot/ (props changed)
Modified: stable/9/sys/boot/common/bootstrap.h
==============================================================================
--- stable/9/sys/boot/common/bootstrap.h Sun Nov 4 13:31:41 2012 (r242556)
+++ stable/9/sys/boot/common/bootstrap.h Sun Nov 4 13:32:16 2012 (r242557)
@@ -109,10 +109,10 @@ struct console
const char *c_name;
const char *c_desc;
int c_flags;
-#define C_PRESENTIN (1<<0)
-#define C_PRESENTOUT (1<<1)
-#define C_ACTIVEIN (1<<2)
-#define C_ACTIVEOUT (1<<3)
+#define C_PRESENTIN (1<<0) /* console can provide input */
+#define C_PRESENTOUT (1<<1) /* console can provide output */
+#define C_ACTIVEIN (1<<2) /* user wants input from console */
+#define C_ACTIVEOUT (1<<3) /* user wants output to console */
void (* c_probe)(struct console *cp); /* set c_flags to match hardware */
int (* c_init)(int arg); /* reinit XXX may need more args */
void (* c_out)(int c); /* emit c */
Modified: stable/9/sys/boot/common/console.c
==============================================================================
--- stable/9/sys/boot/common/console.c Sun Nov 4 13:31:41 2012 (r242556)
+++ stable/9/sys/boot/common/console.c Sun Nov 4 13:32:16 2012 (r242557)
@@ -100,11 +100,12 @@ getchar(void)
{
int cons;
int rv;
-
+
/* Loop forever polling all active consoles */
for(;;)
for (cons = 0; consoles[cons] != NULL; cons++)
- if ((consoles[cons]->c_flags & C_ACTIVEIN) &&
+ if ((consoles[cons]->c_flags & (C_PRESENTIN | C_ACTIVEIN)) ==
+ (C_PRESENTIN | C_ACTIVEIN) &&
((rv = consoles[cons]->c_in()) != -1))
return(rv);
}
@@ -115,7 +116,8 @@ ischar(void)
int cons;
for (cons = 0; consoles[cons] != NULL; cons++)
- if ((consoles[cons]->c_flags & C_ACTIVEIN) &&
+ if ((consoles[cons]->c_flags & (C_PRESENTIN | C_ACTIVEIN)) ==
+ (C_PRESENTIN | C_ACTIVEIN) &&
(consoles[cons]->c_ready() != 0))
return(1);
return(0);
@@ -125,13 +127,14 @@ void
putchar(int c)
{
int cons;
-
+
/* Expand newlines */
if (c == '\n')
putchar('\r');
-
+
for (cons = 0; consoles[cons] != NULL; cons++)
- if (consoles[cons]->c_flags & C_ACTIVEOUT)
+ if ((consoles[cons]->c_flags & (C_PRESENTOUT | C_ACTIVEOUT)) ==
+ (C_PRESENTOUT | C_ACTIVEOUT))
consoles[cons]->c_out(c);
}
@@ -220,6 +223,10 @@ cons_change(const char *string)
if (cons >= 0) {
consoles[cons]->c_flags |= C_ACTIVEIN | C_ACTIVEOUT;
consoles[cons]->c_init(0);
+ if ((consoles[cons]->c_flags & (C_PRESENTIN | C_PRESENTOUT)) !=
+ (C_PRESENTIN | C_PRESENTOUT))
+ printf("console %s failed to initialize\n",
+ consoles[cons]->c_name);
}
}
More information about the svn-src-stable-9
mailing list