Remove spl*() calls from the bus/ infrastructure, replacing them with
[dragonfly.git] / sys / bus / cam / scsi / scsi_low.c
index cd45df1..61d8e32 100644 (file)
@@ -1,7 +1,8 @@
-/*     $FreeBSD: src/sys/cam/scsi/scsi_low.c,v 1.1.2.4 2001/12/17 13:30:20 non Exp $   */
-/*     $DragonFly: src/sys/bus/cam/scsi/scsi_low.c,v 1.2 2003/06/17 04:28:19 dillon Exp $      */
-/*     $NecBSD: scsi_low.c,v 1.24.10.8 2001/06/26 07:39:44 honda Exp $ */
-/*     $NetBSD$        */
+/*
+ * $FreeBSD: src/sys/cam/scsi/scsi_low.c,v 1.1.2.5 2003/08/09 06:18:30 non Exp $
+ * $DragonFly: src/sys/bus/cam/scsi/scsi_low.c,v 1.13 2005/06/02 20:40:31 dillon Exp $
+ * $NetBSD: scsi_low.c,v 1.24.10.8 2001/06/26 07:39:44 honda Exp $
+ */
 
 #define        SCSI_LOW_STATICS
 #define        SCSI_LOW_DEBUG
 /* #define     SCSI_LOW_QCLEAR_AFTER_CA */
 /* #define     SCSI_LOW_FLAGS_QUIRKS_OK */
 
-#ifdef __NetBSD__
-#define        SCSI_LOW_TARGET_OPEN
-#endif /* __NetBSD__ */
-
-#ifdef __FreeBSD__
 #define        SCSI_LOW_FLAGS_QUIRKS_OK
-#endif /* __FreeBSD__ */
 
 /*
  * [NetBSD for NEC PC-98 series]
 #include "opt_ddb.h"
 
 #include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/kernel.h>
-
-#ifdef __FreeBSD__
-#if __FreeBSD_version >= 500001
-#include <sys/bio.h>
-#else
-#include <machine/clock.h>
-#endif
-#include <sys/devicestat.h>
-#endif /* __FreeBSD__ */
-
 #include <sys/buf.h>
-#include <sys/queue.h>
-#include <sys/malloc.h>
+#include <sys/cons.h>
+#include <sys/devicestat.h>
 #include <sys/errno.h>
+#include <sys/kernel.h>
+#include <sys/malloc.h>
+#include <sys/queue.h>
+#include <sys/systm.h>
+#include <sys/thread2.h>
 
-#ifdef __NetBSD__
-#include <sys/device.h>
-#include <vm/vm.h>
-
-#include <machine/bus.h>
-#include <machine/intr.h>
-#include <machine/dvcfg.h>
-
-#include <dev/cons.h>
-
-#include <dev/scsipi/scsipi_all.h>
-#include <dev/scsipi/scsipiconf.h>
-#include <dev/scsipi/scsipi_disk.h>
-#include <dev/scsipi/scsi_all.h>
-#include <dev/scsipi/scsiconf.h>
-#include <sys/scsiio.h>
-
-#include <i386/Cbus/dev/scsi_low.h>
-#endif /* __NetBSD__ */
-
-#ifdef __FreeBSD__
-#include <cam/cam.h>
-#include <cam/cam_ccb.h>
-#include <cam/cam_sim.h>
-#include <cam/cam_debug.h>
-#include <cam/cam_periph.h>
-
-#include <cam/scsi/scsi_all.h>
-#include <cam/scsi/scsi_message.h>
-
-#include <cam/scsi/scsi_low.h>
+#include <bus/cam/cam.h>
+#include <bus/cam/cam_ccb.h>
+#include <bus/cam/cam_sim.h>
+#include <bus/cam/cam_debug.h>
+#include <bus/cam/cam_periph.h>
 
-#include <sys/cons.h>
-#endif /* __FreeBSD__ */
+#include <bus/cam/scsi/scsi_all.h>
+#include <bus/cam/scsi/scsi_message.h>
+#include <bus/cam/scsi/scsi_low.h>
 
 /**************************************************************
  * Constants
 /**************************************************************
  * Declarations
  **************************************************************/
-/* static */ void scsi_low_info __P((struct scsi_low_softc *, struct targ_info *, u_char *));
-static void scsi_low_engage __P((void *));
-static struct slccb *scsi_low_establish_ccb __P((struct targ_info *, struct lun_info *, scsi_low_tag_t));
-static int scsi_low_done __P((struct scsi_low_softc *, struct slccb *));
-static int scsi_low_setup_done __P((struct scsi_low_softc *, struct slccb *));
-static void scsi_low_bus_release __P((struct scsi_low_softc *, struct targ_info *));
-static void scsi_low_twiddle_wait __P((void));
-static struct lun_info *scsi_low_alloc_li __P((struct targ_info *, int, int));
-static struct targ_info *scsi_low_alloc_ti __P((struct scsi_low_softc *, int));
-static void scsi_low_calcf_lun __P((struct lun_info *));
-static void scsi_low_calcf_target __P((struct targ_info *));
-static void scsi_low_calcf_show __P((struct lun_info *));
-static void scsi_low_reset_nexus __P((struct scsi_low_softc *, int));
-static void scsi_low_reset_nexus_target __P((struct scsi_low_softc *, struct targ_info *, int));
-static void scsi_low_reset_nexus_lun __P((struct scsi_low_softc *, struct lun_info *, int));
-static int scsi_low_init __P((struct scsi_low_softc *, u_int));
-static void scsi_low_start __P((struct scsi_low_softc *));
-static void scsi_low_free_ti __P((struct scsi_low_softc *));
-
-static int scsi_low_alloc_qtag __P((struct slccb *));
-static int scsi_low_dealloc_qtag __P((struct slccb *));
-static int scsi_low_enqueue __P((struct scsi_low_softc *, struct targ_info *, struct lun_info *, struct slccb *, u_int, u_int));
-static int scsi_low_message_enqueue __P((struct scsi_low_softc *, struct targ_info *, struct lun_info *, u_int));
-static void scsi_low_unit_ready_cmd __P((struct slccb *));
-static void scsi_low_timeout __P((void *));
-static int scsi_low_timeout_check __P((struct scsi_low_softc *));
+/* static */ void scsi_low_info (struct scsi_low_softc *, struct targ_info *, u_char *);
+static void scsi_low_engage (void *);
+static struct slccb *scsi_low_establish_ccb (struct targ_info *, struct lun_info *, scsi_low_tag_t);
+static int scsi_low_done (struct scsi_low_softc *, struct slccb *);
+static int scsi_low_setup_done (struct scsi_low_softc *, struct slccb *);
+static void scsi_low_bus_release (struct scsi_low_softc *, struct targ_info *);
+static void scsi_low_twiddle_wait (void);
+static struct lun_info *scsi_low_alloc_li (struct targ_info *, int, int);
+static struct targ_info *scsi_low_alloc_ti (struct scsi_low_softc *, int);
+static void scsi_low_calcf_lun (struct lun_info *);
+static void scsi_low_calcf_target (struct targ_info *);
+static void scsi_low_calcf_show (struct lun_info *);
+static void scsi_low_reset_nexus (struct scsi_low_softc *, int);
+static void scsi_low_reset_nexus_target (struct scsi_low_softc *, struct targ_info *, int);
+static void scsi_low_reset_nexus_lun (struct scsi_low_softc *, struct lun_info *, int);
+static int scsi_low_init (struct scsi_low_softc *, u_int);
+static void scsi_low_start (struct scsi_low_softc *);
+static void scsi_low_free_ti (struct scsi_low_softc *);
+
+static int scsi_low_alloc_qtag (struct slccb *);
+static int scsi_low_dealloc_qtag (struct slccb *);
+static int scsi_low_enqueue (struct scsi_low_softc *, struct targ_info *, struct lun_info *, struct slccb *, u_int, u_int);
+static int scsi_low_message_enqueue (struct scsi_low_softc *, struct targ_info *, struct lun_info *, u_int);
+static void scsi_low_unit_ready_cmd (struct slccb *);
+static void scsi_low_timeout (void *);
+static int scsi_low_timeout_check (struct scsi_low_softc *);
 #ifdef SCSI_LOW_START_UP_CHECK
