summaryrefslogtreecommitdiff
path: root/sys/arch/vax/stand/boot/consio.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/vax/stand/boot/consio.c')
-rw-r--r--sys/arch/vax/stand/boot/consio.c33
1 files changed, 23 insertions, 10 deletions
diff --git a/sys/arch/vax/stand/boot/consio.c b/sys/arch/vax/stand/boot/consio.c
index 46e23807fd4..09ccee06755 100644
--- a/sys/arch/vax/stand/boot/consio.c
+++ b/sys/arch/vax/stand/boot/consio.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: consio.c,v 1.9 2008/08/12 17:23:21 miod Exp $ */
+/* $OpenBSD: consio.c,v 1.10 2008/08/18 23:20:44 miod Exp $ */
/* $NetBSD: consio.c,v 1.13 2002/05/24 21:40:59 ragge Exp $ */
/*
* Copyright (c) 1994, 1998 Ludd, University of Lule}, Sweden.
@@ -43,6 +43,9 @@
#include "data.h"
+#include <machine/cvax.h>
+#include <arch/vax/mbus/mbusreg.h>
+
void setup(void);
static void (*put_fp)(int) = NULL;
@@ -383,26 +386,36 @@ void ka60_consinit(void)
extern int mcheck_silent;
extern int setjmp(int *);
- int mid, modaddr, modtype;
+ int mid, fbicaddr;
+ uint32_t modtype, fbicrange;
+
+ for (mid = 0; mid < MBUS_SLOT_MAX; mid++) {
+ fbicaddr = MBUS_SLOT_BASE(mid) + FBIC_BASE;
- mcheck_silent = 1;
- for (mid = 0; mid < 8; mid++) {
- modaddr = 0x31fffffc + (mid << 25);
if (setjmp(jbuf)) {
/* this slot is empty */
continue;
}
- modtype = *(int *)modaddr;
- if ((modtype & 0xff) == 0x04) {
- ka60_ioslot = mid;
+ mcheck_silent = 1;
+ modtype = *(uint32_t *)(fbicaddr + FBIC_MODTYPE);
+ mcheck_silent = 0;
+
+ if ((modtype & MODTYPE_CLASS_MASK) >> MODTYPE_CLASS_SHIFT !=
+ CLASS_IO)
+ continue;
+
+ ka60_ioslot = mid;
+
+ fbicrange = *(uint32_t *)(fbicaddr + FBIC_RANGE);
+ if (fbicrange ==
+ ((HOST_TO_MBUS(CVAX_SSC) & RANGE_MATCH) | RANGE_ENABLE))
break;
- }
}
mcheck_silent = 0;
if (ka60_ioslot < 0) {
/*
- * This shouldn't happen. Try mid #5 (slot #4) as a
+ * This shouldn't happen. Try mid #5 (enclosure slot #4) as a
* supposedly sane default.
*/
ka60_ioslot = 5;