diff options
author | mjacob <mjacob@FreeBSD.org> | 2001-10-26 16:13:47 +0000 |
---|---|---|
committer | mjacob <mjacob@FreeBSD.org> | 2001-10-26 16:13:47 +0000 |
commit | c55c6300c86d58963d5f402d22181ea350d057a7 (patch) | |
tree | dd0d8821363390e353ff047d90d000317ac9bf0a | |
parent | 91ca90cea59a4fde5432970fc40723647fe3feb2 (diff) | |
download | FreeBSD-src-c55c6300c86d58963d5f402d22181ea350d057a7.zip FreeBSD-src-c55c6300c86d58963d5f402d22181ea350d057a7.tar.gz |
Detach the prom console when platform.cons_init is called. This seems
to avoid most of the double character kernel goop we've been having by having
both a prom console && a normal console.
Was not able to test with graphics head. Hope this doesn't break anything.
Reviewed by: silence on alpha
-rw-r--r-- | sys/alpha/alpha/machdep.c | 6 | ||||
-rw-r--r-- | sys/alpha/alpha/promcons.c | 10 | ||||
-rw-r--r-- | sys/alpha/include/prom.h | 1 |
3 files changed, 15 insertions, 2 deletions
diff --git a/sys/alpha/alpha/machdep.c b/sys/alpha/alpha/machdep.c index 38bcc51..d9a5104 100644 --- a/sys/alpha/alpha/machdep.c +++ b/sys/alpha/alpha/machdep.c @@ -145,6 +145,7 @@ #include <sys/vnode.h> #include <machine/sigframe.h> + u_int64_t cycles_per_usec; u_int32_t cycles_per_sec; int cold = 1; @@ -621,9 +622,10 @@ alpha_init(pfn, ptb, bim, bip, biv) * Initalize the real console, so the the bootstrap console is * no longer necessary. */ - if (platform.cons_init) + if (platform.cons_init) { platform.cons_init(); - + promcndetach(); + } /* NO MORE FIRMWARE ACCESS ALLOWED */ #ifdef _PMAP_MAY_USE_PROM_CONSOLE /* diff --git a/sys/alpha/alpha/promcons.c b/sys/alpha/alpha/promcons.c index 063d830..cd2da68 100644 --- a/sys/alpha/alpha/promcons.c +++ b/sys/alpha/alpha/promcons.c @@ -263,6 +263,7 @@ DEV_MODULE(prom, prom_modevent, 0); CONS_DRIVER(prom, NULL, NULL, NULL, promcngetc, promcncheckc, promcnputc, NULL); +static int promcn_attached = 0; void promcnattach(int alpha_console) { @@ -270,8 +271,17 @@ promcnattach(int alpha_console) prom_consdev.cn_dev = makedev(CDEV_MAJOR, 0); make_dev(&prom_cdevsw, 0, UID_ROOT, GID_WHEEL, 0600, "promcons"); cnadd(&prom_consdev); + promcn_attached = 1; } +void +promcndetach(void) +{ + if (promcn_attached) { + cnremove(&prom_consdev); + promcn_attached = 0; + } +} /* * promcnputc, promcngetc and promchcheckc in prom.c for layering reasons */ diff --git a/sys/alpha/include/prom.h b/sys/alpha/include/prom.h index c0e6eef..537f9cf 100644 --- a/sys/alpha/include/prom.h +++ b/sys/alpha/include/prom.h @@ -96,6 +96,7 @@ int prom_getenv __P((int, char *, int)); #ifndef ASSEMBLER #ifdef _KERNEL void promcnattach __P((int)); +void promcndetach __P((void)); void promcnputc __P((dev_t, int)); int promcngetc __P((dev_t)); int promcncheckc __P((dev_t)); |