-static int scsi_low_start_up __P((struct scsi_low_softc *));
+static int scsi_low_start_up (struct scsi_low_softc *);
 #endif /* SCSI_LOW_START_UP_CHECK */
-static int scsi_low_abort_ccb __P((struct scsi_low_softc *, struct slccb *));
-static struct slccb *scsi_low_revoke_ccb __P((struct scsi_low_softc *, struct slccb *, int));
+static int scsi_low_abort_ccb (struct scsi_low_softc *, struct slccb *);
+static struct slccb *scsi_low_revoke_ccb (struct scsi_low_softc *, struct slccb *, int);
 
 int scsi_low_version_major = 2;
 int scsi_low_version_minor = 17;
@@ -218,9 +181,9 @@ int scsi_low_debug = 0;
 int scsi_low_test = 0;
 int scsi_low_test_id = 0;
 
-static void scsi_low_test_abort __P((struct scsi_low_softc *, struct targ_info *, struct lun_info *));
-static void scsi_low_test_cmdlnk __P((struct scsi_low_softc *, struct slccb *));
-static void scsi_low_test_atten __P((struct scsi_low_softc *, struct targ_info *, u_int));
+static void scsi_low_test_abort (struct scsi_low_softc *, struct targ_info *, struct lun_info *);
+static void scsi_low_test_cmdlnk (struct scsi_low_softc *, struct slccb *);
+static void scsi_low_test_atten (struct scsi_low_softc *, struct targ_info *, u_int);
 #define        SCSI_LOW_DEBUG_TEST_GO(fl, id) \
        ((scsi_low_test & (fl)) != 0 && (scsi_low_test_id & (1 << (id))) == 0)
 #define        SCSI_LOW_DEBUG_GO(fl, id) \
@@ -237,13 +200,13 @@ GENERIC_CCB(scsi_low, slccb, ccb_chain)
  * Inline functions
  **************************************************************/
 #define        SCSI_LOW_INLINE static __inline
-SCSI_LOW_INLINE void scsi_low_activate_qtag __P((struct slccb *));
-SCSI_LOW_INLINE void scsi_low_deactivate_qtag __P((struct slccb *));
-SCSI_LOW_INLINE void scsi_low_ccb_message_assert __P((struct slccb *, u_int));
-SCSI_LOW_INLINE void scsi_low_ccb_message_exec __P((struct scsi_low_softc *, struct slccb *));
-SCSI_LOW_INLINE void scsi_low_ccb_message_retry __P((struct slccb *));
-SCSI_LOW_INLINE void scsi_low_ccb_message_clear __P((struct slccb *));
-SCSI_LOW_INLINE void scsi_low_init_msgsys __P((struct scsi_low_softc *, struct targ_info *));
+SCSI_LOW_INLINE void scsi_low_activate_qtag (struct slccb *);
+SCSI_LOW_INLINE void scsi_low_deactivate_qtag (struct slccb *);
+SCSI_LOW_INLINE void scsi_low_ccb_message_assert (struct slccb *, u_int);
+SCSI_LOW_INLINE void scsi_low_ccb_message_exec (struct scsi_low_softc *, struct slccb *);
+SCSI_LOW_INLINE void scsi_low_ccb_message_retry (struct slccb *);
+SCSI_LOW_INLINE void scsi_low_ccb_message_clear (struct slccb *);
+SCSI_LOW_INLINE void scsi_low_init_msgsys (struct scsi_low_softc *, struct targ_info *);
 
 SCSI_LOW_INLINE void
 scsi_low_activate_qtag(cb)
@@ -337,8 +300,8 @@ struct scsi_low_error_code {
        int error_code;
 };
 
-static struct slccb *scsi_low_find_ccb __P((struct scsi_low_softc *, u_int, u_int, void *));
-static int scsi_low_translate_error_code __P((struct slccb *, struct scsi_low_error_code *));
+static struct slccb *scsi_low_find_ccb (struct scsi_low_softc *, u_int, u_int, void *);
+static int scsi_low_translate_error_code (struct slccb *, struct scsi_low_error_code *);
 
 static struct slccb *
 scsi_low_find_ccb(slp, target, lun, osdep)
@@ -388,516 +351,24 @@ scsi_low_translate_error_code(cb, tp)
        return tp->error_code;
 }
 
