mirror of
https://git.hardenedbsd.org/hardenedbsd/HardenedBSD.git
synced 2024-12-29 15:10:57 +01:00
boot/console: handle consoles that fail to probe
- clarify meaning of console flags - perform i/o via a console only if both of the following conditions are met: o console is active (selected by user or config) o console flags that it can perform the operation - warn if a chosen console can not work (the warning may go nowhere without working and active console, though) Reviewed by: jhb Tested by: Uffe Jakobsen <uffe@uffe.org>, Olivier Cochard-Labbe' <olivier@cochard.me> MFC after: 26 days
This commit is contained in:
parent
0815243c39
commit
4ecbcb6f49
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=241299
@ -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 */
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user