Lines Matching defs:ssc
293 ses_softc_t *ssc;
311 if ((ssc = ddi_get_soft_state(estate, inst)) == NULL) {
314 SES_LOG(ssc, SES_CE_DEBUG1, "ses_attach: DDI_ATTACH ses%d",
316 ssc->ses_suspended = 0;
326 is_enc_dev(ses_softc_t *ssc, struct scsi_inquiry *inqp, int iqlen, enctyp *ep)
333 SES_LOG(ssc, SES_CE_DEBUG3, "SEN device found");
341 SES_LOG(ssc, SES_CE_DEBUG3, "SES device found");
344 SES_LOG(ssc, SES_CE_DEBUG3, "Pre-SCSI3 SES device");
354 SES_LOG(ssc, SES_CE_DEBUG3, "Passthru SES device");
359 SES_LOG(ssc, CE_NOTE,
365 SES_LOG(ssc, SES_CE_DEBUG3, "SAF-TE device found");
384 ses_softc_t *ssc;
436 ssc = ddi_get_soft_state(estate, inst);
437 if (ssc == NULL) {
442 devp->sd_private = (opaque_t)ssc;
443 ssc->ses_devp = devp;
448 SES_LOG(ssc, CE_NOTE, "minor node creation failed");
454 ssc->ses_type = etyp;
455 ssc->ses_vec = vecs[etyp];
459 ssc->ses_rqbp = scsi_alloc_consistent_buf(SES_ROUTE(ssc),
461 if (ssc->ses_rqbp != NULL) {
462 ssc->ses_rqpkt = scsi_init_pkt(SES_ROUTE(ssc), NULL,
463 ssc->ses_rqbp, CDB_GROUP0, 1, 0, PKT_CONSISTENT,
466 if (ssc->ses_rqbp == NULL || ssc->ses_rqpkt == NULL) {
468 SES_LOG(ssc, CE_NOTE, "scsi_init_pkt of rqbuf failed");
469 if (ssc->ses_rqbp != NULL) {
470 scsi_free_consistent_buf(ssc->ses_rqbp);
471 ssc->ses_rqbp = NULL;
477 ssc->ses_rqpkt->pkt_private = (opaque_t)ssc;
478 ssc->ses_rqpkt->pkt_address = *(SES_ROUTE(ssc));
479 ssc->ses_rqpkt->pkt_comp = ses_callback;
480 ssc->ses_rqpkt->pkt_time = ses_io_time;
481 ssc->ses_rqpkt->pkt_flags = FLAG_NOPARITY|FLAG_NODISCON|FLAG_SENSING;
482 ssc->ses_rqpkt->pkt_cdbp[0] = SCMD_REQUEST_SENSE;
483 ssc->ses_rqpkt->pkt_cdbp[1] = 0;
484 ssc->ses_rqpkt->pkt_cdbp[2] = 0;
485 ssc->ses_rqpkt->pkt_cdbp[3] = 0;
486 ssc->ses_rqpkt->pkt_cdbp[4] = MAX_SENSE_LENGTH;
487 ssc->ses_rqpkt->pkt_cdbp[5] = 0;
489 switch (scsi_ifgetcap(SES_ROUTE(ssc), "auto-rqsense", 1)) {
492 ssc->ses_arq = 1;
496 ssc->ses_arq = ((scsi_ifsetcap(SES_ROUTE(ssc),
501 ssc->ses_arq = 0;
505 ssc->ses_sbufp = getrbuf(KM_SLEEP);
506 cv_init(&ssc->ses_sbufcv, NULL, CV_DRIVER, NULL);
511 if (scsi_ifgetcap(SES_ROUTE(ssc), "wide-xfer", 1) != -1) {
515 (void) scsi_ifsetcap(SES_ROUTE(ssc), "wide-xfer", wd, 1);
519 * Now do ssc init of enclosure specifics.
523 if ((*ssc->ses_vec.softc_init)(ssc, 1)) {
524 SES_LOG(ssc, SES_CE_DEBUG3, "failed softc init");
525 (void) (*ssc->ses_vec.softc_init)(ssc, 0);
527 scsi_destroy_pkt(ssc->ses_rqpkt);
528 scsi_free_consistent_buf(ssc->ses_rqbp);
529 if (ssc->ses_sbufp) {
530 freerbuf(ssc->ses_sbufp);
532 cv_destroy(&ssc->ses_sbufcv);
561 ses_softc_t *ssc;
567 ssc = ddi_get_soft_state(estate, inst);
568 if (ssc == NULL) {
573 if (ISOPEN(ssc)) {
582 if (ssc->ses_vec.softc_init)
583 (void) (*ssc->ses_vec.softc_init)(ssc, 0);
589 (void) scsi_ifsetcap(SES_ROUTE(ssc), "auto-rqsense", 1, 0);
590 scsi_destroy_pkt(ssc->ses_rqpkt);
591 scsi_free_consistent_buf(ssc->ses_rqbp);
592 freerbuf(ssc->ses_sbufp);
593 cv_destroy(&ssc->ses_sbufcv);
602 if ((ssc = ddi_get_soft_state(estate, inst)) == NULL) {
613 if (ssc->ses_sbufbsy) {
617 ssc->ses_suspended = 1;
632 ses_softc_t *ssc;
639 if ((ssc = ddi_get_soft_state(estate, inst)) == NULL) {
642 *result = (void *) ssc->ses_devp->sd_dev;
666 ses_softc_t *ssc;
668 if ((ssc = ddi_get_soft_state(estate, getminor(*dev_p))) == NULL) {
676 if (ssc->ses_suspended &&
677 ddi_dev_is_needed(SES_DEVINFO(ssc), 0, 1) != DDI_SUCCESS) {
683 ssc->ses_lyropen++;
685 ssc->ses_oflag = 1;
687 ssc->ses_present = (ssc->ses_present)? ssc->ses_present: SES_OPENING;
696 ses_softc_t *ssc;
697 if ((ssc = ddi_get_soft_state(estate, getminor(dev))) == NULL) {
701 if (ssc->ses_suspended) {
702 (void) ddi_dev_is_needed(SES_DEVINFO(ssc), 0, 1);
707 ssc->ses_lyropen -= (ssc->ses_lyropen)? 1: 0;
709 ssc->ses_oflag = 0;
719 ses_softc_t *ssc;
726 if ((ssc = ddi_get_soft_state(estate, getminor(dev))) == NULL ||
727 ssc->ses_present == SES_CLOSED) {
734 if (ddi_copyout(&ssc->ses_nobjects, (void *)arg,
744 for (i = 0; i != ssc->ses_nobjects; i++) {
746 k.subencid = ssc->ses_objmap[i].subenclosure;
747 k.elem_type = ssc->ses_objmap[i].enctype;
762 rv = (*ssc->ses_vec.init_enc)(ssc);
766 if ((ssc->ses_encstat & ENCI_SVALID) == 0) {
767 rv = (*ssc->ses_vec.get_encstat)(ssc, KM_SLEEP);
772 t = ssc->ses_encstat & 0xf;
779 ssc->ses_encstat &= ~ENCI_SVALID;
791 rv = (*ssc->ses_vec.set_encstat)(ssc, t, KM_SLEEP);
793 ssc->ses_encstat &= ~ENCI_SVALID;
802 if (x.obj_id >= ssc->ses_nobjects) {
806 if ((rv = (*ssc->ses_vec.get_objstat)(ssc, &x, KM_SLEEP)) != 0)
815 ssc->ses_objmap[x.obj_id].svalid = 0;
829 if (x.obj_id >= ssc->ses_nobjects) {
833 rv = (*ssc->ses_vec.set_objstat)(ssc, &x, KM_SLEEP);
836 ssc->ses_objmap[x.obj_id].svalid = 0;
846 rv = ses_uscsi_cmd(ssc, (Uscmd *)arg, flg);
863 ses_runcmd(ses_softc_t *ssc, Uscmd *lp)
868 e = ses_uscsi_cmd(ssc, lp, FKIOCTL);
876 SES_LOG(ssc, CE_NOTE, "runcmd<cdb[0]="
883 SES_LOG(ssc, CE_NOTE, "runcmd<cdb[0]="
897 ses_uscsi_cmd(ses_softc_t *ssc, Uscmd *Uc, int Uf)
908 while (ssc->ses_sbufbsy) {
909 cv_wait(&ssc->ses_sbufcv, &ssc->ses_devp->sd_mutex);
911 ssc->ses_sbufbsy = 1;
918 if (ssc->ses_suspended &&
919 ddi_dev_is_needed(SES_DEVINFO(ssc), 0, 1) != DDI_SUCCESS) {
921 ssc->ses_sbufbsy = 0;
927 SES_ROUTE(ssc), &uscmd);
929 SES_LOG(ssc, SES_CE_DEBUG1, "ses_uscsi_cmd: "
932 ssc->ses_sbufbsy = 0;
933 cv_signal(&ssc->ses_sbufcv);
935 SES_LOG(ssc, SES_CE_DEBUG2, efl, __LINE__);
940 * Copy the uscsi command related infos to ssc for use in ses_start()
943 bcopy(uscmd, &ssc->ses_uscsicmd, sizeof (Uscmd));
945 bcopy(uscmd->uscsi_cdb, &ssc->ses_srqcdb,
948 ssc->ses_uscsicmd.uscsi_status = 0;
950 bp = ssc->ses_sbufp;
953 bp->b_back = (struct buf *)ssc;
958 SES_LOG(ssc, SES_CE_DEBUG7,
967 SES_LOG(ssc, SES_CE_DEBUG7,
987 * ses_callback() may set values for ssc->ses_uscsicmd or
988 * ssc->ses_srqsbuf, so copy them back to uscmd.
991 bcopy(&ssc->ses_srqsbuf, uscmd->uscsi_rqbuf,
993 uscmd->uscsi_rqresid = ssc->ses_uscsicmd.uscsi_rqresid;
995 uscmd->uscsi_status = ssc->ses_uscsicmd.uscsi_status;
999 ssc->ses_sbufbsy = 0;
1000 cv_signal(&ssc->ses_sbufcv);
1014 ses_softc_t *ssc = (ses_softc_t *)bp->b_back;
1016 SES_LOG(ssc, SES_CE_DEBUG9, "ses_start");
1042 ssc->ses_retries = ses_retry_count;
1049 SES_LOG(ssc, SES_CE_DEBUG9, "ses_start -> scsi_transport");
1056 SES_LOG(ssc, SES_CE_DEBUG2,
1063 SES_LOG(ssc, SES_CE_DEBUG2, "TRANSPORT ERROR\n");
1077 ses_softc_t *ssc = (ses_softc_t *)bp->b_back;
1078 Uscmd *scmd = &ssc->ses_uscsicmd;
1083 if ((scmd->uscsi_flags & USCSI_RQENABLE) && ssc->ses_arq) {
1095 pkt = scsi_init_pkt(SES_ROUTE(ssc), NULL, bp,
1097 func, (caddr_t)ssc);
1099 pkt = scsi_init_pkt(SES_ROUTE(ssc), NULL, NULL,
1101 func, (caddr_t)ssc);
1113 pkt->pkt_private = (opaque_t)ssc;
1124 ses_softc_t *ssc = (ses_softc_t *)pkt->pkt_private;
1125 struct buf *bp = ssc->ses_sbufp;
1126 SES_LOG(ssc, SES_CE_DEBUG9, "ses_restart");
1128 ssc->ses_restart_id = NULL;
1132 SES_LOG(ssc, SES_CE_DEBUG9,
1133 "RESTART %d ok", ssc->ses_retries);
1137 SES_LOG(ssc, SES_CE_DEBUG1,
1138 "RESTART %d TRANSPORT BUSY\n", ssc->ses_retries);
1139 if (ssc->ses_retries > SES_NO_RETRY) {
1140 ssc->ses_retries -= SES_BUSY_RETRY;
1150 SES_LOG(ssc, SES_CE_DEBUG1,
1151 "RESTART %d TRANSPORT FAILED\n", ssc->ses_retries);
1168 ses_softc_t *ssc = (ses_softc_t *)pkt->pkt_private;
1174 bp = ssc->ses_sbufp;
1175 scmd = &ssc->ses_uscsicmd;
1176 /* SES_LOG(ssc, SES_CE_DEBUG9, "ses_callback"); */
1200 ssc->ses_retries = SES_NO_RETRY;
1227 if (ssc->ses_retries <= SES_NO_RETRY &&
1229 ssc->ses_present = SES_CLOSED;
1232 if (ssc->ses_present < SES_OPEN) {
1233 ssc->ses_retries = SES_NO_RETRY;
1235 /* SES_CMD_RETRY4(ssc->ses_retries); */
1247 SES_LOG(ssc, SES_CE_DEBUG6,
1253 ssc->ses_retries = SES_NO_RETRY;
1258 ssc->ses_retries = SES_NO_RETRY;
1266 if (pkt == ssc->ses_rqpkt) {
1267 SES_LOG(ssc, CE_WARN, fail_msg,
1270 (ssc->ses_retries > 0)?
1275 SES_LOG(ssc, CE_WARN, fail_msg,
1277 (ssc->ses_retries > 0)?
1282 if (ssc->ses_retries > SES_NO_RETRY) {
1283 ssc->ses_present = SES_OPEN;
1291 ssc->ses_present = SES_OPEN;
1301 /* SES_LOG(ssc, SES_CE_DEBUG1, "retrying cmd now"); */
1302 if (ssc->ses_retries > SES_NO_RETRY) {
1303 ssc->ses_retries -= SES_CMD_RETRY;
1305 if (ssc->ses_arq)
1319 SES_LOG(ssc, SES_CE_DEBUG1, "retrying cmd");
1320 if (ssc->ses_retries > SES_NO_RETRY) {
1321 ssc->ses_retries -=
1324 if (ssc->ses_arq)
1336 SES_LOG(ssc, SES_CE_DEBUG1, "retrying sense");
1337 if (ssc->ses_retries > SES_NO_RETRY) {
1338 ssc->ses_retries -= SES_SENSE_RETRY;
1340 bzero(&ssc->ses_srqsbuf, MAX_SENSE_LENGTH);
1342 if (scsi_transport(ssc->ses_rqpkt) != TRAN_ACCEPT) {
1344 ssc->ses_rqpkt);
1351 SES_LOG(ssc, SES_CE_DEBUG4, "cmd done");
1355 SES_LOG(ssc, SES_CE_DEBUG6,
1363 SES_LOG(ssc, SES_CE_DEBUG1, "SES: ERROR %d\n", err);
1379 ses_softc_t *ssc = (ses_softc_t *)pkt->pkt_private;
1381 (struct scsi_extended_sense *)&ssc->ses_srqsbuf;
1382 Uscmd *scmd = &ssc->ses_uscsicmd;
1399 struct buf *sbp = ssc->ses_rqbp;
1414 } else if (ssc->ses_arq && pkt->pkt_state & STATE_ARQ_DONE) {
1464 SES_LOG(ssc, SES_CE_DEBUG3, "status decode: check");
1470 SES_LOG(ssc, SES_CE_DEBUG1, "status decode: busy");
1471 /* SES_CMD_RETRY2(ssc->ses_retries); */
1477 SES_LOG(ssc, SES_CE_DEBUG1, "status decode: reserved");
1483 SES_LOG(ssc, SES_CE_DEBUG1, "status decode: terminated");
1489 SES_LOG(ssc, SES_CE_DEBUG1, "status 0x%x", status);
1515 SES_CMD_RETRY1(ssc->ses_retries);
1531 SES_LOG(ssc, SES_CE_DEBUG1,
1553 SES_LOG(ssc, SES_CE_DEBUG3, "%s", buf);
1572 SES_LOG(ssc, SES_CE_DEBUG3, "%s", buf);
1581 ses_log(ses_softc_t *ssc, int level, const char *fmt, ...)
1590 if (ssc == (ses_softc_t *)NULL) {
1646 scsi_log(SES_DEVINFO(ssc), (char *)Snm, level, Str, buf);
1650 scsi_log(SES_DEVINFO(ssc), (char *)Snm, SCSI_DEBUG,
1655 scsi_log(SES_DEVINFO(ssc), (char *)Snm, SCSI_DEBUG,
1660 scsi_log(SES_DEVINFO(ssc), (char *)Snm, SCSI_DEBUG,
1665 scsi_log(SES_DEVINFO(ssc), (char *)Snm, SCSI_DEBUG,
1670 scsi_log(SES_DEVINFO(ssc), (char *)Snm, SCSI_DEBUG,
1675 scsi_log(SES_DEVINFO(ssc), (char *)Snm, SCSI_DEBUG,
1680 scsi_log(SES_DEVINFO(ssc), (char *)Snm, SCSI_DEBUG,
1685 scsi_log(SES_DEVINFO(ssc), (char *)Snm, SCSI_DEBUG,
1690 scsi_log(SES_DEVINFO(ssc), (char *)Snm, SCSI_DEBUG,
1695 scsi_log(SES_DEVINFO(ssc), (char *)Snm, SCSI_DEBUG, Str, buf);