Skip site navigation (1)Skip section navigation (2)
Date:      Sun, 4 Nov 2012 13:32:16 +0000 (UTC)
From:      Andriy Gapon <avg@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-stable@freebsd.org, svn-src-stable-9@freebsd.org
Subject:   svn commit: r242557 - stable/9/sys/boot/common
Message-ID:  <201211041332.qA4DWGEg097904@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
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);
 	}
     }
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201211041332.qA4DWGEg097904>