--- Gnu-Mach/i386/i386at/immc.c 2020/09/02 04:36:58 1.1.1.1 +++ Gnu-Mach/i386/i386at/immc.c 2020/09/02 04:51:29 1.1.1.5 @@ -1,4 +1,4 @@ -/* +/* * Copyright (c) 1995-1994 The University of Utah and * the Computer Systems Laboratory at the University of Utah (CSL). * All rights reserved. @@ -21,7 +21,12 @@ * Author: Bryan Ford, University of Utah CSL */ -#ifdef ENABLE_IMMEDIATE_CONSOLE +#if ENABLE_IMMEDIATE_CONSOLE + +#include +#include +#include +#include /* This is a special "feature" (read: kludge) intended for use only for kernel debugging. @@ -31,24 +36,67 @@ so it can be used to debug things that happen very early before any devices are initialized. */ -int immediate_console_enable = 1; +boolean_t immediate_console_enable = TRUE; -void -immc_cnputc(unsigned char c) +/* + * XXX we assume that pcs *always* have a console + */ +int +immc_cnprobe(struct consdev *cp) +{ + int maj, unit, pri; + + maj = 0; + unit = 0; + pri = CN_INTERNAL; + + cp->cn_dev = makedev(maj, unit); + cp->cn_pri = pri; + return 0; +} + +int +immc_cninit(struct consdev *cp) +{ + return 0; +} + +int immc_cnmaygetc(void) +{ + return -1; +} + +int +immc_cngetc(dev_t dev, int wait) +{ + if (wait) { + int c; + while ((c = immc_cnmaygetc()) < 0) + continue; + return c; + } + else + return immc_cnmaygetc(); +} + +int +immc_cnputc(dev_t dev, int c) { static int ofs = -1; if (!immediate_console_enable) - return; - if (ofs < 0) + return -1; + if (ofs < 0 || ofs >= 80) { ofs = 0; - immc_cnputc('\n'); + immc_cnputc(dev, '\n'); } - else if (c == '\n') + + if (c == '\n') { - bcopy(0xb8000+80*2, 0xb8000, 80*2*24); - bzero(0xb8000+80*2*24, 80*2); + memmove((void *) phystokv(0xb8000), + (void *) phystokv(0xb8000+80*2), 80*2*24); + memset((void *) phystokv((0xb8000+80*2*24)), 0, 80*2); ofs = 0; } else @@ -57,21 +105,22 @@ immc_cnputc(unsigned char c) if (ofs >= 80) { - immc_cnputc('\r'); - immc_cnputc('\n'); + immc_cnputc(dev, '\r'); + immc_cnputc(dev, '\n'); } - p = (void*)0xb8000 + 80*2*24 + ofs*2; + p = (void *) phystokv(0xb8000 + 80*2*24 + ofs*2); p[0] = c; p[1] = 0x0f; ofs++; } + return 0; } -int immc_cnmaygetc(void) +void +immc_romputc(char c) { - return -1; + immc_cnputc (0, c); } -#endif ENABLE_IMMEDIATE_CONSOLE - +#endif /* ENABLE_IMMEDIATE_CONSOLE */