-#ifdef SCSI_LOW_INTERFACE_XS
-/**************************************************************
- * SCSI INTERFACE (XS)
- **************************************************************/
-#define        SCSI_LOW_MINPHYS                0x10000
-#define        SCSI_LOW_MALLOC(size)           malloc((size), M_DEVBUF, M_NOWAIT)
-#define        SCSI_LOW_FREE(pt)               free((pt), M_DEVBUF)
-#define        SCSI_LOW_ALLOC_CCB(flags)       scsi_low_get_ccb((flags))
-#define        SCSI_LOW_XS_POLL_HZ             1000
-
-static int scsi_low_poll_xs __P((struct scsi_low_softc *, struct slccb *));
-static void scsi_low_scsi_minphys_xs __P((struct buf *));
-#ifdef SCSI_LOW_TARGET_OPEN
-static int scsi_low_target_open __P((struct scsipi_link *, struct cfdata *));
-#endif /* SCSI_LOW_TARGET_OPEN */
-static int scsi_low_scsi_cmd_xs __P((struct scsipi_xfer *));
-static int scsi_low_enable_xs __P((void *, int));
-static int scsi_low_ioctl_xs __P((struct scsipi_link *, u_long, caddr_t, int, struct proc *));
-
-static int scsi_low_attach_xs __P((struct scsi_low_softc *));
-static int scsi_low_world_start_xs __P((struct scsi_low_softc *));
-static int scsi_low_dettach_xs __P((struct scsi_low_softc *));
-static int scsi_low_ccb_setup_xs __P((struct scsi_low_softc *, struct slccb *));
-static int scsi_low_done_xs __P((struct scsi_low_softc *, struct slccb *));
-static void scsi_low_timeout_xs __P((struct scsi_low_softc *, int, int));
-static u_int scsi_low_translate_quirks_xs __P((u_int));
-static void scsi_low_setup_quirks_xs __P((struct targ_info *, struct lun_info *, u_int));
-
-struct scsi_low_osdep_funcs scsi_low_osdep_funcs_xs = {
-       scsi_low_attach_xs,
-       scsi_low_world_start_xs,
-       scsi_low_dettach_xs,
-       scsi_low_ccb_setup_xs,
-       scsi_low_done_xs,
-       scsi_low_timeout_xs
-};
-       
-struct scsipi_device scsi_low_dev = {
-       NULL,   /* Use default error handler */
-       NULL,   /* have a queue, served by this */
-       NULL,   /* have no async handler */
-       NULL,   /* Use default 'done' routine */
-};
-
-struct scsi_low_error_code scsi_low_error_code_xs[] = {
-       {0,             XS_NOERROR},
-       {SENSEIO,       XS_SENSE},
-       {BUSYERR,       XS_BUSY },
-       {SELTIMEOUTIO,  XS_SELTIMEOUT},
-       {TIMEOUTIO,     XS_TIMEOUT},
-       {-1,            XS_DRIVER_STUFFUP}
-};
-
-static int
-scsi_low_ioctl_xs(link, cmd, addr, flag, p)
-       struct scsipi_link *link;
-       u_long cmd;
-       caddr_t addr;
-       int flag;
-       struct proc *p;
-{
-       struct scsi_low_softc *slp;
-       int s, error = ENOTTY;
-
-       slp = (struct scsi_low_softc *) link->adapter_softc;
-       if ((slp->sl_flags & HW_INACTIVE) != 0)
-               return ENXIO;
-
-       if (cmd == SCBUSIORESET)
-       {
-               s = SCSI_LOW_SPLSCSI();
-               scsi_low_restart(slp, SCSI_LOW_RESTART_HARD, NULL);
-               splx(s);
-               error = 0;
-       }
-       else if (slp->sl_funcs->scsi_low_ioctl != 0)
-       {
-               error = (*slp->sl_funcs->scsi_low_ioctl)
-                               (slp, cmd, addr, flag, p);
-       }
-
-       return error;
-}
-
-static int
-scsi_low_enable_xs(arg, enable)
-       void *arg;
-       int enable;
-{
-       struct scsi_low_softc *slp = arg;
-
-       if (enable != 0)
-       {
-               if ((slp->sl_flags & HW_INACTIVE) != 0)
-                       return ENXIO;
-       }
-       else
-       {
-               if ((slp->sl_flags & HW_INACTIVE) != 0 ||
-                   (slp->sl_flags & HW_POWERCTRL) == 0)
-                       return 0;
-
-               slp->sl_flags |= HW_POWDOWN;
-               if (slp->sl_funcs->scsi_low_power != NULL)
-               {
-                       (*slp->sl_funcs->scsi_low_power)
-                                       (slp, SCSI_LOW_POWDOWN);
-               }
-       }
-       return 0;
-}
-
-static void
-scsi_low_scsi_minphys_xs(bp)
-       struct buf *bp;
-{
-
-       if (bp->b_bcount > SCSI_LOW_MINPHYS)
-               bp->b_bcount = SCSI_LOW_MINPHYS;
-       minphys(bp);
-}
-
-static int
-scsi_low_poll_xs(slp, cb)
-       struct scsi_low_softc *slp;
-       struct slccb *cb;
-{
-       struct scsipi_xfer *xs = cb->osdep;
-       int tcount;
-
-       cb->ccb_flags |= CCB_NOSDONE;
-       tcount = 0;
-
-       while (slp->sl_nio > 0)
-       {
-               SCSI_LOW_DELAY((1000 * 1000) / SCSI_LOW_XS_POLL_HZ);
-
-               (*slp->sl_funcs->scsi_low_poll) (slp);
-
-               if ((slp->sl_flags & (HW_INACTIVE | HW_INITIALIZING)) != 0)
-               {
-                       cb->ccb_flags |= CCB_NORETRY;
-                       cb->ccb_error |= FATALIO;
-                       (void) scsi_low_revoke_ccb(slp, cb, 1);
-                       printf("%s: hardware inactive in poll mode\n", 
-                               slp->sl_xname);
-               }
-
-               if ((xs->flags & ITSDONE) != 0)
-                       break;
-
-               if (tcount ++ < SCSI_LOW_XS_POLL_HZ / SCSI_LOW_TIMEOUT_HZ)
-                       continue;
-
-               tcount = 0;
-               scsi_low_timeout_check(slp);
-       }
-
-       xs->flags |= ITSDONE;
-       scsipi_done(xs);
-       return COMPLETE;
-}
-
-static int
-scsi_low_scsi_cmd_xs(xs)
-       struct scsipi_xfer *xs;
-{
-       struct scsipi_link *splp = xs->sc_link;
-       struct scsi_low_softc *slp = splp->adapter_softc;
-       struct targ_info *ti;
-       struct lun_info *li;
-       struct slccb *cb;
-       int s, targ, lun, flags, rv;
-
-       if ((cb = SCSI_LOW_ALLOC_CCB(xs->flags & SCSI_NOSLEEP)) == NULL)
-               return TRY_AGAIN_LATER;
-
-       targ = splp->scsipi_scsi.target,
-       lun = splp->scsipi_scsi.lun;
-       ti = slp->sl_ti[targ];
-
-       cb->osdep = xs;
-       cb->bp = xs->bp;
-
-       if ((xs->flags & SCSI_POLL) == 0)
-               flags = CCB_AUTOSENSE;
-       else
-               flags = CCB_AUTOSENSE | CCB_POLLED;
-               
-
-       s = SCSI_LOW_SPLSCSI();
-       li = scsi_low_alloc_li(ti, lun, 1);
-       if ((u_int) splp->quirks != li->li_sloi.sloi_quirks)
-       {
-               scsi_low_setup_quirks_xs(ti, li, (u_int) splp->quirks);
-       }
-
-       if ((xs->flags & SCSI_RESET) != 0)
-       {
-               flags |= CCB_NORETRY | CCB_URGENT;
-               scsi_low_enqueue(slp, ti, li, cb, flags, SCSI_LOW_MSG_RESET);
-       }
-       else
-       {
-               if (ti->ti_setup_msg != 0)
-               {
-                       scsi_low_message_enqueue(slp, ti, li, flags);
-               }
-
-               flags |= CCB_SCSIIO;
-               scsi_low_enqueue(slp, ti, li, cb, flags, 0);
-       }
-
-#ifdef SCSI_LOW_DEBUG
-       if (SCSI_LOW_DEBUG_TEST_GO(SCSI_LOW_ABORT_CHECK, ti->ti_id) != 0)
-       {
-               scsi_low_test_abort(slp, ti, li);
-       }
-#endif /* SCSI_LOW_DEBUG */
-
-       if ((cb->ccb_flags & CCB_POLLED) != 0)
-       {
-               rv = scsi_low_poll_xs(slp, cb);
-       }
-       else
-       {
-               rv = SUCCESSFULLY_QUEUED;
-       }
-       splx(s);
-       return rv;
-}
-
-static int
-scsi_low_attach_xs(slp)
-       struct scsi_low_softc *slp;
-{
-       struct scsipi_adapter *sap;
-       struct scsipi_link *splp;
-
-       strncpy(slp->sl_xname, slp->sl_dev.dv_xname, 16);
-
-       sap = SCSI_LOW_MALLOC(sizeof(*sap));
-       if (sap == NULL)
-               return ENOMEM;
-       splp = SCSI_LOW_MALLOC(sizeof(*splp));
-       if (splp == NULL)
-               return ENOMEM;
-
-       SCSI_LOW_BZERO(sap, sizeof(*sap));
-       SCSI_LOW_BZERO(splp, sizeof(*splp));
-
-       sap->scsipi_cmd = scsi_low_scsi_cmd_xs;
-       sap->scsipi_minphys = scsi_low_scsi_minphys_xs;
-       sap->scsipi_enable = scsi_low_enable_xs;
-       sap->scsipi_ioctl = scsi_low_ioctl_xs;
-#ifdef SCSI_LOW_TARGET_OPEN
-       sap->open_target_lu = scsi_low_target_open;
-#endif /* SCSI_LOW_TARGET_OPEN */
-
-       splp->adapter_softc = slp;
-       splp->scsipi_scsi.adapter_target = slp->sl_hostid;
-       splp->scsipi_scsi.max_target = slp->sl_ntargs - 1;
-       splp->scsipi_scsi.max_lun = slp->sl_nluns - 1;
-       splp->scsipi_scsi.channel = SCSI_CHANNEL_ONLY_ONE;
-       splp->openings = slp->sl_openings;
-       splp->type = BUS_SCSI;
-       splp->adapter_softc = slp;
-       splp->adapter = sap;
-       splp->device = &scsi_low_dev;
-
-       slp->sl_si.si_splp = splp;
-       slp->sl_show_result = SHOW_ALL_NEG;
-       return 0;
-}
-
-static int
-scsi_low_world_start_xs(slp)
-       struct scsi_low_softc *slp;
-{
-
-       return 0;
-}
-
-static int
-scsi_low_dettach_xs(slp)
-       struct scsi_low_softc *slp;
-{
-
-       /*
-        * scsipi does not have dettach bus fucntion.
-        *
-       scsipi_dettach_scsibus(slp->sl_si.si_splp);
-       */
-       return 0;
-}
-
-static int
-scsi_low_ccb_setup_xs(slp, cb)
-       struct scsi_low_softc *slp;
-       struct slccb *cb;
-{
-       struct scsipi_xfer *xs = (struct scsipi_xfer *) cb->osdep;
-
-       if ((cb->ccb_flags & CCB_SCSIIO) != 0)
-       {
-               cb->ccb_scp.scp_cmd = (u_int8_t *) xs->cmd;
-               cb->ccb_scp.scp_cmdlen = xs->cmdlen;
-               cb->ccb_scp.scp_data = xs->data;
-               cb->ccb_scp.scp_datalen = xs->datalen;
-               cb->ccb_scp.scp_direction = (xs->flags & SCSI_DATA_OUT) ? 
-                                       SCSI_LOW_WRITE : SCSI_LOW_READ;
-               cb->ccb_tcmax = xs->timeout / 1000;
-       }
-       else
-       {
-               scsi_low_unit_ready_cmd(cb);
-       }
-       return SCSI_LOW_START_QTAG;
-}
-
-static int
-scsi_low_done_xs(slp, cb)
-       struct scsi_low_softc *slp;
-       struct slccb *cb;
-{
-       struct scsipi_xfer *xs;
-
-       xs = (struct scsipi_xfer *) cb->osdep;
-       if (cb->ccb_error == 0)
-       {
-               xs->error = XS_NOERROR;
-               xs->resid = 0;
-       }
-       else    
-       {
-               if (cb->ccb_rcnt >= slp->sl_max_retry)
-                       cb->ccb_error |= ABORTIO;
-
-               if ((cb->ccb_flags & CCB_NORETRY) == 0 &&
-                   (cb->ccb_error & ABORTIO) == 0)
-                       return EJUSTRETURN;
-
-               if ((cb->ccb_error & SENSEIO) != 0)
-               {
-                       xs->sense.scsi_sense = cb->ccb_sense;
-               }
-
-               xs->error = scsi_low_translate_error_code(cb,
-                               &scsi_low_error_code_xs[0]);
-       
-#ifdef SCSI_LOW_DIAGNOSTIC
-               if ((cb->ccb_flags & CCB_SILENT) == 0 &&
-                   cb->ccb_scp.scp_cmdlen > 0 &&
-                   (scsi_low_cmd_flags[cb->ccb_scp.scp_cmd[0]] &
-                    SCSI_LOW_CMD_ABORT_WARNING) != 0)
-               {
-                       printf("%s: WARNING: scsi_low IO abort\n",
-                               slp->sl_xname);
-                       scsi_low_print(slp, NULL);
-               }
-#endif /* SCSI_LOW_DIAGNOSTIC */
-       }
-
-       if (cb->ccb_scp.scp_status == ST_UNKNOWN)
-               xs->status = 0; /* XXX */
-       else
-               xs->status = cb->ccb_scp.scp_status;
-
-       xs->flags |= ITSDONE;
-       if ((cb->ccb_flags & CCB_NOSDONE) == 0)
-               scsipi_done(xs);
-
-       return 0;
-}
-
-static void
-scsi_low_timeout_xs(slp, ch, action)
-       struct scsi_low_softc *slp;
-       int ch;
-       int action;
-{
-
-       switch (ch)
-       {
-       case SCSI_LOW_TIMEOUT_CH_IO:
-               switch (action)
-               {
-               case SCSI_LOW_TIMEOUT_START:
-                       timeout(scsi_low_timeout, slp,
-                               hz / SCSI_LOW_TIMEOUT_HZ);
-                       break;
-               case SCSI_LOW_TIMEOUT_STOP:
-                       untimeout(scsi_low_timeout, slp);
-                       break;
-               }
-               break;
-
-       case SCSI_LOW_TIMEOUT_CH_ENGAGE:
-               switch (action)
-               {
-               case SCSI_LOW_TIMEOUT_START:
-                       timeout(scsi_low_engage, slp, 1);
-                       break;
-               case SCSI_LOW_TIMEOUT_STOP:
-                       untimeout(scsi_low_engage, slp);
-                       break;
-               }
-               break;
-
-       case SCSI_LOW_TIMEOUT_CH_RECOVER:
-               break;
-       }
-}
-
-u_int
-scsi_low_translate_quirks_xs(quirks)
-       u_int quirks;
-{
-       u_int flags;
-       
-       flags = SCSI_LOW_DISK_LFLAGS | SCSI_LOW_DISK_TFLAGS;
-
-#ifdef SDEV_NODISC
-       if (quirks & SDEV_NODISC)
-               flags &= ~SCSI_LOW_DISK_DISC;
-#endif /* SDEV_NODISC */
-#ifdef SDEV_NOPARITY
-       if (quirks & SDEV_NOPARITY)
-               flags &= ~SCSI_LOW_DISK_PARITY;
-#endif /* SDEV_NOPARITY */
-#ifdef SDEV_NOCMDLNK
-       if (quirks & SDEV_NOCMDLNK)
-               flags &= ~SCSI_LOW_DISK_LINK;
-#endif /* SDEV_NOCMDLNK */
-#ifdef SDEV_NOTAG
-       if (quirks & SDEV_NOTAG)
-               flags &= ~SCSI_LOW_DISK_QTAG;
-#endif /* SDEV_NOTAG */
-#ifdef SDEV_NOSYNC
-       if (quirks & SDEV_NOSYNC)
-               flags &= ~SCSI_LOW_DISK_SYNC;
-#endif /* SDEV_NOSYNC */
-
-       return flags;
-}
-
-static void
-scsi_low_setup_quirks_xs(ti, li, flags)
-       struct targ_info *ti;
-       struct lun_info *li;
-       u_int flags;
-{
-       u_int quirks;
-
-       li->li_sloi.sloi_quirks = flags;
-       quirks = scsi_low_translate_quirks_xs(flags);
-       ti->ti_quirks = quirks & SCSI_LOW_DISK_TFLAGS;
-       li->li_quirks = quirks & SCSI_LOW_DISK_LFLAGS;
-       ti->ti_flags_valid |= SCSI_LOW_TARG_FLAGS_QUIRKS_VALID;
-       li->li_flags_valid |= SCSI_LOW_LUN_FLAGS_QUIRKS_VALID;
-       scsi_low_calcf_target(ti);
-       scsi_low_calcf_lun(li);
-       scsi_low_calcf_show(li);
-}
-
-#ifdef SCSI_LOW_TARGET_OPEN
-static int
-scsi_low_target_open(link, cf)
-       struct scsipi_link *link;
-       struct cfdata *cf;
-{
-       u_int target = link->scsipi_scsi.target;
-       u_int lun = link->scsipi_scsi.lun;
-       struct scsi_low_softc *slp;
-       struct targ_info *ti;
-       struct lun_info *li;
-
-       slp = (struct scsi_low_softc *) link->adapter_softc;
-       ti = slp->sl_ti[target];
-       li = scsi_low_alloc_li(ti, lun, 0);
-       if (li == NULL)
-               return 0;
-
-       li->li_cfgflags = cf->cf_flags;
-       scsi_low_setup_quirks_xs(ti, li, (u_int) link->quirks);
-       return 0;
-}
-#endif /* SCSI_LOW_TARGET_OPEN */
-
-#endif /* SCSI_LOW_INTERFACE_XS */
-
-#ifdef SCSI_LOW_INTERFACE_CAM
 /**************************************************************
  * SCSI INTERFACE (CAM)
  **************************************************************/
