summaryrefslogtreecommitdiffstats
path: root/sys/cam
diff options
context:
space:
mode:
Diffstat (limited to 'sys/cam')
-rw-r--r--sys/cam/cam_xpt.c46
1 files changed, 17 insertions, 29 deletions
diff --git a/sys/cam/cam_xpt.c b/sys/cam/cam_xpt.c
index b498d61..4dd19c4 100644
--- a/sys/cam/cam_xpt.c
+++ b/sys/cam/cam_xpt.c
@@ -605,6 +605,10 @@ u_int32_t cam_dflags;
u_int32_t cam_debug_delay;
#endif
+/* Pointers to software interrupt handlers */
+struct intrhand *camnet_ih;
+struct intrhand *cambio_ih;
+
#if defined(CAM_DEBUG_FLAGS) && !defined(CAMDEBUG)
#error "You must have options CAMDEBUG to use options CAM_DEBUG_FLAGS"
#endif
@@ -693,9 +697,7 @@ static xpt_devicefunc_t xptpassannouncefunc;
static void xpt_finishconfig(struct cam_periph *periph, union ccb *ccb);
static void xptaction(struct cam_sim *sim, union ccb *work_ccb);
static void xptpoll(struct cam_sim *sim);
-static swihand_t swi_camnet;
-static swihand_t swi_cambio;
-static void camisr(cam_isrq_t *queue);
+static void camisr(void *);
#if 0
static void xptstart(struct cam_periph *periph, union ccb *work_ccb);
static void xptasync(struct cam_periph *periph,
@@ -1363,8 +1365,10 @@ xpt_init(dummy)
}
/* Install our software interrupt handlers */
- register_swi(SWI_CAMNET, swi_camnet);
- register_swi(SWI_CAMBIO, swi_cambio);
+ camnet_ih = sinthand_add("camnet", NULL, camisr, &cam_netq,
+ SWI_CAMNET, 0);
+ cambio_ih = sinthand_add("cambio", NULL, camisr, &cam_bioq,
+ SWI_CAMBIO, 0);
}
static cam_status
@@ -3400,8 +3404,8 @@ xpt_polled_action(union ccb *start_ccb)
&& (--timeout > 0)) {
DELAY(1000);
(*(sim->sim_poll))(sim);
- swi_camnet();
- swi_cambio();
+ camisr(&cam_netq);
+ camisr(&cam_bioq);
}
dev->ccbq.devq_openings++;
@@ -3411,8 +3415,8 @@ xpt_polled_action(union ccb *start_ccb)
xpt_action(start_ccb);
while(--timeout > 0) {
(*(sim->sim_poll))(sim);
- swi_camnet();
- swi_cambio();
+ camisr(&cam_netq);
+ camisr(&cam_bioq);
if ((start_ccb->ccb_h.status & CAM_STATUS_MASK)
!= CAM_REQ_INPROG)
break;
@@ -4527,13 +4531,13 @@ xpt_done(union ccb *done_ccb)
TAILQ_INSERT_TAIL(&cam_bioq, &done_ccb->ccb_h,
sim_links.tqe);
done_ccb->ccb_h.pinfo.index = CAM_DONEQ_INDEX;
- setsoftcambio();
+ sched_swi(cambio_ih, SWI_NOSWITCH);
break;
case CAM_PERIPH_NET:
TAILQ_INSERT_TAIL(&cam_netq, &done_ccb->ccb_h,
sim_links.tqe);
done_ccb->ccb_h.pinfo.index = CAM_DONEQ_INDEX;
- setsoftcamnet();
+ sched_swi(camnet_ih, SWI_NOSWITCH);
break;
}
}
@@ -6240,26 +6244,10 @@ xptpoll(struct cam_sim *sim)
{
}
-/*
- * Should only be called by the machine interrupt dispatch routines,
- * so put these prototypes here instead of in the header.
- */
-
-static void
-swi_camnet(void)
-{
- camisr(&cam_netq);
-}
-
-static void
-swi_cambio(void)
-{
- camisr(&cam_bioq);
-}
-
static void
-camisr(cam_isrq_t *queue)
+camisr(void *V_queue)
{
+ cam_isrq_t *queue = V_queue;
int s;
struct ccb_hdr *ccb_h;
OpenPOWER on IntegriCloud