From 474afc4230966baacb8ef1824d27b630dd0b603b Mon Sep 17 00:00:00 2001 From: Archie Cobbs Date: Wed, 20 Sep 2000 18:13:36 +0000 Subject: [PATCH] Add support for the "nullconsole" console type, for systems with neither a video console nor a serial port. Use it if the RB_MUTE flag is set. Submitted by: Doug Ambrisko Reviewed by: jhb --- sys/boot/i386/libi386/Makefile | 3 +- sys/boot/i386/libi386/bootinfo.c | 5 ++ sys/boot/i386/libi386/bootinfo32.c | 5 ++ sys/boot/i386/libi386/bootinfo64.c | 5 ++ sys/boot/i386/libi386/nullconsole.c | 88 +++++++++++++++++++++++++++++ sys/boot/i386/loader/conf.c | 2 + sys/boot/i386/loader/main.c | 2 + 7 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 sys/boot/i386/libi386/nullconsole.c diff --git a/sys/boot/i386/libi386/Makefile b/sys/boot/i386/libi386/Makefile index b200aed34100..2c684ed4b8d2 100644 --- a/sys/boot/i386/libi386/Makefile +++ b/sys/boot/i386/libi386/Makefile @@ -8,7 +8,8 @@ INTERNALSTATICLIB= true SRCS= aout_freebsd.c biosdisk.c biosmem.c biospnp.c biospci.c \ bootinfo.c comconsole.c devicename.c elf_freebsd.c gatea20.c \ - i386_copy.c i386_module.c time.c vidconsole.c pxe.c pxetramp.s + i386_copy.c i386_module.c nullconsole.c pxe.c pxetramp.s \ + time.c vidconsole.c CFLAGS+= -I${.CURDIR}/../../common -I${.CURDIR}/../btx/lib \ -I${.CURDIR}/../../.. -I. diff --git a/sys/boot/i386/libi386/bootinfo.c b/sys/boot/i386/libi386/bootinfo.c index 63be83faee3b..05d28d1f5d8b 100644 --- a/sys/boot/i386/libi386/bootinfo.c +++ b/sys/boot/i386/libi386/bootinfo.c @@ -88,6 +88,9 @@ bi_getboothowto(char *kargs) case 'd': howto |= RB_KDB; break; + case 'm': + howto |= RB_MUTE; + break; case 'g': howto |= RB_GDB; break; @@ -116,6 +119,8 @@ bi_getboothowto(char *kargs) howto |= howto_names[i].mask; if (!strcmp(getenv("console"), "comconsole")) howto |= RB_SERIAL; + if (!strcmp(getenv("console"), "nullconsole")) + howto |= RB_MUTE; return(howto); } diff --git a/sys/boot/i386/libi386/bootinfo32.c b/sys/boot/i386/libi386/bootinfo32.c index 63be83faee3b..05d28d1f5d8b 100644 --- a/sys/boot/i386/libi386/bootinfo32.c +++ b/sys/boot/i386/libi386/bootinfo32.c @@ -88,6 +88,9 @@ bi_getboothowto(char *kargs) case 'd': howto |= RB_KDB; break; + case 'm': + howto |= RB_MUTE; + break; case 'g': howto |= RB_GDB; break; @@ -116,6 +119,8 @@ bi_getboothowto(char *kargs) howto |= howto_names[i].mask; if (!strcmp(getenv("console"), "comconsole")) howto |= RB_SERIAL; + if (!strcmp(getenv("console"), "nullconsole")) + howto |= RB_MUTE; return(howto); } diff --git a/sys/boot/i386/libi386/bootinfo64.c b/sys/boot/i386/libi386/bootinfo64.c index 63be83faee3b..05d28d1f5d8b 100644 --- a/sys/boot/i386/libi386/bootinfo64.c +++ b/sys/boot/i386/libi386/bootinfo64.c @@ -88,6 +88,9 @@ bi_getboothowto(char *kargs) case 'd': howto |= RB_KDB; break; + case 'm': + howto |= RB_MUTE; + break; case 'g': howto |= RB_GDB; break; @@ -116,6 +119,8 @@ bi_getboothowto(char *kargs) howto |= howto_names[i].mask; if (!strcmp(getenv("console"), "comconsole")) howto |= RB_SERIAL; + if (!strcmp(getenv("console"), "nullconsole")) + howto |= RB_MUTE; return(howto); } diff --git a/sys/boot/i386/libi386/nullconsole.c b/sys/boot/i386/libi386/nullconsole.c new file mode 100644 index 000000000000..70eb2c553f41 --- /dev/null +++ b/sys/boot/i386/libi386/nullconsole.c @@ -0,0 +1,88 @@ +/* + * nullconsole.c + * + * Copyright (c) 2000 Whistle Communications, Inc. + * All rights reserved. + * + * Subject to the following obligations and disclaimer of warranty, use and + * redistribution of this software, in source or object code forms, with or + * without modifications are expressly permitted by Whistle Communications; + * provided, however, that: + * 1. Any and all reproductions of the source or object code must include the + * copyright notice above and the following disclaimer of warranties; and + * 2. No rights are granted, in any manner or form, to use Whistle + * Communications, Inc. trademarks, including the mark "WHISTLE + * COMMUNICATIONS" on advertising, endorsements, or otherwise except as + * such appears in the above copyright notice or in the software. + * + * THIS SOFTWARE IS BEING PROVIDED BY WHISTLE COMMUNICATIONS "AS IS", AND + * TO THE MAXIMUM EXTENT PERMITTED BY LAW, WHISTLE COMMUNICATIONS MAKES NO + * REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, REGARDING THIS SOFTWARE, + * INCLUDING WITHOUT LIMITATION, ANY AND ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT. + * WHISTLE COMMUNICATIONS DOES NOT WARRANT, GUARANTEE, OR MAKE ANY + * REPRESENTATIONS REGARDING THE USE OF, OR THE RESULTS OF THE USE OF THIS + * SOFTWARE IN TERMS OF ITS CORRECTNESS, ACCURACY, RELIABILITY OR OTHERWISE. + * IN NO EVENT SHALL WHISTLE COMMUNICATIONS BE LIABLE FOR ANY DAMAGES + * RESULTING FROM OR ARISING OUT OF ANY USE OF THIS SOFTWARE, INCLUDING + * WITHOUT LIMITATION, ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, + * PUNITIVE, OR CONSEQUENTIAL DAMAGES, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES, LOSS OF USE, DATA OR PROFITS, HOWEVER CAUSED AND UNDER ANY + * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF WHISTLE COMMUNICATIONS IS ADVISED OF THE POSSIBILITY + * OF SUCH DAMAGE. + * + * Author: Doug Ambrisko + * + * $FreeBSD$ + */ + +#include +#include + +static void nullc_probe(struct console *cp); +static int nullc_init(int arg); +static void nullc_putchar(int c); +static int nullc_getchar(void); +static int nullc_ischar(void); + +struct console nullconsole = { + "nullconsole", + "null port", + 0, + nullc_probe, + nullc_init, + nullc_putchar, + nullc_getchar, + nullc_ischar +}; + +static void +nullc_probe(struct console *cp) +{ + cp->c_flags |= (C_PRESENTIN | C_PRESENTOUT); +} + +static int +nullc_init(int arg) +{ + return(0); +} + +static void +nullc_putchar(int c) +{ +} + +static int +nullc_getchar(void) +{ + return(-1); +} + +static int +nullc_ischar(void) +{ + return(0); +} diff --git a/sys/boot/i386/loader/conf.c b/sys/boot/i386/loader/conf.c index b9398a76f736..bef1ed99680d 100644 --- a/sys/boot/i386/loader/conf.c +++ b/sys/boot/i386/loader/conf.c @@ -90,10 +90,12 @@ struct file_format *file_formats[] = { */ extern struct console vidconsole; extern struct console comconsole; +extern struct console nullconsole; struct console *consoles[] = { &vidconsole, &comconsole, + &nullconsole, NULL }; diff --git a/sys/boot/i386/loader/main.c b/sys/boot/i386/loader/main.c index f6754750b798..b943edbef4b0 100644 --- a/sys/boot/i386/loader/main.c +++ b/sys/boot/i386/loader/main.c @@ -99,6 +99,8 @@ main(void) */ if (initial_howto & RB_SERIAL) setenv("console", "comconsole", 1); + if (initial_howto & RB_MUTE) + setenv("console", "nullconsole", 1); cons_probe(); /*