summaryrefslogtreecommitdiff
path: root/sys/arch/mvme88k/dev
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2003-12-26 10:41:44 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2003-12-26 10:41:44 +0000
commit69d0d338693edeb2d3c684c04a106376dac0a90d (patch)
tree473131ef079eae25edfeaa724988798df6a70191 /sys/arch/mvme88k/dev
parentac5246212226814e8b03e7512be199dac32a532c (diff)
Merge the attachment part and the real work part of the SCSI drivers in
one file per driver.
Diffstat (limited to 'sys/arch/mvme88k/dev')
-rw-r--r--sys/arch/mvme88k/dev/ssh.c231
-rw-r--r--sys/arch/mvme88k/dev/sshdma.c252
-rw-r--r--sys/arch/mvme88k/dev/sshvar.h5
-rw-r--r--sys/arch/mvme88k/dev/vs.c154
-rw-r--r--sys/arch/mvme88k/dev/vsdma.c165
-rw-r--r--sys/arch/mvme88k/dev/vsvar.h18
6 files changed, 306 insertions, 519 deletions
diff --git a/sys/arch/mvme88k/dev/ssh.c b/sys/arch/mvme88k/dev/ssh.c
index 904e2bf9fe2..3ae79532dd7 100644
--- a/sys/arch/mvme88k/dev/ssh.c
+++ b/sys/arch/mvme88k/dev/ssh.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ssh.c,v 1.19 2003/12/19 22:30:18 miod Exp $ */
+/* $OpenBSD: ssh.c,v 1.20 2003/12/26 10:41:43 miod Exp $ */
/*
* Copyright (c) 1994 Michael L. Hitch
@@ -48,7 +48,6 @@
#include <sys/malloc.h>
#include <uvm/uvm_extern.h>
-#include <uvm/uvm_pmap.h>
#include <machine/autoconf.h>
#include <machine/cmmu.h>
@@ -60,29 +59,54 @@
#include <mvme88k/dev/sshreg.h>
#include <mvme88k/dev/sshvar.h>
-/*
- * SCSI delays
- * In u-seconds, primarily for state changes on the SPC.
- */
-#define SCSI_CMD_WAIT 500000 /* wait per step of 'immediate' cmds */
-#define SCSI_DATA_WAIT 500000 /* wait per data in/out step */
-#define SCSI_INIT_WAIT 500000 /* wait per step (both) during init */
+#include "pcctwo.h"
+#if NPCCTWO > 0
+#include <mvme88k/dev/pcctwofunc.h>
+#include <mvme88k/dev/pcctworeg.h>
+#endif
-void ssh_select(struct ssh_softc *);
-void sshabort(struct ssh_softc *, ssh_regmap_p, char *);
-void ssherror(struct ssh_softc *, ssh_regmap_p, u_char);
-void sshstart(struct ssh_softc *);
-int ssh_checkintr(struct ssh_softc *, u_char, u_char, u_char, int *);
-void sshreset(struct ssh_softc *);
-void sshsetdelay(int);
-void ssh_scsidone(struct ssh_acb *, int);
-void ssh_sched(struct ssh_softc *);
-int ssh_poll(struct ssh_softc *, struct ssh_acb *);
-int sshintr(struct ssh_softc *);
-void scsi_period_to_ssh(struct ssh_softc *, int);
-void ssh_start(struct ssh_softc *, int, int, u_char *, int, u_char *, int);
-void ssh_dump_acb(struct ssh_acb *);
-void sshinitialize(struct ssh_softc *sc);
+int sshmatch(struct device *, void *, void *);
+void sshattach(struct device *, struct device *, void *);
+int ssh_scsicmd(struct scsi_xfer *);
+
+struct scsi_adapter ssh_scsiswitch = {
+ ssh_scsicmd,
+ minphys,
+ 0, /* no lun support */
+ 0, /* no lun support */
+};
+
+struct scsi_device ssh_scsidev = {
+ NULL, /* use default error handler */
+ NULL, /* do not have a start function */
+ NULL, /* have no async handler */
+ NULL, /* Use default done routine */
+};
+
+struct cfattach ssh_ca = {
+ sizeof(struct ssh_softc), sshmatch, sshattach,
+};
+
+struct cfdriver ssh_cd = {
+ NULL, "ssh", DV_DULL, 0
+};
+
+void scsi_period_to_ssh(struct ssh_softc *, int);
+void sshabort(struct ssh_softc *, ssh_regmap_p, char *);
+int ssh_checkintr(struct ssh_softc *, u_char, u_char, u_char, int *);
+int ssh_dmaintr(void *);
+void ssh_dump_acb(struct ssh_acb *);
+void ssherror(struct ssh_softc *, ssh_regmap_p, u_char);
+void sshinitialize(struct ssh_softc *);
+int sshintr(struct ssh_softc *);
+int ssh_poll(struct ssh_softc *, struct ssh_acb *);
+void sshreset(struct ssh_softc *);
+void ssh_sched(struct ssh_softc *);
+void ssh_scsidone(struct ssh_acb *, int);
+void ssh_select(struct ssh_softc *);
+void sshsetdelay(int);
+void sshstart(struct ssh_softc *);
+void ssh_start(struct ssh_softc *, int, int, u_char *, int, u_char *, int);
/* 53C710 script */
const
@@ -98,6 +122,14 @@ int ssh_no_dma = 0;
int ssh_reset_delay = 250; /* delay after reset, in milleseconds */
+/*
+ * SCSI delays
+ * In u-seconds, primarily for state changes on the SPC.
+ */
+#define SCSI_CMD_WAIT 500000 /* wait per step of 'immediate' cmds */
+#define SCSI_DATA_WAIT 500000 /* wait per data in/out step */
+#define SCSI_INIT_WAIT 500000 /* wait per step (both) during init */
+
int ssh_cmd_wait = SCSI_CMD_WAIT;
int ssh_data_wait = SCSI_DATA_WAIT;
int ssh_init_wait = SCSI_INIT_WAIT;
@@ -170,8 +202,143 @@ void ssh_dump_trace(void);
#define SSH_TRACE(a,b,c,d)
#endif
-int kludge_city = 1;
+int
+sshmatch(pdp, vcf, args)
+ struct device *pdp;
+ void *vcf, *args;
+{
+ struct confargs *ca = args;
+
+ if (badvaddr((vaddr_t)IIOV(ca->ca_vaddr), 4)) {
+ return(0);
+ }
+
+ return (1);
+}
+void
+sshattach(parent, self, auxp)
+ struct device *parent, *self;
+ void *auxp;
+{
+ struct ssh_softc *sc = (struct ssh_softc *)self;
+ struct confargs *ca = auxp;
+ ssh_regmap_p rp;
+ int tmp;
+ extern int cpuspeed;
+
+ sc->sc_sshp = rp = ca->ca_vaddr;
+
+ /*
+ * ssh uses sc_clock_freq to define the dcntl & ctest7 reg values
+ * (was 0x0221, but i added SSH_CTEST7_SC0 for snooping control)
+ * XXX does the clock frequency change for the 33MHz processors?
+ */
+ sc->sc_clock_freq = cpuspeed * 2;
+ sc->sc_dcntl = SSH_DCNTL_EA;
+/*X*/ if (sc->sc_clock_freq <= 25)
+/*X*/ sc->sc_dcntl |= (2 << 6);
+/*X*/ else if (sc->sc_clock_freq <= 37)
+/*X*/ sc->sc_dcntl |= (1 << 6);
+/*X*/ else if (sc->sc_clock_freq <= 50)
+/*X*/ sc->sc_dcntl |= (0 << 6);
+/*X*/ else
+/*X*/ sc->sc_dcntl |= (3 << 6);
+
+ sc->sc_ctest0 = SSH_CTEST0_BTD | SSH_CTEST0_EAN;
+
+ /*
+ * MVME187 doesn't implement snooping...
+ */
+ sc->sc_ctest7 = SSH_CTEST7_TT1;
+
+ sc->sc_link.adapter_softc = sc;
+ sc->sc_link.adapter_target = 7; /* XXXX should ask ROM */
+ sc->sc_link.adapter = &ssh_scsiswitch;
+ sc->sc_link.device = &ssh_scsidev;
+ sc->sc_link.openings = 1;
+
+ sc->sc_ih.ih_fn = ssh_dmaintr;
+ sc->sc_ih.ih_arg = sc;
+ sc->sc_ih.ih_wantframe = 0;
+ sc->sc_ih.ih_ipl = ca->ca_ipl;
+
+ sshinitialize(sc);
+
+ switch (ca->ca_bustype) {
+#if NPCCTWO > 0
+ case BUS_PCCTWO:
+ {
+ /*
+ * Disable caching for the softc. Actually, I want
+ * to disable cache for acb structures, but they are
+ * part of softc, and I am disabling the entire softc
+ * just in case.
+ */
+
+ struct pcctworeg *pcc2 = (struct pcctworeg *)ca->ca_master;
+
+ pmap_cache_ctrl(pmap_kernel(), trunc_page((vaddr_t)sc),
+ round_page((vaddr_t)sc + sizeof(*sc)), CACHE_INH);
+
+ pcctwointr_establish(PCC2V_NCR, &sc->sc_ih);
+ /* enable interrupts at ca_ipl */
+ pcc2->pcc2_ncrirq = ca->ca_ipl | PCC2_IRQ_IEN;
+ break;
+ }
+#endif
+ }
+
+ evcnt_attach(&sc->sc_dev, "intr", &sc->sc_intrcnt);
+
+ /*
+ * attach all scsi units on us, watching for boot device
+ * (see dk_establish).
+ */
+ tmp = bootpart;
+ if (ca->ca_paddr != bootaddr)
+ bootpart = -1; /* invalid flag to dk_establish */
+ config_found(self, &sc->sc_link, scsiprint);
+ bootpart = tmp; /* restore old value */
+}
+
+int
+ssh_dmaintr(arg)
+ void *arg;
+{
+ struct ssh_softc *sc = arg;
+
+ ssh_regmap_p rp;
+ u_char istat;
+
+ rp = sc->sc_sshp;
+ istat = rp->ssh_istat;
+ if ((istat & (SSH_ISTAT_SIP | SSH_ISTAT_DIP)) == 0)
+ return (0);
+ if ((rp->ssh_sien | rp->ssh_dien) == 0)
+ return (0); /* no interrupts enabled */
+
+ /*
+ * 53c710 manual recommends reading dstat and sstat0 at least
+ * 12 clk cycles apart if reading as bytes (which is what
+ * pcc2 permits). Stick in a 1us delay between accessing dstat and
+ * sstat0 below.
+ *
+ * save interrupt status, DMA status, and SCSI status 0
+ * (may need to deal with stacked interrupts?)
+ */
+ sc->sc_istat = istat;
+ if (istat & SSH_ISTAT_SIP) {
+ sc->sc_sstat0 = rp->ssh_sstat0;
+ }
+ if (istat & SSH_ISTAT_DIP) {
+ delay(3);
+ sc->sc_dstat = rp->ssh_dstat;
+ }
+ sshintr(sc);
+ sc->sc_intrcnt.ev_count++;
+ return (1);
+}
/*
* dummy routine to debug while loops
*/
@@ -188,20 +355,6 @@ wdummy(void)
}
/*
- * default minphys routine for ssh based controllers
- */
-void
-ssh_minphys(bp)
- struct buf *bp;
-{
-
- /*
- * No max transfer at this level.
- */
- minphys(bp);
-}
-
-/*
* used by specific ssh controller
*
*/
diff --git a/sys/arch/mvme88k/dev/sshdma.c b/sys/arch/mvme88k/dev/sshdma.c
deleted file mode 100644
index 5254ab41824..00000000000
--- a/sys/arch/mvme88k/dev/sshdma.c
+++ /dev/null
@@ -1,252 +0,0 @@
-/* $OpenBSD: sshdma.c,v 1.13 2003/10/05 20:27:48 miod Exp $ */
-
-/*
- * Copyright (c) 1996 Nivas Madhur
- * Copyright (c) 1995 Theo de Raadt
- * Copyright (c) 1994 Michael L. Hitch
- * Copyright (c) 1982, 1990 The Regents of the University of California.
- * 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. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)dma.c
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/device.h>
-
-#include <uvm/uvm_extern.h>
-#include <uvm/uvm_pmap.h>
-
-#include <machine/autoconf.h>
-#include <machine/board.h>
-#include <machine/mmu.h>
-#include <machine/pmap.h>
-
-#include <scsi/scsi_all.h>
-#include <scsi/scsiconf.h>
-
-#include <mvme88k/dev/sshreg.h>
-#include <mvme88k/dev/sshvar.h>
-
-#include "pcctwo.h"
-#if NPCCTWO > 0
-#include <mvme88k/dev/pcctwofunc.h>
-#include <mvme88k/dev/pcctworeg.h>
-#endif
-
-int afscmatch(struct device *, void *, void *);
-void afscattach(struct device *, struct device *, void *);
-
-int afscprint(void *auxp, char *);
-int sshintr(struct ssh_softc *);
-int afsc_dmaintr(void *);
-void sshinitialize(struct ssh_softc *);
-
-struct scsi_adapter afsc_scsiswitch = {
- ssh_scsicmd,
- ssh_minphys,
- 0, /* no lun support */
- 0, /* no lun support */
-};
-
-struct scsi_device afsc_scsidev = {
- NULL, /* use default error handler */
- NULL, /* do not have a start function */
- NULL, /* have no async handler */
- NULL, /* Use default done routine */
-};
-
-struct cfattach ssh_ca = {
- sizeof(struct ssh_softc), afscmatch, afscattach,
-};
-
-struct cfdriver ssh_cd = {
- NULL, "ssh", DV_DULL, 0
-};
-
-int
-afscmatch(pdp, vcf, args)
- struct device *pdp;
- void *vcf, *args;
-{
- struct confargs *ca = args;
-
- if (badvaddr((vaddr_t)IIOV(ca->ca_vaddr), 4)) {
- return(0);
- }
-
- return (1);
-}
-
-void
-afscattach(parent, self, auxp)
- struct device *parent, *self;
- void *auxp;
-{
- struct ssh_softc *sc = (struct ssh_softc *)self;
- struct confargs *ca = auxp;
- ssh_regmap_p rp;
- int tmp;
- extern int cpuspeed;
-
- sc->sc_sshp = rp = ca->ca_vaddr;
-
- /*
- * ssh uses sc_clock_freq to define the dcntl & ctest7 reg values
- * (was 0x0221, but i added SSH_CTEST7_SC0 for snooping control)
- * XXX does the clock frequency change for the 33MHz processors?
- */
- sc->sc_clock_freq = cpuspeed * 2;
- sc->sc_dcntl = SSH_DCNTL_EA;
-/*X*/ if (sc->sc_clock_freq <= 25)
-/*X*/ sc->sc_dcntl |= (2 << 6);
-/*X*/ else if (sc->sc_clock_freq <= 37)
-/*X*/ sc->sc_dcntl |= (1 << 6);
-/*X*/ else if (sc->sc_clock_freq <= 50)
-/*X*/ sc->sc_dcntl |= (0 << 6);
-/*X*/ else
-/*X*/ sc->sc_dcntl |= (3 << 6);
-
- sc->sc_ctest0 = SSH_CTEST0_BTD | SSH_CTEST0_EAN;
-
- /*
- * MVME187 doesn't implement snooping...
- */
- sc->sc_ctest7 = SSH_CTEST7_TT1;
-
- sc->sc_link.adapter_softc = sc;
- sc->sc_link.adapter_target = 7; /* XXXX should ask ROM */
- sc->sc_link.adapter = &afsc_scsiswitch;
- sc->sc_link.device = &afsc_scsidev;
- sc->sc_link.openings = 1;
-
- sc->sc_ih.ih_fn = afsc_dmaintr;
- sc->sc_ih.ih_arg = sc;
- sc->sc_ih.ih_wantframe = 0;
- sc->sc_ih.ih_ipl = ca->ca_ipl;
-
- sshinitialize(sc);
-
- switch (ca->ca_bustype) {
-#if NPCCTWO > 0
- case BUS_PCCTWO:
- {
- /*
- * Disable caching for the softc. Actually, I want
- * to disable cache for acb structures, but they are
- * part of softc, and I am disabling the entire softc
- * just in case.
- */
-
- struct pcctworeg *pcc2 = (struct pcctworeg *)ca->ca_master;
-
- pmap_cache_ctrl(pmap_kernel(), trunc_page((vaddr_t)sc),
- round_page((vaddr_t)sc + sizeof(*sc)), CACHE_INH);
-
- pcctwointr_establish(PCC2V_NCR, &sc->sc_ih);
- /* enable interrupts at ca_ipl */
- pcc2->pcc2_ncrirq = ca->ca_ipl | PCC2_IRQ_IEN;
- break;
- }
-#endif
- }
-
- evcnt_attach(&sc->sc_dev, "intr", &sc->sc_intrcnt);
-
- /*
- * attach all scsi units on us, watching for boot device
- * (see dk_establish).
- */
- tmp = bootpart;
- if (ca->ca_paddr != bootaddr)
- bootpart = -1; /* invalid flag to dk_establish */
- config_found(self, &sc->sc_link, scsiprint);
- bootpart = tmp; /* restore old value */
-}
-/*
- * print diag if pnp is NULL else just extra
- */
-int
-afscprint(auxp, pnp)
- void *auxp;
- char *pnp;
-{
- if (pnp == NULL)
- return (UNCONF);
- return (QUIET);
-}
-
-int
-afsc_dmaintr(arg)
- void *arg;
-{
- struct ssh_softc *sc = arg;
-
- ssh_regmap_p rp;
- u_char istat;
-
- rp = sc->sc_sshp;
- istat = rp->ssh_istat;
- if ((istat & (SSH_ISTAT_SIP | SSH_ISTAT_DIP)) == 0)
- return (0);
- if ((rp->ssh_sien | rp->ssh_dien) == 0)
- return (0); /* no interrupts enabled */
-
- /*
- * 53c710 manual recommends reading dstat and sstat0 at least
- * 12 clk cycles apart if reading as bytes (which is what
- * pcc2 permits). Stick in a 1us delay between accessing dstat and
- * sstat0 below.
- *
- * save interrupt status, DMA status, and SCSI status 0
- * (may need to deal with stacked interrupts?)
- */
- sc->sc_istat = istat;
- if (istat & SSH_ISTAT_SIP) {
- sc->sc_sstat0 = rp->ssh_sstat0;
- }
- if (istat & SSH_ISTAT_DIP) {
- delay(3);
- sc->sc_dstat = rp->ssh_dstat;
- }
- sshintr(sc);
- sc->sc_intrcnt.ev_count++;
- return (1);
-}
-
-#ifdef XXX_CD_DEBUG /* XXXsmurph What is afsccd ?? */
-void
-afsc_dump()
-{
- int i;
-
- for (i = 0; i < afsccd.cd_ndevs; ++i)
- if (afsccd.cd_devs[i])
- ssh_dump(afsccd.cd_devs[i]);
-}
-#endif
diff --git a/sys/arch/mvme88k/dev/sshvar.h b/sys/arch/mvme88k/dev/sshvar.h
index a30d299f41d..422a983355f 100644
--- a/sys/arch/mvme88k/dev/sshvar.h
+++ b/sys/arch/mvme88k/dev/sshvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: sshvar.h,v 1.3 2003/06/02 23:27:52 millert Exp $ */
+/* $OpenBSD: sshvar.h,v 1.4 2003/12/26 10:41:43 miod Exp $ */
/*
* Copyright (c) 1995 Theo de Raadt
@@ -194,7 +194,4 @@ struct ssh_softc {
#define STS_INTERMED 0x10 /* Intermediate status sent */
#define STS_EXT 0x80 /* Extended status valid */
-void ssh_minphys(struct buf *bp);
-int ssh_scsicmd(struct scsi_xfer *);
-
#endif /* _SSHVAR_H */
diff --git a/sys/arch/mvme88k/dev/vs.c b/sys/arch/mvme88k/dev/vs.c
index 132522bb9ed..629358a621b 100644
--- a/sys/arch/mvme88k/dev/vs.c
+++ b/sys/arch/mvme88k/dev/vs.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vs.c,v 1.23 2003/12/25 21:01:39 miod Exp $ */
+/* $OpenBSD: vs.c,v 1.24 2003/12/26 10:41:43 miod Exp $ */
/*
* Copyright (c) 1999 Steve Murphree, Jr.
@@ -34,7 +34,7 @@
*/
/*
- * MVME328 scsi adaptor driver
+ * MVME328S scsi adaptor driver
*/
#include <sys/param.h>
@@ -53,46 +53,118 @@
#include <machine/autoconf.h>
#include <machine/param.h>
-#if defined(mvme88k)
#include <mvme88k/dev/vsreg.h>
#include <mvme88k/dev/vsvar.h>
#include <mvme88k/dev/vme.h> /* vme_findvec() */
#include <machine/cmmu.h> /* DMA_CACHE_SYNC, etc... */
-#else
-#include <mvme68k/dev/vsreg.h>
-#include <mvme68k/dev/vsvar.h>
-#include <mvme68k/dev/vme.h> /* vme_findvec() */
-#endif /* mvme88k */
-
-int vs_checkintr(struct vs_softc *, struct scsi_xfer *, int *);
-void vs_chksense(struct scsi_xfer *);
-void vs_reset(struct vs_softc *);
-void vs_resync(struct vs_softc *);
-int vs_initialize(struct vs_softc *);
-int vs_nintr(struct vs_softc *);
-int vs_eintr(struct vs_softc *);
-int vs_poll(struct vs_softc *, struct scsi_xfer *);
-void vs_scsidone(struct vs_softc *, struct scsi_xfer *, int);
-M328_CQE * vs_getcqe(struct vs_softc *);
-M328_IOPB * vs_getiopb(struct vs_softc *);
-int do_vspoll(struct vs_softc *, int);
-void thaw_queue(struct vs_softc *, u_int8_t);
-void vs_link_sg_element(sg_list_element_t *, vaddr_t, int);
-void vs_link_sg_list(sg_list_element_t *, vaddr_t, int);
+
+int vsmatch(struct device *, void *, void *);
+void vsattach(struct device *, struct device *, void *);
+int vs_scsicmd(struct scsi_xfer *);
+
+struct scsi_adapter vs_scsiswitch = {
+ vs_scsicmd,
+ minphys,
+ 0, /* no lun support */
+ 0, /* no lun support */
+};
+
+struct scsi_device vs_scsidev = {
+ NULL, /* use default error handler */
+ NULL, /* do not have a start function */
+ NULL, /* have no async handler */
+ NULL, /* Use default done routine */
+};
+
+struct cfattach vs_ca = {
+ sizeof(struct vs_softc), vsmatch, vsattach,
+};
+
+struct cfdriver vs_cd = {
+ NULL, "vs", DV_DULL, 0
+};
+
+int do_vspoll(struct vs_softc *, int);
+void thaw_queue(struct vs_softc *, u_int8_t);
+M328_SG vs_alloc_scatter_gather(void);
+M328_SG vs_build_memory_structure(struct scsi_xfer *, M328_IOPB *);
+int vs_checkintr(struct vs_softc *, struct scsi_xfer *, int *);
+void vs_chksense(struct scsi_xfer *);
+void vs_dealloc_scatter_gather(M328_SG);
+int vs_eintr(void *);
+M328_CQE *vs_getcqe(struct vs_softc *);
+M328_IOPB *vs_getiopb(struct vs_softc *);
+int vs_initialize(struct vs_softc *);
+int vs_intr(struct vs_softc *);
+void vs_link_sg_element(sg_list_element_t *, vaddr_t, int);
+void vs_link_sg_list(sg_list_element_t *, vaddr_t, int);
+int vs_nintr(void *);
+int vs_poll(struct vs_softc *, struct scsi_xfer *);
+void vs_reset(struct vs_softc *);
+void vs_resync(struct vs_softc *);
+void vs_scsidone(struct vs_softc *, struct scsi_xfer *, int);
static __inline__ void vs_clear_return_info(struct vs_softc *);
-/*
- * default minphys routine for MVME328 based controllers
- */
+int
+vsmatch(pdp, vcf, args)
+ struct device *pdp;
+ void *vcf, *args;
+{
+ struct confargs *ca = args;
+
+ return (!badvaddr((unsigned)ca->ca_vaddr, 1));
+}
+
void
-vs_minphys(bp)
- struct buf *bp;
+vsattach(parent, self, auxp)
+ struct device *parent, *self;
+ void *auxp;
{
+ struct vs_softc *sc = (struct vs_softc *)self;
+ struct confargs *ca = auxp;
+ struct vsreg * rp;
+ int tmp;
+
+ sc->sc_vsreg = rp = ca->ca_vaddr;
+
+ sc->sc_ipl = ca->ca_ipl;
+ sc->sc_nvec = ca->ca_vec;
+ /* get the next available vector for the error interrupt func. */
+ sc->sc_evec = vme_findvec();
+ sc->sc_link.adapter_softc = sc;
+ sc->sc_link.adapter_target = 7;
+ sc->sc_link.adapter = &vs_scsiswitch;
+ sc->sc_link.device = &vs_scsidev;
+ sc->sc_link.openings = 1;
+
+ sc->sc_ih_n.ih_fn = vs_nintr;
+ sc->sc_ih_n.ih_arg = sc;
+ sc->sc_ih_n.ih_wantframe = 0;
+ sc->sc_ih_n.ih_ipl = ca->ca_ipl;
+
+ sc->sc_ih_e.ih_fn = vs_eintr;
+ sc->sc_ih_e.ih_arg = sc;
+ sc->sc_ih_e.ih_wantframe = 0;
+ sc->sc_ih_e.ih_ipl = ca->ca_ipl;
+
+ if (vs_initialize(sc))
+ return;
+
+ vmeintr_establish(sc->sc_nvec, &sc->sc_ih_n);
+ vmeintr_establish(sc->sc_evec, &sc->sc_ih_e);
+ evcnt_attach(&sc->sc_dev, "intr", &sc->sc_intrcnt_n);
+ evcnt_attach(&sc->sc_dev, "intr", &sc->sc_intrcnt_e);
+
/*
- * No max transfer at this level.
+ * attach all scsi units on us, watching for boot device
+ * (see dk_establish).
*/
- minphys(bp);
+ tmp = bootpart;
+ if (ca->ca_paddr != bootaddr)
+ bootpart = -1; /* invalid flag to dk_establish */
+ config_found(self, &sc->sc_link, scsiprint);
+ bootpart = tmp; /* restore old value */
}
int
@@ -172,7 +244,7 @@ thaw_queue(sc, target)
}
void
-vs_scsidone (sc, xs, stat)
+vs_scsidone(sc, xs, stat)
struct vs_softc *sc;
struct scsi_xfer *xs;
int stat;
@@ -276,16 +348,12 @@ vs_scsicmd(xs)
* a read, prior to starting the IO.
*/
if (xs->flags & SCSI_DATA_IN) { /* read */
-#if defined(mvme88k)
dma_cachectl((vaddr_t)xs->data, xs->datalen,
DMA_CACHE_SYNC_INVAL);
-#endif
iopb->iopb_OPTION |= OPT_READ;
} else { /* write */
-#if defined(mvme88k)
dma_cachectl((vaddr_t)xs->data, xs->datalen,
DMA_CACHE_SYNC);
-#endif
iopb->iopb_OPTION |= OPT_WRITE;
}
@@ -496,7 +564,7 @@ vs_initialize(sc)
CRB_CLR_DONE(CRSW);
/* initialize work queues */
- for (i=1; i<8; i++) {
+ for (i = 1; i < 8; i++) {
d16_bzero(wiopb, sizeof(M328_IOPB));
wiopb->wqcf_CMD = CNTR_INIT_WORKQ;
wiopb->wqcf_OPTION = 0;
@@ -633,7 +701,7 @@ vs_reset(sc)
int
vs_checkintr(sc, xs, status)
- struct vs_softc *sc;
+ struct vs_softc *sc;
struct scsi_xfer *xs;
int *status;
{
@@ -727,9 +795,10 @@ vs_checkintr(sc, xs, status)
/* normal interrupt routine */
int
-vs_nintr(sc)
- struct vs_softc *sc;
+vs_nintr(vsc)
+ void *vsc;
{
+ struct vs_softc *sc = (struct vs_softc *)vsc;
M328_CRB *crb = (M328_CRB *)&sc->sc_vsreg->sh_CRB;
M328_CMD *m328_cmd;
struct scsi_xfer *xs;
@@ -776,9 +845,10 @@ vs_nintr(sc)
}
int
-vs_eintr(sc)
- struct vs_softc *sc;
+vs_eintr(vsc)
+ void *vsc;
{
+ struct vs_softc *sc = (struct vs_softc *)vsc;
M328_CEVSB *crb = (M328_CEVSB *)&sc->sc_vsreg->sh_CRB;
M328_CMD *m328_cmd;
struct scsi_xfer *xs;
diff --git a/sys/arch/mvme88k/dev/vsdma.c b/sys/arch/mvme88k/dev/vsdma.c
deleted file mode 100644
index 31fc8c7854b..00000000000
--- a/sys/arch/mvme88k/dev/vsdma.c
+++ /dev/null
@@ -1,165 +0,0 @@
-/* $OpenBSD: vsdma.c,v 1.10 2003/10/11 22:08:57 miod Exp $ */
-/*
- * Copyright (c) 1999 Steve Murphree, Jr.
- * 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 by the University of
- * California, Berkeley and its contributors.
- * 4. Neither the name of the University nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``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 REGENTS OR CONTRIBUTORS 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.
- *
- * @(#)vsdma.c
- */
-
-/*
- * MVME328 scsi adaptor driver
- */
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-#include <sys/device.h>
-#include <scsi/scsi_all.h>
-#include <scsi/scsiconf.h>
-#include <machine/autoconf.h>
-
-#ifdef mvme88k
-#include <machine/board.h>
-#include <mvme88k/dev/vsreg.h>
-#include <mvme88k/dev/vsvar.h>
-#include <mvme88k/dev/vme.h>
-#else
-#include <mvme68k/dev/vsreg.h>
-#include <mvme68k/dev/vsvar.h>
-#include <mvme68k/dev/vme.h>
-#endif /* mvme88k */
-
-int vsmatch(struct device *, void *, void *);
-void vsattach(struct device *, struct device *, void *);
-int vsprint(void *auxp, char *);
-int vs_initialize(struct vs_softc *);
-int vs_intr(struct vs_softc *);
-int vs_nintr(void *);
-int vs_eintr(void *);
-
-struct scsi_adapter vs_scsiswitch = {
- vs_scsicmd,
- vs_minphys,
- 0, /* no lun support */
- 0, /* no lun support */
-};
-
-struct scsi_device vs_scsidev = {
- NULL, /* use default error handler */
- NULL, /* do not have a start function */
- NULL, /* have no async handler */
- NULL, /* Use default done routine */
-};
-
-struct cfattach vs_ca = {
- sizeof(struct vs_softc), vsmatch, vsattach,
-};
-
-struct cfdriver vs_cd = {
- NULL, "vs", DV_DULL, 0
-};
-
-int
-vsmatch(pdp, vcf, args)
- struct device *pdp;
- void *vcf, *args;
-{
- struct confargs *ca = args;
- if (!badvaddr((unsigned)ca->ca_vaddr, 1)) {
- return (1);
- } else {
- return (0);
- }
-}
-
-void
-vsattach(parent, self, auxp)
- struct device *parent, *self;
- void *auxp;
-{
- struct vs_softc *sc = (struct vs_softc *)self;
- struct confargs *ca = auxp;
- struct vsreg * rp;
- int tmp;
-
- sc->sc_vsreg = rp = ca->ca_vaddr;
-
- sc->sc_ipl = ca->ca_ipl;
- sc->sc_nvec = ca->ca_vec;
- /* get the next available vector for the error interrupt func. */
- sc->sc_evec = vme_findvec();
- sc->sc_link.adapter_softc = sc;
- sc->sc_link.adapter_target = 7;
- sc->sc_link.adapter = &vs_scsiswitch;
- sc->sc_link.device = &vs_scsidev;
- sc->sc_link.openings = 1;
-
- sc->sc_ih_n.ih_fn = vs_nintr;
- sc->sc_ih_n.ih_arg = sc;
- sc->sc_ih_n.ih_wantframe = 0;
- sc->sc_ih_n.ih_ipl = ca->ca_ipl;
-
- sc->sc_ih_e.ih_fn = vs_eintr;
- sc->sc_ih_e.ih_arg = sc;
- sc->sc_ih_e.ih_wantframe = 0;
- sc->sc_ih_e.ih_ipl = ca->ca_ipl;
-
- if (vs_initialize(sc))
- return;
-
- vmeintr_establish(sc->sc_nvec, &sc->sc_ih_n);
- vmeintr_establish(sc->sc_evec, &sc->sc_ih_e);
- evcnt_attach(&sc->sc_dev, "intr", &sc->sc_intrcnt_n);
- evcnt_attach(&sc->sc_dev, "intr", &sc->sc_intrcnt_e);
-
- /*
- * attach all scsi units on us, watching for boot device
- * (see dk_establish).
- */
- tmp = bootpart;
- if (ca->ca_paddr != bootaddr)
- bootpart = -1; /* invalid flag to dk_establish */
- config_found(self, &sc->sc_link, scsiprint);
- bootpart = tmp; /* restore old value */
-}
-
-/*
- * print diag if pnp is NULL else just extra
- */
-int
-vsprint(auxp, pnp)
- void *auxp;
- char *pnp;
-{
- if (pnp == NULL)
- return (UNCONF);
- return (QUIET);
-}
diff --git a/sys/arch/mvme88k/dev/vsvar.h b/sys/arch/mvme88k/dev/vsvar.h
index aa2de282d66..5b597ace998 100644
--- a/sys/arch/mvme88k/dev/vsvar.h
+++ b/sys/arch/mvme88k/dev/vsvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: vsvar.h,v 1.7 2003/10/05 20:27:48 miod Exp $ */
+/* $OpenBSD: vsvar.h,v 1.8 2003/12/26 10:41:43 miod Exp $ */
/*
* Copyright (c) 1999 Steve Murphree, Jr.
* Copyright (c) 1990 The Regents of the University of California.
@@ -171,20 +171,4 @@ struct vs_softc {
#define WQO_RFWQ 0x0020 /* report frozen work queue bit */
#define WQO_INIT 0x8000 /* work queue init bit */
-void vs_minphys(struct buf *bp);
-int vs_scsicmd(struct scsi_xfer *);
-/*
- * Scatter/gather functions
- */
-
-M328_SG vs_alloc_scatter_gather(void);
-void vs_dealloc_scatter_gather(M328_SG sg);
-void vs_link_scatter_gather_element(sg_list_element_t *element,
- vaddr_t phys_add,
- int len);
-void vs_link_scatter_gather_list(sg_list_element_t *list,
- vaddr_t phys_add,
- int elements);
-M328_SG vs_build_memory_structure(struct scsi_xfer *xs, M328_IOPB *iopb);
-
#endif /* _M328VAR_H */