Lines Matching defs:xs

4314 isp_start(XS_T *xs)
4324 XS_INITERR(xs);
4325 isp = XS_ISP(xs);
4333 XS_SETERR(xs, HBA_BOTCH);
4344 if (XS_CDBLEN(xs) > (IS_FC(isp)? 16 : 44) || XS_CDBLEN(xs) == 0) {
4345 isp_prt(isp, ISP_LOGERR, "unsupported cdb length (%d, CDB[0]=0x%x)", XS_CDBLEN(xs), XS_CDBP(xs)[0] & 0xff);
4346 XS_SETERR(xs, HBA_BOTCH);
4354 target = XS_TGT(xs);
4356 fcparam *fcp = FCPARAM(isp, XS_CHANNEL(xs));
4359 isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d I am not an initiator", XS_CHANNEL(xs), target, XS_LUN(xs));
4360 XS_SETERR(xs, HBA_SELTIMEOUT);
4371 if (XS_TGT(xs) >= MAX_FC_TARG) {
4372 isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d target too big", XS_CHANNEL(xs), target, XS_LUN(xs));
4373 XS_SETERR(xs, HBA_SELTIMEOUT);
4377 hdlidx = fcp->isp_dev_map[XS_TGT(xs)] - 1;
4378 isp_prt(isp, ISP_LOGDEBUG2, "XS_TGT(xs)=%d- hdlidx value %d", XS_TGT(xs), hdlidx);
4380 XS_SETERR(xs, HBA_SELTIMEOUT);
4384 isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d target zombie", XS_CHANNEL(xs), target, XS_LUN(xs));
4388 isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d bad db port state 0x%x", XS_CHANNEL(xs), target, XS_LUN(xs), fcp->portdb[hdlidx].state);
4389 XS_SETERR(xs, HBA_SELTIMEOUT);
4395 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs));
4397 isp_prt(isp, ISP_LOGDEBUG1, "%d.%d.%d I am not an initiator", XS_CHANNEL(xs), target, XS_LUN(xs));
4398 XS_SETERR(xs, HBA_SELTIMEOUT);
4402 isp_spi_update(isp, XS_CHANNEL(xs));
4411 XS_SETERR(xs, HBA_BOTCH);
4414 XS_SETERR(xs, HBA_NOERROR);
4423 if (ISP_TST_SENDMARKER(isp, XS_CHANNEL(xs))) {
4434 m->mrk_target = (XS_CHANNEL(xs) << 7); /* bus # */
4439 ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 0);
4457 if (XS_CDBLEN(xs) > 12) {
4469 if (XS_TAG_P(xs)) {
4470 ttype = XS_TAG_TYPE(xs);
4472 if (XS_CDBP(xs)[0] == 0x3) {
4490 /* XS_SET_RESID(xs, 0); */
4497 if (XS_TAG_P(xs)) {
4498 ((ispreqt2_t *)reqp)->req_flags = XS_TAG_TYPE(xs);
4504 if (XS_CDBP(xs)[0] == 0x3) /* REQUEST SENSE */
4510 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs));
4511 if ((sdp->isp_devparam[target].actv_flags & DPARM_TQING) && XS_TAG_P(xs)) {
4512 reqp->req_flags = XS_TAG_TYPE(xs);
4521 cdblen = XS_CDBLEN(xs);
4526 XS_SETERR(xs, HBA_BOTCH);
4529 reqp->req_target = target | (XS_CHANNEL(xs) << 7);
4530 reqp->req_lun_trn = XS_LUN(xs);
4539 XS_SETERR(xs, HBA_BOTCH);
4543 lp = &FCPARAM(isp, XS_CHANNEL(xs))->portdb[hdlidx];
4547 t7->req_vpidx = ISP_GET_VPIDX(isp, XS_CHANNEL(xs));
4548 if (XS_LUN(xs) > 256) {
4549 t7->req_lun[0] = XS_LUN(xs) >> 8;
4552 t7->req_lun[1] = XS_LUN(xs);
4553 if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PRLI_WD3_RETRY)) {
4554 if (FCP_NEXT_CRN(isp, &t7->req_crn, xs)) {
4555 isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d cannot generate next CRN", XS_CHANNEL(xs), target, XS_LUN(xs));
4556 XS_SETERR(xs, HBA_BOTCH);
4568 XS_SETERR(xs, HBA_BOTCH);
4571 lp = &FCPARAM(isp, XS_CHANNEL(xs))->portdb[hdlidx];
4572 if (FCPARAM(isp, XS_CHANNEL(xs))->fctape_enabled && (lp->prli_word3 & PRLI_WD3_RETRY)) {
4573 if (FCP_NEXT_CRN(isp, &t2->req_crn, xs)) {
4574 isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d cannot generate next CRN", XS_CHANNEL(xs), target, XS_LUN(xs));
4575 XS_SETERR(xs, HBA_BOTCH);
4582 t2e->req_scclun = XS_LUN(xs);
4587 t2->req_scclun = XS_LUN(xs);
4591 t2->req_lun_trn = XS_LUN(xs);
4595 ISP_MEMCPY(cdbp, XS_CDBP(xs), cdblen);
4597 *tptr = XS_TIME(xs) / 1000;
4598 if (*tptr == 0 && XS_TIME(xs)) {
4605 if (isp_allocate_xs(isp, xs, &handle)) {
4607 XS_SETERR(xs, HBA_BOTCH);
4619 dmaresult = ISP_DMASETUP(isp, xs, reqp);
4628 isp_xs_prt(isp, xs, ISP_LOGDEBUG0, "START cmd cdb[0]=0x%x datalen %ld", XS_CDBP(xs)[0], (long) XS_XFRLEN(xs));
4641 XS_T *xs;
4763 xs = va_arg(ap, XS_T *);
4766 tgt = XS_TGT(xs);
4767 chan = XS_CHANNEL(xs);
4769 handle = isp_find_handle(isp, xs);
4837 mbs.param[6] = XS_LUN(xs);
4839 mbs.param[1] = tgt << 8 | XS_LUN(xs);
4842 mbs.param[1] = (chan << 15) | (tgt << 8) | XS_LUN(xs);
5014 XS_T *complist[MAX_REQUESTQ_COMPLETIONS], *xs;
5261 if (last_etype == RQSTYPE_RESPONSE && continuations_expected && ndone > 0 && (xs = complist[ndone-1]) != NULL) {
5263 XS_SENSE_APPEND(xs, scp->req_sense_data, sizeof (scp->req_sense_data));
5358 xs = isp_find_xs(isp, sp->req_handle);
5359 if (xs == NULL) {
5375 isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d bus was reset", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
5376 XS_SETERR(xs, HBA_BUSRESET);
5377 ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 1);
5380 isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d buddaboom", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs));
5381 XS_SETERR(xs, HBA_BOTCH);
5424 *XS_STSP(xs) = scsi_status & 0xff;
5446 isp_xs_prt(isp, xs, ISP_LOGWARN, "FCP RESPONSE, LENGTH %u: %s CDB0=0x%02x", rlen, ptr, XS_CDBP(xs)[0] & 0xff);
5448 XS_SETERR(xs, HBA_BOTCH);
5452 isp_parse_status_24xx(isp, (isp24xx_statusreq_t *)sp, xs, &resid);
5454 isp_parse_status(isp, (void *)sp, xs, &resid);
5456 if ((XS_NOERR(xs) || XS_ERR(xs) == HBA_NOERROR) && (*XS_STSP(xs) == SCSI_BUSY)) {
5457 XS_SETERR(xs, HBA_TGTBSY);
5460 XS_SET_RESID(xs, resid);
5467 int t = XS_TGT(xs);
5468 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs));
5474 XS_SET_RESID(xs, 0);
5476 XS_SET_RESID(xs, resid);
5478 XS_SET_RESID(xs, 0);
5497 XS_SAVE_SENSE(xs, snsp, totslen, slen);
5499 isp_prt(isp, ISP_LOGWARN, "CHECK CONDITION w/o sense data for CDB=0x%x", XS_CDBP(xs)[0] & 0xff);
5502 isp_prt(isp, ISP_LOGDEBUG2, "asked for %ld got raw resid %ld settled for %ld", (long) XS_XFRLEN(xs), resid, (long) XS_GET_RESID(xs));
5513 *XS_STSP(xs) = SCSI_QFULL;
5514 XS_SETERR(xs, HBA_NOERROR);
5515 } else if (XS_NOERR(xs)) {
5516 isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d badness at %s:%u", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs), __func__, __LINE__);
5517 XS_SETERR(xs, HBA_BOTCH);
5519 XS_SET_RESID(xs, XS_XFRLEN(xs));
5523 if (XS_NOERR(xs)) {
5524 XS_SETERR(xs, HBA_BOTCH);
5533 if (XS_XFRLEN(xs)) {
5534 ISP_DMAFREE(isp, xs, sp->req_handle);
5541 complist[ndone++] = xs; /* defer completion call until later */
5571 xs = complist[i];
5572 if (xs) {
5574 ((isp->isp_dblev & (ISP_LOGDEBUG0|ISP_LOG_CWARN) && ((!XS_NOERR(xs)) || (*XS_STSP(xs) != SCSI_GOOD))))) {
5575 isp_prt_endcmd(isp, xs);
5578 isp_done(xs);
5588 isp_prt_endcmd(ispsoftc_t *isp, XS_T *xs)
5593 lim = XS_CDBLEN(xs) > 16? 16 : XS_CDBLEN(xs);
5594 ISP_SNPRINTF(cdbstr, sizeof (cdbstr), "0x%02x ", XS_CDBP(xs)[0]);
5596 ISP_SNPRINTF(cdbstr, sizeof (cdbstr), "%s0x%02x ", cdbstr, XS_CDBP(xs)[i]);
5598 if (XS_SENSE_VALID(xs)) {
5599 isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=%s SenseLength=%u/%u KEY/ASC/ASCQ=0x%02x/0x%02x/0x%02x",
5600 XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, XS_CUR_SNSLEN(xs), XS_TOT_SNSLEN(xs), XS_SNSKEY(xs), XS_SNSASC(xs), XS_SNSASCQ(xs));
5602 isp_xs_prt(isp, xs, ISP_LOGALL, "FIN dl%d resid %ld CDB=%s STS 0x%x XS_ERR=0x%x", XS_XFRLEN(xs), (long) XS_GET_RESID(xs), cdbstr, *XS_STSP(xs), XS_ERR(xs));
5916 XS_T *xs;
5923 xs = hdp->cmd;
5924 if (XS_CHANNEL(xs) != chan) {
5928 isp_prt(isp, ISP_LOG_WARN1, "%d.%d.%d bus reset set at %s:%u", XS_CHANNEL(xs), XS_TGT(xs), XS_LUN(xs), __func__, __LINE__);
5929 XS_SETERR(xs, HBA_BUSRESET);
6212 isp_parse_status(ispsoftc_t *isp, ispstatusreq_t *sp, XS_T *xs, long *rp)
6216 if (XS_NOERR(xs)) {
6217 XS_SETERR(xs, HBA_NOERROR);
6223 isp_xs_prt(isp, xs, ISP_LOG_WARN1, "Selection Timeout @ %s:%d", __func__, __LINE__);
6224 if (XS_NOERR(xs)) {
6225 XS_SETERR(xs, HBA_SELTIMEOUT);
6226 *rp = XS_XFRLEN(xs);
6230 isp_xs_prt(isp, xs, ISP_LOGERR, "Command Incomplete, state 0x%x", sp->req_state_flags);
6234 isp_xs_prt(isp, xs, ISP_LOGERR, "DMA Error");
6235 *rp = XS_XFRLEN(xs);
6288 isp_xs_prt(isp, xs, ISP_LOGERR, "Transport Error: %s", buf);
6289 *rp = XS_XFRLEN(xs);
6295 isp_xs_prt(isp, xs, ISP_LOGWARN, "Bus Reset destroyed command");
6299 if (XS_NOERR(xs)) {
6300 XS_SETERR(xs, HBA_BUSRESET);
6302 *rp = XS_XFRLEN(xs);
6306 isp_xs_prt(isp, xs, ISP_LOGERR, "Command Aborted");
6307 ISP_SET_SENDMARKER(isp, XS_CHANNEL(xs), 1);
6308 if (XS_NOERR(xs)) {
6309 XS_SETERR(xs, HBA_ABORTED);
6314 isp_xs_prt(isp, xs, ISP_LOGWARN, "Command timed out");
6318 if (XS_NOERR(xs)) {
6319 XS_SETERR(xs, HBA_CMDTIMEOUT);
6324 XS_SET_RESID(xs, sp->req_resid);
6325 isp_xs_prt(isp, xs, ISP_LOGERR, "data overrun (%ld)", (long) XS_GET_RESID(xs));
6326 if (XS_NOERR(xs)) {
6327 XS_SETERR(xs, HBA_DATAOVR);
6332 isp_xs_prt(isp, xs, ISP_LOGERR, "command overrun");
6336 isp_xs_prt(isp, xs, ISP_LOGERR, "status overrun");
6340 isp_xs_prt(isp, xs, ISP_LOGERR, "msg not COMMAND COMPLETE after status");
6344 isp_xs_prt(isp, xs, ISP_LOGERR, "No MESSAGE OUT phase after selection");
6348 isp_xs_prt(isp, xs, ISP_LOGERR, "EXTENDED IDENTIFY failed");
6352 isp_xs_prt(isp, xs, ISP_LOGERR, "INITIATOR DETECTED ERROR rejected");
6356 isp_xs_prt(isp, xs, ISP_LOGERR, "ABORT OPERATION rejected");
6360 isp_xs_prt(isp, xs, ISP_LOGERR, "MESSAGE REJECT rejected");
6364 isp_xs_prt(isp, xs, ISP_LOGERR, "NOP rejected");
6368 isp_xs_prt(isp, xs, ISP_LOGERR, "MESSAGE PARITY ERROR rejected");
6372 isp_xs_prt(isp, xs, ISP_LOGWARN, "BUS DEVICE RESET rejected");
6376 isp_xs_prt(isp, xs, ISP_LOGERR, "IDENTIFY rejected");
6380 isp_xs_prt(isp, xs, ISP_LOGERR, "Unexpected Bus Free");
6387 if (!ru_marked || sp->req_resid > XS_XFRLEN(xs)) {
6388 isp_xs_prt(isp, xs, ISP_LOGWARN, bun, XS_XFRLEN(xs), sp->req_resid, (ru_marked)? "marked" : "not marked");
6389 if (XS_NOERR(xs)) {
6390 XS_SETERR(xs, HBA_BOTCH);
6395 XS_SET_RESID(xs, sp->req_resid);
6396 if (XS_NOERR(xs)) {
6397 XS_SETERR(xs, HBA_NOERROR);
6403 isp_xs_prt(isp, xs, ISP_LOGERR, "HBA attempted queued transaction with disconnect not set");
6407 isp_xs_prt(isp, xs, ISP_LOGERR, "HBA attempted queued transaction to target routine %d", XS_LUN(xs));
6411 isp_xs_prt(isp, xs, ISP_LOGERR, "HBA attempted queued cmd when queueing disabled");
6419 isp_xs_prt(isp, xs, ISP_LOG_WARN1, "internal queues full status 0x%x", *XS_STSP(xs));
6429 if (*XS_STSP(xs) != SCSI_GOOD && XS_NOERR(xs)) {
6430 XS_SETERR(xs, HBA_NOERROR);
6435 *XS_STSP(xs) = SCSI_QFULL;
6436 XS_SETERR(xs, HBA_NOERROR);
6440 isp_xs_prt(isp, xs, ISP_LOGERR, "SCSI phase skipped");
6444 isp_xs_prt(isp, xs, ISP_LOGERR, "Auto Request Sense Failed");
6445 if (XS_NOERR(xs)) {
6446 XS_SETERR(xs, HBA_ARQFAIL);
6451 isp_xs_prt(isp, xs, ISP_LOGERR, "Wide Negotiation Failed");
6453 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs));
6454 sdp->isp_devparam[XS_TGT(xs)].goal_flags &= ~DPARM_WIDE;
6455 sdp->isp_devparam[XS_TGT(xs)].dev_update = 1;
6458 if (XS_NOERR(xs)) {
6459 XS_SETERR(xs, HBA_NOERROR);
6464 isp_xs_prt(isp, xs, ISP_LOGERR, "SDTR Message Failed");
6466 sdparam *sdp = SDPARAM(isp, XS_CHANNEL(xs));
6467 sdp += XS_CHANNEL(xs);
6468 sdp->isp_devparam[XS_TGT(xs)].goal_flags &= ~DPARM_SYNC;
6469 sdp->isp_devparam[XS_TGT(xs)].dev_update = 1;
6475 isp_xs_prt(isp, xs, ISP_LOGERR, "Bad LVD condition");
6496 isp_prt(isp, ISP_LOGINFO, "port %s for target %d", reason, XS_TGT(xs));
6512 if (XS_NOERR(xs)) {
6513 XS_SETERR(xs, HBA_SELTIMEOUT);
6518 isp_prt(isp, ISP_LOGWARN, "port changed for target %d", XS_TGT(xs));
6519 if (XS_NOERR(xs)) {
6520 XS_SETERR(xs, HBA_SELTIMEOUT);
6525 isp_prt(isp, ISP_LOGWARN, "port busy for target %d", XS_TGT(xs));
6526 if (XS_NOERR(xs)) {
6527 XS_SETERR(xs, HBA_TGTBSY);
6535 if (XS_NOERR(xs)) {
6536 XS_SETERR(xs, HBA_BOTCH);
6541 isp_parse_status_24xx(ispsoftc_t *isp, isp24xx_statusreq_t *sp, XS_T *xs, long *rp)
6544 int chan = XS_CHANNEL(xs);
6548 if (XS_NOERR(xs)) {
6549 XS_SETERR(xs, HBA_NOERROR);
6554 isp_xs_prt(isp, xs, ISP_LOGERR, "DMA error");
6558 isp_xs_prt(isp, xs, ISP_LOGERR, "Transport Error");
6562 isp_xs_prt(isp, xs, ISP_LOGWARN, "reset destroyed command");
6564 if (XS_NOERR(xs)) {
6565 XS_SETERR(xs, HBA_BUSRESET);
6570 isp_xs_prt(isp, xs, ISP_LOGERR, "Command Aborted");
6572 if (XS_NOERR(xs)) {
6573 XS_SETERR(xs, HBA_ABORTED);
6578 isp_xs_prt(isp, xs, ISP_LOGWARN, "Command Timed Out");
6579 if (XS_NOERR(xs)) {
6580 XS_SETERR(xs, HBA_CMDTIMEOUT);
6585 XS_SET_RESID(xs, sp->req_resid);
6586 isp_xs_prt(isp, xs, ISP_LOGERR, "Data Overrun");
6587 if (XS_NOERR(xs)) {
6588 XS_SETERR(xs, HBA_DATAOVR);
6593 isp_prt(isp, ISP_LOGERR, "Chan %d data reassembly error for target %d", chan, XS_TGT(xs));
6594 if (XS_NOERR(xs)) {
6595 XS_SETERR(xs, HBA_ABORTED);
6597 *rp = XS_XFRLEN(xs);
6601 isp_prt(isp, ISP_LOGERR, "Chan %d target %d sent ABTS", chan, XS_TGT(xs));
6602 if (XS_NOERR(xs)) {
6603 XS_SETERR(xs, HBA_ABORTED);
6615 (sp->req_resid > XS_XFRLEN(xs))) {
6616 isp_xs_prt(isp, xs, ISP_LOGWARN, bun, XS_XFRLEN(xs), sp->req_resid, (ru_marked)? "marked" : "not marked");
6617 if (XS_NOERR(xs)) {
6618 XS_SETERR(xs, HBA_BOTCH);
6622 XS_SET_RESID(xs, sp->req_resid);
6623 isp_xs_prt(isp, xs, ISP_LOG_WARN1, "Data Underrun (%d) for command 0x%x", sp->req_resid, XS_CDBP(xs)[0] & 0xff);
6624 if (XS_NOERR(xs)) {
6625 XS_SETERR(xs, HBA_NOERROR);
6648 chan, reason, XS_TGT(xs));
6653 if (XS_NOERR(xs)) {
6654 XS_SETERR(xs, HBA_SELTIMEOUT);
6659 isp_prt(isp, ISP_LOGWARN, "port changed for target %d chan %d", XS_TGT(xs), chan);
6660 if (XS_NOERR(xs)) {
6661 XS_SETERR(xs, HBA_SELTIMEOUT);
6667 isp_prt(isp, ISP_LOGWARN, "f/w resource unavailable for target %d chan %d", XS_TGT(xs), chan);
6668 if (XS_NOERR(xs)) {
6669 *XS_STSP(xs) = SCSI_BUSY;
6670 XS_SETERR(xs, HBA_TGTBSY);
6675 isp_prt(isp, ISP_LOGWARN, "command for target %d overlapped task management for chan %d", XS_TGT(xs), chan);
6676 if (XS_NOERR(xs)) {
6677 *XS_STSP(xs) = SCSI_BUSY;
6678 XS_SETERR(xs, HBA_TGTBSY);
6686 if (XS_NOERR(xs)) {
6687 XS_SETERR(xs, HBA_BOTCH);
6694 XS_T *xs;
6699 xs = isp_find_xs(isp, fph);
6700 if (xs == NULL) {
6712 XS_SET_RESID(xs, 0);
6713 *XS_STSP(xs) = SCSI_GOOD;
6714 if (XS_XFRLEN(xs)) {
6715 ISP_DMAFREE(isp, xs, fph);
6721 isp_done(xs);