-#define        SCSI_LOW_MALLOC(size)           malloc((size), M_DEVBUF, M_NOWAIT)
+#define        SCSI_LOW_MALLOC(size)           malloc((size), M_DEVBUF, M_INTWAIT)
 #define        SCSI_LOW_FREE(pt)               free((pt), M_DEVBUF)
 #define        SCSI_LOW_ALLOC_CCB(flags)       scsi_low_get_ccb()
 
-static void scsi_low_poll_cam __P((struct cam_sim *));
-static void scsi_low_cam_rescan_callback __P((struct cam_periph *, union ccb *));
-static void scsi_low_rescan_bus_cam __P((struct scsi_low_softc *));
-void scsi_low_scsi_action_cam __P((struct cam_sim *, union ccb *));
+static void scsi_low_poll_cam (struct cam_sim *);
+static void scsi_low_cam_rescan_callback (struct cam_periph *, union ccb *);
+static void scsi_low_rescan_bus_cam (struct scsi_low_softc *);
+void scsi_low_scsi_action_cam (struct cam_sim *, union ccb *);
 
-static int scsi_low_attach_cam __P((struct scsi_low_softc *));
-static int scsi_low_world_start_cam __P((struct scsi_low_softc *));
-static int scsi_low_dettach_cam __P((struct scsi_low_softc *));
-static int scsi_low_ccb_setup_cam __P((struct scsi_low_softc *, struct slccb *));
-static int scsi_low_done_cam __P((struct scsi_low_softc *, struct slccb *));
-static void scsi_low_timeout_cam __P((struct scsi_low_softc *, int, int));
+static int scsi_low_attach_cam (struct scsi_low_softc *);
+static int scsi_low_world_start_cam (struct scsi_low_softc *);
+static int scsi_low_dettach_cam (struct scsi_low_softc *);
+static int scsi_low_ccb_setup_cam (struct scsi_low_softc *, struct slccb *);
+static int scsi_low_done_cam (struct scsi_low_softc *, struct slccb *);
+static void scsi_low_timeout_cam (struct scsi_low_softc *, int, int);
 
 struct scsi_low_osdep_funcs scsi_low_osdep_funcs_cam = {
        scsi_low_attach_cam,
@@ -962,11 +433,9 @@ scsi_low_rescan_bus_cam(slp)
        struct scsi_low_softc *slp;
 {
        struct cam_path *path;
-       union ccb *ccb = malloc(sizeof(union ccb), M_DEVBUF, M_WAITOK);
+       union ccb *ccb = malloc(sizeof(union ccb), M_DEVBUF, M_INTWAIT | M_ZERO);
        cam_status status;
 
-       bzero(ccb, sizeof(union ccb));
-
        status = xpt_create_path(&path, xpt_periph,
                                 cam_sim_path(slp->sl_si.sim), -1, 0);
        if (status != CAM_REQ_CMP)
@@ -989,7 +458,7 @@ scsi_low_scsi_action_cam(sim, ccb)
        struct lun_info *li;
        struct slccb *cb;
        u_int lun, flags, msg, target;
-       int s, rv;
+       int rv;
 
        target = (u_int) (ccb->ccb_h.target_id);
        lun = (u_int) ccb->ccb_h.target_lun;
@@ -1028,7 +497,7 @@ scsi_low_scsi_action_cam(sim, ccb)
                else
                        flags = CCB_SCSIIO;
 
-               s = SCSI_LOW_SPLSCSI();
+               crit_enter();
                li = scsi_low_alloc_li(ti, lun, 1);
 
                if (ti->ti_setup_msg != 0)
@@ -1044,7 +513,7 @@ scsi_low_scsi_action_cam(sim, ccb)
                        scsi_low_test_abort(slp, ti, li);
                }
 #endif /* SCSI_LOW_DEBUG */
-               splx(s);
+               crit_exit();
                break;
 
        case XPT_EN_LUN:                /* Enable LUN as a target */
@@ -1067,10 +536,10 @@ scsi_low_scsi_action_cam(sim, ccb)
                }
 #endif /* SCSI_LOW_DIAGNOSTIC */
 
