Lines Matching refs:ccb
72 static void isp_action(struct cam_sim *, union ccb *);
121 xpt_action((union ccb *)csa); in isp_attach_chan()
304 xpt_action((union ccb *)csa); in isp_detach()
761 static ISP_INLINE int isp_get_pcmd(ispsoftc_t *, union ccb *);
762 static ISP_INLINE void isp_free_pcmd(ispsoftc_t *, union ccb *);
765 isp_get_pcmd(ispsoftc_t *isp, union ccb *ccb) in isp_get_pcmd() argument
767 ISP_PCMD(ccb) = isp->isp_osinfo.pcmd_free; in isp_get_pcmd()
768 if (ISP_PCMD(ccb) == NULL) { in isp_get_pcmd()
771 isp->isp_osinfo.pcmd_free = ((struct isp_pcmd *)ISP_PCMD(ccb))->next; in isp_get_pcmd()
776 isp_free_pcmd(ispsoftc_t *isp, union ccb *ccb) in isp_free_pcmd() argument
778 ((struct isp_pcmd *)ISP_PCMD(ccb))->next = isp->isp_osinfo.pcmd_free; in isp_free_pcmd()
779 isp->isp_osinfo.pcmd_free = ISP_PCMD(ccb); in isp_free_pcmd()
780 ISP_PCMD(ccb) = NULL; in isp_free_pcmd()
799 static void isp_enable_lun(ispsoftc_t *, union ccb *);
802 static void isp_disable_lun(ispsoftc_t *, union ccb *);
806 static void isp_complete_ctio(union ccb *);
807 static void isp_target_putback_atio(union ccb *);
808 static void isp_target_start_ctio(ispsoftc_t *, union ccb *);
818 static void isp_target_mark_aborted(ispsoftc_t *, union ccb *);
1101 isp_enable_lun(ispsoftc_t *isp, union ccb *ccb) in isp_enable_lun() argument
1111 bus = XS_CHANNEL(ccb); in isp_enable_lun()
1112 target = ccb->ccb_h.target_id; in isp_enable_lun()
1113 lun = ccb->ccb_h.target_lun; in isp_enable_lun()
1115 ccb->ccb_h.status = CAM_TID_INVALID; in isp_enable_lun()
1116 xpt_done(ccb); in isp_enable_lun()
1120 ccb->ccb_h.status = CAM_LUN_INVALID; in isp_enable_lun()
1121 xpt_done(ccb); in isp_enable_lun()
1126 ccb->ccb_h.status = CAM_LUN_INVALID; in isp_enable_lun()
1127 xpt_done(ccb); in isp_enable_lun()
1131 xpt_print(ccb->ccb_h.path, "enabling lun 0x%x on channel %d\n", lun, bus); in isp_enable_lun()
1149 xpt_print(ccb->ccb_h.path, "firmware does not support target mode\n"); in isp_enable_lun()
1150 ccb->ccb_h.status = CAM_FUNC_NOTAVAIL; in isp_enable_lun()
1158 xpt_print(ccb->ccb_h.path, "firmware not SCCLUN capable\n"); in isp_enable_lun()
1159 ccb->ccb_h.status = CAM_FUNC_NOTAVAIL; in isp_enable_lun()
1175 ccb->ccb_h.status = CAM_LUN_ALRDY_ENA; in isp_enable_lun()
1178 ccb->ccb_h.status = create_lun_state(isp, bus, ccb->ccb_h.path, &tptr); in isp_enable_lun()
1179 if (ccb->ccb_h.status != CAM_REQ_CMP) { in isp_enable_lun()
1194 ccb->ccb_h.status = CAM_REQ_CMP_ERR; in isp_enable_lun()
1209 ccb->ccb_h.status = CAM_REQ_CMP; in isp_enable_lun()
1210 … xpt_print(ccb->ccb_h.path, "Target Mode Not Enabled Yet- Lun Enables Deferred\n"); in isp_enable_lun()
1217 ccb->ccb_h.status = isp_enable_deferred(isp, bus, lun); in isp_enable_lun()
1220 if (ccb->ccb_h.status != CAM_REQ_CMP && tptr) { in isp_enable_lun()
1232 xpt_done(ccb); in isp_enable_lun()
1280 isp_disable_lun(ispsoftc_t *isp, union ccb *ccb) in isp_disable_lun() argument
1288 bus = XS_CHANNEL(ccb); in isp_disable_lun()
1289 target = ccb->ccb_h.target_id; in isp_disable_lun()
1290 lun = ccb->ccb_h.target_lun; in isp_disable_lun()
1292 ccb->ccb_h.status = CAM_TID_INVALID; in isp_disable_lun()
1293 xpt_done(ccb); in isp_disable_lun()
1297 ccb->ccb_h.status = CAM_LUN_INVALID; in isp_disable_lun()
1298 xpt_done(ccb); in isp_disable_lun()
1303 ccb->ccb_h.status = CAM_LUN_INVALID; in isp_disable_lun()
1304 xpt_done(ccb); in isp_disable_lun()
1308 xpt_print(ccb->ccb_h.path, "enabling lun 0x%x on channel %d\n", lun, bus); in isp_disable_lun()
1324 ccb->ccb_h.status = CAM_PATH_INVALID; in isp_disable_lun()
1348 mtx_sleep(ccb, &isp->isp_lock, PRIBIO, "isp_disable_lun", 0); in isp_disable_lun()
1352 xpt_print(ccb->ccb_h.path, "now disabled for target mode\n"); in isp_disable_lun()
1363 xpt_done(ccb); in isp_disable_lun()
1443 isp_target_start_ctio(ispsoftc_t *isp, union ccb *ccb) in isp_target_start_ctio() argument
1448 struct ccb_scsiio *cso = &ccb->csio; in isp_target_start_ctio()
1456 if ((ccb->ccb_h.flags & CAM_SEND_STATUS) == 0) { in isp_target_start_ctio()
1457 … xpt_print(ccb->ccb_h.path, "a data transfer length of zero but no status to send is wrong\n"); in isp_target_start_ctio()
1458 ccb->ccb_h.status = CAM_REQ_INVALID; in isp_target_start_ctio()
1459 xpt_done(ccb); in isp_target_start_ctio()
1464 tptr = get_lun_statep(isp, XS_CHANNEL(ccb), XS_LUN(ccb)); in isp_target_start_ctio()
1466 tptr = get_lun_statep(isp, XS_CHANNEL(ccb), CAM_LUN_WILDCARD); in isp_target_start_ctio()
1468 …xpt_print(ccb->ccb_h.path, "%s: [0x%x] cannot find tstate pointer in %s\n", __func__, cso->tag_id); in isp_target_start_ctio()
1469 dump_tstates(isp, XS_CHANNEL(ccb)); in isp_target_start_ctio()
1470 ccb->ccb_h.status = CAM_DEV_NOT_THERE; in isp_target_start_ctio()
1471 xpt_done(ccb); in isp_target_start_ctio()
1478 …xpt_print(ccb->ccb_h.path, "%s: [0x%x] cannot find private data adjunct\n", __func__, cso->tag_id); in isp_target_start_ctio()
1480 ccb->ccb_h.status = CAM_REQ_CMP_ERR; in isp_target_start_ctio()
1481 xpt_done(ccb); in isp_target_start_ctio()
1485 …xpt_print(ccb->ccb_h.path, "%s: [0x%x] stopping sending a CTIO for a dead command\n", __func__, cs… in isp_target_start_ctio()
1486 ccb->ccb_h.status = CAM_REQ_ABORTED; in isp_target_start_ctio()
1487 xpt_done(ccb); in isp_target_start_ctio()
1494 if ((FCPARAM(isp, XS_CHANNEL(ccb))->role & ISP_ROLE_TARGET) == 0) { in isp_target_start_ctio()
1495 …xpt_print(ccb->ccb_h.path, "%s: [0x%x] stopping sending a CTIO because we're no longer in target m… in isp_target_start_ctio()
1496 ccb->ccb_h.status = CAM_PROVIDE_FAIL; in isp_target_start_ctio()
1497 xpt_done(ccb); in isp_target_start_ctio()
1504 if (isp_get_pcmd(isp, ccb)) { in isp_target_start_ctio()
1506 xpt_print(ccb->ccb_h.path, "out of PCMDs\n"); in isp_target_start_ctio()
1507 cam_freeze_devq(ccb->ccb_h.path); in isp_target_start_ctio()
1508 cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 250, 0); in isp_target_start_ctio()
1509 ccb->ccb_h.status = CAM_REQUEUE_REQ; in isp_target_start_ctio()
1510 xpt_done(ccb); in isp_target_start_ctio()
1515 xpt_print(ccb->ccb_h.path, rqo, __func__); in isp_target_start_ctio()
1516 cam_freeze_devq(ccb->ccb_h.path); in isp_target_start_ctio()
1517 cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 250, 0); in isp_target_start_ctio()
1518 ccb->ccb_h.status = CAM_REQUEUE_REQ; in isp_target_start_ctio()
1537 cto->ct_vpidx = ISP_GET_VPIDX(isp, XS_CHANNEL(ccb)); in isp_target_start_ctio()
1541 if (ccb->ccb_h.flags & CAM_SEND_STATUS) { in isp_target_start_ctio()
1546 if ((ccb->ccb_h.flags & CAM_SEND_SENSE) != 0) { in isp_target_start_ctio()
1597 cto->ct_lun = ccb->ccb_h.target_lun; in isp_target_start_ctio()
1612 if ((ccb->ccb_h.flags & CAM_SEND_SENSE) != 0) { in isp_target_start_ctio()
1621 …xpt_print(ccb->ccb_h.path, "CHECK CONDITION being sent without associated SENSE DATA for CDB=0x%x\… in isp_target_start_ctio()
1638 if ((ccb->ccb_h.flags & CAM_SEND_STATUS) != 0) { in isp_target_start_ctio()
1654 ccb->ccb_h.flags &= ~CAM_SEND_SENSE; in isp_target_start_ctio()
1666 …ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "%s: CTIO2[%x] flags %x xfrlen %u offset %u\n",… in isp_target_start_ctio()
1677 cto->ct_iid |= XS_CHANNEL(ccb) << 7; in isp_target_start_ctio()
1678 cto->ct_tgt = ccb->ccb_h.target_id; in isp_target_start_ctio()
1679 cto->ct_lun = ccb->ccb_h.target_lun; in isp_target_start_ctio()
1685 if (ccb->ccb_h.flags & CAM_DIS_DISCONNECT) { in isp_target_start_ctio()
1695 if (ccb->ccb_h.flags & CAM_SEND_STATUS) { in isp_target_start_ctio()
1699 …ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "%s: CTIO[%x] scsi status %x resid %d tag_id %x… in isp_target_start_ctio()
1702 ccb->ccb_h.flags &= ~CAM_SEND_SENSE; in isp_target_start_ctio()
1706 if (isp_allocate_xs_tgt(isp, ccb, &handle)) { in isp_target_start_ctio()
1707 xpt_print(ccb->ccb_h.path, "No XFLIST pointers for %s\n", __func__); in isp_target_start_ctio()
1708 ccb->ccb_h.status = CAM_REQUEUE_REQ; in isp_target_start_ctio()
1736 ccb->ccb_h.status |= CAM_SIM_QUEUED; in isp_target_start_ctio()
1741 ccb->ccb_h.status = CAM_REQUEUE_REQ; in isp_target_start_ctio()
1743 ccb->ccb_h.status = CAM_REQ_CMP_ERR; in isp_target_start_ctio()
1748 isp_free_pcmd(isp, ccb); in isp_target_start_ctio()
1749 xpt_done(ccb); in isp_target_start_ctio()
1755 union ccb *ccb = arg; in isp_refire_putback_atio() local
1756 ispsoftc_t *isp = XS_ISP(ccb); in isp_refire_putback_atio()
1758 isp_target_putback_atio(ccb); in isp_refire_putback_atio()
1763 isp_target_putback_atio(union ccb *ccb) in isp_target_putback_atio() argument
1769 isp = XS_ISP(ccb); in isp_target_putback_atio()
1773 xpt_print(ccb->ccb_h.path, rqo, __func__); in isp_target_putback_atio()
1774 (void) timeout(isp_refire_putback_atio, ccb, 10); in isp_target_putback_atio()
1778 cso = &ccb->csio; in isp_target_putback_atio()
1785 at->at_scclun = (uint16_t) ccb->ccb_h.target_lun; in isp_target_putback_atio()
1787 at->at_lun = (uint8_t) ccb->ccb_h.target_lun; in isp_target_putback_atio()
1799 at->at_iid |= XS_CHANNEL(ccb) << 7; in isp_target_putback_atio()
1809 isp_complete_ctio(ccb); in isp_target_putback_atio()
1813 isp_complete_ctio(union ccb *ccb) in isp_complete_ctio() argument
1815 if ((ccb->ccb_h.status & CAM_STATUS_MASK) == CAM_REQ_INPROG) { in isp_complete_ctio()
1816 ccb->ccb_h.status |= CAM_REQ_CMP; in isp_complete_ctio()
1818 ccb->ccb_h.status &= ~CAM_SIM_QUEUED; in isp_complete_ctio()
1819 isp_free_pcmd(XS_ISP(ccb), ccb); in isp_complete_ctio()
1820 xpt_done(ccb); in isp_complete_ctio()
2108 xpt_done((union ccb *)atiop); in isp_handle_platform_atio2()
2324 xpt_done((union ccb *)atiop); in isp_handle_platform_atio7()
2346 union ccb *ccb; in isp_handle_platform_ctio() local
2363 ccb = isp_find_xs_tgt(isp, handle); in isp_handle_platform_ctio()
2364 if (ccb == NULL) { in isp_handle_platform_ctio()
2369 bus = XS_CHANNEL(ccb); in isp_handle_platform_ctio()
2370 tptr = get_lun_statep(isp, bus, XS_LUN(ccb)); in isp_handle_platform_ctio()
2390 if (ok && sentstatus && (ccb->ccb_h.flags & CAM_SEND_SENSE)) { in isp_handle_platform_ctio()
2391 ccb->ccb_h.status |= CAM_SENT_SENSE; in isp_handle_platform_ctio()
2403 ccb->ccb_h.status |= CAM_UNREC_HBA_ERROR; in isp_handle_platform_ctio()
2405 ccb->ccb_h.status |= CAM_REQ_CMP_ERR; in isp_handle_platform_ctio()
2409 …ct->ct_rxid, ct->ct_nphdl, ct->ct_flags, (ccb->ccb_h.status & CAM_SENT_SENSE) != 0, resid, sentsta… in isp_handle_platform_ctio()
2422 if (ok && sentstatus && (ccb->ccb_h.flags & CAM_SEND_SENSE)) { in isp_handle_platform_ctio()
2423 ccb->ccb_h.status |= CAM_SENT_SENSE; in isp_handle_platform_ctio()
2435 ccb->ccb_h.status |= CAM_UNREC_HBA_ERROR; in isp_handle_platform_ctio()
2437 ccb->ccb_h.status |= CAM_REQ_CMP_ERR; in isp_handle_platform_ctio()
2440 …ct->ct_rxid, ct->ct_status, ct->ct_flags, (ccb->ccb_h.status & CAM_SENT_SENSE) != 0, resid, sentst… in isp_handle_platform_ctio()
2461 ccb->ccb_h.status |= CAM_UNREC_HBA_ERROR; in isp_handle_platform_ctio()
2463 ccb->ccb_h.status |= CAM_REQ_CMP_ERR; in isp_handle_platform_ctio()
2467 … ccb->csio.sense_len = min(sizeof (ccb->csio.sense_data), QLTM_SENSELEN); in isp_handle_platform_ctio()
2468 ISP_MEMCPY(&ccb->csio.sense_data, sp, ccb->csio.sense_len); in isp_handle_platform_ctio()
2469 ccb->ccb_h.status |= CAM_AUTOSNS_VALID; in isp_handle_platform_ctio()
2478 ccb->csio.resid += resid; in isp_handle_platform_ctio()
2500 isp_target_putback_atio(ccb); in isp_handle_platform_ctio()
2502 isp_complete_ctio(ccb); in isp_handle_platform_ctio()
2928 xpt_done((union ccb *)inot); in isp_handle_platform_target_tmf()
2948 isp_target_mark_aborted(ispsoftc_t *isp, union ccb *ccb) in isp_target_mark_aborted() argument
2953 tptr = get_lun_statep(isp, XS_CHANNEL(ccb), XS_LUN(ccb)); in isp_target_mark_aborted()
2955 tptr = get_lun_statep(isp, XS_CHANNEL(ccb), CAM_LUN_WILDCARD); in isp_target_mark_aborted()
2957 ccb->ccb_h.status = CAM_REQ_INVALID; in isp_target_mark_aborted()
2962 atp = isp_get_atpd(isp, tptr, ccb->atio.tag_id); in isp_target_mark_aborted()
2964 ccb->ccb_h.status = CAM_REQ_INVALID; in isp_target_mark_aborted()
2968 ccb->ccb_h.status = CAM_REQ_CMP; in isp_target_mark_aborted()
3051 static void isptarg_done(struct cam_periph *, union ccb *);
3068 isptargnotify(ispsoftc_t *isp, union ccb *iccb, struct ccb_immediate_notify *inot) in isptargnotify()
3087 isptargstart(struct cam_periph *periph, union ccb *iccb) in isptargstart()
3429 isptarg_done(struct cam_periph *periph, union ccb *ccb) in isptarg_done() argument
3439 status = ccb->ccb_h.status & CAM_STATUS_MASK; in isptarg_done()
3441 switch (ccb->ccb_h.func_code) { in isptarg_done()
3443 atio = (struct ccb_accept_tio *) ccb; in isptarg_done()
3444 …ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] ATIO seen in %s\n", atio->tag_id, __fun… in isptarg_done()
3445 TAILQ_INSERT_TAIL(&softc->work_queue, &ccb->ccb_h, periph_links.tqe); in isptarg_done()
3449 inot = (struct ccb_immediate_notify *) ccb; in isptarg_done()
3450 …ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] INOT for 0x%x seen in %s\n", inot->tag_… in isptarg_done()
3451 TAILQ_INSERT_TAIL(&softc->inot_queue, &ccb->ccb_h, periph_links.tqe); in isptarg_done()
3455 if ((ccb->ccb_h.status & CAM_DEV_QFRZN) != 0) { in isptarg_done()
3456 cam_release_devq(ccb->ccb_h.path, 0, 0, 0, 0); in isptarg_done()
3457 ccb->ccb_h.status &= ~CAM_DEV_QFRZN; in isptarg_done()
3459 atio = ccb->ccb_h.ccb_atio; in isptarg_done()
3460 if ((ccb->ccb_h.status & CAM_STATUS_MASK) != CAM_REQ_CMP) { in isptarg_done()
3461 cam_error_print(ccb, CAM_ESF_ALL, CAM_EPF_ALL); in isptarg_done()
3462 xpt_action((union ccb *)atio); in isptarg_done()
3463 } else if ((ccb->ccb_h.flags & CAM_SEND_STATUS) == 0) { in isptarg_done()
3464 …ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] MID CTIO seen in %s\n", atio->tag_id, _… in isptarg_done()
3468 …ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "[0x%x] FINAL CTIO seen in %s\n", atio->tag_id,… in isptarg_done()
3469 xpt_action((union ccb *)atio); in isptarg_done()
3471 xpt_release_ccb(ccb); in isptarg_done()
3474 if ((ccb->ccb_h.status & CAM_DEV_QFRZN) != 0) { in isptarg_done()
3475 cam_release_devq(ccb->ccb_h.path, 0, 0, 0, 0); in isptarg_done()
3476 ccb->ccb_h.status &= ~CAM_DEV_QFRZN; in isptarg_done()
3478 inot = ccb->ccb_h.ccb_inot; in isptarg_done()
3480 xpt_release_ccb(ccb); in isptarg_done()
3481 xpt_action((union ccb *)inot); in isptarg_done()
3484 xpt_print(ccb->ccb_h.path, "unexpected code 0x%x\n", ccb->ccb_h.func_code); in isptarg_done()
3504 union ccb *ccb = NULL; in isp_target_thread() local
3583 ccb = xpt_alloc_ccb(); in isp_target_thread()
3588 xpt_setup_ccb(&ccb->ccb_h, periph->path, 10); in isp_target_thread()
3589 ccb->ccb_h.func_code = XPT_SET_SIM_KNOB; in isp_target_thread()
3590 ccb->knob.xport_specific.fc.role = KNOB_ROLE_NONE; in isp_target_thread()
3592 ccb->knob.xport_specific.fc.valid = KNOB_VALID_ROLE | KNOB_VALID_ADDRESS; in isp_target_thread()
3593 …ccb->knob.xport_specific.fc.wwnn = 0x508004d000000000ULL | (device_get_unit(isp->isp_osinfo.dev) <… in isp_target_thread()
3594 …ccb->knob.xport_specific.fc.wwpn = 0x508004d000000001ULL | (device_get_unit(isp->isp_osinfo.dev) <… in isp_target_thread()
3596 ccb->knob.xport_specific.fc.valid = KNOB_VALID_ROLE; in isp_target_thread()
3600 xpt_action(ccb); in isp_target_thread()
3606 xpt_setup_ccb(&ccb->ccb_h, periph->path, 10); in isp_target_thread()
3607 ccb->ccb_h.func_code = XPT_EN_LUN; in isp_target_thread()
3608 ccb->cel.enable = 1; in isp_target_thread()
3610 xpt_action(ccb); in isp_target_thread()
3612 if (ccb->ccb_h.status != CAM_REQ_CMP) { in isp_target_thread()
3613 xpt_free_ccb(&ccb->ccb_h); in isp_target_thread()
3614 xpt_print(periph->path, "failed to enable lun (0x%x)\n", ccb->ccb_h.status); in isp_target_thread()
3618 xpt_setup_ccb(&ccb->ccb_h, wperiph->path, 10); in isp_target_thread()
3619 ccb->ccb_h.func_code = XPT_EN_LUN; in isp_target_thread()
3620 ccb->cel.enable = 1; in isp_target_thread()
3622 xpt_action(ccb); in isp_target_thread()
3624 if (ccb->ccb_h.status != CAM_REQ_CMP) { in isp_target_thread()
3625 xpt_free_ccb(&ccb->ccb_h); in isp_target_thread()
3626 xpt_print(wperiph->path, "failed to enable lun (0x%x)\n", ccb->ccb_h.status); in isp_target_thread()
3629 xpt_free_ccb(&ccb->ccb_h); in isp_target_thread()
3630 ccb = NULL; /* safety */ in isp_target_thread()
3637 ccb = xpt_alloc_ccb(); in isp_target_thread()
3638 xpt_setup_ccb(&ccb->ccb_h, wperiph->path, 1); in isp_target_thread()
3639 ccb->ccb_h.func_code = XPT_ACCEPT_TARGET_IO; in isp_target_thread()
3640 ccb->ccb_h.cbfcnp = isptarg_done; in isp_target_thread()
3642 xpt_action(ccb); in isp_target_thread()
3646 ccb = xpt_alloc_ccb(); in isp_target_thread()
3647 xpt_setup_ccb(&ccb->ccb_h, periph->path, 1); in isp_target_thread()
3648 ccb->ccb_h.func_code = XPT_ACCEPT_TARGET_IO; in isp_target_thread()
3649 ccb->ccb_h.cbfcnp = isptarg_done; in isp_target_thread()
3651 xpt_action(ccb); in isp_target_thread()
3655 ccb = xpt_alloc_ccb(); in isp_target_thread()
3656 xpt_setup_ccb(&ccb->ccb_h, wperiph->path, 1); in isp_target_thread()
3657 ccb->ccb_h.func_code = XPT_IMMEDIATE_NOTIFY; in isp_target_thread()
3658 ccb->ccb_h.cbfcnp = isptarg_done; in isp_target_thread()
3660 xpt_action(ccb); in isp_target_thread()
3664 ccb = xpt_alloc_ccb(); in isp_target_thread()
3665 xpt_setup_ccb(&ccb->ccb_h, periph->path, 1); in isp_target_thread()
3666 ccb->ccb_h.func_code = XPT_IMMEDIATE_NOTIFY; in isp_target_thread()
3667 ccb->ccb_h.cbfcnp = isptarg_done; in isp_target_thread()
3669 xpt_action(ccb); in isp_target_thread()
3676 ccb = xpt_alloc_ccb(); in isp_target_thread()
3677 xpt_setup_ccb(&ccb->ccb_h, periph->path, 10); in isp_target_thread()
3678 ccb->ccb_h.func_code = XPT_SET_SIM_KNOB; in isp_target_thread()
3679 ccb->knob.xport_specific.fc.valid = KNOB_VALID_ROLE; in isp_target_thread()
3680 ccb->knob.xport_specific.fc.role = KNOB_ROLE_TARGET; in isp_target_thread()
3682 xpt_action(ccb); in isp_target_thread()
3683 xpt_free_ccb(&ccb->ccb_h); in isp_target_thread()
3959 isp_bus_scan_cb(struct cam_periph *periph, union ccb *ccb) in isp_bus_scan_cb() argument
3961 if (ccb->ccb_h.status != CAM_REQ_CMP) in isp_bus_scan_cb()
3963 ccb->ccb_h.status); in isp_bus_scan_cb()
3965 xpt_free_path(ccb->ccb_h.path); in isp_bus_scan_cb()
3966 xpt_free_ccb(&ccb->ccb_h); in isp_bus_scan_cb()
3972 union ccb *ccb; in isp_make_here() local
3982 ccb = xpt_alloc_ccb(); in isp_make_here()
3983 if (ccb == NULL) { in isp_make_here()
3987 …if (xpt_create_path(&ccb->ccb_h.path, xpt_periph, cam_sim_path(fc->sim), tgt, CAM_LUN_WILDCARD) !=… in isp_make_here()
3989 xpt_free_ccb(&ccb->ccb_h); in isp_make_here()
3992 xpt_setup_ccb(&ccb->ccb_h, ccb->ccb_h.path, 5/*priority (low)*/); in isp_make_here()
3993 ccb->ccb_h.func_code = XPT_SCAN_BUS; in isp_make_here()
3994 ccb->ccb_h.cbfcnp = isp_bus_scan_cb; in isp_make_here()
3995 ccb->crcn.flags = CAM_FLAG_NONE; in isp_make_here()
3996 xpt_action(ccb); in isp_make_here()
4284 isp_action(struct cam_sim *sim, union ccb *ccb) in isp_action() argument
4290 CAM_DEBUG(ccb->ccb_h.path, CAM_DEBUG_TRACE, ("isp_action\n")); in isp_action()
4295 if (isp->isp_state != ISP_RUNSTATE && ccb->ccb_h.func_code == XPT_SCSI_IO) { in isp_action()
4301 ccb->ccb_h.status = CAM_SEL_TIMEOUT | CAM_DEV_QFRZN; in isp_action()
4302 xpt_freeze_devq(ccb->ccb_h.path, 1); in isp_action()
4303 xpt_done(ccb); in isp_action()
4308 isp_prt(isp, ISP_LOGDEBUG2, "isp_action code %x", ccb->ccb_h.func_code); in isp_action()
4309 ISP_PCMD(ccb) = NULL; in isp_action()
4311 switch (ccb->ccb_h.func_code) { in isp_action()
4313 bus = XS_CHANNEL(ccb); in isp_action()
4317 if ((ccb->ccb_h.flags & CAM_CDB_POINTER) != 0) { in isp_action()
4318 if ((ccb->ccb_h.flags & CAM_CDB_PHYS) != 0) { in isp_action()
4319 ccb->ccb_h.status = CAM_REQ_INVALID; in isp_action()
4320 xpt_done(ccb); in isp_action()
4325 if (ccb->ccb_h.target_id > (ISP_MAX_TARGETS(isp) - 1)) { in isp_action()
4326 xpt_print(ccb->ccb_h.path, "invalid target\n"); in isp_action()
4327 ccb->ccb_h.status = CAM_PATH_INVALID; in isp_action()
4328 } else if (ccb->ccb_h.target_lun > (ISP_MAX_LUNS(isp) - 1)) { in isp_action()
4329 xpt_print(ccb->ccb_h.path, "invalid lun\n"); in isp_action()
4330 ccb->ccb_h.status = CAM_PATH_INVALID; in isp_action()
4332 if (ccb->ccb_h.status == CAM_PATH_INVALID) { in isp_action()
4333 xpt_done(ccb); in isp_action()
4337 ccb->csio.scsi_status = SCSI_STATUS_OK; in isp_action()
4338 if (isp_get_pcmd(isp, ccb)) { in isp_action()
4340 cam_freeze_devq(ccb->ccb_h.path); in isp_action()
4341 … cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 250, 0); in isp_action()
4342 xpt_done(ccb); in isp_action()
4345 error = isp_start((XS_T *) ccb); in isp_action()
4348 XS_CMD_S_CLEAR(ccb); in isp_action()
4349 ccb->ccb_h.status |= CAM_SIM_QUEUED; in isp_action()
4350 if (ccb->ccb_h.timeout == CAM_TIME_INFINITY) { in isp_action()
4353 ts = ccb->ccb_h.timeout; in isp_action()
4358 XS_S_TACTIVE(ccb); in isp_action()
4359 callout_reset(&PISP_PCMD(ccb)->wdog, ts, isp_watchdog, ccb); in isp_action()
4372 …isp_prt(isp, ISP_LOGDEBUG0, "%d.%d loop not seen yet @ %lu", XS_TGT(ccb), XS_LUN(ccb), (unsigned l… in isp_action()
4374 …sp_prt(isp, ISP_LOGDEBUG0, "%d.%d downtime (%d) > lim (%d)", XS_TGT(ccb), XS_LUN(ccb), ISP_FC_PC(i… in isp_action()
4376 ccb->ccb_h.status = CAM_SEL_TIMEOUT|CAM_DEV_QFRZN; in isp_action()
4377 xpt_freeze_devq(ccb->ccb_h.path, 1); in isp_action()
4378 isp_free_pcmd(isp, ccb); in isp_action()
4379 xpt_done(ccb); in isp_action()
4382 … isp_prt(isp, ISP_LOGDEBUG0, "%d.%d retry later", XS_TGT(ccb), XS_LUN(ccb)); in isp_action()
4383 cam_freeze_devq(ccb->ccb_h.path); in isp_action()
4384 … cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 1000, 0); in isp_action()
4385 XS_SETERR(ccb, CAM_REQUEUE_REQ); in isp_action()
4386 isp_free_pcmd(isp, ccb); in isp_action()
4387 xpt_done(ccb); in isp_action()
4390 isp_free_pcmd(isp, ccb); in isp_action()
4391 cam_freeze_devq(ccb->ccb_h.path); in isp_action()
4392 … cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 100, 0); in isp_action()
4393 XS_SETERR(ccb, CAM_REQUEUE_REQ); in isp_action()
4394 xpt_done(ccb); in isp_action()
4397 isp_done((struct ccb_scsiio *) ccb); in isp_action()
4401 XS_SETERR(ccb, CAM_REQ_CMP_ERR); in isp_action()
4402 isp_free_pcmd(isp, ccb); in isp_action()
4403 xpt_done(ccb); in isp_action()
4409 if (ccb->cel.enable) { in isp_action()
4410 isp_enable_lun(isp, ccb); in isp_action()
4412 isp_disable_lun(isp, ccb); in isp_action()
4419 tstate_t *tptr = get_lun_statep(isp, XS_CHANNEL(ccb), ccb->ccb_h.target_lun); in isp_action()
4421 tptr = get_lun_statep(isp, XS_CHANNEL(ccb), CAM_LUN_WILDCARD); in isp_action()
4427 if (ccb->ccb_h.func_code == XPT_IMMEDIATE_NOTIFY) { in isp_action()
4429 tag = ccb->cin1.seq_id; in isp_action()
4431 tag = ccb->atio.tag_id; in isp_action()
4434 …ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "%s: [0x%x] no state pointer found for %s\n", __fu… in isp_action()
4435 dump_tstates(isp, XS_CHANNEL(ccb)); in isp_action()
4436 ccb->ccb_h.status = CAM_DEV_NOT_THERE; in isp_action()
4439 ccb->ccb_h.sim_priv.entries[0].field = 0; in isp_action()
4440 ccb->ccb_h.sim_priv.entries[1].ptr = isp; in isp_action()
4441 ccb->ccb_h.flags = 0; in isp_action()
4443 if (ccb->ccb_h.func_code == XPT_ACCEPT_TARGET_IO) { in isp_action()
4444 if (ccb->atio.tag_id) { in isp_action()
4445 … atio_private_data_t *atp = isp_get_atpd(isp, tptr, ccb->atio.tag_id); in isp_action()
4451 SLIST_INSERT_HEAD(&tptr->atios, &ccb->ccb_h, sim_links.sle); in isp_action()
4452 … ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE ATIO (tag id 0x%x), count now %d\n", in isp_action()
4453 ((struct ccb_accept_tio *)ccb)->tag_id, tptr->atio_count); in isp_action()
4454 } else if (ccb->ccb_h.func_code == XPT_IMMEDIATE_NOTIFY) { in isp_action()
4455 if (ccb->cin1.tag_id) { in isp_action()
4456 … inot_private_data_t *ntp = isp_find_ntpd(isp, tptr, ccb->cin1.tag_id, ccb->cin1.seq_id); in isp_action()
4462 SLIST_INSERT_HEAD(&tptr->inots, &ccb->ccb_h, sim_links.sle); in isp_action()
4463 … ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE INOT, (seq id 0x%x) count now %d\n", in isp_action()
4464 ((struct ccb_immediate_notify *)ccb)->seq_id, tptr->inot_count); in isp_action()
4465 } else if (ccb->ccb_h.func_code == XPT_IMMED_NOTIFY) { in isp_action()
4467 SLIST_INSERT_HEAD(&tptr->inots, &ccb->ccb_h, sim_links.sle); in isp_action()
4468 … ISP_PATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "Put FREE INOT, (seq id 0x%x) count now %d\n", in isp_action()
4469 ((struct ccb_immediate_notify *)ccb)->seq_id, tptr->inot_count); in isp_action()
4472 ccb->ccb_h.status = CAM_REQ_INPROG; in isp_action()
4476 ccb->ccb_h.status = CAM_REQ_CMP_ERR; in isp_action()
4490 …TH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "%s: [0x%x] NOTIFY ACKNOWLEDGE for 0x%x seen\n", __fu… in isp_action()
4491 ntp = get_ntp_from_tagdata(isp, ccb->cna2.tag_id, ccb->cna2.seq_id, &tptr); in isp_action()
4493 …ISP_PATH_PRT(isp, ISP_LOGWARN, ccb->ccb_h.path, "%s: [0x%x] XPT_NOTIFY_ACKNOWLEDGE of 0x%x cannot … in isp_action()
4494 ccb->cna2.tag_id, ccb->cna2.seq_id); in isp_action()
4495 ccb->ccb_h.status = CAM_DEV_NOT_THERE; in isp_action()
4496 xpt_done(ccb); in isp_action()
4501 cam_freeze_devq(ccb->ccb_h.path); in isp_action()
4502 … cam_release_devq(ccb->ccb_h.path, RELSIM_RELEASE_AFTER_TIMEOUT, 0, 1000, 0); in isp_action()
4503 XS_SETERR(ccb, CAM_REQUEUE_REQ); in isp_action()
4508 ccb->ccb_h.status = CAM_REQ_CMP; in isp_action()
4509 …ATH_PRT(isp, ISP_LOGTDEBUG0, ccb->ccb_h.path, "%s: [0x%x] calling xpt_done for tag 0x%x\n", __func… in isp_action()
4510 xpt_done(ccb); in isp_action()
4514 isp_target_start_ctio(isp, ccb); in isp_action()
4519 bus = cam_sim_bus(xpt_path_sim(ccb->ccb_h.path)); in isp_action()
4520 tgt = ccb->ccb_h.target_id; in isp_action()
4525 ccb->ccb_h.status = CAM_REQ_CMP_ERR; in isp_action()
4527 ccb->ccb_h.status = CAM_REQ_CMP; in isp_action()
4529 xpt_done(ccb); in isp_action()
4533 union ccb *accb = ccb->cab.abort_ccb; in isp_action()
4541 error = isp_control(isp, ISPCTL_ABORT_CMD, ccb); in isp_action()
4543 ccb->ccb_h.status = CAM_UA_ABORT; in isp_action()
4545 ccb->ccb_h.status = CAM_REQ_CMP; in isp_action()
4549 ccb->ccb_h.status = CAM_REQ_INVALID; in isp_action()
4560 cts = &ccb->cts; in isp_action()
4562 ccb->ccb_h.status = CAM_REQ_INVALID; in isp_action()
4563 xpt_done(ccb); in isp_action()
4575 ccb->ccb_h.status = CAM_REQ_CMP; in isp_action()
4576 xpt_done(ccb); in isp_action()
4626 ccb->ccb_h.status = CAM_REQ_CMP; in isp_action()
4627 xpt_done(ccb); in isp_action()
4630 cts = &ccb->cts; in isp_action()
4713 ccb->ccb_h.status = CAM_REQ_CMP; in isp_action()
4714 xpt_done(ccb); in isp_action()
4718 cam_calc_geometry(&ccb->ccg, 1); in isp_action()
4719 xpt_done(ccb); in isp_action()
4726 ccb->ccb_h.status = CAM_REQ_CMP_ERR; in isp_action()
4727 xpt_done(ccb); in isp_action()
4731 xpt_print(ccb->ccb_h.path, "reset bus on channel %d\n", bus); in isp_action()
4738 ccb->ccb_h.status = CAM_REQ_CMP; in isp_action()
4739 xpt_done(ccb); in isp_action()
4743 ccb->ccb_h.status = CAM_REQ_INVALID; in isp_action()
4744 xpt_done(ccb); in isp_action()
4750 struct ccb_sim_knob *kp = &ccb->knob; in isp_action()
4755 ccb->ccb_h.status = CAM_REQ_INVALID; in isp_action()
4756 xpt_done(ccb); in isp_action()
4768 ccb->ccb_h.status = CAM_REQ_CMP; in isp_action()
4806 ccb->ccb_h.status = CAM_REQ_INVALID; in isp_action()
4812 ccb->ccb_h.status = CAM_REQ_CMP_ERR; in isp_action()
4820 xpt_done(ccb); in isp_action()
4825 struct ccb_sim_knob *kp = &ccb->knob; in isp_action()
4850 ccb->ccb_h.status = CAM_REQ_CMP; in isp_action()
4852 ccb->ccb_h.status = CAM_REQ_INVALID; in isp_action()
4854 xpt_done(ccb); in isp_action()
4860 struct ccb_pathinq *cpi = &ccb->cpi; in isp_action()
4919 xpt_done(ccb); in isp_action()
4923 ccb->ccb_h.status = CAM_REQ_INVALID; in isp_action()
4924 xpt_done(ccb); in isp_action()
4968 isp_free_pcmd(isp, (union ccb *) sccb); in isp_done()
4969 xpt_done((union ccb *) sccb); in isp_done()