summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorKenneth R Westerback <krw@cvs.openbsd.org>2010-03-23 01:57:21 +0000
committerKenneth R Westerback <krw@cvs.openbsd.org>2010-03-23 01:57:21 +0000
commitcd948c1fd3a45bb8ee18483b4f8df6ce849f8140 (patch)
tree2748525ad92550d0ad2b46b5619c24e5bcda0e13 /sys
parente88d321d148e115dbbf6fea61f7c0dcb67021421 (diff)
Change the scsi_cmd function member of scsi_adapter from int to
void. Use XS_NO_CCB error in the scsi command (xs) to report the NO_CCB condition. Eliminates all SUCCESSFULLY_QUEUED and COMPLETE confusion and untangles the midlayer from the adapter a bit more. Eyes and some fixes by miod@ There may be some compile issues on little used (i.e. I don't have any) drivers but the change is mechanical and thus easy to remedy. ok dlg@
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/hp300/dev/mb89352.c16
-rw-r--r--sys/arch/luna88k/dev/mb89352.c16
-rw-r--r--sys/arch/luna88k/dev/mb89352var.h4
-rw-r--r--sys/arch/mac68k/dev/ncr5380.c16
-rw-r--r--sys/arch/macppc/dev/mesh.c17
-rw-r--r--sys/arch/mvme68k/dev/sbic.c12
-rw-r--r--sys/arch/mvme68k/dev/vs.c33
-rw-r--r--sys/arch/mvme68k/dev/vsbic.c26
-rw-r--r--sys/arch/mvme88k/dev/vs.c35
-rw-r--r--sys/arch/mvme88k/dev/vsbic.c25
-rw-r--r--sys/arch/sparc64/dev/vdsk.c14
-rw-r--r--sys/arch/vax/dec/sii.c20
-rw-r--r--sys/dev/ata/atascsi.c10
-rw-r--r--sys/dev/atapiscsi/atapiscsi.c19
-rw-r--r--sys/dev/eisa/aha1742.c30
-rw-r--r--sys/dev/i2o/ioprbs.c18
-rw-r--r--sys/dev/i2o/iopsp.c15
-rw-r--r--sys/dev/ic/aac.c25
-rw-r--r--sys/dev/ic/adv.c16
-rw-r--r--sys/dev/ic/adw.c15
-rw-r--r--sys/dev/ic/aic6360.c15
-rw-r--r--sys/dev/ic/aic79xx_openbsd.c40
-rw-r--r--sys/dev/ic/aic7xxx_openbsd.c44
-rw-r--r--sys/dev/ic/ami.c60
-rw-r--r--sys/dev/ic/bha.c15
-rw-r--r--sys/dev/ic/cac.c25
-rw-r--r--sys/dev/ic/ciss.c41
-rw-r--r--sys/dev/ic/dpt.c22
-rw-r--r--sys/dev/ic/dptvar.h4
-rw-r--r--sys/dev/ic/gdt_common.c32
-rw-r--r--sys/dev/ic/iha.c23
-rw-r--r--sys/dev/ic/iha.h4
-rw-r--r--sys/dev/ic/isp_openbsd.c48
-rw-r--r--sys/dev/ic/mfi.c17
-rw-r--r--sys/dev/ic/mpi.c22
-rw-r--r--sys/dev/ic/ncr5380sbc.c12
-rw-r--r--sys/dev/ic/ncr53c9x.c22
-rw-r--r--sys/dev/ic/ncr53c9xvar.h4
-rw-r--r--sys/dev/ic/oosiop.c15
-rw-r--r--sys/dev/ic/osiop.c19
-rw-r--r--sys/dev/ic/siop.c29
-rw-r--r--sys/dev/ic/trm.c23
-rw-r--r--sys/dev/ic/twe.c30
-rw-r--r--sys/dev/ic/uha.c18
-rw-r--r--sys/dev/isa/aha.c23
-rw-r--r--sys/dev/isa/seagate.c17
-rw-r--r--sys/dev/isa/wds.c21
-rw-r--r--sys/dev/pci/arc.c16
-rw-r--r--sys/dev/pci/ips.c55
-rw-r--r--sys/dev/pci/mpii.c22
-rw-r--r--sys/dev/pci/qli_pci.c10
-rw-r--r--sys/dev/sdmmc/sdmmc_scsi.c29
-rw-r--r--sys/dev/softraid.c14
-rw-r--r--sys/dev/usb/umass_scsi.c12
-rw-r--r--sys/dev/usb/usscanner.c10
-rw-r--r--sys/dev/vscsi.c28
-rw-r--r--sys/scsi/mpath.c12
-rw-r--r--sys/scsi/scsi_base.c25
-rw-r--r--sys/scsi/scsiconf.h11
59 files changed, 658 insertions, 613 deletions
diff --git a/sys/arch/hp300/dev/mb89352.c b/sys/arch/hp300/dev/mb89352.c
index b0f4af988cb..fcdd214e10a 100644
--- a/sys/arch/hp300/dev/mb89352.c
+++ b/sys/arch/hp300/dev/mb89352.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mb89352.c,v 1.21 2010/01/13 06:09:44 krw Exp $ */
+/* $OpenBSD: mb89352.c,v 1.22 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: mb89352.c,v 1.5 2000/03/23 07:01:31 thorpej Exp $ */
/* NecBSD: mb89352.c,v 1.4 1998/03/14 07:31:20 kmatsuda Exp */
@@ -137,7 +137,7 @@ int spc_debug = 0x00; /* SPC_SHOWSTART|SPC_SHOWMISC|SPC_SHOWTRACE; */
void spc_done (struct spc_softc *, struct spc_acb *);
void spc_dequeue (struct spc_softc *, struct spc_acb *);
-int spc_scsi_cmd (struct scsi_xfer *);
+void spc_scsi_cmd (struct scsi_xfer *);
int spc_poll (struct spc_softc *, struct scsi_xfer *, int);
void spc_sched_msgout(struct spc_softc *, u_char);
void spc_setsync(struct spc_softc *, struct spc_tinfo *);
@@ -398,7 +398,7 @@ spc_get_acb(struct spc_softc *sc, int flags)
* This function is called by the higher level SCSI-driver to queue/run
* SCSI-commands.
*/
-int
+void
spc_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *sc_link = xs->sc_link;
@@ -412,7 +412,11 @@ spc_scsi_cmd(struct scsi_xfer *xs)
flags = xs->flags;
if ((acb = spc_get_acb(sc, flags)) == NULL) {
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s= splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
/* Initialize acb */
@@ -442,13 +446,12 @@ spc_scsi_cmd(struct scsi_xfer *xs)
spc_sched(sc);
/*
* After successful sending, check if we should return just now.
- * If so, return SUCCESSFULLY_QUEUED.
*/
splx(s);
if ((flags & SCSI_POLL) == 0)
- return SUCCESSFULLY_QUEUED;
+ return;
/* Not allowed to use interrupts, use polling instead */
s = splbio();
@@ -458,7 +461,6 @@ spc_scsi_cmd(struct scsi_xfer *xs)
spc_timeout(acb);
}
splx(s);
- return COMPLETE;
}
/*
diff --git a/sys/arch/luna88k/dev/mb89352.c b/sys/arch/luna88k/dev/mb89352.c
index 1ea542c8b82..42b18f50ccd 100644
--- a/sys/arch/luna88k/dev/mb89352.c
+++ b/sys/arch/luna88k/dev/mb89352.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mb89352.c,v 1.11 2010/01/13 06:09:44 krw Exp $ */
+/* $OpenBSD: mb89352.c,v 1.12 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: mb89352.c,v 1.5 2000/03/23 07:01:31 thorpej Exp $ */
/* NecBSD: mb89352.c,v 1.4 1998/03/14 07:31:20 kmatsuda Exp */
@@ -150,7 +150,7 @@ int spc_debug = 0x00; /* SPC_SHOWSTART|SPC_SHOWMISC|SPC_SHOWTRACE; */
void spc_done (struct spc_softc *, struct spc_acb *);
void spc_dequeue (struct spc_softc *, struct spc_acb *);
-int spc_scsi_cmd (struct scsi_xfer *);
+void spc_scsi_cmd (struct scsi_xfer *);
int spc_poll (struct spc_softc *, struct scsi_xfer *, int);
integrate void spc_sched_msgout(struct spc_softc *, u_char);
integrate void spc_setsync(struct spc_softc *, struct spc_tinfo *);
@@ -427,7 +427,7 @@ spc_get_acb(sc, flags)
* This function is called by the higher level SCSI-driver to queue/run
* SCSI-commands.
*/
-int
+void
spc_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -442,7 +442,11 @@ spc_scsi_cmd(xs)
flags = xs->flags;
if ((acb = spc_get_acb(sc, flags)) == NULL) {
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
/* Initialize acb */
@@ -472,13 +476,12 @@ spc_scsi_cmd(xs)
spc_sched(sc);
/*
* After successful sending, check if we should return just now.
- * If so, return SUCCESSFULLY_QUEUED.
*/
splx(s);
if ((flags & SCSI_POLL) == 0)
- return SUCCESSFULLY_QUEUED;
+ return;
/* Not allowed to use interrupts, use polling instead */
s = splbio();
@@ -488,7 +491,6 @@ spc_scsi_cmd(xs)
spc_timeout(acb);
}
splx(s);
- return COMPLETE;
}
/*
diff --git a/sys/arch/luna88k/dev/mb89352var.h b/sys/arch/luna88k/dev/mb89352var.h
index e77f0649a05..e94a5011d75 100644
--- a/sys/arch/luna88k/dev/mb89352var.h
+++ b/sys/arch/luna88k/dev/mb89352var.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: mb89352var.h,v 1.1 2004/04/21 15:23:55 aoyama Exp $ */
+/* $OpenBSD: mb89352var.h,v 1.2 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: mb89352var.h,v 1.6 2003/08/02 12:48:09 tsutsui Exp $ */
/* NecBSD: mb89352var.h,v 1.4 1998/03/14 07:31:22 kmatsuda Exp */
@@ -209,6 +209,6 @@ int spc_intr(void *);
int spc_find(bus_space_tag_t, bus_space_handle_t, int);
void spc_init(struct spc_softc *);
void spc_sched(struct spc_softc *);
-int spc_scsi_cmd(struct scsi_xfer *);
+void spc_scsi_cmd(struct scsi_xfer *);
void spc_minphys(struct buf *);
#endif /* _MB89352VAR_H_ */
diff --git a/sys/arch/mac68k/dev/ncr5380.c b/sys/arch/mac68k/dev/ncr5380.c
index 9324557d98b..201cab11ff6 100644
--- a/sys/arch/mac68k/dev/ncr5380.c
+++ b/sys/arch/mac68k/dev/ncr5380.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ncr5380.c,v 1.37 2010/01/13 06:09:44 krw Exp $ */
+/* $OpenBSD: ncr5380.c,v 1.38 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: ncr5380.c,v 1.38 1996/12/19 21:48:18 scottr Exp $ */
/*
@@ -74,7 +74,7 @@ static volatile int main_running = 0;
static u_char busy;
static void ncr5380_minphys(struct buf *bp, struct scsi_link *sl);
-static int mac68k_ncr5380_scsi_cmd(struct scsi_xfer *xs);
+static void mac68k_ncr5380_scsi_cmd(struct scsi_xfer *xs);
static void ncr5380_show_scsi_cmd(struct scsi_xfer *xs);
struct scsi_adapter ncr5380_switch = {
@@ -287,7 +287,7 @@ void *auxp;
/*
* Carry out a request from the high level driver.
*/
-static int
+static void
mac68k_ncr5380_scsi_cmd(struct scsi_xfer *xs)
{
int sps;
@@ -300,7 +300,7 @@ mac68k_ncr5380_scsi_cmd(struct scsi_xfer *xs)
if (flags & SCSI_RESET) {
scsi_reset_verbose(xs->sc_link->adapter_softc,
"Got reset-command");
- return (COMPLETE);
+ return;
}
/*
@@ -308,8 +308,10 @@ mac68k_ncr5380_scsi_cmd(struct scsi_xfer *xs)
*/
sps = splbio();
if ((reqp = free_head) == 0) {
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(sps);
- return (NO_CCB);
+ return;
}
free_head = reqp->next;
reqp->next = NULL;
@@ -380,10 +382,6 @@ mac68k_ncr5380_scsi_cmd(struct scsi_xfer *xs)
#endif
run_main(xs->sc_link->adapter_softc);
-
- if (xs->flags & (SCSI_POLL|ITSDONE))
- return (COMPLETE); /* We're booting or run_main has completed */
- return (SUCCESSFULLY_QUEUED);
}
static void
diff --git a/sys/arch/macppc/dev/mesh.c b/sys/arch/macppc/dev/mesh.c
index 57ef3f965de..d3e8b2308dd 100644
--- a/sys/arch/macppc/dev/mesh.c
+++ b/sys/arch/macppc/dev/mesh.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mesh.c,v 1.24 2010/01/13 06:09:44 krw Exp $ */
+/* $OpenBSD: mesh.c,v 1.25 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: mesh.c,v 1.1 1999/02/19 13:06:03 tsubai Exp $ */
/*-
@@ -236,7 +236,7 @@ int mesh_stp(struct mesh_softc *, int);
void mesh_setsync(struct mesh_softc *, struct mesh_tinfo *);
struct mesh_scb *mesh_get_scb(struct mesh_softc *);
void mesh_free_scb(struct mesh_softc *, struct mesh_scb *);
-int mesh_scsi_cmd(struct scsi_xfer *);
+void mesh_scsi_cmd(struct scsi_xfer *);
void mesh_sched(struct mesh_softc *);
int mesh_poll(struct scsi_xfer *);
void mesh_done(struct mesh_softc *, struct mesh_scb *);
@@ -1030,7 +1030,7 @@ mesh_free_scb(struct mesh_softc *sc, struct mesh_scb *scb)
TAILQ_INSERT_TAIL(&sc->free_scb, scb, chain);
}
-int
+void
mesh_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *sc_link = xs->sc_link;;
@@ -1042,9 +1042,13 @@ mesh_scsi_cmd(struct scsi_xfer *xs)
flags = xs->flags;
s = splbio();
scb = mesh_get_scb(sc);
+ if (scb == NULL) {
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
+ splx(s);
+ return;
+ }
splx(s);
- if (scb == NULL)
- return (NO_CCB);
DPRINTF("cmdlen: %d\n", xs->cmdlen);
scb->xs = xs;
scb->flags = 0;
@@ -1075,10 +1079,7 @@ mesh_scsi_cmd(struct scsi_xfer *xs)
sc->sc_dev.dv_xname);
}
- return COMPLETE;
}
-
- return SUCCESSFULLY_QUEUED;
}
void
diff --git a/sys/arch/mvme68k/dev/sbic.c b/sys/arch/mvme68k/dev/sbic.c
index a51033aff25..e15b2e1349b 100644
--- a/sys/arch/mvme68k/dev/sbic.c
+++ b/sys/arch/mvme68k/dev/sbic.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sbic.c,v 1.24 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: sbic.c,v 1.25 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: sbic.c,v 1.2 1996/04/23 16:32:54 chuck Exp $ */
/*
@@ -367,7 +367,11 @@ sbic_scsicmd(xs)
Debugger();
#endif
#endif
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
if ( flags & SCSI_DATA_IN )
@@ -419,7 +423,7 @@ sbic_scsicmd(xs)
splx(s);
- return(COMPLETE);
+ return;
}
s = splbio();
@@ -432,8 +436,6 @@ sbic_scsicmd(xs)
sbic_sched(dev);
splx(s);
-
- return(SUCCESSFULLY_QUEUED);
}
/*
diff --git a/sys/arch/mvme68k/dev/vs.c b/sys/arch/mvme68k/dev/vs.c
index 5c77815059d..7f16bf3e2b8 100644
--- a/sys/arch/mvme68k/dev/vs.c
+++ b/sys/arch/mvme68k/dev/vs.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vs.c,v 1.30 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: vs.c,v 1.31 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 2004, 2009, Miodrag Vallat.
@@ -64,7 +64,7 @@
int vsmatch(struct device *, void *, void *);
void vsattach(struct device *, struct device *, void *);
void vs_minphys(struct buf *, struct scsi_link *);
-int vs_scsicmd(struct scsi_xfer *);
+void vs_scsicmd(struct scsi_xfer *);
struct scsi_adapter vs_scsiswitch = {
vs_scsicmd,
@@ -104,7 +104,7 @@ int vs_load_command(struct vs_softc *, struct vs_cb *, bus_addr_t,
bus_addr_t, struct scsi_link *, int, struct scsi_generic *, int,
uint8_t *, int);
int vs_nintr(void *);
-int vs_poll(struct vs_softc *, struct vs_cb *);
+void vs_poll(struct vs_softc *, struct vs_cb *);
void vs_print_addr(struct vs_softc *, struct scsi_xfer *);
struct vs_cb *vs_find_queue(struct scsi_link *, struct vs_softc *);
void vs_reset(struct vs_softc *, int);
@@ -327,7 +327,7 @@ do_vspoll(struct vs_softc *sc, struct scsi_xfer *xs, int canreset)
return 0;
}
-int
+void
vs_poll(struct vs_softc *sc, struct vs_cb *cb)
{
struct scsi_xfer *xs;
@@ -355,7 +355,6 @@ vs_poll(struct vs_softc *sc, struct vs_cb *cb)
CRB_CLR_DONE;
vs_clear_return_info(sc);
- return (COMPLETE);
}
void
@@ -418,7 +417,7 @@ vs_scsidone(struct vs_softc *sc, struct vs_cb *cb)
scsi_done(xs);
}
-int
+void
vs_scsicmd(struct scsi_xfer *xs)
{
struct scsi_link *slp = xs->sc_link;
@@ -447,7 +446,11 @@ vs_scsicmd(struct scsi_xfer *xs)
if (cb->cb_xs != NULL) {
printf("%s: master command not idle\n",
sc->sc_dev.dv_xname);
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
#endif
s = splbio();
@@ -460,7 +463,10 @@ vs_scsicmd(struct scsi_xfer *xs)
printf("%s: queue for target %d is busy\n",
sc->sc_dev.dv_xname, slp->target);
#endif
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
}
if (vs_getcqe(sc, &cqep, &iopb)) {
/* XXX shouldn't happen since our queue is ready */
@@ -468,7 +474,10 @@ vs_scsicmd(struct scsi_xfer *xs)
#ifdef VS_DEBUG
printf("%s: no free CQEs\n", sc->sc_dev.dv_xname);
#endif
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
}
}
@@ -484,7 +493,7 @@ vs_scsicmd(struct scsi_xfer *xs)
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
vs_write(1, cqep + CQE_WORK_QUEUE, cb->cb_q);
@@ -501,10 +510,8 @@ vs_scsicmd(struct scsi_xfer *xs)
if (flags & SCSI_POLL) {
/* poll for the command to complete */
- return vs_poll(sc, cb);
+ vs_poll(sc, cb);
}
-
- return (SUCCESSFULLY_QUEUED);
}
int
diff --git a/sys/arch/mvme68k/dev/vsbic.c b/sys/arch/mvme68k/dev/vsbic.c
index 1841138c7f6..8d10bec56a1 100644
--- a/sys/arch/mvme68k/dev/vsbic.c
+++ b/sys/arch/mvme68k/dev/vsbic.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vsbic.c,v 1.4 2010/01/10 00:10:23 krw Exp $ */
+/* $OpenBSD: vsbic.c,v 1.5 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 2008, 2009 Miodrag Vallat.
@@ -411,7 +411,7 @@ void vsbic_queue_cmd(struct vsbic_softc *, struct bpp_chan *,
int vsbic_request_sense(struct vsbic_softc *, struct vsbic_ccb *);
void vsbic_reset_command(struct vsbic_softc *, struct vsbic_cmd *,
struct scsi_link *);
-int vsbic_scsicmd(struct scsi_xfer *);
+void vsbic_scsicmd(struct scsi_xfer *);
int vsbic_scsireset(struct vsbic_softc *, struct scsi_xfer *);
void vsbic_timeout(void *);
void vsbic_wrapup(struct vsbic_softc *, struct vsbic_ccb *);
@@ -1128,7 +1128,7 @@ vsbic_reset_command(struct vsbic_softc *sc, struct vsbic_cmd *cmd,
/*
* Try and send a command to the board.
*/
-int
+void
vsbic_scsicmd(struct scsi_xfer *xs)
{
struct scsi_link *sl = xs->sc_link;
@@ -1152,7 +1152,7 @@ vsbic_scsicmd(struct scsi_xfer *xs)
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
}
#endif
@@ -1176,7 +1176,7 @@ vsbic_scsicmd(struct scsi_xfer *xs)
xs->error = XS_SENSE;
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
}
/*
@@ -1188,8 +1188,10 @@ vsbic_scsicmd(struct scsi_xfer *xs)
#ifdef VSBIC_DEBUG
printf("%s: no free CCB\n", DEVNAME(sc));
#endif
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return NO_CCB;
+ return;
}
env = bpp_get_envelope(bsc);
@@ -1198,8 +1200,10 @@ vsbic_scsicmd(struct scsi_xfer *xs)
printf("%s: no free envelope\n", DEVNAME(sc));
#endif
vsbic_free_ccb(sc, ccb);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return NO_CCB;
+ return;
}
cmd = vsbic_get_cmd(sc);
if (cmd == NULL) {
@@ -1208,8 +1212,10 @@ vsbic_scsicmd(struct scsi_xfer *xs)
#endif
bpp_put_envelope(bsc, env);
vsbic_free_ccb(sc, ccb);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return NO_CCB;
+ return;
}
ccb->ccb_xs = xs;
@@ -1231,7 +1237,7 @@ vsbic_scsicmd(struct scsi_xfer *xs)
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
/*
@@ -1248,11 +1254,9 @@ vsbic_scsicmd(struct scsi_xfer *xs)
if (ISSET(xs->flags, SCSI_POLL)) {
splx(s);
vsbic_poll(sc, ccb);
- return (COMPLETE);
} else {
timeout_add_msec(&xs->stimeout, xs->timeout);
splx(s);
- return (SUCCESSFULLY_QUEUED);
}
}
diff --git a/sys/arch/mvme88k/dev/vs.c b/sys/arch/mvme88k/dev/vs.c
index 38a51672b93..d2d0f12dfb5 100644
--- a/sys/arch/mvme88k/dev/vs.c
+++ b/sys/arch/mvme88k/dev/vs.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vs.c,v 1.78 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: vs.c,v 1.79 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 2004, 2009, Miodrag Vallat.
@@ -65,7 +65,7 @@
int vsmatch(struct device *, void *, void *);
void vsattach(struct device *, struct device *, void *);
void vs_minphys(struct buf *, struct scsi_link *);
-int vs_scsicmd(struct scsi_xfer *);
+void vs_scsicmd(struct scsi_xfer *);
struct scsi_adapter vs_scsiswitch = {
vs_scsicmd,
@@ -105,7 +105,7 @@ int vs_load_command(struct vs_softc *, struct vs_cb *, bus_addr_t,
bus_addr_t, struct scsi_link *, int, struct scsi_generic *, int,
uint8_t *, int);
int vs_nintr(void *);
-int vs_poll(struct vs_softc *, struct vs_cb *);
+void vs_poll(struct vs_softc *, struct vs_cb *);
void vs_print_addr(struct vs_softc *, struct scsi_xfer *);
struct vs_cb *vs_find_queue(struct scsi_link *, struct vs_softc *);
void vs_reset(struct vs_softc *, int);
@@ -312,7 +312,7 @@ do_vspoll(struct vs_softc *sc, struct scsi_xfer *xs, int canreset)
return 0;
}
-int
+void
vs_poll(struct vs_softc *sc, struct vs_cb *cb)
{
struct scsi_xfer *xs;
@@ -340,7 +340,6 @@ vs_poll(struct vs_softc *sc, struct vs_cb *cb)
CRB_CLR_DONE;
vs_clear_return_info(sc);
- return (COMPLETE);
}
void
@@ -403,7 +402,7 @@ vs_scsidone(struct vs_softc *sc, struct vs_cb *cb)
scsi_done(xs);
}
-int
+void
vs_scsicmd(struct scsi_xfer *xs)
{
struct scsi_link *slp = xs->sc_link;
@@ -432,7 +431,11 @@ vs_scsicmd(struct scsi_xfer *xs)
if (cb->cb_xs != NULL) {
printf("%s: master command not idle\n",
sc->sc_dev.dv_xname);
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
#endif
s = splbio();
@@ -445,7 +448,11 @@ vs_scsicmd(struct scsi_xfer *xs)
printf("%s: queue for target %d is busy\n",
sc->sc_dev.dv_xname, slp->target);
#endif
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
if (vs_getcqe(sc, &cqep, &iopb)) {
/* XXX shouldn't happen since our queue is ready */
@@ -453,7 +460,11 @@ vs_scsicmd(struct scsi_xfer *xs)
#ifdef VS_DEBUG
printf("%s: no free CQEs\n", sc->sc_dev.dv_xname);
#endif
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
}
@@ -469,7 +480,7 @@ vs_scsicmd(struct scsi_xfer *xs)
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
vs_write(1, cqep + CQE_WORK_QUEUE, cb->cb_q);
@@ -486,10 +497,8 @@ vs_scsicmd(struct scsi_xfer *xs)
if (flags & SCSI_POLL) {
/* poll for the command to complete */
- return vs_poll(sc, cb);
+ vs_poll(sc, cb);
}
-
- return (SUCCESSFULLY_QUEUED);
}
int
diff --git a/sys/arch/mvme88k/dev/vsbic.c b/sys/arch/mvme88k/dev/vsbic.c
index 48d879f4ff2..e65246e4f85 100644
--- a/sys/arch/mvme88k/dev/vsbic.c
+++ b/sys/arch/mvme88k/dev/vsbic.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vsbic.c,v 1.5 2010/01/10 00:10:23 krw Exp $ */
+/* $OpenBSD: vsbic.c,v 1.6 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 2008, 2009 Miodrag Vallat.
@@ -411,7 +411,7 @@ void vsbic_queue_cmd(struct vsbic_softc *, struct bpp_chan *,
int vsbic_request_sense(struct vsbic_softc *, struct vsbic_ccb *);
void vsbic_reset_command(struct vsbic_softc *, struct vsbic_cmd *,
struct scsi_link *);
-int vsbic_scsicmd(struct scsi_xfer *);
+void vsbic_scsicmd(struct scsi_xfer *);
int vsbic_scsireset(struct vsbic_softc *, struct scsi_xfer *);
void vsbic_timeout(void *);
void vsbic_wrapup(struct vsbic_softc *, struct vsbic_ccb *);
@@ -1128,7 +1128,7 @@ vsbic_reset_command(struct vsbic_softc *sc, struct vsbic_cmd *cmd,
/*
* Try and send a command to the board.
*/
-int
+void
vsbic_scsicmd(struct scsi_xfer *xs)
{
struct scsi_link *sl = xs->sc_link;
@@ -1152,7 +1152,7 @@ vsbic_scsicmd(struct scsi_xfer *xs)
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
}
#endif
@@ -1176,7 +1176,7 @@ vsbic_scsicmd(struct scsi_xfer *xs)
xs->error = XS_SENSE;
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
}
/*
@@ -1188,8 +1188,9 @@ vsbic_scsicmd(struct scsi_xfer *xs)
#ifdef VSBIC_DEBUG
printf("%s: no free CCB\n", DEVNAME(sc));
#endif
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return NO_CCB;
}
env = bpp_get_envelope(bsc);
@@ -1198,8 +1199,10 @@ vsbic_scsicmd(struct scsi_xfer *xs)
printf("%s: no free envelope\n", DEVNAME(sc));
#endif
vsbic_free_ccb(sc, ccb);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return NO_CCB;
+ return;
}
cmd = vsbic_get_cmd(sc);
if (cmd == NULL) {
@@ -1208,8 +1211,10 @@ vsbic_scsicmd(struct scsi_xfer *xs)
#endif
bpp_put_envelope(bsc, env);
vsbic_free_ccb(sc, ccb);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return NO_CCB;
+ return;
}
ccb->ccb_xs = xs;
@@ -1231,7 +1236,7 @@ vsbic_scsicmd(struct scsi_xfer *xs)
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
/*
@@ -1248,11 +1253,9 @@ vsbic_scsicmd(struct scsi_xfer *xs)
if (ISSET(xs->flags, SCSI_POLL)) {
splx(s);
vsbic_poll(sc, ccb);
- return (COMPLETE);
} else {
timeout_add_msec(&xs->stimeout, xs->timeout);
splx(s);
- return (SUCCESSFULLY_QUEUED);
}
}
diff --git a/sys/arch/sparc64/dev/vdsk.c b/sys/arch/sparc64/dev/vdsk.c
index 9d4a48a6344..5a9def7238f 100644
--- a/sys/arch/sparc64/dev/vdsk.c
+++ b/sys/arch/sparc64/dev/vdsk.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vdsk.c,v 1.17 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: vdsk.c,v 1.18 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 2009 Mark Kettenis
*
@@ -200,7 +200,7 @@ void vdsk_send_attr_info(struct vdsk_softc *);
void vdsk_send_dring_reg(struct vdsk_softc *);
void vdsk_send_rdx(struct vdsk_softc *);
-int vdsk_scsi_cmd(struct scsi_xfer *);
+void vdsk_scsi_cmd(struct scsi_xfer *);
int vdsk_dev_probe(struct scsi_link *);
void vdsk_dev_free(struct scsi_link *);
int vdsk_ioctl(struct scsi_link *, u_long, caddr_t, int, struct proc *);
@@ -914,7 +914,7 @@ vdsk_dring_free(bus_dma_tag_t t, struct vdsk_dring *vd)
free(vd, M_DEVBUF);
}
-int
+void
vdsk_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_rw *rw;
@@ -978,8 +978,10 @@ vdsk_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
if (sc->sc_vio_state != VIO_ESTABLISHED ||
sc->sc_tx_cnt >= sc->sc_vd->vd_nentries) {
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return (NO_CCB);
+ return;
}
desc = sc->sc_tx_prod;
@@ -1038,7 +1040,7 @@ vdsk_scsi_cmd(struct scsi_xfer *xs)
if (!ISSET(xs->flags, SCSI_POLL)) {
splx(s);
- return (SUCCESSFULLY_QUEUED);
+ return;
}
timeout = 1000;
@@ -1050,8 +1052,6 @@ vdsk_scsi_cmd(struct scsi_xfer *xs)
delay(1000);
} while(--timeout > 0);
splx(s);
-
- return (COMPLETE);
}
}
diff --git a/sys/arch/vax/dec/sii.c b/sys/arch/vax/dec/sii.c
index b48348bf190..15b0e8e0886 100644
--- a/sys/arch/vax/dec/sii.c
+++ b/sys/arch/vax/dec/sii.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sii.c,v 1.7 2010/01/10 00:40:25 krw Exp $ */
+/* $OpenBSD: sii.c,v 1.8 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: sii.c,v 1.42 2000/06/02 20:20:29 mhitch Exp $ */
/*
* Copyright (c) 2008 Miodrag Vallat.
@@ -156,7 +156,7 @@ int sii_GetByte(SIIRegs *regs, int phase, int ack);
void sii_DoSync(struct sii_softc *, State *);
void sii_StartDMA(SIIRegs *regs, int phase, u_int dmaAddr, int size);
u_int sii_msgout(SIIRegs *, u_int, u_int8_t);
-int sii_scsi_cmd(struct scsi_xfer *);
+void sii_scsi_cmd(struct scsi_xfer *);
void sii_schedule(struct sii_softc *);
#ifdef DEBUG
void sii_DumpLog(void);
@@ -225,7 +225,7 @@ sii_attach(sc)
* connect/disconnect during an operation.
*/
-int
+void
sii_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -236,11 +236,13 @@ sii_scsi_cmd(xs)
s = splbio();
if (sc->sc_xs[target] != NULL) {
- splx(s);
#ifdef DEBUG
printf("[busy at start]\n");
#endif
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
+ splx(s);
+ return;
}
/*
* Build a ScsiCmd for this command and start it.
@@ -250,9 +252,9 @@ sii_scsi_cmd(xs)
splx(s);
if ((xs->flags & ITSDONE) != 0)
- return (COMPLETE);
+ return;
if ((xs->flags & SCSI_POLL) == 0)
- return (SUCCESSFULLY_QUEUED);
+ return;
count = xs->timeout;
while (count) {
s = splbio();
@@ -265,12 +267,12 @@ sii_scsi_cmd(xs)
--count;
}
if ((xs->flags & ITSDONE) != 0)
- return (COMPLETE);
+ return;
xs->error = XS_TIMEOUT;
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
/*
diff --git a/sys/dev/ata/atascsi.c b/sys/dev/ata/atascsi.c
index b94ec4a14df..9f27e878a0e 100644
--- a/sys/dev/ata/atascsi.c
+++ b/sys/dev/ata/atascsi.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: atascsi.c,v 1.71 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: atascsi.c,v 1.72 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 2007 David Gwynne <dlg@openbsd.org>
@@ -47,7 +47,7 @@ struct atascsi {
int as_capability;
};
-int atascsi_cmd(struct scsi_xfer *);
+void atascsi_cmd(struct scsi_xfer *);
int atascsi_ioctl(struct scsi_link *, u_long, caddr_t, int,
struct proc *);
int atascsi_probe(struct scsi_link *);
@@ -300,7 +300,7 @@ atascsi_free(struct scsi_link *link)
as->as_methods->free(as->as_cookie, port);
}
-int
+void
atascsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -309,7 +309,7 @@ atascsi_cmd(struct scsi_xfer *xs)
if (ap == NULL) {
atascsi_done(xs, XS_DRIVER_STUFFUP);
- return (COMPLETE);
+ return;
}
switch (ap->ap_type) {
@@ -325,8 +325,6 @@ atascsi_cmd(struct scsi_xfer *xs)
atascsi_done(xs, XS_DRIVER_STUFFUP);
break;
}
-
- return (COMPLETE);
}
void
diff --git a/sys/dev/atapiscsi/atapiscsi.c b/sys/dev/atapiscsi/atapiscsi.c
index c4e79eda6ab..0e5111d7ba6 100644
--- a/sys/dev/atapiscsi/atapiscsi.c
+++ b/sys/dev/atapiscsi/atapiscsi.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: atapiscsi.c,v 1.87 2010/01/11 00:00:53 krw Exp $ */
+/* $OpenBSD: atapiscsi.c,v 1.88 2010/03/23 01:57:19 krw Exp $ */
/*
* This code is derived from code with the copyright below.
@@ -167,7 +167,7 @@ struct atapiscsi_softc {
void wdc_atapi_minphys(struct buf *bp, struct scsi_link *sl);
int wdc_atapi_ioctl(struct scsi_link *,
u_long, caddr_t, int, struct proc *);
-int wdc_atapi_send_cmd(struct scsi_xfer *sc_xfer);
+void wdc_atapi_send_cmd(struct scsi_xfer *sc_xfer);
static struct scsi_adapter atapiscsi_switch =
{
@@ -319,7 +319,7 @@ atapiscsi_detach(dev, flags)
return (config_detach_children(dev, flags));
}
-int
+void
wdc_atapi_send_cmd(sc_xfer)
struct scsi_xfer *sc_xfer;
{
@@ -338,13 +338,17 @@ wdc_atapi_send_cmd(sc_xfer)
s = splbio();
scsi_done(sc_xfer);
splx(s);
- return (COMPLETE);
+ return;
}
xfer = wdc_get_xfer(sc_xfer->flags & SCSI_NOSLEEP
? WDC_NOSLEEP : WDC_CANSLEEP);
if (xfer == NULL) {
- return (NO_CCB);
+ sc_xfer->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(sc_xfer);
+ splx(s);
+ return;
}
if (sc_xfer->flags & SCSI_POLL)
xfer->c_flags |= C_POLL;
@@ -426,11 +430,6 @@ wdc_atapi_send_cmd(sc_xfer)
wdc_exec_xfer(chp, xfer);
splx(s);
-
- if (xfer->c_flags & C_POLL)
- return (COMPLETE);
- else
- return (SUCCESSFULLY_QUEUED);
}
void
diff --git a/sys/dev/eisa/aha1742.c b/sys/dev/eisa/aha1742.c
index 47da762f604..2f161b18179 100644
--- a/sys/dev/eisa/aha1742.c
+++ b/sys/dev/eisa/aha1742.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: aha1742.c,v 1.37 2010/01/10 00:40:25 krw Exp $ */
+/* $OpenBSD: aha1742.c,v 1.38 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: aha1742.c,v 1.61 1996/05/12 23:40:01 mycroft Exp $ */
/*
@@ -286,7 +286,7 @@ struct ahb_ecb *ahb_ecb_phys_kv(struct ahb_softc *, physaddr);
int ahb_find(bus_space_tag_t, bus_space_handle_t, struct ahb_softc *);
void ahb_init(struct ahb_softc *);
void ahbminphys(struct buf *, struct scsi_link *);
-int ahb_scsi_cmd(struct scsi_xfer *);
+void ahb_scsi_cmd(struct scsi_xfer *);
void ahb_timeout(void *);
void ahb_print_ecb(struct ahb_ecb *);
void ahb_print_active_ecb(struct ahb_softc *);
@@ -931,7 +931,7 @@ ahbminphys(struct buf *bp, struct scsi_link *sl)
* start a scsi operation given the command and the data address. Also needs
* the unit, target and lu.
*/
-int
+void
ahb_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -952,7 +952,11 @@ ahb_scsi_cmd(xs)
*/
flags = xs->flags;
if ((ecb = ahb_get_ecb(sc, flags)) == NULL) {
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
ecb->xs = xs;
timeout_set(&ecb->xs->stimeout, ahb_timeout, ecb);
@@ -965,8 +969,13 @@ ahb_scsi_cmd(xs)
*/
if (flags & SCSI_RESET) {
ecb->flags |= ECB_IMMED;
- if (sc->immed_ecb)
- return NO_CCB;
+ if (sc->immed_ecb) {
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
+ }
sc->immed_ecb = ecb;
s = splbio();
@@ -976,7 +985,7 @@ ahb_scsi_cmd(xs)
if ((flags & SCSI_POLL) == 0) {
splx(s);
timeout_add_msec(&ecb->xs->stimeout, xs->timeout);
- return SUCCESSFULLY_QUEUED;
+ return;
}
splx(s);
@@ -986,7 +995,7 @@ ahb_scsi_cmd(xs)
*/
if (ahb_poll(sc, xs, xs->timeout))
ahb_timeout(ecb);
- return COMPLETE;
+ return;
}
/*
@@ -1071,7 +1080,7 @@ ahb_scsi_cmd(xs)
s = splbio();
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
}
} else { /* No data xfer, use non S/G values */
ecb->data_addr = (physaddr)0;
@@ -1095,7 +1104,7 @@ ahb_scsi_cmd(xs)
if ((flags & SCSI_POLL) == 0) {
splx(s);
timeout_add_msec(&ecb->xs->stimeout, xs->timeout);
- return SUCCESSFULLY_QUEUED;
+ return;
}
splx(s);
@@ -1108,7 +1117,6 @@ ahb_scsi_cmd(xs)
if (ahb_poll(sc, xs, 2000))
ahb_timeout(ecb);
}
- return COMPLETE;
}
void
diff --git a/sys/dev/i2o/ioprbs.c b/sys/dev/i2o/ioprbs.c
index 38fca418deb..e2e3d5ca007 100644
--- a/sys/dev/i2o/ioprbs.c
+++ b/sys/dev/i2o/ioprbs.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ioprbs.c,v 1.19 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: ioprbs.c,v 1.20 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 2001 Niklas Hallqvist
@@ -105,7 +105,7 @@ void ioprbs_internal_cache_cmd(struct scsi_xfer *);
void ioprbs_intr(struct device *, struct iop_msg *, void *);
void ioprbs_intr_event(struct device *, struct iop_msg *, void *);
int ioprbs_match(struct device *, void *, void *);
-int ioprbs_scsi_cmd(struct scsi_xfer *);
+void ioprbs_scsi_cmd(struct scsi_xfer *);
int ioprbs_start(struct ioprbs_ccb *);
void ioprbs_start_ccbs(struct ioprbs_softc *);
void ioprbs_timeout(void *);
@@ -397,7 +397,7 @@ ioprbs_unconfig(struct ioprbs_softc *sc, int evreg)
iop_initiator_unregister(iop, &sc->sc_ii);
}
-int
+void
ioprbs_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -408,7 +408,6 @@ ioprbs_scsi_cmd(xs)
struct scsi_rw *rw;
struct scsi_rw_big *rwb;
int s;
- int retval = SUCCESSFULLY_QUEUED;
s = splbio();
@@ -498,8 +497,10 @@ ioprbs_scsi_cmd(xs)
* We are out of commands, try again in a little while.
*/
if (ccb == NULL) {
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return (NO_CCB);
+ return;
}
ccb->ic_blockno = blockno;
@@ -516,7 +517,10 @@ ioprbs_scsi_cmd(xs)
splx(s);
printf("%s: command timed out\n",
sc->sc_dv.dv_xname);
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
+ splx(s);
+ return;
}
scsi_done(xs);
#endif
@@ -528,13 +532,11 @@ ioprbs_scsi_cmd(xs)
* Don't process the queue if we are polling.
*/
if (xs->flags & SCSI_POLL) {
- retval = COMPLETE;
break;
}
}
splx(s);
- return (retval);
}
void
diff --git a/sys/dev/i2o/iopsp.c b/sys/dev/i2o/iopsp.c
index 3cfb91b3a3b..18388d9ce77 100644
--- a/sys/dev/i2o/iopsp.c
+++ b/sys/dev/i2o/iopsp.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: iopsp.c,v 1.15 2009/04/02 18:44:49 oga Exp $ */
+/* $OpenBSD: iopsp.c,v 1.16 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD$ */
/*-
@@ -71,7 +71,7 @@ struct cfattach iopsp_ca = {
sizeof(struct iopsp_softc), iopsp_match, iopsp_attach
};
-int iopsp_scsi_cmd(struct scsi_xfer *);
+void iopsp_scsi_cmd(struct scsi_xfer *);
void iopspminphys(struct buf *bp, struct scsi_link *sl);
struct scsi_adapter iopsp_switch = {
@@ -404,7 +404,7 @@ iopspminphys(struct buf *bp, struct scsi_link *sl)
/*
* Start a SCSI command.
*/
-int
+void
iopsp_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -422,7 +422,7 @@ iopsp_scsi_cmd(xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
SC_DEBUG(xs->sc_link, SDEV_DB2, ("iopsp_scsi_cmd: run_xfer\n"));
@@ -442,7 +442,7 @@ iopsp_scsi_cmd(xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
#if defined(I2ODEBUG) || defined(SCSIDEBUG)
@@ -489,7 +489,7 @@ iopsp_scsi_cmd(xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
if ((xs->flags & SCSI_DATA_IN) == 0)
mf->flags |= I2O_SCB_FLAG_XFER_TO_DEVICE;
@@ -512,10 +512,7 @@ iopsp_scsi_cmd(xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
}
-
- return (xs->flags & SCSI_POLL? COMPLETE : SUCCESSFULLY_QUEUED);
}
#ifdef notyet
diff --git a/sys/dev/ic/aac.c b/sys/dev/ic/aac.c
index 3e6ff08d841..e127d0dda66 100644
--- a/sys/dev/ic/aac.c
+++ b/sys/dev/ic/aac.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: aac.c,v 1.42 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: aac.c,v 1.43 2010/03/23 01:57:19 krw Exp $ */
/*-
* Copyright (c) 2000 Michael Smith
@@ -114,7 +114,7 @@ void aac_unmap_command(struct aac_command *);
#if 0
int aac_raw_scsi_cmd(struct scsi_xfer *);
#endif
-int aac_scsi_cmd(struct scsi_xfer *);
+void aac_scsi_cmd(struct scsi_xfer *);
void aac_startio(struct aac_softc *);
void aac_startup(struct aac_softc *);
void aac_add_container(struct aac_softc *, struct aac_mntinforesp *, int);
@@ -2524,11 +2524,10 @@ aac_raw_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
}
#endif
-int
+void
aac_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -2538,7 +2537,6 @@ aac_scsi_cmd(struct scsi_xfer *xs)
u_int32_t blockno, blockcnt;
struct scsi_rw *rw;
struct scsi_rw_big *rwb;
- int retval = SUCCESSFULLY_QUEUED;
int s = splbio();
xs->error = XS_NOERROR;
@@ -2552,7 +2550,7 @@ aac_scsi_cmd(struct scsi_xfer *xs)
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
AAC_DPRINTF(AAC_D_CMD, ("%s: aac_scsi_cmd: ", sc->aac_dev.dv_xname));
@@ -2640,8 +2638,10 @@ aac_scsi_cmd(struct scsi_xfer *xs)
* We are out of commands, try again
* in a little while.
*/
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return (NO_CCB);
+ return;
}
/* fill out the command */
@@ -2664,24 +2664,19 @@ aac_scsi_cmd(struct scsi_xfer *xs)
{
printf("%s: command timed out\n",
sc->aac_dev.dv_xname);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return (NO_CCB);
+ return;
}
scsi_done(xs);
}
}
ready:
- /*
- * Don't process the queue if we are polling.
- */
- if (xs->flags & SCSI_POLL)
- retval = COMPLETE;
-
splx(s);
AAC_DPRINTF(AAC_D_CMD, ("%s: scsi_cmd complete\n",
sc->aac_dev.dv_xname));
- return (retval);
}
/*
diff --git a/sys/dev/ic/adv.c b/sys/dev/ic/adv.c
index ecf6fc28d37..bfd1cf8faf1 100644
--- a/sys/dev/ic/adv.c
+++ b/sys/dev/ic/adv.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: adv.c,v 1.27 2010/01/10 00:10:23 krw Exp $ */
+/* $OpenBSD: adv.c,v 1.28 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: adv.c,v 1.6 1998/10/28 20:39:45 dante Exp $ */
/*
@@ -68,7 +68,7 @@ static void adv_start_ccbs(ASC_SOFTC *);
static u_int8_t *adv_alloc_overrunbuf(char *dvname, bus_dma_tag_t);
-static int adv_scsi_cmd(struct scsi_xfer *);
+static void adv_scsi_cmd(struct scsi_xfer *);
static void advminphys(struct buf *, struct scsi_link *);
static void adv_narrow_isr_callback(ASC_SOFTC *, ASC_QDONE_INFO *);
@@ -571,7 +571,7 @@ advminphys(struct buf *bp, struct scsi_link *sl)
* start a scsi operation given the command and the data address. Also needs
* the unit, target and lu.
*/
-static int
+static void
adv_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -591,8 +591,10 @@ adv_scsi_cmd(xs)
flags = xs->flags;
if ((ccb = adv_get_ccb(sc, flags)) == NULL) {
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return (NO_CCB);
+ return;
}
splx(s); /* done playing with the queue */
@@ -656,7 +658,7 @@ adv_scsi_cmd(xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
bus_dmamap_sync(dmat, ccb->dmamap_xfer,
0, ccb->dmamap_xfer->dm_mapsize,
@@ -699,7 +701,7 @@ adv_scsi_cmd(xs)
* Usually return SUCCESSFULLY QUEUED
*/
if ((flags & SCSI_POLL) == 0)
- return (SUCCESSFULLY_QUEUED);
+ return;
/*
* If we can't use interrupts, poll on completion
@@ -709,8 +711,6 @@ adv_scsi_cmd(xs)
if (adv_poll(sc, xs, ccb->timeout))
adv_timeout(ccb);
}
-
- return (COMPLETE);
}
diff --git a/sys/dev/ic/adw.c b/sys/dev/ic/adw.c
index 32fd96acf19..87ebcb64b1a 100644
--- a/sys/dev/ic/adw.c
+++ b/sys/dev/ic/adw.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: adw.c,v 1.41 2010/01/10 00:10:23 krw Exp $ */
+/* $OpenBSD: adw.c,v 1.42 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: adw.c,v 1.23 2000/05/27 18:24:50 dante Exp $ */
/*
@@ -66,7 +66,7 @@ int adw_init_ccb(ADW_SOFTC *, ADW_CCB *);
ADW_CCB *adw_get_ccb(ADW_SOFTC *, int);
int adw_queue_ccb(ADW_SOFTC *, ADW_CCB *, int);
-int adw_scsi_cmd(struct scsi_xfer *);
+void adw_scsi_cmd(struct scsi_xfer *);
int adw_build_req(struct scsi_xfer *, ADW_CCB *, int);
void adw_build_sglist(ADW_CCB *, ADW_SCSI_REQ_Q *, ADW_SG_BLOCK *);
void adw_minphys(struct buf *, struct scsi_link *);
@@ -590,7 +590,7 @@ adw_minphys(struct buf *bp, struct scsi_link *sl)
* start a scsi operation given the command and the data address.
* Also needs the unit, target and lu.
*/
-int
+void
adw_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -612,8 +612,10 @@ adw_scsi_cmd(xs)
if (nowait)
flags |= SCSI_NOSLEEP;
if ((ccb = adw_get_ccb(sc, flags)) == NULL) {
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return (NO_CCB);
+ return;
}
splx(s); /* done playing with the queue */
@@ -635,14 +637,14 @@ retryagain:
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
/*
* Usually return SUCCESSFULLY QUEUED
*/
if ((xs->flags & SCSI_POLL) == 0)
- return (SUCCESSFULLY_QUEUED);
+ return;
/*
* If we can't use interrupts, poll on completion
@@ -658,7 +660,6 @@ retryagain:
scsi_done(xs);
splx(s);
}
- return (COMPLETE);
}
diff --git a/sys/dev/ic/aic6360.c b/sys/dev/ic/aic6360.c
index 8fb801d08eb..ff852019840 100644
--- a/sys/dev/ic/aic6360.c
+++ b/sys/dev/ic/aic6360.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: aic6360.c,v 1.21 2010/01/13 06:09:44 krw Exp $ */
+/* $OpenBSD: aic6360.c,v 1.22 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: aic6360.c,v 1.52 1996/12/10 21:27:51 thorpej Exp $ */
#ifdef DDB
@@ -158,7 +158,7 @@ void aic_minphys(struct buf *, struct scsi_link *);
void aic_init(struct aic_softc *);
void aic_done(struct aic_softc *, struct aic_acb *);
void aic_dequeue(struct aic_softc *, struct aic_acb *);
-int aic_scsi_cmd(struct scsi_xfer *);
+void aic_scsi_cmd(struct scsi_xfer *);
int aic_poll(struct aic_softc *, struct scsi_xfer *, int);
integrate void aic_sched_msgout(struct aic_softc *, u_char);
integrate void aic_setsync(struct aic_softc *, struct aic_tinfo *);
@@ -504,7 +504,7 @@ aic_get_acb(struct aic_softc *sc, int flags)
* This function is called by the higher level SCSI-driver to queue/run
* SCSI-commands.
*/
-int
+void
aic_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *sc_link = xs->sc_link;
@@ -518,7 +518,11 @@ aic_scsi_cmd(struct scsi_xfer *xs)
flags = xs->flags;
if ((acb = aic_get_acb(sc, flags)) == NULL) {
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
/* Initialize acb */
@@ -547,7 +551,7 @@ aic_scsi_cmd(struct scsi_xfer *xs)
splx(s);
if ((flags & SCSI_POLL) == 0)
- return SUCCESSFULLY_QUEUED;
+ return;
/* Not allowed to use interrupts, use polling instead */
if (aic_poll(sc, xs, acb->timeout)) {
@@ -555,7 +559,6 @@ aic_scsi_cmd(struct scsi_xfer *xs)
if (aic_poll(sc, xs, acb->timeout))
aic_timeout(acb);
}
- return COMPLETE;
}
#ifdef notyet
diff --git a/sys/dev/ic/aic79xx_openbsd.c b/sys/dev/ic/aic79xx_openbsd.c
index fb8521e03bf..5ed0e0f8a26 100644
--- a/sys/dev/ic/aic79xx_openbsd.c
+++ b/sys/dev/ic/aic79xx_openbsd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: aic79xx_openbsd.c,v 1.35 2010/01/20 08:40:41 krw Exp $ */
+/* $OpenBSD: aic79xx_openbsd.c,v 1.36 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 2004 Milos Urbanek, Kenneth R. Westerback & Marco Peereboom
@@ -74,10 +74,10 @@ __FBSDID("$FreeBSD: src/sys/dev/aic7xxx/aic79xx_osm.c,v 1.16 2003/12/17 00:02:09
#endif
/* XXX milos add ahd_ioctl */
-int ahd_action(struct scsi_xfer *);
-int ahd_execute_scb(void *, bus_dma_segment_t *, int);
+void ahd_action(struct scsi_xfer *);
+void ahd_execute_scb(void *, bus_dma_segment_t *, int);
int ahd_poll(struct ahd_softc *, int);
-int ahd_setup_data(struct ahd_softc *, struct scsi_xfer *,
+void ahd_setup_data(struct ahd_softc *, struct scsi_xfer *,
struct scb *);
void ahd_adapter_req_set_xfer_mode(struct ahd_softc *, struct scb *);
@@ -290,7 +290,7 @@ ahd_minphys(struct buf *bp, struct scsi_link *sl)
minphys(bp);
}
-int32_t
+void
ahd_action(struct scsi_xfer *xs)
{
struct ahd_softc *ahd;
@@ -315,7 +315,7 @@ ahd_action(struct scsi_xfer *xs)
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
ahd_unlock(ahd, &s);
- return (COMPLETE);
+ return;
}
/*
* get an scb to use.
@@ -332,8 +332,10 @@ ahd_action(struct scsi_xfer *xs)
if ((scb = ahd_get_scb(ahd, col_idx)) == NULL) {
ahd->flags |= AHD_RESOURCE_SHORTAGE;
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
ahd_unlock(ahd, &s);
- return (NO_CCB);
+ return;
}
ahd_unlock(ahd, &s);
@@ -355,14 +357,14 @@ ahd_action(struct scsi_xfer *xs)
scb->flags |= SCB_DEVICE_RESET;
hscb->control |= MK_MESSAGE;
hscb->task_management = SIU_TASKMGMT_LUN_RESET;
- return (ahd_execute_scb(scb, NULL, 0));
+ ahd_execute_scb(scb, NULL, 0);
} else {
hscb->task_management = 0;
- return (ahd_setup_data(ahd, xs, scb));
+ ahd_setup_data(ahd, xs, scb);
}
}
-int
+void
ahd_execute_scb(void *arg, bus_dma_segment_t *dm_segs, int nsegments)
{
struct scb *scb;
@@ -417,7 +419,7 @@ ahd_execute_scb(void *arg, bus_dma_segment_t *dm_segs, int nsegments)
scb->dmamap);
ahd_free_scb(ahd, scb);
ahd_unlock(ahd, &s);
- return (COMPLETE);
+ return;
}
tinfo = ahd_fetch_transinfo(ahd, SCSIID_CHANNEL(ahd, scb->hscb->scsiid),
@@ -481,7 +483,7 @@ ahd_execute_scb(void *arg, bus_dma_segment_t *dm_segs, int nsegments)
}
ahd_unlock(ahd, &s);
- return (SUCCESSFULLY_QUEUED);
+ return;
}
/*
@@ -499,7 +501,6 @@ ahd_execute_scb(void *arg, bus_dma_segment_t *dm_segs, int nsegments)
} while (!(xs->flags & ITSDONE));
ahd_unlock(ahd, &s);
- return (COMPLETE);
}
int
@@ -520,7 +521,7 @@ ahd_poll(struct ahd_softc *ahd, int wait)
return (0);
}
-int
+void
ahd_setup_data(struct ahd_softc *ahd, struct scsi_xfer *xs,
struct scb *scb)
{
@@ -538,7 +539,7 @@ ahd_setup_data(struct ahd_softc *ahd, struct scsi_xfer *xs,
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
ahd_unlock(ahd, &s);
- return (COMPLETE);
+ return;
}
memcpy(hscb->shared_data.idata.cdb, xs->cmd, hscb->cdb_len);
@@ -562,14 +563,15 @@ ahd_setup_data(struct ahd_softc *ahd, struct scsi_xfer *xs,
#endif
ahd_lock(ahd, &s);
ahd_free_scb(ahd, scb);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
ahd_unlock(ahd, &s);
- return (NO_CCB); /* XXX fvdl */
+ return;
}
- error = ahd_execute_scb(scb, scb->dmamap->dm_segs,
+ ahd_execute_scb(scb, scb->dmamap->dm_segs,
scb->dmamap->dm_nsegs);
- return error;
} else {
- return ahd_execute_scb(scb, NULL, 0);
+ ahd_execute_scb(scb, NULL, 0);
}
}
diff --git a/sys/dev/ic/aic7xxx_openbsd.c b/sys/dev/ic/aic7xxx_openbsd.c
index bbf8894e1de..3ea4c633553 100644
--- a/sys/dev/ic/aic7xxx_openbsd.c
+++ b/sys/dev/ic/aic7xxx_openbsd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: aic7xxx_openbsd.c,v 1.45 2010/01/20 08:40:41 krw Exp $ */
+/* $OpenBSD: aic7xxx_openbsd.c,v 1.46 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: aic7xxx_osm.c,v 1.14 2003/11/02 11:07:44 wiz Exp $ */
/*
@@ -48,10 +48,10 @@
#endif
-int ahc_action(struct scsi_xfer *);
-int ahc_execute_scb(void *, bus_dma_segment_t *, int);
+void ahc_action(struct scsi_xfer *);
+void ahc_execute_scb(void *, bus_dma_segment_t *, int);
int ahc_poll(struct ahc_softc *, int);
-int ahc_setup_data(struct ahc_softc *, struct scsi_xfer *, struct scb *);
+void ahc_setup_data(struct ahc_softc *, struct scsi_xfer *, struct scb *);
void ahc_minphys(struct buf *, struct scsi_link *);
void ahc_adapter_req_set_xfer_mode(struct ahc_softc *, struct scb *);
@@ -290,7 +290,7 @@ ahc_minphys(struct buf *bp, struct scsi_link *sl)
minphys(bp);
}
-int32_t
+void
ahc_action(struct scsi_xfer *xs)
{
struct ahc_softc *ahc;
@@ -311,8 +311,10 @@ ahc_action(struct scsi_xfer *xs)
*/
s = splbio();
if ((scb = ahc_get_scb(ahc)) == NULL) {
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return (NO_CCB);
+ return;
}
splx(s);
@@ -332,13 +334,14 @@ ahc_action(struct scsi_xfer *xs)
hscb->cdb_len = 0;
scb->flags |= SCB_DEVICE_RESET;
hscb->control |= MK_MESSAGE;
- return (ahc_execute_scb(scb, NULL, 0));
+ ahc_execute_scb(scb, NULL, 0);
+ return;
}
- return (ahc_setup_data(ahc, xs, scb));
+ ahc_setup_data(ahc, xs, scb);
}
-int
+void
ahc_execute_scb(void *arg, bus_dma_segment_t *dm_segs, int nsegments)
{
struct scb *scb;
@@ -422,7 +425,7 @@ ahc_execute_scb(void *arg, bus_dma_segment_t *dm_segs, int nsegments)
ahc_free_scb(ahc, scb);
splx(s);
- return (COMPLETE);
+ return;
}
tinfo = ahc_fetch_transinfo(ahc, SCSIID_CHANNEL(ahc, scb->hscb->scsiid),
@@ -481,7 +484,7 @@ ahc_execute_scb(void *arg, bus_dma_segment_t *dm_segs, int nsegments)
goto poll;
else {
splx(s);
- return (SUCCESSFULLY_QUEUED);
+ return;
}
}
}
@@ -511,7 +514,7 @@ ahc_execute_scb(void *arg, bus_dma_segment_t *dm_segs, int nsegments)
ahc->inited_target[xs->sc_link->target] = 1;
}
splx(s);
- return (SUCCESSFULLY_QUEUED);
+ return;
}
/*
@@ -530,7 +533,6 @@ poll:
} while (!(xs->flags & ITSDONE));
splx(s);
- return (COMPLETE);
}
int
@@ -551,7 +553,7 @@ ahc_poll(struct ahc_softc *ahc, int wait)
return (0);
}
-int
+void
ahc_setup_data(struct ahc_softc *ahc, struct scsi_xfer *xs,
struct scb *scb)
{
@@ -569,7 +571,7 @@ ahc_setup_data(struct ahc_softc *ahc, struct scsi_xfer *xs,
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
if (hscb->cdb_len > 12) {
@@ -596,15 +598,15 @@ ahc_setup_data(struct ahc_softc *ahc, struct scsi_xfer *xs,
#endif
s = splbio();
ahc_free_scb(ahc, scb);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return (NO_CCB); /* XXX fvdl */
+ return;
}
- error = ahc_execute_scb(scb,
- scb->dmamap->dm_segs,
- scb->dmamap->dm_nsegs);
- return error;
+ ahc_execute_scb(scb, scb->dmamap->dm_segs,
+ scb->dmamap->dm_nsegs);
} else {
- return ahc_execute_scb(scb, NULL, 0);
+ ahc_execute_scb(scb, NULL, 0);
}
}
diff --git a/sys/dev/ic/ami.c b/sys/dev/ic/ami.c
index 5c0d7d85bed..9b5534702a8 100644
--- a/sys/dev/ic/ami.c
+++ b/sys/dev/ic/ami.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ami.c,v 1.199 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: ami.c,v 1.200 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 2001 Michael Shalayeff
@@ -92,7 +92,7 @@ struct cfdriver ami_cd = {
NULL, "ami", DV_DULL
};
-int ami_scsi_cmd(struct scsi_xfer *);
+void ami_scsi_cmd(struct scsi_xfer *);
int ami_scsi_ioctl(struct scsi_link *, u_long, caddr_t, int, struct proc *);
void amiminphys(struct buf *bp, struct scsi_link *sl);
@@ -104,7 +104,7 @@ struct scsi_device ami_dev = {
NULL, NULL, NULL, NULL
};
-int ami_scsi_raw_cmd(struct scsi_xfer *);
+void ami_scsi_raw_cmd(struct scsi_xfer *);
struct scsi_adapter ami_raw_switch = {
ami_scsi_raw_cmd, amiminphys, 0, 0,
@@ -135,7 +135,7 @@ int ami_done(struct ami_softc *, int, int);
void ami_runqueue_tick(void *);
void ami_runqueue(struct ami_softc *);
-int ami_start_xs(struct ami_softc *sc, struct ami_ccb *,
+void ami_start_xs(struct ami_softc *sc, struct ami_ccb *,
struct scsi_xfer *);
void ami_done_xs(struct ami_softc *, struct ami_ccb *);
void ami_done_pt(struct ami_softc *, struct ami_ccb *);
@@ -967,21 +967,19 @@ ami_schwartz_poll(struct ami_softc *sc, struct ami_iocmd *mbox)
return (rv);
}
-int
+void
ami_start_xs(struct ami_softc *sc, struct ami_ccb *ccb, struct scsi_xfer *xs)
{
timeout_set(&xs->stimeout, ami_stimeout, ccb);
if (xs->flags & SCSI_POLL) {
ami_complete(sc, ccb, xs->timeout);
- return (COMPLETE);
+ return;
}
/* XXX way wrong, this timeout needs to be set later */
timeout_add_sec(&xs->stimeout, 61);
ami_start(sc, ccb);
-
- return (SUCCESSFULLY_QUEUED);
}
void
@@ -1318,7 +1316,7 @@ ami_copy_internal_data(struct scsi_xfer *xs, void *v, size_t size)
}
}
-int
+void
ami_scsi_raw_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -1345,7 +1343,7 @@ ami_scsi_raw_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
xs->error = XS_NOERROR;
@@ -1354,7 +1352,11 @@ ami_scsi_raw_cmd(struct scsi_xfer *xs)
ccb = ami_get_ccb(sc);
splx(s);
if (ccb == NULL) {
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
memset(ccb->ccb_pt, 0, sizeof(struct ami_passthrough));
@@ -1381,10 +1383,10 @@ ami_scsi_raw_cmd(struct scsi_xfer *xs)
ami_put_ccb(ccb);
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
- return (ami_start_xs(sc, ccb, xs));
+ ami_start_xs(sc, ccb, xs);
}
int
@@ -1435,7 +1437,7 @@ ami_load_ptmem(struct ami_softc *sc, struct ami_ccb *ccb, void *data,
return (0);
}
-int
+void
ami_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -1465,7 +1467,7 @@ ami_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
error = 0;
@@ -1484,7 +1486,11 @@ ami_scsi_cmd(struct scsi_xfer *xs)
ccb = ami_get_ccb(sc);
splx(s);
if (ccb == NULL) {
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
ccb->ccb_xs = xs;
@@ -1513,7 +1519,7 @@ ami_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
case REQUEST_SENSE:
AMI_DPRINTF(AMI_D_CMD, ("REQUEST SENSE tgt %d ", target));
@@ -1529,7 +1535,7 @@ ami_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
case INQUIRY:
AMI_DPRINTF(AMI_D_CMD, ("INQUIRY tgt %d ", target));
@@ -1549,7 +1555,7 @@ ami_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
case READ_CAPACITY:
AMI_DPRINTF(AMI_D_CMD, ("READ CAPACITY tgt %d ", target));
@@ -1562,7 +1568,7 @@ ami_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
default:
AMI_DPRINTF(AMI_D_CMD, ("unsupported scsi command %#x tgt %d ",
@@ -1572,7 +1578,7 @@ ami_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
/* A read or write operation. */
@@ -1594,14 +1600,18 @@ ami_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
s = splbio();
ccb = ami_get_ccb(sc);
splx(s);
if (ccb == NULL) {
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
ccb->ccb_xs = xs;
@@ -1627,7 +1637,7 @@ ami_scsi_cmd(struct scsi_xfer *xs)
ami_put_ccb(ccb);
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
sgd = ccb->ccb_dmamap->dm_segs;
@@ -1654,7 +1664,7 @@ ami_scsi_cmd(struct scsi_xfer *xs)
ccb->ccb_dmamap->dm_mapsize, (xs->flags & SCSI_DATA_IN) ?
BUS_DMASYNC_PREREAD : BUS_DMASYNC_PREWRITE);
- return (ami_start_xs(sc, ccb, xs));
+ ami_start_xs(sc, ccb, xs);
}
int
diff --git a/sys/dev/ic/bha.c b/sys/dev/ic/bha.c
index 890ea167a37..4ef56533f94 100644
--- a/sys/dev/ic/bha.c
+++ b/sys/dev/ic/bha.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: bha.c,v 1.20 2010/01/10 00:10:23 krw Exp $ */
+/* $OpenBSD: bha.c,v 1.21 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: bha.c,v 1.27 1998/11/19 21:53:00 thorpej Exp $ */
#undef BHADEBUG
@@ -93,7 +93,7 @@ void bha_start_ccbs(struct bha_softc *);
void bha_done(struct bha_softc *, struct bha_ccb *);
int bha_init(struct bha_softc *);
void bhaminphys(struct buf *, struct scsi_link *);
-int bha_scsi_cmd(struct scsi_xfer *);
+void bha_scsi_cmd(struct scsi_xfer *);
int bha_poll(struct bha_softc *, struct scsi_xfer *, int);
void bha_timeout(void *arg);
int bha_create_ccbs(struct bha_softc *, struct bha_ccb *, int);
@@ -1269,7 +1269,7 @@ bhaminphys(struct buf *bp, struct scsi_link *sl)
* start a scsi operation given the command and the data address. Also needs
* the unit, target and lu.
*/
-int
+void
bha_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -1290,8 +1290,10 @@ bha_scsi_cmd(xs)
*/
flags = xs->flags;
if ((ccb = bha_get_ccb(sc, flags)) == NULL) {
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return (NO_CCB);
+ return;
}
splx(s); /* done playing with the queue */
@@ -1390,7 +1392,7 @@ bha_scsi_cmd(xs)
*/
SC_DEBUG(sc_link, SDEV_DB3, ("cmd_sent\n"));
if ((flags & SCSI_POLL) == 0)
- return (SUCCESSFULLY_QUEUED);
+ return;
/*
* If we can't use interrupts, poll on completion
@@ -1400,7 +1402,7 @@ bha_scsi_cmd(xs)
if (bha_poll(sc, xs, ccb->timeout))
bha_timeout(ccb);
}
- return (COMPLETE);
+ return;
bad:
xs->error = XS_DRIVER_STUFFUP;
@@ -1408,7 +1410,6 @@ bad:
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
}
/*
diff --git a/sys/dev/ic/cac.c b/sys/dev/ic/cac.c
index 6cc4c4f1e4d..2b459ac66f4 100644
--- a/sys/dev/ic/cac.c
+++ b/sys/dev/ic/cac.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: cac.c,v 1.34 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: cac.c,v 1.35 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: cac.c,v 1.15 2000/11/08 19:20:35 ad Exp $ */
/*
@@ -96,7 +96,7 @@ struct cfdriver cac_cd = {
NULL, "cac", DV_DULL
};
-int cac_scsi_cmd(struct scsi_xfer *);
+void cac_scsi_cmd(struct scsi_xfer *);
void cacminphys(struct buf *bp, struct scsi_link *sl);
struct scsi_adapter cac_switch = {
@@ -406,7 +406,7 @@ cac_cmd(struct cac_softc *sc, int command, void *data, int datasize,
/* Synchronous commands musn't wait. */
if ((*sc->sc_cl->cl_fifo_full)(sc)) {
cac_ccb_free(sc, ccb);
- rv = ENOMEM; /* Causes NO_CCB, i/o is retried. */
+ rv = ENOMEM; /* Causes XS_NO_CCB, i/o is retried. */
} else {
ccb->ccb_flags |= CAC_CCB_ACTIVE;
(*sc->sc_cl->cl_submit)(sc, ccb);
@@ -579,7 +579,7 @@ cac_copy_internal_data(xs, v, size)
}
}
-int
+void
cac_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -601,7 +601,7 @@ cac_scsi_cmd(xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
s = splbio();
@@ -717,21 +717,20 @@ cac_scsi_cmd(xs)
target, blockno, flags, xs))) {
if (error == ENOMEM || error == EBUSY) {
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return (NO_CCB);
+ return;
} else {
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
- break;
+ splx(s);
+ return;
}
}
splx(s);
-
- if (poll)
- return (COMPLETE);
- else
- return (SUCCESSFULLY_QUEUED);
+ return;
default:
SC_DEBUG(link, SDEV_DB1, ("unsupported scsi command %#x "
@@ -741,8 +740,6 @@ cac_scsi_cmd(xs)
scsi_done(xs);
splx(s);
-
- return (COMPLETE);
}
/*
diff --git a/sys/dev/ic/ciss.c b/sys/dev/ic/ciss.c
index c9c8053b58c..54d3cc8b1b4 100644
--- a/sys/dev/ic/ciss.c
+++ b/sys/dev/ic/ciss.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ciss.c,v 1.40 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: ciss.c,v 1.41 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 2005,2006 Michael Shalayeff
@@ -69,7 +69,7 @@ struct cfdriver ciss_cd = {
NULL, "ciss", DV_DULL
};
-int ciss_scsi_cmd(struct scsi_xfer *xs);
+void ciss_scsi_cmd(struct scsi_xfer *xs);
int ciss_scsi_ioctl(struct scsi_link *link, u_long cmd,
caddr_t addr, int flag, struct proc *p);
void cissminphys(struct buf *bp, struct scsi_link *sl);
@@ -82,7 +82,7 @@ struct scsi_device ciss_dev = {
NULL, NULL, NULL, NULL
};
-int ciss_scsi_raw_cmd(struct scsi_xfer *xs);
+void ciss_scsi_raw_cmd(struct scsi_xfer *xs);
struct scsi_adapter ciss_raw_switch = {
ciss_scsi_raw_cmd, cissminphys, NULL, NULL,
@@ -135,6 +135,11 @@ ciss_put_ccb(struct ciss_ccb *ccb)
{
struct ciss_softc *sc = ccb->ccb_sc;
+ if (ccb->ccb_xs) {
+ CISS_DPRINTF(CISS_D_CMD, ("scsi_done(%p) ", ccb->ccb_xs));
+ scsi_done(ccb->ccb_xs);
+ }
+
ccb->ccb_state = CISS_CCB_FREE;
ccb->ccb_xs = NULL;
ccb->ccb_data = NULL;
@@ -504,10 +509,8 @@ ciss_cmd(struct ciss_ccb *ccb, int flags, int wait)
printf("more than %d dma segs\n", sc->maxsg);
else
printf("error %d loading dma map\n", error);
- if (ccb->ccb_xs) {
+ if (ccb->ccb_xs)
ccb->ccb_xs->error = XS_DRIVER_STUFFUP;
- scsi_done(ccb->ccb_xs);
- }
ciss_put_ccb(ccb);
return (error);
}
@@ -681,13 +684,11 @@ ciss_done(struct ciss_ccb *ccb)
bus_dmamap_unload(sc->dmat, ccb->ccb_dmamap);
}
+ if (xs)
+ xs->resid = 0;
+
ciss_put_ccb(ccb);
- if (xs) {
- xs->resid = 0;
- CISS_DPRINTF(CISS_D_CMD, ("scsi_done(%p) ", xs));
- scsi_done(xs);
- }
CISS_UNLOCK(sc, lock);
return error;
@@ -865,7 +866,7 @@ ciss_sync(struct ciss_softc *sc)
return rv;
}
-int
+void
ciss_scsi_raw_cmd(struct scsi_xfer *xs) /* TODO */
{
struct scsi_link *link = xs->sc_link;
@@ -887,7 +888,7 @@ ciss_scsi_raw_cmd(struct scsi_xfer *xs) /* TODO */
xs->error = XS_SENSE;
scsi_done(xs);
CISS_UNLOCK(sc, lock);
- return (COMPLETE);
+ return;
}
xs->error = XS_NOERROR;
@@ -899,7 +900,7 @@ ciss_scsi_raw_cmd(struct scsi_xfer *xs) /* TODO */
xs->error = XS_NO_CCB;
scsi_done(xs);
CISS_UNLOCK(sc, lock);
- return (COMPLETE);
+ return;
}
cmd = &ccb->ccb_cmd;
@@ -920,10 +921,9 @@ ciss_scsi_raw_cmd(struct scsi_xfer *xs) /* TODO */
ciss_cmd(ccb, BUS_DMA_WAITOK, xs->flags & (SCSI_POLL|SCSI_NOSLEEP));
CISS_UNLOCK(sc, lock);
- return (COMPLETE);
}
-int
+void
ciss_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -945,7 +945,7 @@ ciss_scsi_cmd(struct scsi_xfer *xs)
xs->error = XS_SENSE;
scsi_done(xs);
CISS_UNLOCK(sc, lock);
- return (COMPLETE);
+ return;
}
xs->error = XS_NOERROR;
@@ -957,7 +957,7 @@ ciss_scsi_cmd(struct scsi_xfer *xs)
xs->error = XS_NO_CCB;
scsi_done(xs);
CISS_UNLOCK(sc, lock);
- return (COMPLETE);
+ return;
}
cmd = &ccb->ccb_cmd;
@@ -979,7 +979,6 @@ ciss_scsi_cmd(struct scsi_xfer *xs)
ciss_cmd(ccb, BUS_DMA_WAITOK, xs->flags & (SCSI_POLL|SCSI_NOSLEEP));
CISS_UNLOCK(sc, lock);
- return (COMPLETE);
}
int
@@ -1303,7 +1302,6 @@ ciss_ldid(struct ciss_softc *sc, int target, struct ciss_ldid *id)
ccb->ccb_len = sizeof(*id);
ccb->ccb_data = id;
- ccb->ccb_xs = NULL;
cmd = &ccb->ccb_cmd;
cmd->tgt = htole32(CISS_CMD_MODE_PERIPH);
cmd->tgt2 = 0;
@@ -1332,7 +1330,6 @@ ciss_ldstat(struct ciss_softc *sc, int target, struct ciss_ldstat *stat)
ccb->ccb_len = sizeof(*stat);
ccb->ccb_data = stat;
- ccb->ccb_xs = NULL;
cmd = &ccb->ccb_cmd;
cmd->tgt = htole32(CISS_CMD_MODE_PERIPH);
cmd->tgt2 = 0;
@@ -1361,7 +1358,6 @@ ciss_pdid(struct ciss_softc *sc, u_int8_t drv, struct ciss_pdid *id, int wait)
ccb->ccb_len = sizeof(*id);
ccb->ccb_data = id;
- ccb->ccb_xs = NULL;
cmd = &ccb->ccb_cmd;
cmd->tgt = htole32(CISS_CMD_MODE_PERIPH);
cmd->tgt2 = 0;
@@ -1440,7 +1436,6 @@ ciss_blink(struct ciss_softc *sc, int ld, int pd, int stat,
ccb->ccb_len = sizeof(*blink);
ccb->ccb_data = blink;
- ccb->ccb_xs = NULL;
cmd = &ccb->ccb_cmd;
cmd->tgt = htole32(CISS_CMD_MODE_PERIPH);
cmd->tgt2 = 0;
diff --git a/sys/dev/ic/dpt.c b/sys/dev/ic/dpt.c
index 46bae9d9016..65c2a521576 100644
--- a/sys/dev/ic/dpt.c
+++ b/sys/dev/ic/dpt.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: dpt.c,v 1.23 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: dpt.c,v 1.24 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: dpt.c,v 1.12 1999/10/23 16:26:33 ad Exp $ */
/*-
@@ -904,7 +904,7 @@ dpt_scsi_cmd(xs)
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
/* XXX we can't reset devices just yet */
@@ -917,7 +917,7 @@ dpt_scsi_cmd(xs)
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
/* Get a CCB */
@@ -927,8 +927,10 @@ dpt_scsi_cmd(xs)
#ifdef __OpenBSD__
if ((ccb = dpt_alloc_ccb(sc, xs->flags)) == NULL) {
#endif /* __OpenBSD__ */
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return (NO_CCB);
+ return;
}
splx(s);
@@ -1005,7 +1007,7 @@ dpt_scsi_cmd(xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
bus_dmamap_sync(dmat, xfer, 0, xfer->dm_mapsize,
@@ -1058,11 +1060,15 @@ dpt_scsi_cmd(xs)
if (dpt_cmd(sc, &ccb->ccb_eata_cp, ccb->ccb_ccbpa, CP_DMA_CMD, 0)) {
printf("%s: dpt_cmd failed\n", sc->sc_dv.dv_xname);
dpt_free_ccb(sc, ccb);
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
if ((xs->flags & SCSI_POLL) == 0)
- return (SUCCESSFULLY_QUEUED);
+ return;
/* Don't wait longer than this single command wants to wait */
if (dpt_poll(sc, ccb)) {
@@ -1075,8 +1081,6 @@ dpt_scsi_cmd(xs)
s = splbio();
dpt_done_ccb(sc, ccb);
splx(s);
-
- return (COMPLETE);
}
/*
diff --git a/sys/dev/ic/dptvar.h b/sys/dev/ic/dptvar.h
index a9c1d4a76ef..ee59c092385 100644
--- a/sys/dev/ic/dptvar.h
+++ b/sys/dev/ic/dptvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: dptvar.h,v 1.4 2009/02/16 21:19:06 miod Exp $ */
+/* $OpenBSD: dptvar.h,v 1.5 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: dptvar.h,v 1.5 1999/10/23 16:26:32 ad Exp $ */
/*
@@ -101,7 +101,7 @@ void dpt_minphys(struct buf *, struct scsi_link *);
int dpt_scsi_cmd(struct scsipi_xfer *);
#endif /* __NetBSD__ */
#ifdef __OpenBSD__
-int dpt_scsi_cmd(struct scsi_xfer *);
+void dpt_scsi_cmd(struct scsi_xfer *);
#endif /* __OpenBSD__ */
int dpt_wait(struct dpt_softc *, u_int8_t, u_int8_t, int);
int dpt_poll(struct dpt_softc *, struct dpt_ccb *);
diff --git a/sys/dev/ic/gdt_common.c b/sys/dev/ic/gdt_common.c
index 514dad0fa00..8f2853d3f7b 100644
--- a/sys/dev/ic/gdt_common.c
+++ b/sys/dev/ic/gdt_common.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: gdt_common.c,v 1.47 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: gdt_common.c,v 1.48 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 1999, 2000, 2003 Niklas Hallqvist. All rights reserved.
@@ -82,8 +82,8 @@ int gdt_ioctl_disk(struct gdt_softc *, struct bioc_disk *);
int gdt_ioctl_alarm(struct gdt_softc *, struct bioc_alarm *);
int gdt_ioctl_setstate(struct gdt_softc *, struct bioc_setstate *);
#endif /* NBIO > 0 */
-int gdt_raw_scsi_cmd(struct scsi_xfer *);
-int gdt_scsi_cmd(struct scsi_xfer *);
+void gdt_raw_scsi_cmd(struct scsi_xfer *);
+void gdt_scsi_cmd(struct scsi_xfer *);
void gdt_start_ccbs(struct gdt_softc *);
int gdt_sync_event(struct gdt_softc *, int, u_int8_t,
struct scsi_xfer *);
@@ -577,7 +577,7 @@ gdt_dequeue(struct gdt_softc *sc)
* Start a SCSI operation on a cache device.
* XXX Polled operation is not yet complete. What kind of locking do we need?
*/
-int
+void
gdt_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -591,7 +591,7 @@ gdt_scsi_cmd(struct scsi_xfer *xs)
struct scsi_rw *rw;
struct scsi_rw_big *rwb;
bus_dmamap_t xfer;
- int error, retval = SUCCESSFULLY_QUEUED;
+ int error;
int s;
GDT_DPRINTF(GDT_D_CMD, ("gdt_scsi_cmd "));
@@ -609,7 +609,7 @@ gdt_scsi_cmd(struct scsi_xfer *xs)
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
/* Don't double enqueue if we came from gdt_chain. */
@@ -708,8 +708,10 @@ gdt_scsi_cmd(struct scsi_xfer *xs)
* We are out of commands, try again in a little while.
*/
if (ccb == NULL) {
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return (NO_CCB);
+ return;
}
ccb->gc_blockno = blockno;
@@ -753,11 +755,13 @@ gdt_scsi_cmd(struct scsi_xfer *xs)
/* XXX what if enqueue did not start a transfer? */
if (gdt_polling || (xs->flags & SCSI_POLL)) {
if (!gdt_wait(sc, ccb, ccb->gc_timeout)) {
- splx(s);
printf("%s: command %d timed out\n",
DEVNAME(sc),
ccb->gc_cmd_index);
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
+ splx(s);
+ return;
}
scsi_done(xs);
}
@@ -768,13 +772,11 @@ gdt_scsi_cmd(struct scsi_xfer *xs)
* Don't process the queue if we are polling.
*/
if (xs->flags & SCSI_POLL) {
- retval = COMPLETE;
break;
}
}
splx(s);
- return (retval);
}
/* XXX Currently only for cacheservice, returns 0 if busy */
@@ -990,7 +992,7 @@ gdt_internal_cache_cmd(struct scsi_xfer *xs)
}
/* Start a raw SCSI operation */
-int
+void
gdt_raw_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -1010,7 +1012,7 @@ gdt_raw_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
if ((ccb = gdt_get_ccb(sc, xs->flags)) == NULL) {
@@ -1019,7 +1021,7 @@ gdt_raw_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
xs->error = XS_DRIVER_STUFFUP;
@@ -1028,8 +1030,6 @@ gdt_raw_scsi_cmd(struct scsi_xfer *xs)
gdt_free_ccb(sc, ccb);
splx(s);
-
- return (COMPLETE);
}
void
diff --git a/sys/dev/ic/iha.c b/sys/dev/ic/iha.c
index 9225efcee77..51064bed6f2 100644
--- a/sys/dev/ic/iha.c
+++ b/sys/dev/ic/iha.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: iha.c,v 1.35 2010/01/10 00:10:23 krw Exp $ */
+/* $OpenBSD: iha.c,v 1.36 2010/03/23 01:57:19 krw Exp $ */
/*-------------------------------------------------------------------------
*
* Device driver for the INI-9XXXU/UW or INIC-940/950 PCI SCSI Controller.
@@ -259,7 +259,7 @@ iha_setup_sg_list(sc, pScb)
* from the generic SCSI driver via the field
* sc_adapter.scsi_cmd of iha_softc.
*/
-int
+void
iha_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -273,14 +273,16 @@ iha_scsi_cmd(xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
pScb = iha_pop_free_scb(sc);
if (pScb == NULL) {
- /* XXX - different xs->error/return if
- * SCSI_POLL/_NOSLEEP? */
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
pScb->SCB_Target = sc_link->target;
@@ -321,7 +323,7 @@ iha_scsi_cmd(xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
bus_dmamap_sync(sc->sc_dmat, pScb->SCB_DataDma,
0, pScb->SCB_BufChars,
@@ -335,7 +337,7 @@ iha_scsi_cmd(xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
}
@@ -350,11 +352,6 @@ iha_scsi_cmd(xs)
timeout_add_msec(&xs->stimeout, xs->timeout);
iha_exec_scb(sc, pScb);
-
- if (xs->flags & (SCSI_POLL | ITSDONE))
- return (COMPLETE);
- else
- return (SUCCESSFULLY_QUEUED);
}
/*
diff --git a/sys/dev/ic/iha.h b/sys/dev/ic/iha.h
index 80a2034815d..6804224d8d8 100644
--- a/sys/dev/ic/iha.h
+++ b/sys/dev/ic/iha.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: iha.h,v 1.16 2009/02/16 21:19:06 miod Exp $ */
+/* $OpenBSD: iha.h,v 1.17 2010/03/23 01:57:19 krw Exp $ */
/*-------------------------------------------------------------------------
*
* Device driver for the INI-9XXXU/UW or INIC-940/950 PCI SCSI Controller.
@@ -422,7 +422,7 @@ struct iha_nvram {
/* Functions used by higher SCSI layers, the kernel, or iha.c and iha_pci.c */
-int iha_scsi_cmd(struct scsi_xfer *);
+void iha_scsi_cmd(struct scsi_xfer *);
int iha_intr(void *);
void iha_minphys(struct buf *, struct scsi_link *);
int iha_init_tulip(struct iha_softc *);
diff --git a/sys/dev/ic/isp_openbsd.c b/sys/dev/ic/isp_openbsd.c
index e1b222e867b..8062cc9e968 100644
--- a/sys/dev/ic/isp_openbsd.c
+++ b/sys/dev/ic/isp_openbsd.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: isp_openbsd.c,v 1.41 2010/01/04 02:23:10 krw Exp $ */
+/* $OpenBSD: isp_openbsd.c,v 1.42 2010/03/23 01:57:19 krw Exp $ */
/*
* Platform (OpenBSD) dependent common attachment code for QLogic adapters.
*
@@ -61,12 +61,12 @@
#define _XT(xs) ((((xs)->timeout/1000) * hz) + (3 * hz))
static void ispminphys(struct buf *, struct scsi_link *);
-static int32_t ispcmd_slow(XS_T *);
-static int32_t ispcmd(XS_T *);
+static void ispcmd_slow(XS_T *);
+static void ispcmd(XS_T *);
struct scsi_device isp_dev = { NULL, NULL, NULL, NULL };
-int isp_polled_cmd (struct ispsoftc *, XS_T *);
+void isp_polled_cmd (struct ispsoftc *, XS_T *);
void isp_wdog (void *);
void isp_make_here(ispsoftc_t *, int);
void isp_make_gone(ispsoftc_t *, int);
@@ -197,7 +197,7 @@ ispminphys(struct buf *bp, struct scsi_link *sl)
minphys(bp);
}
-int32_t
+void
ispcmd_slow(XS_T *xs)
{
sdparam *sdp;
@@ -287,13 +287,12 @@ isp_add2_blocked_queue(struct ispsoftc *isp, XS_T *xs)
xs->free_list.le_next = NULL;
}
-int32_t
+void
ispcmd(XS_T *xs)
{
struct ispsoftc *isp;
int result;
-
/*
* Make sure that there's *some* kind of sane setting.
*/
@@ -307,7 +306,7 @@ ispcmd(XS_T *xs)
xs->error = XS_SELTIMEOUT;
scsi_done(xs);
ISP_UNLOCK(isp);
- return (COMPLETE);
+ return;
}
if (isp->isp_state < ISP_RUNSTATE) {
@@ -318,7 +317,7 @@ ispcmd(XS_T *xs)
XS_SETERR(xs, HBA_BOTCH);
scsi_done(xs);
ISP_UNLOCK(isp);
- return (COMPLETE);
+ return;
}
isp->isp_state = ISP_RUNSTATE;
ISP_ENABLE_INTS(isp);
@@ -329,8 +328,10 @@ ispcmd(XS_T *xs)
*/
if (isp->isp_osinfo.blocked) {
if (xs->flags & SCSI_POLL) {
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
ISP_UNLOCK(isp);
- return (NO_CCB);
+ return;
}
if (isp->isp_osinfo.blocked == 2) {
isp_restart(isp);
@@ -339,24 +340,23 @@ ispcmd(XS_T *xs)
isp_add2_blocked_queue(isp, xs);
ISP_UNLOCK(isp);
isp_prt(isp, ISP_LOGDEBUG0, "added to blocked queue");
- return (SUCCESSFULLY_QUEUED);
+ return;
}
}
if (xs->flags & SCSI_POLL) {
volatile u_int8_t ombi = isp->isp_osinfo.no_mbox_ints;
isp->isp_osinfo.no_mbox_ints = 1;
- result = isp_polled_cmd(isp, xs);
+ isp_polled_cmd(isp, xs);
isp->isp_osinfo.no_mbox_ints = ombi;
ISP_UNLOCK(isp);
- return (result);
+ return;
}
result = isp_start(xs);
switch (result) {
case CMD_QUEUED:
- result = SUCCESSFULLY_QUEUED;
if (xs->timeout) {
timeout_add(&xs->stimeout, _XT(xs));
XS_CMD_S_TIMER(xs);
@@ -371,10 +371,8 @@ ispcmd(XS_T *xs)
isp->isp_osinfo.blocked |= 2;
isp_prt(isp, ISP_LOGDEBUG0, "blocking queue");
isp_add2_blocked_queue(isp, xs);
- result = SUCCESSFULLY_QUEUED;
break;
case CMD_RQLATER:
- result = SUCCESSFULLY_QUEUED; /* Lie */
isp_prt(isp, ISP_LOGDEBUG1, "retrying later for %d.%d",
XS_TGT(xs), XS_LUN(xs));
timeout_set(&xs->stimeout, isp_requeue, xs);
@@ -382,14 +380,12 @@ ispcmd(XS_T *xs)
XS_CMD_S_TIMER(xs);
break;
case CMD_COMPLETE:
- result = COMPLETE;
break;
}
ISP_UNLOCK(isp);
- return (result);
}
-int
+void
isp_polled_cmd(struct ispsoftc *isp, XS_T *xs)
{
int result;
@@ -399,22 +395,16 @@ isp_polled_cmd(struct ispsoftc *isp, XS_T *xs)
switch (result) {
case CMD_QUEUED:
- result = SUCCESSFULLY_QUEUED;
- break;
+ return;
case CMD_RQLATER:
case CMD_EAGAIN:
- result = NO_CCB;
- break;
+ xs->error = XS_NO_CCB;
+ /* FALLTHROUGH */
case CMD_COMPLETE:
scsi_done(xs);
- result = COMPLETE;
break;
}
- if (result != SUCCESSFULLY_QUEUED) {
- return (result);
- }
-
/*
* If we can't use interrupts, poll on completion.
*/
@@ -446,8 +436,6 @@ isp_polled_cmd(struct ispsoftc *isp, XS_T *xs)
XS_SETERR(xs, HBA_BOTCH);
}
}
-
- return (COMPLETE);
}
void
diff --git a/sys/dev/ic/mfi.c b/sys/dev/ic/mfi.c
index 37357603a19..3697effd41b 100644
--- a/sys/dev/ic/mfi.c
+++ b/sys/dev/ic/mfi.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mfi.c,v 1.99 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: mfi.c,v 1.100 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 2006 Marco Peereboom <marco@peereboom.us>
*
@@ -55,7 +55,7 @@ struct cfdriver mfi_cd = {
NULL, "mfi", DV_DULL
};
-int mfi_scsi_cmd(struct scsi_xfer *);
+void mfi_scsi_cmd(struct scsi_xfer *);
int mfi_scsi_ioctl(struct scsi_link *, u_long, caddr_t, int, struct proc *);
void mfiminphys(struct buf *bp, struct scsi_link *sl);
@@ -974,7 +974,7 @@ mfi_scsi_ld(struct mfi_ccb *ccb, struct scsi_xfer *xs)
return (0);
}
-int
+void
mfi_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -1002,7 +1002,11 @@ mfi_scsi_cmd(struct scsi_xfer *xs)
if ((ccb = mfi_get_ccb(sc)) == NULL) {
DNPRINTF(MFI_D_CMD, "%s: mfi_scsi_cmd no ccb\n", DEVNAME(sc));
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
xs->error = XS_NOERROR;
@@ -1088,7 +1092,7 @@ mfi_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
mfi_post(sc, ccb);
@@ -1096,7 +1100,7 @@ mfi_scsi_cmd(struct scsi_xfer *xs)
DNPRINTF(MFI_D_DMA, "%s: mfi_scsi_cmd queued %d\n", DEVNAME(sc),
ccb->ccb_dmamap->dm_nsegs);
- return (SUCCESSFULLY_QUEUED);
+ return;
stuffup:
xs->error = XS_DRIVER_STUFFUP;
@@ -1104,7 +1108,6 @@ complete:
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
}
int
diff --git a/sys/dev/ic/mpi.c b/sys/dev/ic/mpi.c
index 4fe99841887..ffe1f265731 100644
--- a/sys/dev/ic/mpi.c
+++ b/sys/dev/ic/mpi.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mpi.c,v 1.134 2010/01/11 03:51:57 dlg Exp $ */
+/* $OpenBSD: mpi.c,v 1.135 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 2005, 2006, 2009 David Gwynne <dlg@openbsd.org>
@@ -62,7 +62,7 @@ struct cfdriver mpi_cd = {
DV_DULL
};
-int mpi_scsi_cmd(struct scsi_xfer *);
+void mpi_scsi_cmd(struct scsi_xfer *);
void mpi_scsi_cmd_done(struct mpi_ccb *);
void mpi_minphys(struct buf *bp, struct scsi_link *sl);
int mpi_scsi_probe(struct scsi_link *);
@@ -1188,7 +1188,7 @@ mpi_wait_done(struct mpi_ccb *ccb)
mtx_leave(cookie);
}
-int
+void
mpi_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -1211,12 +1211,17 @@ mpi_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
ccb = mpi_get_ccb(sc);
- if (ccb == NULL)
- return (NO_CCB);
+ if (ccb == NULL) {
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
+ }
DNPRINTF(MPI_D_CMD, "%s: ccb_id: %d xs->flags: 0x%x\n",
DEVNAME(sc), ccb->ccb_id, xs->flags);
@@ -1273,7 +1278,7 @@ mpi_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
timeout_set(&xs->stimeout, mpi_timeout_xs, ccb);
@@ -1285,11 +1290,10 @@ mpi_scsi_cmd(struct scsi_xfer *xs)
scsi_done(xs);
splx(s);
}
- return (COMPLETE);
+ return;
}
mpi_start(sc, ccb);
- return (SUCCESSFULLY_QUEUED);
}
void
diff --git a/sys/dev/ic/ncr5380sbc.c b/sys/dev/ic/ncr5380sbc.c
index d19cd3d670e..78cdee445fc 100644
--- a/sys/dev/ic/ncr5380sbc.c
+++ b/sys/dev/ic/ncr5380sbc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ncr5380sbc.c,v 1.23 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: ncr5380sbc.c,v 1.24 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: ncr5380sbc.c,v 1.13 1996/10/13 01:37:25 christos Exp $ */
/*
@@ -599,7 +599,7 @@ ncr5380_scsi_cmd(xs)
{
struct ncr5380_softc *sc;
struct sci_req *sr;
- int s, rv, i, flags;
+ int s, , flags;
sc = xs->sc_link->adapter_softc;
flags = xs->flags;
@@ -631,8 +631,9 @@ ncr5380_scsi_cmd(xs)
if (sc->sc_ring[i].sr_xs == NULL)
goto new;
- rv = NO_CCB;
- NCR_TRACE("scsi_cmd: no openings, rv=%d\n", rv);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
+ NCR_TRACE("scsi_cmd: no openings\n", 0);
goto out;
new:
@@ -647,7 +648,6 @@ new:
sr->sr_flags = (flags & SCSI_POLL) ? SR_IMMED : 0;
sr->sr_status = -1; /* no value */
sc->sc_ncmds++;
- rv = SUCCESSFULLY_QUEUED;
NCR_TRACE("scsi_cmd: new sr=0x%x\n", (long)sr);
@@ -673,12 +673,10 @@ new:
if (sc->sc_state != NCR_IDLE)
panic("ncr5380_scsi_cmd: poll didn't finish");
#endif
- rv = COMPLETE;
}
out:
splx(s);
- return (rv);
}
diff --git a/sys/dev/ic/ncr53c9x.c b/sys/dev/ic/ncr53c9x.c
index 7b021185e66..7be39a3b6c6 100644
--- a/sys/dev/ic/ncr53c9x.c
+++ b/sys/dev/ic/ncr53c9x.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ncr53c9x.c,v 1.44 2010/01/13 06:09:44 krw Exp $ */
+/* $OpenBSD: ncr53c9x.c,v 1.45 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: ncr53c9x.c,v 1.56 2000/11/30 14:41:46 thorpej Exp $ */
/*
@@ -789,7 +789,7 @@ ncr53c9x_get_ecb(sc, flags)
* This function is called by the higher level SCSI-driver to queue/run
* SCSI-commands.
*/
-int
+void
ncr53c9x_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -811,7 +811,11 @@ ncr53c9x_scsi_cmd(xs)
if (li == NULL) {
/* Initialize LUN info and add to list. */
if ((li = malloc(sizeof(*li), M_DEVBUF, M_NOWAIT)) == NULL) {
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
bzero(li, sizeof(*li));
li->last_used = time_second;
@@ -823,8 +827,13 @@ ncr53c9x_scsi_cmd(xs)
splx(s);
}
- if ((ecb = ncr53c9x_get_ecb(sc, flags)) == NULL)
- return (NO_CCB);
+ if ((ecb = ncr53c9x_get_ecb(sc, flags)) == NULL) {
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
+ }
/* Initialize ecb */
ecb->xs = xs;
@@ -852,7 +861,7 @@ ncr53c9x_scsi_cmd(xs)
splx(s);
if ((flags & SCSI_POLL) == 0)
- return (SUCCESSFULLY_QUEUED);
+ return;
/* Not allowed to use interrupts, use polling instead */
if (ncr53c9x_poll(sc, xs, ecb->timeout)) {
@@ -860,7 +869,6 @@ ncr53c9x_scsi_cmd(xs)
if (ncr53c9x_poll(sc, xs, ecb->timeout))
ncr53c9x_timeout(ecb);
}
- return (COMPLETE);
}
/*
diff --git a/sys/dev/ic/ncr53c9xvar.h b/sys/dev/ic/ncr53c9xvar.h
index 1305433246e..00761c471a5 100644
--- a/sys/dev/ic/ncr53c9xvar.h
+++ b/sys/dev/ic/ncr53c9xvar.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: ncr53c9xvar.h,v 1.18 2008/06/26 05:42:15 ray Exp $ */
+/* $OpenBSD: ncr53c9xvar.h,v 1.19 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: ncr53c9xvar.h,v 1.13 1998/05/26 23:17:34 thorpej Exp $ */
/*-
@@ -426,7 +426,7 @@ struct ncr53c9x_softc {
void ncr53c9x_attach(struct ncr53c9x_softc *,
struct scsi_adapter *, struct scsi_device *);
-int ncr53c9x_scsi_cmd(struct scsi_xfer *);
+void ncr53c9x_scsi_cmd(struct scsi_xfer *);
void ncr53c9x_reset(struct ncr53c9x_softc *);
int ncr53c9x_intr(void *);
void ncr53c9x_init(struct ncr53c9x_softc *, int);
diff --git a/sys/dev/ic/oosiop.c b/sys/dev/ic/oosiop.c
index 304b2140756..e417c83541c 100644
--- a/sys/dev/ic/oosiop.c
+++ b/sys/dev/ic/oosiop.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: oosiop.c,v 1.13 2010/01/10 00:10:23 krw Exp $ */
+/* $OpenBSD: oosiop.c,v 1.14 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: oosiop.c,v 1.4 2003/10/29 17:45:55 tsutsui Exp $ */
/*
@@ -79,7 +79,7 @@ void oosiop_phasemismatch(struct oosiop_softc *);
void oosiop_setup_syncxfer(struct oosiop_softc *);
void oosiop_set_syncparam(struct oosiop_softc *, int, int, int);
void oosiop_minphys(struct buf *, struct scsi_link *);
-int oosiop_scsicmd(struct scsi_xfer *);
+void oosiop_scsicmd(struct scsi_xfer *);
void oosiop_done(struct oosiop_softc *, struct oosiop_cb *);
void oosiop_timeout(void *);
void oosiop_reset(struct oosiop_softc *);
@@ -712,7 +712,7 @@ oosiop_minphys(struct buf *bp, struct scsi_link *sl)
minphys(bp);
}
-int
+void
oosiop_scsicmd(struct scsi_xfer *xs)
{
struct oosiop_softc *sc;
@@ -748,7 +748,7 @@ oosiop_scsicmd(struct scsi_xfer *xs)
scsi_done(xs);
TAILQ_INSERT_TAIL(&sc->sc_free_cb, cb, chain);
splx(s);
- return (COMPLETE);
+ return;
}
bus_dmamap_sync(sc->sc_dmat, cb->cmddma, 0, xs->cmdlen,
BUS_DMASYNC_PREWRITE);
@@ -771,7 +771,7 @@ oosiop_scsicmd(struct scsi_xfer *xs)
scsi_done(xs);
TAILQ_INSERT_TAIL(&sc->sc_free_cb, cb, chain);
splx(s);
- return (COMPLETE);
+ return;
}
bus_dmamap_sync(sc->sc_dmat, cb->datadma,
0, xs->datalen,
@@ -806,11 +806,6 @@ oosiop_scsicmd(struct scsi_xfer *xs)
}
if (dopoll)
oosiop_poll(sc, cb);
-
- if (xs->flags & (SCSI_POLL | ITSDONE))
- return (COMPLETE);
- else
- return (SUCCESSFULLY_QUEUED);
}
void
diff --git a/sys/dev/ic/osiop.c b/sys/dev/ic/osiop.c
index 35aded288b6..579f5f09e57 100644
--- a/sys/dev/ic/osiop.c
+++ b/sys/dev/ic/osiop.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: osiop.c,v 1.40 2010/01/10 00:10:23 krw Exp $ */
+/* $OpenBSD: osiop.c,v 1.41 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: osiop.c,v 1.9 2002/04/05 18:27:54 bouyer Exp $ */
/*
@@ -91,7 +91,7 @@
void osiop_attach(struct osiop_softc *);
void osiop_minphys(struct buf *, struct scsi_link *);
-int osiop_scsicmd(struct scsi_xfer *xs);
+void osiop_scsicmd(struct scsi_xfer *xs);
void osiop_poll(struct osiop_softc *, struct osiop_acb *);
void osiop_sched(struct osiop_softc *);
void osiop_scsidone(struct osiop_acb *, int);
@@ -366,7 +366,7 @@ osiop_minphys(struct buf *bp, struct scsi_link *sl)
* used by specific osiop controller
*
*/
-int
+void
osiop_scsicmd(xs)
struct scsi_xfer *xs;
{
@@ -396,7 +396,11 @@ osiop_scsicmd(xs)
panic("osiop_scsipi_request");
#endif
splx(s);
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
acb->flags = 0;
@@ -425,7 +429,7 @@ osiop_scsicmd(xs)
scsi_done(xs);
TAILQ_INSERT_TAIL(&sc->free_list, acb, chain);
splx(s);
- return (COMPLETE);
+ return;
}
bus_dmamap_sync(sc->sc_dmat, acb->datadma,
0, acb->datalen, (acb->xsflags & SCSI_DATA_IN) ?
@@ -454,11 +458,6 @@ osiop_scsicmd(xs)
if (dopoll)
osiop_poll(sc, acb);
-
- if (xs->flags & (SCSI_POLL | ITSDONE))
- return (COMPLETE);
- else
- return (SUCCESSFULLY_QUEUED);
}
void
diff --git a/sys/dev/ic/siop.c b/sys/dev/ic/siop.c
index 7a7207752af..be27fc5352a 100644
--- a/sys/dev/ic/siop.c
+++ b/sys/dev/ic/siop.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: siop.c,v 1.56 2010/01/10 00:10:23 krw Exp $ */
+/* $OpenBSD: siop.c,v 1.57 2010/03/23 01:57:19 krw Exp $ */
/* $NetBSD: siop.c,v 1.79 2005/11/18 23:10:32 bouyer Exp $ */
/*
@@ -89,7 +89,7 @@ int siop_handle_qtag_reject(struct siop_cmd *);
void siop_scsicmd_end(struct siop_cmd *);
void siop_start(struct siop_softc *);
void siop_timeout(void *);
-int siop_scsicmd(struct scsi_xfer *);
+void siop_scsicmd(struct scsi_xfer *);
#ifdef DUMP_SCRIPT
void siop_dump_script(struct siop_softc *);
#endif
@@ -1356,7 +1356,7 @@ siop_handle_reset(sc)
}
}
-int
+void
siop_scsicmd(xs)
struct scsi_xfer *xs;
{
@@ -1384,8 +1384,10 @@ siop_scsicmd(xs)
printf("%s: can't malloc memory for "
"target %d\n", sc->sc_c.sc_dev.dv_xname,
target);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return(NO_CCB);
+ return;
}
siop_target =
(struct siop_target*)sc->sc_c.targets[target];
@@ -1401,8 +1403,10 @@ siop_scsicmd(xs)
if (siop_target->lunsw == NULL) {
printf("%s: can't alloc lunsw for target %d\n",
sc->sc_c.sc_dev.dv_xname, target);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return(NO_CCB);
+ return;
}
for (i=0; i < 8; i++)
siop_target->siop_lun[i] = NULL;
@@ -1416,16 +1420,20 @@ siop_scsicmd(xs)
printf("%s: can't alloc siop_lun for "
"target %d lun %d\n",
sc->sc_c.sc_dev.dv_xname, target, lun);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return(NO_CCB);
+ return;
}
}
/* Looks like we could issue a command, if a ccb is available. */
siop_cmd = TAILQ_FIRST(&sc->free_list);
if (siop_cmd == NULL) {
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return(NO_CCB);
+ return;
}
TAILQ_REMOVE(&sc->free_list, siop_cmd, next);
#ifdef DIAGNOSTIC
@@ -1459,8 +1467,10 @@ siop_scsicmd(xs)
sc->sc_c.sc_dev.dv_xname, error);
siop_cmd->cmd_c.status = CMDST_FREE;
TAILQ_INSERT_TAIL(&sc->free_list, siop_cmd, next);
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(s);
- return(NO_CCB);
+ return;
}
bus_dmamap_sync(sc->sc_c.sc_dmat,
siop_cmd->cmd_c.dmamap_data, 0,
@@ -1484,7 +1494,7 @@ siop_scsicmd(xs)
siop_start(sc);
if ((xs->flags & SCSI_POLL) == 0) {
splx(s);
- return (SUCCESSFULLY_QUEUED);
+ return;
}
/* Poll for command completion. */
@@ -1531,7 +1541,6 @@ siop_scsicmd(xs)
}
splx(s);
- return (COMPLETE);
}
void
diff --git a/sys/dev/ic/trm.c b/sys/dev/ic/trm.c
index 6a8324b738b..a4a62db4d05 100644
--- a/sys/dev/ic/trm.c
+++ b/sys/dev/ic/trm.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: trm.c,v 1.17 2010/02/27 00:39:40 krw Exp $
+/* $OpenBSD: trm.c,v 1.18 2010/03/23 01:57:19 krw Exp $
* ------------------------------------------------------------
* O.S : OpenBSD
* File Name : trm.c
@@ -76,7 +76,7 @@ u_int8_t trm_get_data(bus_space_tag_t, bus_space_handle_t, u_int8_t);
void trm_wait_30us(bus_space_tag_t, bus_space_handle_t);
-int trm_scsi_cmd(struct scsi_xfer *);
+void trm_scsi_cmd(struct scsi_xfer *);
struct trm_scsi_req_q *trm_GetFreeSRB(struct trm_softc *);
@@ -326,7 +326,7 @@ trm_StartWaitingSRB(struct trm_softc *sc)
* Call By : GENERIC SCSI driver
* ------------------------------------------------------------
*/
-int
+void
trm_scsi_cmd(struct scsi_xfer *xs)
{
struct trm_scsi_req_q *pSRB;
@@ -357,7 +357,7 @@ trm_scsi_cmd(struct scsi_xfer *xs)
intflag = splbio();
scsi_done(xs);
splx(intflag);
- return COMPLETE;
+ return;
}
if (lun >= TRM_MAX_LUNS) {
printf("%s: lun=%d >= %d\n",
@@ -366,7 +366,7 @@ trm_scsi_cmd(struct scsi_xfer *xs)
intflag = splbio();
scsi_done(xs);
splx(intflag);
- return COMPLETE;
+ return;
}
pDCB = sc->pDCB[target][lun];
@@ -376,7 +376,7 @@ trm_scsi_cmd(struct scsi_xfer *xs)
intflag = splbio();
scsi_done(xs);
splx(intflag);
- return COMPLETE;
+ return;
}
xferflags = xs->flags;
@@ -389,7 +389,7 @@ trm_scsi_cmd(struct scsi_xfer *xs)
intflag = splbio();
scsi_done(xs);
splx(intflag);
- return COMPLETE;
+ return;
}
xs->error = XS_NOERROR;
@@ -401,8 +401,10 @@ trm_scsi_cmd(struct scsi_xfer *xs)
pSRB = trm_GetFreeSRB(sc);
if (pSRB == NULL) {
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
splx(intflag);
- return (NO_CCB);
+ return;
}
/*
@@ -432,7 +434,7 @@ trm_scsi_cmd(struct scsi_xfer *xs)
TAILQ_INSERT_HEAD(&sc->freeSRB, pSRB, link);
scsi_done(xs);
splx(intflag);
- return COMPLETE;
+ return;
}
bus_dmamap_sync(sc->sc_dmatag, pSRB->dmamapxfer,
@@ -465,7 +467,7 @@ trm_scsi_cmd(struct scsi_xfer *xs)
if ((xferflags & SCSI_POLL) == 0) {
timeout_add_msec(&xs->stimeout, xs->timeout);
splx(intflag);
- return SUCCESSFULLY_QUEUED;
+ return;
}
while ((--xs->timeout > 0) && ((xs->flags & ITSDONE) == 0)) {
@@ -477,7 +479,6 @@ trm_scsi_cmd(struct scsi_xfer *xs)
trm_timeout(pSRB);
splx(intflag);
- return COMPLETE;
}
/*
diff --git a/sys/dev/ic/twe.c b/sys/dev/ic/twe.c
index 1c633747cd6..dd0d0c6d21d 100644
--- a/sys/dev/ic/twe.c
+++ b/sys/dev/ic/twe.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: twe.c,v 1.33 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: twe.c,v 1.34 2010/03/23 01:57:20 krw Exp $ */
/*
* Copyright (c) 2000-2002 Michael Shalayeff. All rights reserved.
@@ -64,7 +64,7 @@ struct cfdriver twe_cd = {
NULL, "twe", DV_DULL
};
-int twe_scsi_cmd(struct scsi_xfer *);
+void twe_scsi_cmd(struct scsi_xfer *);
struct scsi_adapter twe_switch = {
twe_scsi_cmd, tweminphys, 0, 0,
@@ -770,7 +770,7 @@ twe_copy_internal_data(xs, v, size)
}
}
-int
+void
twe_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -795,7 +795,7 @@ twe_scsi_cmd(xs)
lock = TWE_LOCK(sc);
scsi_done(xs);
TWE_UNLOCK(sc, lock);
- return (COMPLETE);
+ return;
}
TWE_DPRINTF(TWE_D_CMD, ("twe_scsi_cmd "));
@@ -854,7 +854,7 @@ twe_scsi_cmd(xs)
lock = TWE_LOCK(sc);
scsi_done(xs);
TWE_UNLOCK(sc, lock);
- return (COMPLETE);
+ return;
case READ_COMMAND:
case READ_BIG:
@@ -888,7 +888,7 @@ twe_scsi_cmd(xs)
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
TWE_UNLOCK(sc, lock);
- return (COMPLETE);
+ return;
}
}
@@ -900,8 +900,12 @@ twe_scsi_cmd(xs)
default: op = TWE_CMD_NOP; break;
}
- if ((ccb = twe_get_ccb(sc)) == NULL)
- return (NO_CCB);
+ if ((ccb = twe_get_ccb(sc)) == NULL) {
+ xs->error = XS_NO_CCB;
+ scsi_done(xs);
+ TWE_UNLOCK(sc, lock);
+ return;
+ }
ccb->ccb_xs = xs;
ccb->ccb_data = xs->data;
@@ -923,16 +927,10 @@ twe_scsi_cmd(xs)
TWE_DPRINTF(TWE_D_CMD, ("failed %p ", xs));
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
- TWE_UNLOCK(sc, lock);
- return (COMPLETE);
}
TWE_UNLOCK(sc, lock);
-
- if (wait & SCSI_POLL)
- return (COMPLETE);
- else
- return (SUCCESSFULLY_QUEUED);
+ return;
default:
TWE_DPRINTF(TWE_D_CMD, ("unsupported scsi command %#x tgt %d ",
@@ -943,8 +941,6 @@ twe_scsi_cmd(xs)
lock = TWE_LOCK(sc);
scsi_done(xs);
TWE_UNLOCK(sc, lock);
-
- return (COMPLETE);
}
int
diff --git a/sys/dev/ic/uha.c b/sys/dev/ic/uha.c
index 90351ac3218..e789b25428a 100644
--- a/sys/dev/ic/uha.c
+++ b/sys/dev/ic/uha.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: uha.c,v 1.15 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: uha.c,v 1.16 2010/03/23 01:57:20 krw Exp $ */
/* $NetBSD: uha.c,v 1.3 1996/10/13 01:37:29 christos Exp $ */
#undef UHADEBUG
@@ -87,7 +87,7 @@ void uha_free_mscp(struct uha_softc *, struct uha_mscp *);
integrate void uha_init_mscp(struct uha_softc *, struct uha_mscp *);
struct uha_mscp *uha_get_mscp(struct uha_softc *, int);
void uhaminphys(struct buf *, struct scsi_link *);
-int uha_scsi_cmd(struct scsi_xfer *);
+void uha_scsi_cmd(struct scsi_xfer *);
struct scsi_adapter uha_switch = {
uha_scsi_cmd,
@@ -344,7 +344,7 @@ uhaminphys(struct buf *bp, struct scsi_link *sl)
* start a scsi operation given the command and the data address. Also
* needs the unit, target and lu.
*/
-int
+void
uha_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -365,7 +365,11 @@ uha_scsi_cmd(xs)
*/
flags = xs->flags;
if ((mscp = uha_get_mscp(sc, flags)) == NULL) {
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
mscp->xs = xs;
mscp->timeout = xs->timeout;
@@ -477,7 +481,7 @@ uha_scsi_cmd(xs)
* Usually return SUCCESSFULLY QUEUED
*/
if ((flags & SCSI_POLL) == 0)
- return (SUCCESSFULLY_QUEUED);
+ return;
/*
* If we can't use interrupts, poll on completion
@@ -487,7 +491,7 @@ uha_scsi_cmd(xs)
if ((sc->poll)(sc, xs, mscp->timeout))
uha_timeout(mscp);
}
- return (COMPLETE);
+ return;
bad:
xs->error = XS_DRIVER_STUFFUP;
@@ -495,7 +499,7 @@ bad:
scsi_done(xs);
splx(s);
uha_free_mscp(sc, mscp);
- return (COMPLETE);
+ return;
}
void
diff --git a/sys/dev/isa/aha.c b/sys/dev/isa/aha.c
index 3b4104596ed..fefa0dee62e 100644
--- a/sys/dev/isa/aha.c
+++ b/sys/dev/isa/aha.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: aha.c,v 1.66 2010/01/10 00:40:25 krw Exp $ */
+/* $OpenBSD: aha.c,v 1.67 2010/03/23 01:57:20 krw Exp $ */
/* $NetBSD: aha.c,v 1.11 1996/05/12 23:51:23 mycroft Exp $ */
#undef AHADIAG
@@ -151,7 +151,7 @@ int aha_find(struct isa_attach_args *, struct aha_softc *, int);
void aha_init(struct aha_softc *);
void aha_inquire_setup_information(struct aha_softc *);
void ahaminphys(struct buf *, struct scsi_link *);
-int aha_scsi_cmd(struct scsi_xfer *);
+void aha_scsi_cmd(struct scsi_xfer *);
int aha_poll(struct aha_softc *, struct scsi_xfer *, int);
void aha_timeout(void *arg);
@@ -1238,7 +1238,7 @@ ahaminphys(struct buf *bp, struct scsi_link *sl)
* start a scsi operation given the command and the data address. Also needs
* the unit, target and lu.
*/
-int
+void
aha_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -1257,7 +1257,11 @@ aha_scsi_cmd(xs)
*/
flags = xs->flags;
if ((ccb = aha_get_ccb(sc, flags)) == NULL) {
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
ccb->xs = xs;
ccb->timeout = xs->timeout;
@@ -1286,7 +1290,11 @@ aha_scsi_cmd(xs)
if (bus_dmamap_load(sc->sc_dmat, ccb->dmam, xs->data,
xs->datalen, NULL, BUS_DMA_NOWAIT) != 0) {
aha_free_ccb(sc, ccb);
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
for (seg = 0; seg < ccb->dmam->dm_nsegs; seg++) {
ltophys(ccb->dmam->dm_segs[seg].ds_addr,
@@ -1347,12 +1355,12 @@ aha_scsi_cmd(xs)
aha_free_ccb(sc, ccb);
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
splx(s);
if ((flags & SCSI_POLL) == 0)
- return (SUCCESSFULLY_QUEUED);
+ return;
/*
* If we can't use interrupts, poll on completion
@@ -1362,7 +1370,6 @@ aha_scsi_cmd(xs)
if (aha_poll(sc, xs, ccb->timeout))
aha_timeout(ccb);
}
- return (COMPLETE);
}
/*
diff --git a/sys/dev/isa/seagate.c b/sys/dev/isa/seagate.c
index 574689cb667..1c6222c7348 100644
--- a/sys/dev/isa/seagate.c
+++ b/sys/dev/isa/seagate.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: seagate.c,v 1.32 2010/01/10 00:40:25 krw Exp $ */
+/* $OpenBSD: seagate.c,v 1.33 2010/03/23 01:57:20 krw Exp $ */
/*
* ST01/02, Future Domain TMC-885, TMC-950 SCSI driver
@@ -274,7 +274,7 @@ static const char *bases[] = {
struct sea_scb *sea_get_scb(struct sea_softc *, int);
int seaintr(void *);
-int sea_scsi_cmd(struct scsi_xfer *);
+void sea_scsi_cmd(struct scsi_xfer *);
int sea_poll(struct sea_softc *, struct scsi_xfer *, int);
int sea_select(struct sea_softc *sea, struct sea_scb *scb);
int sea_transfer_pio(struct sea_softc *sea, u_char *phase,
@@ -532,7 +532,7 @@ sea_init(struct sea_softc *sea)
* start a scsi operation given the command and the data address. Also needs
* the unit, target and lu.
*/
-int
+void
sea_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *sc_link = xs->sc_link;
@@ -545,7 +545,11 @@ sea_scsi_cmd(struct scsi_xfer *xs)
flags = xs->flags;
if ((scb = sea_get_scb(sea, flags)) == NULL) {
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
scb->flags = SCB_ACTIVE;
scb->xs = xs;
@@ -561,7 +565,7 @@ sea_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
}
/*
@@ -584,7 +588,7 @@ sea_scsi_cmd(struct scsi_xfer *xs)
if ((flags & SCSI_POLL) == 0) {
timeout_add_msec(&scb->xs->stimeout, xs->timeout);
splx(s);
- return SUCCESSFULLY_QUEUED;
+ return;
}
splx(s);
@@ -597,7 +601,6 @@ sea_scsi_cmd(struct scsi_xfer *xs)
if (sea_poll(sea, xs, 2000))
sea_timeout(scb);
}
- return COMPLETE;
}
/*
diff --git a/sys/dev/isa/wds.c b/sys/dev/isa/wds.c
index 07e67d7a5d3..1d2b0415909 100644
--- a/sys/dev/isa/wds.c
+++ b/sys/dev/isa/wds.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: wds.c,v 1.32 2010/01/10 00:10:23 krw Exp $ */
+/* $OpenBSD: wds.c,v 1.33 2010/03/23 01:57:20 krw Exp $ */
/* $NetBSD: wds.c,v 1.13 1996/11/03 16:20:31 mycroft Exp $ */
#undef WDSDIAG
@@ -160,7 +160,7 @@ int wds_find(struct isa_attach_args *, struct wds_softc *);
void wds_init(struct wds_softc *);
void wds_inquire_setup_information(struct wds_softc *);
void wdsminphys(struct buf *, struct scsi_link *);
-int wds_scsi_cmd(struct scsi_xfer *);
+void wds_scsi_cmd(struct scsi_xfer *);
void wds_sense(struct wds_softc *, struct wds_scb *);
int wds_poll(struct wds_softc *, struct scsi_xfer *, int);
int wds_ipoll(struct wds_softc *, struct wds_scb *, int);
@@ -1036,7 +1036,7 @@ wdsminphys(struct buf *bp, struct scsi_link *sl)
/*
* Send a SCSI command.
*/
-int
+void
wds_scsi_cmd(xs)
struct scsi_xfer *xs;
{
@@ -1061,7 +1061,7 @@ wds_scsi_cmd(xs)
s = splbio();
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
}
flags = xs->flags;
@@ -1072,7 +1072,11 @@ wds_scsi_cmd(xs)
mflags = ISADMA_MAP_BOUNCE | ISADMA_MAP_WAITOK;
#endif
if ((scb = wds_get_scb(sc, flags, NEEDBUFFER(sc))) == NULL) {
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
scb->xs = xs;
scb->timeout = xs->timeout;
@@ -1239,25 +1243,24 @@ wds_scsi_cmd(xs)
wds_free_scb(sc, scb);
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
}
#endif
splx(s);
if ((flags & SCSI_POLL) == 0)
- return SUCCESSFULLY_QUEUED;
+ return;
if (wds_poll(sc, xs, scb->timeout)) {
wds_timeout(scb);
if (wds_poll(sc, xs, scb->timeout))
wds_timeout(scb);
}
- return COMPLETE;
+ return;
bad:
xs->error = XS_DRIVER_STUFFUP;
wds_free_scb(sc, scb);
- return COMPLETE;
}
/*
diff --git a/sys/dev/pci/arc.c b/sys/dev/pci/arc.c
index 39e38a68081..f94389ba6d5 100644
--- a/sys/dev/pci/arc.c
+++ b/sys/dev/pci/arc.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: arc.c,v 1.80 2010/01/09 23:15:06 krw Exp $ */
+/* $OpenBSD: arc.c,v 1.81 2010/03/23 01:57:20 krw Exp $ */
/*
* Copyright (c) 2006 David Gwynne <dlg@openbsd.org>
@@ -399,7 +399,7 @@ struct cfdriver arc_cd = {
};
/* interface for scsi midlayer to talk to */
-int arc_scsi_cmd(struct scsi_xfer *);
+void arc_scsi_cmd(struct scsi_xfer *);
void arc_minphys(struct buf *, struct scsi_link *);
struct scsi_adapter arc_switch = {
@@ -709,7 +709,7 @@ arc_intr(void *arg)
return (1);
}
-int
+void
arc_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -717,7 +717,6 @@ arc_scsi_cmd(struct scsi_xfer *xs)
struct arc_ccb *ccb;
struct arc_msg_scsicmd *cmd;
u_int32_t reg;
- int rv = SUCCESSFULLY_QUEUED;
int s;
if (xs->cmdlen > ARC_MSG_CDBLEN) {
@@ -729,7 +728,7 @@ arc_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
s = splbio();
@@ -740,7 +739,7 @@ arc_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
ccb->ccb_xs = xs;
@@ -751,7 +750,7 @@ arc_scsi_cmd(struct scsi_xfer *xs)
arc_put_ccb(sc, ccb);
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
cmd = &ccb->ccb_cmd->cmd;
@@ -784,15 +783,12 @@ arc_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
arc_push(sc, reg);
if (xs->flags & SCSI_POLL) {
- rv = COMPLETE;
if (arc_complete(sc, ccb, xs->timeout) != 0) {
xs->error = XS_DRIVER_STUFFUP;
scsi_done(xs);
}
}
splx(s);
-
- return (rv);
}
int
diff --git a/sys/dev/pci/ips.c b/sys/dev/pci/ips.c
index d65b61cc079..58936bdca31 100644
--- a/sys/dev/pci/ips.c
+++ b/sys/dev/pci/ips.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: ips.c,v 1.94 2010/01/09 23:15:07 krw Exp $ */
+/* $OpenBSD: ips.c,v 1.95 2010/03/23 01:57:20 krw Exp $ */
/*
* Copyright (c) 2006, 2007, 2009 Alexander Yurchenko <grange@openbsd.org>
@@ -428,8 +428,8 @@ struct ips_softc {
int ips_match(struct device *, void *, void *);
void ips_attach(struct device *, struct device *, void *);
-int ips_scsi_cmd(struct scsi_xfer *);
-int ips_scsi_pt_cmd(struct scsi_xfer *);
+void ips_scsi_cmd(struct scsi_xfer *);
+void ips_scsi_pt_cmd(struct scsi_xfer *);
int ips_scsi_ioctl(struct scsi_link *, u_long, caddr_t, int,
struct proc *);
@@ -446,7 +446,7 @@ void ips_sensors(void *);
#endif
int ips_load_xs(struct ips_softc *, struct ips_ccb *, struct scsi_xfer *);
-int ips_start_xs(struct ips_softc *, struct ips_ccb *, struct scsi_xfer *);
+void ips_start_xs(struct ips_softc *, struct ips_ccb *, struct scsi_xfer *);
int ips_cmd(struct ips_softc *, struct ips_ccb *);
int ips_poll(struct ips_softc *, struct ips_ccb *);
@@ -845,7 +845,7 @@ fail1:
bus_space_unmap(sc->sc_iot, sc->sc_ioh, iosize);
}
-int
+void
ips_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -875,7 +875,7 @@ ips_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
drive = &di->drive[target];
@@ -918,7 +918,11 @@ ips_scsi_cmd(struct scsi_xfer *xs)
if (ccb == NULL) {
DPRINTF(IPS_D_ERR, ("%s: ips_scsi_cmd: no ccb\n",
sc->sc_dev.dv_xname));
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
cmd = ccb->c_cmdbva;
@@ -942,7 +946,8 @@ ips_scsi_cmd(struct scsi_xfer *xs)
cmd->code |= IPS_CMD_SG;
ccb->c_done = ips_done_xs;
- return (ips_start_xs(sc, ccb, xs));
+ ips_start_xs(sc, ccb, xs);
+ return;
case INQUIRY:
bzero(&inq, sizeof(inq));
inq.device = T_DIRECT;
@@ -974,14 +979,19 @@ ips_scsi_cmd(struct scsi_xfer *xs)
if (ccb == NULL) {
DPRINTF(IPS_D_ERR, ("%s: ips_scsi_cmd: no ccb\n",
sc->sc_dev.dv_xname));
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
cmd = ccb->c_cmdbva;
cmd->code = IPS_CMD_FLUSH;
ccb->c_done = ips_done_xs;
- return (ips_start_xs(sc, ccb, xs));
+ ips_start_xs(sc, ccb, xs);
+ return;
case PREVENT_ALLOW:
case START_STOP:
case TEST_UNIT_READY:
@@ -995,11 +1005,9 @@ ips_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
-
- return (COMPLETE);
}
-int
+void
ips_scsi_pt_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -1032,7 +1040,7 @@ ips_scsi_pt_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
xs->error = XS_NOERROR;
@@ -1043,7 +1051,11 @@ ips_scsi_pt_cmd(struct scsi_xfer *xs)
if (ccb == NULL) {
DPRINTF(IPS_D_ERR, ("%s: ips_scsi_pt_cmd: no ccb\n",
sc->sc_dev.dv_xname));
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
}
cmdb = ccb->c_cmdbva;
@@ -1090,7 +1102,7 @@ ips_scsi_pt_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
if (cmd->sgcnt > 0)
cmd->code |= IPS_CMD_SG;
@@ -1100,7 +1112,7 @@ ips_scsi_pt_cmd(struct scsi_xfer *xs)
cmd->sgcnt = 0;
ccb->c_done = ips_done_pt;
- return (ips_start_xs(sc, ccb, xs));
+ ips_start_xs(sc, ccb, xs);
}
int
@@ -1421,7 +1433,7 @@ ips_load_xs(struct ips_softc *sc, struct ips_ccb *ccb, struct scsi_xfer *xs)
return (0);
}
-int
+void
ips_start_xs(struct ips_softc *sc, struct ips_ccb *ccb, struct scsi_xfer *xs)
{
ccb->c_flags = xs->flags;
@@ -1438,12 +1450,7 @@ ips_start_xs(struct ips_softc *sc, struct ips_ccb *ccb, struct scsi_xfer *xs)
* scsi_xfer on any failure and SCSI layer will handle possible
* errors.
*/
- (void)ips_cmd(sc, ccb);
-
- if (ispoll)
- return (COMPLETE);
- else
- return (SUCCESSFULLY_QUEUED);
+ ips_cmd(sc, ccb);
}
int
diff --git a/sys/dev/pci/mpii.c b/sys/dev/pci/mpii.c
index 5cb60c4316c..fa8f9822a5e 100644
--- a/sys/dev/pci/mpii.c
+++ b/sys/dev/pci/mpii.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mpii.c,v 1.11 2010/03/09 19:29:14 marco Exp $ */
+/* $OpenBSD: mpii.c,v 1.12 2010/03/23 01:57:20 krw Exp $ */
/*
* Copyright (c) 2010 Mike Belopuhov <mkb@crypt.org.ru>
* Copyright (c) 2009 James Giannoules
@@ -2023,7 +2023,7 @@ struct cfdriver mpii_cd = {
DV_DULL
};
-int mpii_scsi_cmd(struct scsi_xfer *);
+void mpii_scsi_cmd(struct scsi_xfer *);
void mpii_scsi_cmd_done(struct mpii_ccb *);
void mpii_minphys(struct buf *bp, struct scsi_link *sl);
int mpii_scsi_probe(struct scsi_link *);
@@ -4437,7 +4437,7 @@ mpii_poll(struct mpii_softc *sc, struct mpii_ccb *ccb, int timeout)
return (error);
}
-int
+void
mpii_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -4460,14 +4460,19 @@ mpii_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
s = splbio();
ccb = mpii_get_ccb(sc);
splx(s);
- if (ccb == NULL)
- return (NO_CCB);
+ if (ccb == NULL) {
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ splx(s);
+ return;
+ }
DNPRINTF(MPII_D_CMD, "%s: ccb_smid: %d xs->flags: 0x%x\n",
DEVNAME(sc), ccb->ccb_smid, xs->flags);
@@ -4513,7 +4518,7 @@ mpii_scsi_cmd(struct scsi_xfer *xs)
mpii_put_ccb(sc, ccb);
scsi_done(xs);
splx(s);
- return (COMPLETE);
+ return;
}
DNPRINTF(MPII_D_CMD, "%s: sizeof(mpii_msg_scsi_io): %d "
@@ -4536,7 +4541,7 @@ mpii_scsi_cmd(struct scsi_xfer *xs)
scsi_done(xs);
splx(s);
}
- return (COMPLETE);
+ return;
}
timeout_set(&xs->stimeout, mpii_timeout_xs, ccb);
@@ -4549,7 +4554,6 @@ mpii_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
mpii_start(sc, ccb);
splx(s);
- return (SUCCESSFULLY_QUEUED);
}
void
diff --git a/sys/dev/pci/qli_pci.c b/sys/dev/pci/qli_pci.c
index 1630fa9d0a0..8f2baf4de6c 100644
--- a/sys/dev/pci/qli_pci.c
+++ b/sys/dev/pci/qli_pci.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: qli_pci.c,v 1.15 2010/01/09 23:15:07 krw Exp $ */
+/* $OpenBSD: qli_pci.c,v 1.16 2010/03/23 01:57:20 krw Exp $ */
/*
* Copyright (c) 2007 Marco Peereboom <marco@peereboom.us>
* Copyright (c) 2007 David Collins <dave@davec.name>
@@ -134,7 +134,7 @@ struct qli_mem {
struct qli_mem *qli_allocmem(struct qli_softc *, size_t);
void qli_freemem(struct qli_softc *, struct qli_mem *);
-int qli_scsi_cmd(struct scsi_xfer *);
+void qli_scsi_cmd(struct scsi_xfer *);
int qli_scsi_ioctl(struct scsi_link *, u_long, caddr_t, int,
struct proc *);
void qliminphys(struct buf *bp, struct scsi_link *sl);
@@ -997,7 +997,7 @@ nofwcb:
return (rv);
}
-int
+void
qli_scsi_cmd(struct scsi_xfer *xs)
{
int s;
@@ -1010,15 +1010,13 @@ qli_scsi_cmd(struct scsi_xfer *xs)
#endif
goto stuffup;
-
- return (SUCCESSFULLY_QUEUED);
+ return;
stuffup:
xs->error = XS_DRIVER_STUFFUP;
s = splbio();
scsi_done(xs);
splx(s);
- return (COMPLETE);
}
int
diff --git a/sys/dev/sdmmc/sdmmc_scsi.c b/sys/dev/sdmmc/sdmmc_scsi.c
index 8b45414a754..58030b0138a 100644
--- a/sys/dev/sdmmc/sdmmc_scsi.c
+++ b/sys/dev/sdmmc/sdmmc_scsi.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: sdmmc_scsi.c,v 1.20 2010/01/09 23:15:07 krw Exp $ */
+/* $OpenBSD: sdmmc_scsi.c,v 1.21 2010/03/23 01:57:20 krw Exp $ */
/*
* Copyright (c) 2006 Uwe Stuehler <uwe@openbsd.org>
@@ -78,8 +78,8 @@ void sdmmc_free_ccbs(struct sdmmc_scsi_softc *);
struct sdmmc_ccb *sdmmc_get_ccb(struct sdmmc_scsi_softc *, int);
void sdmmc_put_ccb(struct sdmmc_ccb *);
-int sdmmc_scsi_cmd(struct scsi_xfer *);
-int sdmmc_start_xs(struct sdmmc_softc *, struct sdmmc_ccb *);
+void sdmmc_scsi_cmd(struct scsi_xfer *);
+void sdmmc_start_xs(struct sdmmc_softc *, struct sdmmc_ccb *);
void sdmmc_complete_xs(void *);
void sdmmc_done_xs(struct sdmmc_ccb *);
void sdmmc_stimeout(void *);
@@ -286,7 +286,7 @@ sdmmc_scsi_decode_rw(struct scsi_xfer *xs, u_int32_t *blocknop,
}
}
-int
+void
sdmmc_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -309,7 +309,7 @@ sdmmc_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
}
DPRINTF(("%s: scsi cmd target=%d opcode=%#x proc=\"%s\" (poll=%#x)\n",
@@ -340,7 +340,7 @@ sdmmc_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
case TEST_UNIT_READY:
case START_STOP:
@@ -348,7 +348,7 @@ sdmmc_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
case READ_CAPACITY:
bzero(&rcd, sizeof rcd);
@@ -358,7 +358,7 @@ sdmmc_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
default:
DPRINTF(("%s: unsupported scsi command %#x\n",
@@ -367,7 +367,7 @@ sdmmc_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
}
/* A read or write operation. */
@@ -381,7 +381,7 @@ sdmmc_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
}
ccb = sdmmc_get_ccb(sc->sc_scsibus, xs->flags);
@@ -391,7 +391,7 @@ sdmmc_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
- return COMPLETE;
+ return;
}
ccb->ccb_xs = xs;
@@ -400,10 +400,10 @@ sdmmc_scsi_cmd(struct scsi_xfer *xs)
ccb->ccb_blockcnt = blockcnt;
ccb->ccb_blockno = blockno;
- return sdmmc_start_xs(sc, ccb);
+ sdmmc_start_xs(sc, ccb);
}
-int
+void
sdmmc_start_xs(struct sdmmc_softc *sc, struct sdmmc_ccb *ccb)
{
struct sdmmc_scsi_softc *scbus = sc->sc_scsibus;
@@ -420,12 +420,11 @@ sdmmc_start_xs(struct sdmmc_softc *sc, struct sdmmc_ccb *ccb)
if (ISSET(xs->flags, SCSI_POLL)) {
sdmmc_complete_xs(ccb);
- return COMPLETE;
+ return;
}
timeout_add_msec(&xs->stimeout, xs->timeout);
sdmmc_add_task(sc, &ccb->ccb_task);
- return SUCCESSFULLY_QUEUED;
}
void
diff --git a/sys/dev/softraid.c b/sys/dev/softraid.c
index 48504172bce..e0a57d5e918 100644
--- a/sys/dev/softraid.c
+++ b/sys/dev/softraid.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: softraid.c,v 1.194 2010/02/13 22:10:01 jsing Exp $ */
+/* $OpenBSD: softraid.c,v 1.195 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 2007, 2008, 2009 Marco Peereboom <marco@peereboom.us>
* Copyright (c) 2008 Chris Kuethe <ckuethe@openbsd.org>
@@ -87,7 +87,7 @@ struct cfdriver softraid_cd = {
};
/* scsi & discipline */
-int sr_scsi_cmd(struct scsi_xfer *);
+void sr_scsi_cmd(struct scsi_xfer *);
void sr_minphys(struct buf *bp, struct scsi_link *sl);
void sr_copy_internal_data(struct scsi_xfer *,
void *, size_t);
@@ -1829,7 +1829,7 @@ sr_scsi_done(struct sr_discipline *sd, struct scsi_xfer *xs)
splx(s);
}
-int
+void
sr_scsi_cmd(struct scsi_xfer *xs)
{
int s;
@@ -1868,7 +1868,10 @@ sr_scsi_cmd(struct scsi_xfer *xs)
*/
if ((wu = sr_wu_get(sd, 0)) == NULL) {
DNPRINTF(SR_D_CMD, "%s: sr_scsi_cmd no wu\n", DEVNAME(sc));
- return (NO_CCB);
+ xs->error = XS_NO_CCB;
+ s = splbio();
+ scsi_done(xs);
+ return;
}
xs->error = XS_NOERROR;
@@ -1950,7 +1953,7 @@ sr_scsi_cmd(struct scsi_xfer *xs)
goto stuffup;
}
- return (SUCCESSFULLY_QUEUED);
+ return;
stuffup:
if (sd && sd->sd_scsi_sense.error_code) {
xs->error = XS_SENSE;
@@ -1963,7 +1966,6 @@ complete:
if (wu)
sr_wu_put(wu);
sr_scsi_done(sd, xs);
- return (COMPLETE);
}
int
sr_scsi_ioctl(struct scsi_link *link, u_long cmd, caddr_t addr, int flag,
diff --git a/sys/dev/usb/umass_scsi.c b/sys/dev/usb/umass_scsi.c
index 32e19d38629..65827a820fb 100644
--- a/sys/dev/usb/umass_scsi.c
+++ b/sys/dev/usb/umass_scsi.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: umass_scsi.c,v 1.27 2010/01/13 11:46:33 krw Exp $ */
+/* $OpenBSD: umass_scsi.c,v 1.28 2010/03/23 01:57:20 krw Exp $ */
/* $NetBSD: umass_scsipi.c,v 1.9 2003/02/16 23:14:08 augustss Exp $ */
/*
* Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -68,7 +68,7 @@ struct umass_scsi_softc {
#define UMASS_ATAPI_DRIVE 0
-int umass_scsi_cmd(struct scsi_xfer *);
+void umass_scsi_cmd(struct scsi_xfer *);
void umass_scsi_minphys(struct buf *, struct scsi_link *);
void umass_scsi_cb(struct umass_softc *sc, void *priv, int residue,
@@ -166,7 +166,7 @@ umass_scsi_setup(struct umass_softc *sc)
return (scbus);
}
-int
+void
umass_scsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *sc_link = xs->sc_link;
@@ -234,7 +234,7 @@ umass_scsi_cmd(struct scsi_xfer *xs)
sc->polled_xfer_status));
usbd_set_polling(sc->sc_udev, 0);
/* scsi_done() has already been called. */
- return (COMPLETE);
+ return;
} else {
DPRINTF(UDMASS_SCSI,
("umass_scsi_cmd: async dir=%d, cmdlen=%d"
@@ -244,7 +244,7 @@ umass_scsi_cmd(struct scsi_xfer *xs)
xs->data, xs->datalen, dir,
xs->timeout, umass_scsi_cb, xs);
/* scsi_done() has already been called. */
- return (SUCCESSFULLY_QUEUED);
+ return;
}
/* Return if command finishes early. */
@@ -252,8 +252,6 @@ umass_scsi_cmd(struct scsi_xfer *xs)
s = splbio();
scsi_done(xs);
splx(s);
-
- return (COMPLETE);
}
void
diff --git a/sys/dev/usb/usscanner.c b/sys/dev/usb/usscanner.c
index 2e1b136ad72..5562951320c 100644
--- a/sys/dev/usb/usscanner.c
+++ b/sys/dev/usb/usscanner.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: usscanner.c,v 1.30 2010/01/09 23:15:07 krw Exp $ */
+/* $OpenBSD: usscanner.c,v 1.31 2010/03/23 01:57:20 krw Exp $ */
/* $NetBSD: usscanner.c,v 1.6 2001/01/23 14:04:14 augustss Exp $ */
/*
@@ -150,7 +150,7 @@ struct usscanner_softc {
void usscanner_cleanup(struct usscanner_softc *sc);
-int usscanner_scsipi_cmd(struct scsipi_xfer *xs);
+void usscanner_scsipi_cmd(struct scsipi_xfer *xs);
void usscanner_scsipi_minphys(struct buf *bp, struct scsi_link *sl);
void usscanner_done(struct usscanner_softc *sc);
void usscanner_sense(struct usscanner_softc *sc);
@@ -702,7 +702,7 @@ usscanner_cmd_cb(usbd_xfer_handle xfer, usbd_private_handle priv,
usscanner_done(sc);
}
-int
+void
usscanner_scsipi_cmd(struct scsipi_xfer *xs)
{
struct scsipi_link *sc_link = xs->sc_link;
@@ -759,13 +759,11 @@ usscanner_scsipi_cmd(struct scsipi_xfer *xs)
goto done;
}
- return (SUCCESSFULLY_QUEUED);
+ return;
done:
sc->sc_state = UAS_IDLE;
s = splbio();
scsipi_done(xs);
splx(s);
-
- return (COMPLETE);
}
diff --git a/sys/dev/vscsi.c b/sys/dev/vscsi.c
index 9cb2216526e..739bfc61b1e 100644
--- a/sys/dev/vscsi.c
+++ b/sys/dev/vscsi.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vscsi.c,v 1.7 2010/03/21 07:02:02 dlg Exp $ */
+/* $OpenBSD: vscsi.c,v 1.8 2010/03/23 01:57:19 krw Exp $ */
/*
* Copyright (c) 2008 David Gwynne <dlg@openbsd.org>
@@ -36,6 +36,19 @@
#include <dev/vscsivar.h>
+#ifdef VSCSI_DEBUG
+#define VSCSI_D_INIT (1<<0)
+
+int vscsidebug = 0;
+
+#define DPRINTF(_m, _p...) do { \
+ if (ISSET(vscsidebug, (_m))) \
+ printf(p); \
+ } while (0)
+#else
+#define DPRINTF(_m, _p...) /* _m, _p */
+#endif
+
int vscsi_match(struct device *, void *, void *);
void vscsi_attach(struct device *, struct device *, void *);
void vscsi_shutdown(void *);
@@ -83,7 +96,7 @@ struct cfdriver vscsi_cd = {
DV_DULL
};
-int vscsi_cmd(struct scsi_xfer *);
+void vscsi_cmd(struct scsi_xfer *);
int vscsi_probe(struct scsi_link *);
struct scsi_adapter vscsi_switch = {
@@ -149,7 +162,7 @@ vscsi_attach(struct device *parent, struct device *self, void *aux)
&saa, scsiprint);
}
-int
+void
vscsi_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -159,20 +172,20 @@ vscsi_cmd(struct scsi_xfer *xs)
if (sc->sc_opened == 0) {
vscsi_xs_stuffup(xs);
- return (COMPLETE);
+ return;
}
if (ISSET(xs->flags, SCSI_POLL) && ISSET(xs->flags, SCSI_NOSLEEP)) {
printf("%s: POLL && NOSLEEP for 0x%02x\n", DEVNAME(sc),
xs->cmd->opcode);
vscsi_xs_stuffup(xs);
- return (COMPLETE);
+ return;
}
ccb = vscsi_ccb_get(sc, ISSET(xs->flags, SCSI_NOSLEEP) ? 0 : 1);
if (ccb == NULL) {
vscsi_xs_stuffup(xs);
- return (COMPLETE);
+ return;
}
ccb->ccb_xs = xs;
@@ -188,10 +201,7 @@ vscsi_cmd(struct scsi_xfer *xs)
tsleep(ccb, PRIBIO, "vscsipoll", 0);
vscsi_ccb_put(sc, ccb);
rw_exit_read(&sc->sc_ccb_polling);
- return (COMPLETE);
}
-
- return (SUCCESSFULLY_QUEUED);
}
void
diff --git a/sys/scsi/mpath.c b/sys/scsi/mpath.c
index 25b796760dd..98c058cbf8b 100644
--- a/sys/scsi/mpath.c
+++ b/sys/scsi/mpath.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: mpath.c,v 1.12 2010/01/03 01:36:40 dlg Exp $ */
+/* $OpenBSD: mpath.c,v 1.13 2010/03/23 01:57:20 krw Exp $ */
/*
* Copyright (c) 2009 David Gwynne <dlg@openbsd.org>
@@ -74,7 +74,7 @@ struct cfdriver mpath_cd = {
DV_DULL
};
-int mpath_cmd(struct scsi_xfer *);
+void mpath_cmd(struct scsi_xfer *);
void mpath_minphys(struct buf *, struct scsi_link *);
int mpath_probe(struct scsi_link *);
@@ -147,7 +147,7 @@ mpath_probe(struct scsi_link *link)
return (0);
}
-int
+void
mpath_cmd(struct scsi_xfer *xs)
{
struct scsi_link *link = xs->sc_link;
@@ -157,13 +157,13 @@ mpath_cmd(struct scsi_xfer *xs)
if (n == NULL || p == NULL) {
mpath_xs_stuffup(xs);
- return (COMPLETE);
+ return;
}
mxs = scsi_xs_get(p->path_link, xs->flags);
if (mxs == NULL) {
mpath_xs_stuffup(xs);
- return (COMPLETE);
+ return;
}
memcpy(mxs->cmd, xs->cmd, xs->cmdlen);
@@ -178,8 +178,6 @@ mpath_cmd(struct scsi_xfer *xs)
mxs->done = mpath_done;
scsi_xs_exec(mxs);
-
- return (COMPLETE); /* doesnt matter anymore */
}
void
diff --git a/sys/scsi/scsi_base.c b/sys/scsi/scsi_base.c
index 75a9a07ce00..b42febf6b21 100644
--- a/sys/scsi/scsi_base.c
+++ b/sys/scsi/scsi_base.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: scsi_base.c,v 1.166 2010/01/15 06:27:12 krw Exp $ */
+/* $OpenBSD: scsi_base.c,v 1.167 2010/03/23 01:57:20 krw Exp $ */
/* $NetBSD: scsi_base.c,v 1.43 1997/04/02 02:29:36 mycroft Exp $ */
/*
@@ -718,8 +718,6 @@ scsi_report_luns(struct scsi_link *sc_link, int selectreport,
void
scsi_xs_exec(struct scsi_xfer *xs)
{
- int s;
-
xs->error = XS_NOERROR;
xs->resid = xs->datalen;
xs->status = 0;
@@ -730,25 +728,10 @@ scsi_xs_exec(struct scsi_xfer *xs)
if (xs->datalen && (xs->flags & SCSI_DATA_OUT))
scsi_show_mem(xs->data, min(64, xs->datalen));
}
-#endif /* SCSIDEBUG */
-
- /*
- * scsi_xs_exec() guarantees that scsi_done() will be called on the xs
- * it was given. The adapter is responsible for calling scsi_done()
- * except if its scsi_cmd() routine returns NO_CCB.
- * In those cases we must call scsi_done() for it.
- */
-
- if (xs->sc_link->adapter->scsi_cmd(xs) == NO_CCB) {
- /*
- * Give the xs back to the device driver to retry on its own.
- */
+#endif
- xs->error = XS_NO_CCB;
- s = splbio();
- scsi_done(xs);
- splx(s);
- }
+ /* The adapter's scsi_cmd() is responsible for callng scsi_done(). */
+ xs->sc_link->adapter->scsi_cmd(xs);
}
/*
diff --git a/sys/scsi/scsiconf.h b/sys/scsi/scsiconf.h
index c53467c9818..7a9a9b05f1d 100644
--- a/sys/scsi/scsiconf.h
+++ b/sys/scsi/scsiconf.h
@@ -1,4 +1,4 @@
-/* $OpenBSD: scsiconf.h,v 1.119 2010/01/15 05:50:31 krw Exp $ */
+/* $OpenBSD: scsiconf.h,v 1.120 2010/03/23 01:57:20 krw Exp $ */
/* $NetBSD: scsiconf.h,v 1.35 1997/04/02 02:29:38 mycroft Exp $ */
/*
@@ -304,7 +304,7 @@ extern int scsi_autoconf;
* of these statically allocated.
*/
struct scsi_adapter {
- int (*scsi_cmd)(struct scsi_xfer *);
+ void (*scsi_cmd)(struct scsi_xfer *);
void (*scsi_minphys)(struct buf *, struct scsi_link *);
int (*dev_probe)(struct scsi_link *);
void (*dev_free)(struct scsi_link *);
@@ -313,13 +313,6 @@ struct scsi_adapter {
};
/*
- * return values for scsi_cmd()
- */
-#define SUCCESSFULLY_QUEUED 0
-#define COMPLETE 2
-#define NO_CCB 4
-
-/*
* These entry points are called by the low-end drivers to get services from
* whatever high-end drivers they are attached to. Each device type has one
* of these statically allocated.