-               s = SCSI_LOW_SPLSCSI();
+               crit_enter();
                cb = scsi_low_find_ccb(slp, target, lun, ccb->cab.abort_ccb);
                rv = scsi_low_abort_ccb(slp, cb);
-               splx(s);
+               crit_exit();
 
                if (rv == 0)
                        ccb->ccb_h.status = CAM_REQ_CMP;
@@ -1097,7 +566,7 @@ scsi_low_scsi_action_cam(sim, ccb)
                if (lun == CAM_LUN_WILDCARD)
                        lun = 0;
 
-               s = SCSI_LOW_SPLSCSI();
+               crit_enter();
                if ((cts->valid & (CCB_TRANS_BUS_WIDTH_VALID |
                                   CCB_TRANS_SYNC_RATE_VALID |
                                   CCB_TRANS_SYNC_OFFSET_VALID)) != 0)
@@ -1147,7 +616,7 @@ scsi_low_scsi_action_cam(sim, ccb)
                        if ((slp->sl_show_result & SHOW_CALCF_RES) != 0)
                                scsi_low_calcf_show(li);
                }
-               splx(s);
+               crit_exit();
 
                ccb->ccb_h.status = CAM_REQ_CMP;
                xpt_done(ccb);
@@ -1172,7 +641,7 @@ scsi_low_scsi_action_cam(sim, ccb)
                if (lun == CAM_LUN_WILDCARD)
                        lun = 0;
 
-               s = SCSI_LOW_SPLSCSI();
+               crit_enter();
                li = scsi_low_alloc_li(ti, lun, 1);
 #ifdef CAM_NEW_TRAN_CODE
                if (li != NULL && cts->type == CTS_TYPE_CURRENT_SETTINGS) {
@@ -1278,40 +747,21 @@ scsi_low_scsi_action_cam(sim, ccb)
                ccb->ccb_h.status = CAM_REQ_CMP;
 #endif
 settings_out:
-               splx(s);
+               crit_exit();
                xpt_done(ccb);
                break;
        }
 
        case XPT_CALC_GEOMETRY: { /* not yet HN2 */
-               struct    ccb_calc_geometry *ccg;
-               u_int32_t size_mb;
-               u_int32_t secs_per_cylinder;
-               int       extended;
-
-               extended = 1;
-               ccg = &ccb->ccg;
-               size_mb = ccg->volume_size
-                       / ((1024L * 1024L) / ccg->block_size);
-               
-               if (size_mb > 1024 && extended) {
-                       ccg->heads = 255;
-                       ccg->secs_per_track = 63;
-               } else {
-                       ccg->heads = 64;
-                       ccg->secs_per_track = 32;
-               }
-               secs_per_cylinder = ccg->heads * ccg->secs_per_track;
-               ccg->cylinders = ccg->volume_size / secs_per_cylinder;
-               ccb->ccb_h.status = CAM_REQ_CMP;
+               cam_calc_geometry(&ccb->ccg, /*extended*/1);
                xpt_done(ccb);
                break;
        }
 
        case XPT_RESET_BUS:             /* Reset the specified SCSI bus */
