summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/alpha/alpha/machdep.c6
-rw-r--r--sys/alpha/alpha/promcons.c10
-rw-r--r--sys/alpha/include/prom.h1
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));
OpenPOWER on IntegriCloud