Lines Matching +defs:link +defs:flags

469 scsi_io_get(struct scsi_iopool *iopl, int flags)
479 else if (ISSET(flags, SCSI_NOSLEEP))
508 scsi_xsh_set(struct scsi_xshandler *xsh, struct scsi_link *link,
511 scsi_ioh_set(&xsh->ioh, link->pool, scsi_xsh_ioh, xsh);
513 xsh->link = link;
520 struct scsi_link *link = xsh->link;
523 if (ISSET(link->state, SDEV_S_DYING))
526 mtx_enter(&link->pool->mtx);
528 TAILQ_INSERT_TAIL(&link->queue, &xsh->ioh, q_entry);
532 mtx_leave(&link->pool->mtx);
535 scsi_xsh_runqueue(link);
543 struct scsi_link *link = xsh->link;
546 mtx_enter(&link->pool->mtx);
552 TAILQ_REMOVE(&link->queue, &xsh->ioh, q_entry);
555 TAILQ_REMOVE(&link->pool->queue, &xsh->ioh, q_entry);
556 link->pending--;
557 if (ISSET(link->state, SDEV_S_DYING) && link->pending == 0)
558 wakeup_one(&link->pending);
564 mtx_leave(&link->pool->mtx);
574 scsi_xsh_runqueue(struct scsi_link *link)
579 if (!scsi_pending_start(&link->pool->mtx, &link->running))
584 mtx_enter(&link->pool->mtx);
585 while (!ISSET(link->state, SDEV_S_DYING) &&
586 link->pending < link->openings &&
587 ((ioh = TAILQ_FIRST(&link->queue)) != NULL)) {
588 link->pending++;
590 TAILQ_REMOVE(&link->queue, ioh, q_entry);
591 TAILQ_INSERT_TAIL(&link->pool->queue, ioh, q_entry);
596 mtx_leave(&link->pool->mtx);
599 scsi_iopool_run(link->pool);
600 } while (!scsi_pending_finish(&link->pool->mtx, &link->running));
609 xs = scsi_xs_io(xsh->link, io, SCSI_NOSLEEP);
631 scsi_xs_get(struct scsi_link *link, int flags)
635 struct scsi_iopool *iopl = link->pool;
638 if (ISSET(link->state, SDEV_S_DYING))
643 xsh.link = link;
645 if (!scsi_link_open(link)) {
646 if (ISSET(flags, SCSI_NOSLEEP))
656 if (ISSET(flags, SCSI_NOSLEEP)) {
657 scsi_link_close(link);
669 return scsi_xs_io(link, io, flags);
679 scsi_link_shutdown(struct scsi_link *link)
682 struct scsi_iopool *iopl = link->pool;
687 while ((ioh = TAILQ_FIRST(&link->queue)) != NULL) {
688 TAILQ_REMOVE(&link->queue, ioh, q_entry);
695 panic("scsi_link_shutdown: scsi_xshandler on link");
706 xsh->link == link)
711 xsh->link == link) {
714 link->pending--;
720 while (link->pending > 0)
721 msleep_nsec(&link->pending, &iopl->mtx, PRIBIO, "pendxs",
732 scsi_link_open(struct scsi_link *link)
736 mtx_enter(&link->pool->mtx);
737 if (link->pending < link->openings) {
738 link->pending++;
741 mtx_leave(&link->pool->mtx);
747 scsi_link_close(struct scsi_link *link)
749 mtx_enter(&link->pool->mtx);
750 link->pending--;
751 if (ISSET(link->state, SDEV_S_DYING) && link->pending == 0)
752 wakeup_one(&link->pending);
753 mtx_leave(&link->pool->mtx);
755 scsi_xsh_runqueue(link);
759 scsi_xs_io(struct scsi_link *link, void *io, int flags)
764 (ISSET(flags, SCSI_NOSLEEP) ? PR_NOWAIT : PR_WAITOK));
766 scsi_io_put(link->pool, io);
767 scsi_link_close(link);
769 xs->flags = flags;
770 xs->sc_link = link;
782 struct scsi_link *link = xs->sc_link;
787 scsi_io_put(link->pool, io);
788 scsi_link_close(link);
795 scsi_test_unit_ready(struct scsi_link *link, int retries, int flags)
801 xs = scsi_xs_get(link, flags);
818 scsi_init_inquiry(struct scsi_xfer *xs, u_int8_t flags, u_int8_t pagecode,
825 cmd->flags = flags;
831 SET(xs->flags, SCSI_DATA_IN);
841 scsi_inquire(struct scsi_link *link, struct scsi_inquiry_data *inqbuf,
842 int flags)
857 xs = scsi_xs_get(link, flags);
870 SC_DEBUG(link, SDEV_DB2, ("INQUIRE error %d\n", error));
874 SC_DEBUG(link, SDEV_DB2, ("INQUIRE data < SID_SCSI2_HDRLEN\n"));
887 sc_print_addr(link);
891 sc_print_addr(link);
893 sc_print_addr(link);
907 scsi_inquire_vpd(struct scsi_link *link, void *buf, u_int buflen,
908 u_int8_t page, int flags)
916 if (ISSET(link->flags, SDEV_UMASS))
919 xs = scsi_xs_get(link, flags | SCSI_DATA_IN | SCSI_SILENT);
932 sc_print_addr(link);
949 scsi_read_cap_10(struct scsi_link *link, struct scsi_read_cap_data *rdcap,
950 int flags)
956 xs = scsi_xs_get(link, flags | SCSI_DATA_IN | SCSI_SILENT);
974 sc_print_addr(link);
984 scsi_read_cap_16(struct scsi_link *link, struct scsi_read_cap_data_16 *rdcap,
985 int flags)
991 xs = scsi_xs_get(link, flags | SCSI_DATA_IN | SCSI_SILENT);
1011 sc_print_addr(link);
1024 scsi_prevent(struct scsi_link *link, int type, int flags)
1030 if (ISSET(link->quirks, ADEV_NODOORLOCK))
1033 xs = scsi_xs_get(link, flags);
1054 scsi_start(struct scsi_link *link, int type, int flags)
1060 xs = scsi_xs_get(link, flags);
1078 scsi_mode_sense(struct scsi_link *link, int pg_code,
1079 union scsi_mode_sense_buf *data, int flags)
1091 xs = scsi_xs_get(link, flags | SCSI_DATA_IN);
1121 sc_print_addr(link);
1137 scsi_mode_sense_big(struct scsi_link *link, int pg_code,
1138 union scsi_mode_sense_buf *data, int flags)
1150 xs = scsi_xs_get(link, flags | SCSI_DATA_IN);
1180 sc_print_addr(link);
1236 scsi_parse_blkdesc(struct scsi_link *link, union scsi_mode_sense_buf *buf,
1256 switch (link->inqdata.device & SID_TYPE) {
1283 scsi_do_mode_sense(struct scsi_link *link, int pg_code,
1285 int pg_length, int flags, int *big)
1292 if (!ISSET(link->flags, SDEV_ATAPI) ||
1293 (link->inqdata.device & SID_TYPE) == T_SEQUENTIAL) {
1303 error = scsi_mode_sense(link, pg_code, buf, flags);
1321 if (!ISSET(link->flags, (SDEV_ATAPI | SDEV_UMASS)) &&
1322 SID_ANSII_REV(&link->inqdata) < SCSI_REV_2)
1328 error = scsi_mode_sense_big(link, pg_code, buf, flags);
1340 scsi_mode_select(struct scsi_link *link, int byte2,
1341 struct scsi_mode_header *data, int flags, int timeout)
1350 xs = scsi_xs_get(link, flags | SCSI_DATA_OUT);
1369 SC_DEBUG(link, SDEV_DB2, ("scsi_mode_select: error = %d\n", error));
1375 scsi_mode_select_big(struct scsi_link *link, int byte2,
1376 struct scsi_mode_header_big *data, int flags, int timeout)
1385 xs = scsi_xs_get(link, flags | SCSI_DATA_OUT);
1404 SC_DEBUG(link, SDEV_DB2, ("scsi_mode_select_big: error = %d\n",
1411 scsi_report_luns(struct scsi_link *link, int selectreport,
1412 struct scsi_report_luns_data *data, u_int32_t datalen, int flags,
1419 xs = scsi_xs_get(link, flags | SCSI_DATA_IN);
1437 SC_DEBUG(link, SDEV_DB2, ("scsi_report_luns: error = %d\n", error));
1448 CLR(xs->flags, ITSDONE);
1487 if (ISSET(xs->sc_link->flags, SDEV_DB1)) {
1488 if (xs->datalen && ISSET(xs->flags, SCSI_DATA_IN))
1493 SET(xs->flags, ITSDONE);
1518 if (ISSET(xs->flags, SCSI_NOSLEEP))
1519 SET(xs->flags, SCSI_POLL);
1549 if (!ISSET(xs->flags, SCSI_NOSLEEP))
1609 switch (xs->flags & (SCSI_POLL | SCSI_NOSLEEP)) {
1640 struct scsi_link *link = xs->sc_link;
1649 skey = sense->flags & SSD_KEY;
1665 if (ISSET(xs->flags, SCSI_IGNORE_NOT_READY))
1678 SC_DEBUG(link, SDEV_DB1,
1687 CLR(link->flags, SDEV_MEDIA_LOADED);
1702 CLR(link->flags, SDEV_MEDIA_LOADED);
1720 if (ISSET(xs->flags, SCSI_IGNORE_ILLEGAL_REQUEST))
1740 if (ISSET(link->flags, SDEV_REMOVABLE))
1741 CLR(link->flags, SDEV_MEDIA_LOADED);
1742 if (ISSET(xs->flags, SCSI_IGNORE_MEDIA_CHANGE) ||
1744 !ISSET(link->flags, SDEV_REMOVABLE)) {
1770 if (skey && !ISSET(xs->flags, SCSI_SILENT))
1786 sc_print_addr(struct scsi_link *link)
1788 struct device *adapter_device = link->bus->sc_dev.dv_parent;
1791 link->device_softc ?
1792 ((struct device *)link->device_softc)->dv_xname : "probe",
1794 link->target, link->lun);
2542 if (sense->flags & (SSD_FILEMARK | SSD_EOM | SSD_ILI)) {
2546 if (ISSET(sense->flags, SSD_FILEMARK)) {
2550 if (ISSET(sense->flags, SSD_EOM)) {
2554 if (ISSET(sense->flags, SSD_ILI))
2594 skey = sense->flags & SSD_KEY;
2757 struct scsi_link *link = xs->sc_link;
2759 SC_DEBUG(link, SDEV_DB1,
2763 sense->flags & SSD_KEY,
2764 sense->flags & SSD_ILI ? 1 : 0,
2765 sense->flags & SSD_EOM ? 1 : 0,
2766 sense->flags & SSD_FILEMARK ? 1 : 0,
2769 if (ISSET(xs->sc_link->flags, SDEV_DB1))
2784 if (!ISSET(xs->sc_link->flags, SDEV_DB1))
2790 printf("flg(0x%x)", xs->flags);
2791 printf("link(%p)", xs->sc_link);
2802 if (!ISSET(xs->flags, SCSI_RESET)) {
2812 if (xs->datalen && ISSET(xs->flags, SCSI_DATA_OUT))
2831 scsi_show_flags(u_int32_t flags, const char **names)
2838 if (!ISSET(flags, 1 << i))