-               s = SCSI_LOW_SPLSCSI();
+               crit_enter();
                scsi_low_restart(slp, SCSI_LOW_RESTART_HARD, NULL);
-               splx(s);
+               crit_exit();
                ccb->ccb_h.status = CAM_REQ_CMP;
                xpt_done(ccb);
                break;
@@ -1350,10 +800,10 @@ settings_out:
                else
                        flags = CCB_NORETRY | CCB_URGENT;
 
-               s = SCSI_LOW_SPLSCSI();
+               crit_enter();
                li = scsi_low_alloc_li(ti, lun, 1);
                scsi_low_enqueue(slp, ti, li, cb, flags, msg);
-               splx(s);
+               crit_exit();
                break;
 
        case XPT_PATH_INQ: {            /* Path routing inquiry */
@@ -1423,14 +873,14 @@ scsi_low_attach_cam(slp)
                                DEVPORT_DEVNAME(slp->sl_dev), slp,
                                DEVPORT_DEVUNIT(slp->sl_dev), 
                                slp->sl_openings, tagged_openings, devq);
-
+       cam_simq_release(devq);
        if (slp->sl_si.sim == NULL) {
-               cam_simq_free(devq);
                return ENODEV;
        }
 
        if (xpt_bus_register(slp->sl_si.sim, 0) != CAM_SUCCESS) {
-               free(slp->sl_si.sim, M_DEVBUF);
+               cam_sim_free(slp->sl_si.sim);
+               slp->sl_si.sim = NULL;
                return ENODEV;
        }
        
@@ -1438,8 +888,8 @@ scsi_low_attach_cam(slp)
                        cam_sim_path(slp->sl_si.sim), CAM_TARGET_WILDCARD,
                        CAM_LUN_WILDCARD) != CAM_REQ_CMP) {
                xpt_bus_deregister(cam_sim_path(slp->sl_si.sim));
-               cam_sim_free(slp->sl_si.sim, /*free_simq*/TRUE);
-               free(slp->sl_si.sim, M_DEVBUF);
+               cam_sim_free(slp->sl_si.sim);
+               slp->sl_si.sim = NULL;
                return ENODEV;
        }
 
@@ -1465,7 +915,8 @@ scsi_low_dettach_cam(slp)
        xpt_async(AC_LOST_DEVICE, slp->sl_si.path, NULL);
        xpt_free_path(slp->sl_si.path);
        xpt_bus_deregister(cam_sim_path(slp->sl_si.sim));
-       cam_sim_free(slp->sl_si.sim, /* free_devq */ TRUE);
+       cam_sim_free(slp->sl_si.sim);
+       slp->sl_si.sim = NULL;
        return 0;
 }
 
@@ -1566,11 +1017,11 @@ scsi_low_timeout_cam(slp, ch, action)
                switch (action)
                {
                case SCSI_LOW_TIMEOUT_START:
-                       slp->sl_si.timeout_ch = timeout(scsi_low_timeout, slp,
-                               hz / SCSI_LOW_TIMEOUT_HZ);
+                       callout_reset(&slp->sl_si.timeout_ch,
+                           hz / SCSI_LOW_TIMEOUT_HZ, scsi_low_timeout, slp);
                        break;
                case SCSI_LOW_TIMEOUT_STOP:
-                       untimeout(scsi_low_timeout, slp, slp->sl_si.timeout_ch);
+                       callout_stop(&slp->sl_si.timeout_ch);
                        break;
                }
                break;
@@ -1579,10 +1030,11 @@ scsi_low_timeout_cam(slp, ch, action)
                switch (action)
                {
                case SCSI_LOW_TIMEOUT_START:
-                       slp->sl_si.engage_ch = timeout(scsi_low_engage, slp, 1);
+                       callout_reset(&slp->sl_si.engage_ch, 1,
+                                     scsi_low_engage, slp);
                        break;
                case SCSI_LOW_TIMEOUT_STOP:
-                       untimeout(scsi_low_engage, slp, slp->sl_si.engage_ch);
+                       callout_stop(&slp->sl_si.engage_ch);
                        break;
                }
                break;
@@ -1591,12 +1043,6 @@ scsi_low_timeout_cam(slp, ch, action)
        }
 }
 
-#endif /* SCSI_LOW_INTERFACE_CAM */
-
-/*=============================================================
- * END OF OS switch  (All OS depend fucntions should be above)
- =============================================================*/
-
 /**************************************************************
  * scsi low deactivate and activate
  **************************************************************/
@@ -1614,15 +1060,13 @@ int
 scsi_low_deactivate(slp)
        struct scsi_low_softc *slp;
 {
-       int s;
-
-       s = SCSI_LOW_SPLSCSI();
+       crit_enter();
        slp->sl_flags |= HW_INACTIVE;
        (*slp->sl_osdep_fp->scsi_low_osdep_timeout)
                (slp, SCSI_LOW_TIMEOUT_CH_IO, SCSI_LOW_TIMEOUT_STOP);
        (*slp->sl_osdep_fp->scsi_low_osdep_timeout)
                (slp, SCSI_LOW_TIMEOUT_CH_ENGAGE, SCSI_LOW_TIMEOUT_STOP);
-       splx(s);
+       crit_exit();
        return 0;
 }
 
@@ -1630,21 +1074,21 @@ int
 scsi_low_activate(slp)
        struct scsi_low_softc *slp;
 {
-       int error, s;
+       int error;
 
-       s = SCSI_LOW_SPLSCSI();
+       crit_enter();
        slp->sl_flags &= ~HW_INACTIVE;
        if ((error = scsi_low_restart(slp, SCSI_LOW_RESTART_HARD, NULL)) != 0)
        {
                slp->sl_flags |= HW_INACTIVE;
-               splx(s);
+               crit_exit();
                return error;
        }
 
        slp->sl_timeout_count = 0;
        (*slp->sl_osdep_fp->scsi_low_osdep_timeout)
                (slp, SCSI_LOW_TIMEOUT_CH_IO, SCSI_LOW_TIMEOUT_START);
-       splx(s);
+       crit_exit();
        return 0;
 }
 
@@ -1652,10 +1096,10 @@ scsi_low_activate(slp)
  * scsi low log
  **************************************************************/
 #ifdef SCSI_LOW_DIAGNOSTIC
-static void scsi_low_msg_log_init __P((struct scsi_low_msg_log *));
-static void scsi_low_msg_log_write __P((struct scsi_low_msg_log *, u_int8_t *,
-int));
-static void scsi_low_msg_log_show __P((struct scsi_low_msg_log *, char *, int));
+static void scsi_low_msg_log_init (struct scsi_low_msg_log *);
+static void scsi_low_msg_log_write (struct scsi_low_msg_log *, u_int8_t *,
+int);
+static void scsi_low_msg_log_show (struct scsi_low_msg_log *, char *, int);
 
 static void
 scsi_low_msg_log_init(slmlp)
@@ -1713,7 +1157,8 @@ scsi_low_engage(arg)
        void *arg;
 {
        struct scsi_low_softc *slp = arg;
-       int s = SCSI_LOW_SPLSCSI();
+
+       crit_enter();
 
        switch (slp->sl_rstep)
        {
@@ -1733,7 +1178,7 @@ scsi_low_engage(arg)
        case 2:
                break;
        }
-       splx(s);
+       crit_exit();
 }
 
 static int
