summaryrefslogtreecommitdiff
path: root/sys/arch/vax/mba
diff options
context:
space:
mode:
Diffstat (limited to 'sys/arch/vax/mba')
-rw-r--r--sys/arch/vax/mba/hp.c366
-rw-r--r--sys/arch/vax/mba/hpdefs.h81
-rw-r--r--sys/arch/vax/mba/hpreg.h86
-rw-r--r--sys/arch/vax/mba/mba.c99
-rw-r--r--sys/arch/vax/mba/mbareg.h80
-rw-r--r--sys/arch/vax/mba/mbavar.h94
6 files changed, 806 insertions, 0 deletions
diff --git a/sys/arch/vax/mba/hp.c b/sys/arch/vax/mba/hp.c
new file mode 100644
index 00000000000..4220d547acb
--- /dev/null
+++ b/sys/arch/vax/mba/hp.c
@@ -0,0 +1,366 @@
+/* $NetBSD: hp.c,v 1.1 1995/02/13 00:43:59 ragge Exp $ */
+/*
+ * Copyright (c) 1994 Ludd, University of Lule}, Sweden.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed at Ludd, University of Lule}.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /* All bugs are subject to removal without further notice */
+
+
+
+/* hp.c - drivrutiner f|r massbussdiskar 940325/ragge */
+
+#include "param.h"
+#include "types.h"
+#include "fcntl.h"
+#include "syslog.h"
+#include "disklabel.h"
+#include "buf.h"
+#include "vax/mba/mbareg.h"
+#include "vax/mba/mbavar.h"
+#include "vax/mba/hpdefs.h"
+#include "hp.h"
+
+struct mba_device *hpinfo[NHP];
+struct hp_info hp_info[NHP];
+struct disklabel hplabel[NHP];
+int hpslave(), hpattach();
+
+char hptypes[]={
+ 0x22,0
+};
+
+struct mba_driver hpdriver={
+ hpslave, 0, "hp", hptypes, hpattach, hpinfo
+};
+
+hpslave(){
+ printf("Hpslave.\n");
+ asm("halt");
+};
+
+hpopen(){
+ printf("hpopen");
+ asm("halt");
+};
+
+hpclose(){
+ printf("hpclose\n");
+ asm("halt");
+};
+
+hpioctl(){
+ printf("hpioctl\n");
+ asm("halt");
+}
+
+hpdump(){
+ printf("hpdump\n");
+ asm("halt");
+};
+
+hpsize(){
+ printf("hpsize");
+ asm("halt");
+};
+
+
+
+hpattach(mi)
+ struct mba_device *mi;
+{
+ struct mba_drv *md;
+
+/*
+ * We check status of the drive first; to see if there is any idea
+ * to try to read the label.
+ */
+ md=&(mi->mi_mba->mba_drv[mi->drive]);
+ if(!md->rmcs1&HPCS1_DVA){
+ printf(": Drive not available");
+ return;
+ }
+ if(!md->rmds&HPDS_MOL){
+ printf(": Drive offline");
+ return;
+ }
+ if (hpinit(mi, 0))
+ printf(": offline");
+/* else if (ra_info[unit].ra_state == OPEN) {
+ printf(": %s, size = %d sectors",
+ udalabel[unit].d_typename, ra_info[unit].ra_dsize);
+*/
+ printf("rmcs1: %x, rmds: %x, rmdt: %x rmsn: %x\n",
+ md->rmcs1, md->rmds, md->rmdt, md->rmsn);
+
+
+/* asm("halt"); */
+/*
+ if (MSCP_MID_ECH(1, ra_info[unit].ra_mediaid) == 'X' - '@') {
+ printf(": floppy");
+ return;
+ }
+ if (ui->ui_dk >= 0)
+ dk_wpms[ui->ui_dk] = (60 * 31 * 256);
+ udaip[ui->ui_ctlr][ui->ui_slave] = ui;
+
+ if (uda_rainit(ui, 0))
+ printf(": offline");
+ else if (ra_info[unit].ra_state == OPEN) {
+ printf(": %s, size = %d sectors",
+ udalabel[unit].d_typename, ra_info[unit].ra_dsize);
+ }*/
+}
+
+
+/*
+ * Initialise a drive. If it is not already, bring it on line,
+ * and set a timeout on it in case it fails to respond.
+ * When on line, read in the pack label.
+ */
+hpinit(mi, flags)
+ struct mba_device *mi;
+{
+/* struct uda_softc *sc = &uda_softc[ui->ui_ctlr]; */
+ struct disklabel *lp;
+ struct hp_info *hp;
+/* struct mscp *mp; */
+ int unit = mi->unit;
+ char *msg, *readdisklabel();
+ int s, i, hpstrategy();
+ extern int cold;
+
+ hp = &hp_info[unit];
+/*
+ if ((ui->ui_flags & UNIT_ONLINE) == 0) {
+ mp = mscp_getcp(&sc->sc_mi, MSCP_WAIT);
+ mp->mscp_opcode = M_OP_ONLINE;
+ mp->mscp_unit = ui->ui_slave;
+ mp->mscp_cmdref = (long)&ui->ui_flags;
+ *mp->mscp_addr |= MSCP_OWN | MSCP_INT;
+ ra->ra_state = WANTOPEN;
+ if (!cold)
+ s = spl5();
+ i = ((struct udadevice *)ui->ui_addr)->udaip;
+
+ if (cold) {
+ i = todr() + 1000;
+ while ((ui->ui_flags & UNIT_ONLINE) == 0)
+ if (todr() > i)
+ break;
+ } else {
+ timeout(wakeup, (caddr_t)&ui->ui_flags, 10 * hz);
+ sleep((caddr_t)&ui->ui_flags, PSWP + 1);
+ splx(s);
+ untimeout(wakeup, (caddr_t)&ui->ui_flags);
+ }
+ if (ra->ra_state != OPENRAW) {
+ ra->ra_state = CLOSED;
+ wakeup((caddr_t)ra);
+ return (EIO);
+ }
+ }
+*/
+ lp = &hplabel[unit];
+ lp->d_secsize = DEV_BSIZE;
+
+ lp->d_secsize = DEV_BSIZE;
+ lp->d_secperunit = 15 /*ra->ra_dsize*/;
+
+ if (flags & O_NDELAY)
+ return (0);
+ hp->hp_state = RDLABEL;
+ /*
+ * Set up default sizes until we have the label, or longer
+ * if there is none. Set secpercyl, as readdisklabel wants
+ * to compute b_cylin (although we do not need it), and set
+ * nsectors in case diskerr is called.
+ */
+ lp->d_secpercyl = 1;
+ lp->d_npartitions = 1;
+ lp->d_secsize = 512;
+/* lp->d_secperunit = ra->ra_dsize; */
+ lp->d_nsectors = 15 /*ra->ra_geom.rg_nsectors*/;
+ lp->d_partitions[0].p_size = lp->d_secperunit;
+ lp->d_partitions[0].p_offset = 0;
+
+ /*
+ * Read pack label.
+ */
+ if ((msg = readdisklabel(hpminor(unit, 0), hpstrategy, lp)) != NULL) {
+ if (cold)
+ printf(": %s", msg);
+ else
+ log(LOG_ERR, "hp%d: %s", unit, msg);
+/* ra->ra_state = OPENRAW; */
+/* uda_makefakelabel(ra, lp); */
+ } else
+/* ra->ra_state = OPEN; */
+/* wakeup((caddr_t)hp); */
+ return (0);
+}
+
+/*
+ * Queue a transfer request, and if possible, hand it to the controller.
+ *
+ * This routine is broken into two so that the internal version
+ * udastrat1() can be called by the (nonexistent, as yet) bad block
+ * revectoring routine.
+ */
+hpstrategy(bp)
+ register struct buf *bp;
+{
+ register int unit;
+ register struct uba_device *ui;
+ register struct hp_info *hp;
+ struct partition *pp;
+ int p;
+ daddr_t sz, maxsz;
+
+ /*
+ * Make sure this is a reasonable drive to use.
+ */
+/* bp->b_error = ENXIO;
+ goto bad;
+*/
+ unit = hpunit(bp->b_dev);
+
+ /*
+ * If drive is open `raw' or reading label, let it at it.
+ */
+
+ if (hp->hp_state < OPEN) {
+ hpstrat1(bp);
+ return;
+ }
+
+
+/* if ((unit = udaunit(bp->b_dev)) >= NRA ||
+ (ui = udadinfo[unit]) == NULL || ui->ui_alive == 0 ||
+ (ra = &ra_info[unit])->ra_state == CLOSED) {
+ bp->b_error = ENXIO;
+ goto bad;
+ }
+*/
+ /*
+ * If drive is open `raw' or reading label, let it at it.
+ */
+/*
+ if (ra->ra_state < OPEN) {
+ udastrat1(bp);
+ return;
+ }
+ p = udapart(bp->b_dev);
+ if ((ra->ra_openpart & (1 << p)) == 0) {
+ bp->b_error = ENODEV;
+ goto bad;
+ }
+*/
+ /*
+ * Determine the size of the transfer, and make sure it is
+ * within the boundaries of the partition.
+ */
+/*
+ pp = &udalabel[unit].d_partitions[p];
+ maxsz = pp->p_size;
+ if (pp->p_offset + pp->p_size > ra->ra_dsize)
+ maxsz = ra->ra_dsize - pp->p_offset;
+ sz = (bp->b_bcount + DEV_BSIZE - 1) >> DEV_BSHIFT;
+ if (bp->b_blkno + pp->p_offset <= LABELSECTOR &&
+#if LABELSECTOR != 0
+ bp->b_blkno + pp->p_offset + sz > LABELSECTOR &&
+#endif
+ (bp->b_flags & B_READ) == 0 && ra->ra_wlabel == 0) {
+ bp->b_error = EROFS;
+ goto bad;
+ }
+ if (bp->b_blkno < 0 || bp->b_blkno + sz > maxsz) {
+ /* if exactly at end of disk, return an EOF */
+/*
+ if (bp->b_blkno == maxsz) {
+ bp->b_resid = bp->b_bcount;
+ biodone(bp);
+ return;
+ }
+ /* or truncate if part of it fits */
+/*
+ sz = maxsz - bp->b_blkno;
+ if (sz <= 0) {
+ bp->b_error = EINVAL; /* or hang it up */
+/*
+ goto bad;
+ }
+ bp->b_bcount = sz << DEV_BSHIFT;
+ }
+ udastrat1(bp);
+ return;
+*/
+bad:
+ bp->b_flags |= B_ERROR;
+ biodone(bp);
+}
+
+/*
+ * Work routine for udastrategy.
+ */
+hpstrat1(bp)
+ register struct buf *bp;
+{
+ register int unit = hpunit(bp->b_dev);
+ register struct hp_ctlr *um;
+ register struct buf *dp;
+ struct hp_device *ui;
+/* int s = spl5(); */
+
+ asm("halt");
+ /*
+ * Append the buffer to the drive queue, and if it is not
+ * already there, the drive to the controller queue. (However,
+ * if the drive queue is marked to be requeued, we must be
+ * awaiting an on line or get unit status command; in this
+ * case, leave it off the controller queue.)
+ */
+/*
+ um = (ui = udadinfo[unit])->ui_mi;
+ dp = &udautab[unit];
+ APPEND(bp, dp, av_forw);
+ if (dp->b_active == 0 && (ui->ui_flags & UNIT_REQUEUE) == 0) {
+ APPEND(dp, &um->um_tab, b_forw);
+ dp->b_active++;
+ }
+
+ /*
+ * Start activity on the controller. Note that unlike other
+ * Unibus drivers, we must always do this, not just when the
+ * controller is not active.
+ */
+/*
+ udastart(um);
+ splx(s);
+*/
+}
diff --git a/sys/arch/vax/mba/hpdefs.h b/sys/arch/vax/mba/hpdefs.h
new file mode 100644
index 00000000000..251ce2b7923
--- /dev/null
+++ b/sys/arch/vax/mba/hpdefs.h
@@ -0,0 +1,81 @@
+/* $NetBSD: hpdefs.h,v 1.1 1995/02/13 00:44:00 ragge Exp $ */
+/*
+ * Copyright (c) 1994 Ludd, University of Lule}, Sweden.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed at Ludd, University of Lule}.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /* All bugs are subject to removal without further notice */
+
+
+
+/* hpdefs.h - 940325/ragge */
+
+#define HPCS1_DVA 0x800 /* Drive avail, in dual-port config */
+#define HPDS_VV 0x40 /* Volume valid, not changed */
+#define HPDS_DRY 0x80 /* Drive ready to accept commands */
+#define HPDS_DPR 0x100 /* Drive present */
+#define HPDS_PGM 0x200 /* Programmable in dual-port config */
+#define HPDS_WRL 0x800 /* Write locked media */
+#define HPDS_MOL 0x1000 /* Medium on-line */
+#define HPDT_DRQ 0x800 /* Dual-port disk */
+
+/*
+ * Drive status, per drive
+ */
+struct hp_info {
+ daddr_t hp_dsize; /* size in sectors */
+/* u_long hp_type; /* drive type */
+ u_long hp_mediaid; /* media id */
+ int hp_state; /* open/closed state */
+ struct hp_geom { /* geometry information */
+ u_short rg_nsectors; /* sectors/track */
+ u_short rg_ngroups; /* track groups */
+ u_short rg_ngpc; /* groups/cylinder */
+ u_short rg_ntracks; /* ngroups*ngpc */
+ u_short rg_ncyl; /* ra_dsize/ntracks/nsectors */
+#ifdef notyet
+ u_short rg_rctsize; /* size of rct */
+ u_short rg_rbns; /* replacement blocks per track */
+ u_short rg_nrct; /* number of rct copies */
+#endif
+ } hp_geom;
+ int hp_wlabel; /* label sector is currently writable */
+ u_long hp_openpart; /* partitions open */
+ u_long hp_bopenpart; /* block partitions open */
+ u_long hp_copenpart; /* character partitions open */
+};
+
+/*
+ * Device to unit number and partition and back
+ */
+#define UNITSHIFT 3
+#define UNITMASK 7
+#define hpunit(dev) (minor(dev) >> UNITSHIFT)
+#define hppart(dev) (minor(dev) & UNITMASK)
+#define hpminor(u, p) (((u) << UNITSHIFT) | (p))
+
diff --git a/sys/arch/vax/mba/hpreg.h b/sys/arch/vax/mba/hpreg.h
new file mode 100644
index 00000000000..ddf2ed2eed3
--- /dev/null
+++ b/sys/arch/vax/mba/hpreg.h
@@ -0,0 +1,86 @@
+/* $NetBSD: hpreg.h,v 1.2 1995/06/16 15:20:11 ragge Exp $ */
+/*
+ * Copyright (c) 1994 Ludd, University of Lule}, Sweden.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed at Ludd, University of Lule}.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /* All bugs are subject to removal without further notice */
+
+
+
+struct hp_regs {
+ int hp_cs1;
+ int hp_ds;
+ int hp_er1;
+ int hp_mr1;
+ int hp_as;
+ int hp_da;
+ int hp_dt;
+ int hp_la;
+ int hp_sn;
+ int hp_of;
+ int hp_dc;
+ int hp_hr;
+ int hp_mr2;
+ int hp_er2;
+ int hp_ec1;
+ int hp_ec2;
+ int utrymme[16];
+};
+
+#define hp_drv hp_regs
+
+#define HPCS_PA 0x13 /* Pack acknowledge */
+#define HPCS_SEEK 0x5
+#define HPCS_READ 0x39
+#define HPCS_DVA 0x800 /* Drive avail, in dual-port config */
+
+#define HPDS_VV 0x40 /* Volume valid, not changed */
+#define HPDS_DRY 0x80 /* Drive ready to accept commands */
+#define HPDS_DPR 0x100 /* Drive present */
+#define HPDS_PGM 0x200 /* Programmable in dual-port config */
+#define HPDS_WRL 0x800 /* Write locked media */
+#define HPDS_MOL 0x1000 /* Medium on-line */
+
+#define HPDT_DRQ 0x800 /* Dual-port disk */
+
+#define HPOF_FMT 0x1000 /* 16/18 bit data */
+
+#if 0
+#define HPCS_
+#define HPCS_
+#define HPCS_
+#define HPCS_
+#define HPCS_
+#define HPCS_
+#define HPCS_
+#define HPCS_
+#endif
+
+
+
diff --git a/sys/arch/vax/mba/mba.c b/sys/arch/vax/mba/mba.c
new file mode 100644
index 00000000000..4b2d13f7864
--- /dev/null
+++ b/sys/arch/vax/mba/mba.c
@@ -0,0 +1,99 @@
+
+/* $NetBSD: mba.c,v 1.1 1995/02/13 00:44:02 ragge Exp $ */
+/*
+ * Copyright (c) 1994 Ludd, University of Lule}, Sweden.
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed at Ludd, University of Lule}.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /* All bugs are subject to removal without further notice */
+
+
+
+/* mba.c - main mba routines, 930312/ragge */
+
+#include "mba.h"
+#include "nexus.h"
+#include "vax/mba/mbavar.h"
+#include "vax/mba/mbareg.h"
+
+struct mba_ctrl mba_ctrl[NMBA];
+
+extern mba_0(), mba_1(), mba_2(), mba_3();
+int (*mbaintv[4])() = { mba_0, mba_1, mba_2, mba_3 };
+#if NMBA > 4
+ Need to expand the table for more than 4 massbus adaptors
+#endif
+
+mbainterrupt(mba){
+
+ if(mba_hd[mba].mh_mba->mba_sr&MBA_NED){
+ printf("Adresserat icke existerande massbussenhet.\n");
+ mba_hd[mba].mh_mba->mba_sr=MBA_NED+MBA_MCPE;
+ return;
+ }
+ printf("Interrupt fr}n massbussadapter %d\n",mba);
+ printf("mba_hd[mba]->mba_sr: %x\n",mba_hd[mba].mh_mba->mba_sr);
+}
+
+/*
+ * mbafind() set up interrupt vectors for each found mba and calls
+ * config routines for hp disks, tu and mt tapes (currently only hp).
+ */
+
+mbafind(nexnum,nexaddr){
+ struct mba_regs *mbr;
+ struct mba_device *mi;
+
+ mba_ctrl[nmba].mba_regs= (struct mba_regs *)nexaddr;
+ mbr=&(mba_ctrl[nmba].mba_regs);
+/*
+ * Set up interruptvectors and enable interrupt
+ */
+ nex_vec_num(14,nexnum)=nex_vec_num(15,nexnum)=
+ nex_vec_num(16,nexnum)=nex_vec_num(17,nexnum)=
+ (caddr_t)mbaintv[nmba];
+ mbr->mba_cr=MBCR_INIT;
+ mbr->mba_cr=MBCR_IE;
+/*
+ * Loop thru all massbuss devices and check for existance
+ */
+
+ for(i=0;i<8;i++){
+ if(!mbr->mba_drv[i].rmds&MBDS_DPR) continue;
+/*
+ * Device found; check if generated
+ */
+ for(mi = mbdinit; mi->driver; mi++) {
+ if(mi->alive) continue; /* Already config'd */
+ }
+ }
+
+
+}
+
+
diff --git a/sys/arch/vax/mba/mbareg.h b/sys/arch/vax/mba/mbareg.h
new file mode 100644
index 00000000000..79e1acc4eba
--- /dev/null
+++ b/sys/arch/vax/mba/mbareg.h
@@ -0,0 +1,80 @@
+/* $NetBSD: mbareg.h,v 1.1 1995/02/13 00:44:03 ragge Exp $ */
+/*
+ * Copyright (c) 1994 Ludd, University of Lule}, Sweden
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed at Ludd, University of Lule}.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/* mbareg.h - 940320/ragge */
+#include "vax/mba/hpreg.h"
+
+struct mba_regs {
+ u_int mba_csr;
+ u_int mba_cr;
+ u_int mba_sr;
+ u_int mba_var;
+ u_int mba_bc;
+ u_int mba_dr;
+ u_int mba_smr;
+ u_int mba_car;
+ u_int utrymme[248];
+ struct hp_drv hp_drv[8];
+ u_int mba_map[256];
+};
+
+/*
+ * Different states which can be on massbus.
+ */
+/* Write to mba_cr */
+#define MBACR_IBC 0x10
+#define MBACR_MMM 0x8
+#define MBACR_IE 0x4
+#define MBACR_ABORT 0x2
+#define MBACR_INIT 0x1
+
+/* Read from mba_sr: */
+#define MBASR_DTBUSY 0x80000000
+#define MBASR_CRD 0x20000000
+#define MBASR_CBHUNG 0x800000
+#define MBASR_PGE 0x80000
+#define MBASR_NED 0x40000 /* NonExistent Drive */
+#define MBASR_MCPE 0x20000 /* Massbuss Control Parity Error */
+#define MBASR_ATTN 0x10000 /* Attention from Massbus */
+#define MBASR_SPE 0x4000 /* Silo Parity Error */
+#define MBASR_DTCMP 0x2000 /* Data Transfer CoMPleted */
+#define MBASR_DTABT 0x1000 /* Data Transfer ABorTed */
+#define MBASR_DLT 0x800 /* Data LaTe */
+#define MBASR_WCKUE 0x400 /* Write check upper error */
+#define MBASR_WCKLE 0x200 /* Write check lower error */
+#define MBASR_MXE 0x100 /* Miss transfer error */
+#define MBASR_MBEXC 0x80 /* Massbuss exception */
+#define MBASR_MDPE 0x40 /* Massbuss data parity error */
+#define MBASR_MAPPE 0x20 /* Page frame map parity error */
+#define MBASR_INVMAP 0x10 /* Invalid map */
+#define MBASR_ERR_STAT 0x8 /* Error status */
+#define MBASR_NRSTAT 0x2 /* No Response status */
+
diff --git a/sys/arch/vax/mba/mbavar.h b/sys/arch/vax/mba/mbavar.h
new file mode 100644
index 00000000000..b020564bee6
--- /dev/null
+++ b/sys/arch/vax/mba/mbavar.h
@@ -0,0 +1,94 @@
+/* $NetBSD: mbavar.h,v 1.1 1995/02/13 00:44:04 ragge Exp $ */
+/*
+ * Copyright (c) 1994 Ludd, University of Lule}, Sweden
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed at Ludd, University of Lule}.
+ * 4. The name of the author may not be used to endorse or promote products
+ * derived from this software without specific prior written permission
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON 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 ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+
+ /* All bugs are subject to removal without further notice */
+
+/* Mba n}nting... ragge 940311 */
+
+#define MBCR_INIT 1
+#define MBCR_IE (1<<2)
+#define MBDS_DPR (1<<8)
+#define MBSR_NED (1<<18)
+#define MBDT_MOH (1<<13)
+#define MBDT_TYPE 511
+#define MBDT_TAP (1<<14)
+
+#define CLOSED 0
+#define WANTOPEN 1
+#define RDLABEL 2
+#define OPEN 3
+#define OPENRAW 4
+
+struct mba_ctrl {
+ struct mba_regs *mba_regs;
+ struct mba_device *mba_device[8];
+};
+
+struct mba_device {
+ struct mba_driver *driver;
+ int unit;
+ int mbanum;
+ int drive;
+ int dk;
+ int alive;
+ int type;
+ struct mba_regs *mi_mba;
+ struct mba_hd *hd;
+ int drv;
+ int device;
+};
+
+struct mba_slave {
+ struct mba_driver *driver;
+ int ctlr;
+ int unit;
+ int slave;
+ int alive;
+};
+
+struct mba_driver {
+ int (*slave)();
+ char *sname;
+ char *dname;
+ short *type;
+ int (*attach)();
+ struct mba_device **info;
+};
+
+struct mba_hd {
+ struct mba_device *device[8]; /* XXX - Var tidigare mh_mbip */
+ int ndrive;
+ int mh_active;
+ struct mba_regs *mh_mba;
+ struct mba_regs *mh_physmba;
+ struct mba_device *mh_actf;
+ struct mba_device *mh_actl;
+};