@@ -1807,7 +1252,7 @@ scsi_low_alloc_li(ti, lun, alloc)
 
        li = SCSI_LOW_MALLOC(ti->ti_lunsize);
        if (li == NULL)
-               panic("no lun info mem\n");
+               panic("no lun info mem");
 
        SCSI_LOW_BZERO(li, ti->ti_lunsize);
        li->li_lun = lun;
@@ -1849,7 +1294,7 @@ scsi_low_alloc_ti(slp, targ)
 
        ti = SCSI_LOW_MALLOC(slp->sl_targsize);
        if (ti == NULL)
-               panic("%s short of memory\n", slp->sl_xname);
+               panic("%s short of memory", slp->sl_xname);
 
        SCSI_LOW_BZERO(ti, slp->sl_targsize);
        ti->ti_id = targ;
@@ -1923,13 +1368,12 @@ scsi_low_timeout(arg)
        void *arg;
 {
        struct scsi_low_softc *slp = arg;
-       int s;
 
-       s = SCSI_LOW_SPLSCSI();
+       crit_enter();
        (void) scsi_low_timeout_check(slp);
        (*slp->sl_osdep_fp->scsi_low_osdep_timeout)
                (slp, SCSI_LOW_TIMEOUT_CH_IO, SCSI_LOW_TIMEOUT_START);
-       splx(s);
+       crit_exit();
 }
 
 static int
@@ -1956,7 +1400,7 @@ scsi_low_timeout_check(slp)
                        cb->ccb_flags |= CCB_NORETRY;
                        cb->ccb_error |= SELTIMEOUTIO;
                        if (scsi_low_revoke_ccb(slp, cb, 1) != NULL)
-                               panic("%s: ccb not finished\n", slp->sl_xname);
+                               panic("%s: ccb not finished", slp->sl_xname);
                }
 
                if (slp->sl_Tnexus == NULL)
@@ -2080,7 +1524,7 @@ scsi_low_abort_ccb(slp, cb)
        else if ((cb->ccb_flags & CCB_DISCQ) != 0)
        {
                if (scsi_low_revoke_ccb(slp, cb, 0) == NULL)
-                       panic("%s: revoked ccb done\n", slp->sl_xname);
+                       panic("%s: revoked ccb done", slp->sl_xname);
 
                cb->ccb_flags |= CCB_STARTQ;
                TAILQ_INSERT_HEAD(&slp->sl_start, cb, ccb_chain);
@@ -2091,7 +1535,7 @@ scsi_low_abort_ccb(slp, cb)
        else
        {
                if (scsi_low_revoke_ccb(slp, cb, 1) != NULL)
-                       panic("%s: revoked ccb retried\n", slp->sl_xname);
+                       panic("%s: revoked ccb retried", slp->sl_xname);
        }
        return 0;
 }
@@ -2106,17 +1550,12 @@ scsi_low_attach(slp, openings, ntargs, nluns, targsize, lunsize)
 {
        struct targ_info *ti;
        struct lun_info *li;
-       int s, i, nccb, rv;
+       int i, nccb, rv;
 
-#ifdef SCSI_LOW_INTERFACE_XS
-       slp->sl_osdep_fp = &scsi_low_osdep_funcs_xs;
-#endif /* SCSI_LOW_INTERFACE_XS */
-#ifdef SCSI_LOW_INTERFACE_CAM
        slp->sl_osdep_fp = &scsi_low_osdep_funcs_cam;
-#endif /* SCSI_LOW_INTERFACE_CAM */
 
        if (slp->sl_osdep_fp == NULL)
-               panic("scsi_low: interface not spcified\n");
+               panic("scsi_low: interface not spcified");
 
        if (ntargs > SCSI_LOW_NTARGETS)
        {
@@ -2155,11 +1594,14 @@ scsi_low_attach(slp, openings, ntargs, nluns, targsize, lunsize)
        TAILQ_INIT(&slp->sl_start);
 
        /* call os depend attach */
-       s = SCSI_LOW_SPLSCSI();
+       callout_init(&slp->sl_si.timeout_ch);
+       callout_init(&slp->sl_si.engage_ch);
+
+       crit_enter();
        rv = (*slp->sl_osdep_fp->scsi_low_osdep_attach) (slp);
        if (rv != 0)
        {
-               splx(s);
+               crit_exit();
                printf("%s: scsi_low_attach: osdep attach failed\n",
                        slp->sl_xname);
                return EINVAL;
@@ -2169,7 +1611,7 @@ scsi_low_attach(slp, openings, ntargs, nluns, targsize, lunsize)
        SCSI_LOW_DELAY(1000);   /* wait for 1ms */
        if (scsi_low_init(slp, SCSI_LOW_RESTART_HARD) != 0)
        {
-               splx(s);
+               crit_exit();
                printf("%s: scsi_low_attach: initialization failed\n",
                        slp->sl_xname);
                return EINVAL;
@@ -2191,7 +1633,7 @@ scsi_low_attach(slp, openings, ntargs, nluns, targsize, lunsize)
 
        /* call os depend attach done*/
        (*slp->sl_osdep_fp->scsi_low_osdep_world_start) (slp);
-       splx(s);
+       crit_exit();
        return 0;
 }
 
@@ -2199,12 +1641,12 @@ int
 scsi_low_dettach(slp)
        struct scsi_low_softc *slp;
 {
-       int s, rv;
+       int rv;
 
-       s = SCSI_LOW_SPLSCSI();
+       crit_enter();
        if (scsi_low_is_busy(slp) != 0)
        {
-               splx(s);
+               crit_exit();
                return EBUSY;
        }
 
@@ -2213,13 +1655,13 @@ scsi_low_dettach(slp)
        rv = (*slp->sl_osdep_fp->scsi_low_osdep_dettach) (slp);
        if (rv != 0)
        {
-               splx(s);
+               crit_exit();
                return EBUSY;
        }
 
        scsi_low_free_ti(slp);
        LIST_REMOVE(slp, sl_chain);
-       splx(s);
+       crit_exit();
        return 0;
 }
 
@@ -2296,9 +1738,9 @@ static u_int8_t sms_cmd[6] = {SLSC_MODE_SENSE_SHORT, 0x08, 0x0a, 0,
 static u_int8_t inq_cmd[6] = {INQUIRY, 0, 0, 0, 
                              sizeof(struct scsi_low_inq_data), 0}; 
 static u_int8_t unit_ready_cmd[6];
-static int scsi_low_setup_start __P((struct scsi_low_softc *, struct targ_info *, struct lun_info *, struct slccb *));
-static int scsi_low_sense_abort_start __P((struct scsi_low_softc *, struct targ_info *, struct lun_info *, struct slccb *));
-static int scsi_low_resume __P((struct scsi_low_softc *));
+static int scsi_low_setup_start (struct scsi_low_softc *, struct targ_info *, struct lun_info *, struct slccb *);
+static int scsi_low_sense_abort_start (struct scsi_low_softc *, struct targ_info *, struct lun_info *, struct slccb *);
+static int scsi_low_resume (struct scsi_low_softc *);
 
 static void
 scsi_low_unit_ready_cmd(cb)
@@ -2386,7 +1828,7 @@ scsi_low_setup_start(slp, ti, li, cb)
                return SCSI_LOW_START_QTAG;
 
        default:
-               panic("%s: no setup phase\n", slp->sl_xname);
+               panic("%s: no setup phase", slp->sl_xname);
        }
 
        return SCSI_LOW_START_NO_QTAG;
@@ -2442,7 +1884,7 @@ scsi_low_start(slp)
        if (slp->sl_Tnexus || slp->sl_Lnexus || slp->sl_Qnexus)
        {
                scsi_low_info(slp, NULL, "NEXUS INCOSISTENT");
-               panic("%s: inconsistent\n", slp->sl_xname);
+               panic("%s: inconsistent", slp->sl_xname);
        }
 #endif /* SCSI_LOW_DIAGNOSTIC */
 
@@ -3250,24 +2692,24 @@ scsi_low_data(slp, ti, bp, direction)
 #define        MSGIN_WIDTHP(ti) ((ti)->ti_msgin[3])
 #define        MSGIN_DATA_LAST 0x30
 
-static int scsi_low_errfunc_synch __P((struct scsi_low_softc *, u_int));
-static int scsi_low_errfunc_wide __P((struct scsi_low_softc *, u_int));
-static int scsi_low_errfunc_identify __P((struct scsi_low_softc *, u_int));
-static int scsi_low_errfunc_qtag __P((struct scsi_low_softc *, u_int));
+static int scsi_low_errfunc_synch (struct scsi_low_softc *, u_int);
+static int scsi_low_errfunc_wide (struct scsi_low_softc *, u_int);
+static int scsi_low_errfunc_identify (struct scsi_low_softc *, u_int);
+static int scsi_low_errfunc_qtag (struct scsi_low_softc *, u_int);
 
-static int scsi_low_msgfunc_synch __P((struct scsi_low_softc *));
-static int scsi_low_msgfunc_wide __P((struct scsi_low_softc *));
-static int scsi_low_msgfunc_identify __P((struct scsi_low_softc *));
-static int scsi_low_msgfunc_abort __P((struct scsi_low_softc *));
-static int scsi_low_msgfunc_qabort __P((struct scsi_low_softc *));
-static int scsi_low_msgfunc_qtag __P((struct scsi_low_softc *));
-static int scsi_low_msgfunc_reset __P((struct scsi_low_softc *));
+static int scsi_low_msgfunc_synch (struct scsi_low_softc *);
+static int scsi_low_msgfunc_wide (struct scsi_low_softc *);
+static int scsi_low_msgfunc_identify (struct scsi_low_softc *);
+static int scsi_low_msgfunc_abort (struct scsi_low_softc *);
+static int scsi_low_msgfunc_qabort (struct scsi_low_softc *);
+static int scsi_low_msgfunc_qtag (struct scsi_low_softc *);
+static int scsi_low_msgfunc_reset (struct scsi_low_softc *);
 
 struct scsi_low_msgout_data {
        u_int   md_flags;
        u_int8_t md_msg;
-       int (*md_msgfunc) __P((struct scsi_low_softc *));
-       int (*md_errfunc) __P((struct scsi_low_softc *, u_int));
+       int (*md_msgfunc) (struct scsi_low_softc *);
+       int (*md_errfunc) (struct scsi_low_softc *, u_int);
 #define        MSG_RELEASE_ATN 0x0001
        u_int md_condition;
 };
@@ -3291,24 +2733,24 @@ struct scsi_low_msgout_data scsi_low_msgout_data[] = {
 /* 15 */{SCSI_LOW_MSG_ALL, 0},
 };
 
-static int scsi_low_msginfunc_ext __P((struct scsi_low_softc *));
-static int scsi_low_synch __P((struct scsi_low_softc *));
-static int scsi_low_wide __P((struct scsi_low_softc *));
-static int scsi_low_msginfunc_msg_reject __P((struct scsi_low_softc *));
-static int scsi_low_msginfunc_rejop __P((struct scsi_low_softc *));
-static int scsi_low_msginfunc_rp __P((struct scsi_low_softc *));
-static int scsi_low_msginfunc_sdp __P((struct scsi_low_softc *));
-static int scsi_low_msginfunc_disc __P((struct scsi_low_softc *));
-static int scsi_low_msginfunc_cc __P((struct scsi_low_softc *));
-static int scsi_low_msginfunc_lcc __P((struct scsi_low_softc *));
-static int scsi_low_msginfunc_parity __P((struct scsi_low_softc *));
-static int scsi_low_msginfunc_noop __P((struct scsi_low_softc *));
-static int scsi_low_msginfunc_simple_qtag __P((struct scsi_low_softc *));
-static int scsi_low_msginfunc_i_wide_residue __P((struct scsi_low_softc *));
+static int scsi_low_msginfunc_ext (struct scsi_low_softc *);
+static int scsi_low_synch (struct scsi_low_softc *);
+static int scsi_low_wide (struct scsi_low_softc *);
+static int scsi_low_msginfunc_msg_reject (struct scsi_low_softc *);
+static int scsi_low_msginfunc_rejop (struct scsi_low_softc *);
+static int scsi_low_msginfunc_rp (struct scsi_low_softc *);
+static int scsi_low_msginfunc_sdp (struct scsi_low_softc *);
+static int scsi_low_msginfunc_disc (struct scsi_low_softc *);
+static int scsi_low_msginfunc_cc (struct scsi_low_softc *);
+static int scsi_low_msginfunc_lcc (struct scsi_low_softc *);
+static int scsi_low_msginfunc_parity (struct scsi_low_softc *);
+static int scsi_low_msginfunc_noop (struct scsi_low_softc *);
+static int scsi_low_msginfunc_simple_qtag (struct scsi_low_softc *);
+static int scsi_low_msginfunc_i_wide_residue (struct scsi_low_softc *);
 
 struct scsi_low_msgin_data {
        u_int md_len;
-       int (*md_msgfunc) __P((struct scsi_low_softc *));
+       int (*md_msgfunc) (struct scsi_low_softc *);
 };
 
 struct scsi_low_msgin_data scsi_low_msgin_data[] = {
@@ -3775,7 +3217,7 @@ cmd_link_start:
        cb->ccb_tag = SCSI_LOW_UNKTAG;
        cb->ccb_otag = SCSI_LOW_UNKTAG;
        if (scsi_low_done(slp, cb) == SCSI_LOW_DONE_RETRY)
-               panic("%s: linked ccb retried\n", slp->sl_xname);
+               panic("%s: linked ccb retried", slp->sl_xname);
 
        slp->sl_Qnexus = ncb;
        slp->sl_ph_count = 0;
@@ -4445,7 +3887,7 @@ scsi_low_revoke_ccb(slp, cb, fdone)
        if ((cb->ccb_flags & (CCB_STARTQ | CCB_DISCQ)) == 
            (CCB_STARTQ | CCB_DISCQ))
        {
-               panic("%s: ccb in both queue\n", slp->sl_xname);
+               panic("%s: ccb in both queue", slp->sl_xname);
        }
 #endif /* SCSI_LOW_DIAGNOSTIC */
 
@@ -4472,7 +3914,7 @@ scsi_low_revoke_ccb(slp, cb, fdone)
                cb->ccb_error |= FATALIO;
                cb->ccb_flags &= ~CCB_AUTOSENSE;
                if (scsi_low_done(slp, cb) != SCSI_LOW_DONE_COMPLETE)
-                       panic("%s: done ccb retried\n", slp->sl_xname);
+                       panic("%s: done ccb retried", slp->sl_xname);
                return NULL;
        }
        else
@@ -4667,7 +4109,7 @@ scsi_low_calcf_show(li)
 /**************************************************************
  * scsi world start up
  **************************************************************/
-static int scsi_low_poll __P((struct scsi_low_softc *, struct slccb *));
+static int scsi_low_poll (struct scsi_low_softc *, struct slccb *);
 
 static int
 scsi_low_start_up(slp)