Lines Matching refs:link
508 scsi_xsh_set(struct scsi_xshandler *xsh, struct scsi_link *link, in scsi_xsh_set() argument
511 scsi_ioh_set(&xsh->ioh, link->pool, scsi_xsh_ioh, xsh); in scsi_xsh_set()
513 xsh->link = link; in scsi_xsh_set()
520 struct scsi_link *link = xsh->link; in scsi_xsh_add() local
523 if (ISSET(link->state, SDEV_S_DYING)) in scsi_xsh_add()
526 mtx_enter(&link->pool->mtx); in scsi_xsh_add()
528 TAILQ_INSERT_TAIL(&link->queue, &xsh->ioh, q_entry); in scsi_xsh_add()
532 mtx_leave(&link->pool->mtx); in scsi_xsh_add()
535 scsi_xsh_runqueue(link); in scsi_xsh_add()
543 struct scsi_link *link = xsh->link; in scsi_xsh_del() local
546 mtx_enter(&link->pool->mtx); in scsi_xsh_del()
552 TAILQ_REMOVE(&link->queue, &xsh->ioh, q_entry); in scsi_xsh_del()
555 TAILQ_REMOVE(&link->pool->queue, &xsh->ioh, q_entry); in scsi_xsh_del()
556 link->pending--; in scsi_xsh_del()
557 if (ISSET(link->state, SDEV_S_DYING) && link->pending == 0) in scsi_xsh_del()
558 wakeup_one(&link->pending); in scsi_xsh_del()
564 mtx_leave(&link->pool->mtx); in scsi_xsh_del()
574 scsi_xsh_runqueue(struct scsi_link *link) in scsi_xsh_runqueue() argument
579 if (!scsi_pending_start(&link->pool->mtx, &link->running)) in scsi_xsh_runqueue()
584 mtx_enter(&link->pool->mtx); in scsi_xsh_runqueue()
585 while (!ISSET(link->state, SDEV_S_DYING) && in scsi_xsh_runqueue()
586 link->pending < link->openings && in scsi_xsh_runqueue()
587 ((ioh = TAILQ_FIRST(&link->queue)) != NULL)) { in scsi_xsh_runqueue()
588 link->pending++; in scsi_xsh_runqueue()
590 TAILQ_REMOVE(&link->queue, ioh, q_entry); in scsi_xsh_runqueue()
591 TAILQ_INSERT_TAIL(&link->pool->queue, ioh, q_entry); in scsi_xsh_runqueue()
596 mtx_leave(&link->pool->mtx); in scsi_xsh_runqueue()
599 scsi_iopool_run(link->pool); in scsi_xsh_runqueue()
600 } while (!scsi_pending_finish(&link->pool->mtx, &link->running)); in scsi_xsh_runqueue()
609 xs = scsi_xs_io(xsh->link, io, SCSI_NOSLEEP); in scsi_xsh_ioh()
631 scsi_xs_get(struct scsi_link *link, int flags) in scsi_xs_get() argument
635 struct scsi_iopool *iopl = link->pool; in scsi_xs_get()
638 if (ISSET(link->state, SDEV_S_DYING)) in scsi_xs_get()
643 xsh.link = link; in scsi_xs_get()
645 if (!scsi_link_open(link)) { in scsi_xs_get()
657 scsi_link_close(link); in scsi_xs_get()
669 return scsi_xs_io(link, io, flags); in scsi_xs_get()
679 scsi_link_shutdown(struct scsi_link *link) in scsi_link_shutdown() argument
682 struct scsi_iopool *iopl = link->pool; in scsi_link_shutdown()
687 while ((ioh = TAILQ_FIRST(&link->queue)) != NULL) { in scsi_link_shutdown()
688 TAILQ_REMOVE(&link->queue, ioh, q_entry); in scsi_link_shutdown()
706 xsh->link == link) in scsi_link_shutdown()
711 xsh->link == link) { in scsi_link_shutdown()
714 link->pending--; in scsi_link_shutdown()
720 while (link->pending > 0) in scsi_link_shutdown()
721 msleep_nsec(&link->pending, &iopl->mtx, PRIBIO, "pendxs", in scsi_link_shutdown()
732 scsi_link_open(struct scsi_link *link) in scsi_link_open() argument
736 mtx_enter(&link->pool->mtx); in scsi_link_open()
737 if (link->pending < link->openings) { in scsi_link_open()
738 link->pending++; in scsi_link_open()
741 mtx_leave(&link->pool->mtx); in scsi_link_open()
747 scsi_link_close(struct scsi_link *link) in scsi_link_close() argument
749 mtx_enter(&link->pool->mtx); in scsi_link_close()
750 link->pending--; in scsi_link_close()
751 if (ISSET(link->state, SDEV_S_DYING) && link->pending == 0) in scsi_link_close()
752 wakeup_one(&link->pending); in scsi_link_close()
753 mtx_leave(&link->pool->mtx); in scsi_link_close()
755 scsi_xsh_runqueue(link); in scsi_link_close()
759 scsi_xs_io(struct scsi_link *link, void *io, int flags) in scsi_xs_io() argument
766 scsi_io_put(link->pool, io); in scsi_xs_io()
767 scsi_link_close(link); in scsi_xs_io()
770 xs->sc_link = link; in scsi_xs_io()
782 struct scsi_link *link = xs->sc_link; in scsi_xs_put() local
787 scsi_io_put(link->pool, io); in scsi_xs_put()
788 scsi_link_close(link); in scsi_xs_put()
795 scsi_test_unit_ready(struct scsi_link *link, int retries, int flags) in scsi_test_unit_ready() argument
801 xs = scsi_xs_get(link, flags); in scsi_test_unit_ready()
841 scsi_inquire(struct scsi_link *link, struct scsi_inquiry_data *inqbuf, in scsi_inquire() argument
857 xs = scsi_xs_get(link, flags); in scsi_inquire()
870 SC_DEBUG(link, SDEV_DB2, ("INQUIRE error %d\n", error)); in scsi_inquire()
874 SC_DEBUG(link, SDEV_DB2, ("INQUIRE data < SID_SCSI2_HDRLEN\n")); in scsi_inquire()
887 sc_print_addr(link); in scsi_inquire()
891 sc_print_addr(link); in scsi_inquire()
893 sc_print_addr(link); in scsi_inquire()
907 scsi_inquire_vpd(struct scsi_link *link, void *buf, u_int buflen, in scsi_inquire_vpd() argument
916 if (ISSET(link->flags, SDEV_UMASS)) in scsi_inquire_vpd()
919 xs = scsi_xs_get(link, flags | SCSI_DATA_IN | SCSI_SILENT); in scsi_inquire_vpd()
932 sc_print_addr(link); in scsi_inquire_vpd()
949 scsi_read_cap_10(struct scsi_link *link, struct scsi_read_cap_data *rdcap, in scsi_read_cap_10() argument
956 xs = scsi_xs_get(link, flags | SCSI_DATA_IN | SCSI_SILENT); in scsi_read_cap_10()
974 sc_print_addr(link); in scsi_read_cap_10()
984 scsi_read_cap_16(struct scsi_link *link, struct scsi_read_cap_data_16 *rdcap, in scsi_read_cap_16() argument
991 xs = scsi_xs_get(link, flags | SCSI_DATA_IN | SCSI_SILENT); in scsi_read_cap_16()
1011 sc_print_addr(link); in scsi_read_cap_16()
1024 scsi_prevent(struct scsi_link *link, int type, int flags) in scsi_prevent() argument
1030 if (ISSET(link->quirks, ADEV_NODOORLOCK)) in scsi_prevent()
1033 xs = scsi_xs_get(link, flags); in scsi_prevent()
1054 scsi_start(struct scsi_link *link, int type, int flags) in scsi_start() argument
1060 xs = scsi_xs_get(link, flags); in scsi_start()
1078 scsi_mode_sense(struct scsi_link *link, int pg_code, in scsi_mode_sense() argument
1091 xs = scsi_xs_get(link, flags | SCSI_DATA_IN); in scsi_mode_sense()
1121 sc_print_addr(link); in scsi_mode_sense()
1137 scsi_mode_sense_big(struct scsi_link *link, int pg_code, in scsi_mode_sense_big() argument
1150 xs = scsi_xs_get(link, flags | SCSI_DATA_IN); in scsi_mode_sense_big()
1180 sc_print_addr(link); in scsi_mode_sense_big()
1236 scsi_parse_blkdesc(struct scsi_link *link, union scsi_mode_sense_buf *buf, in scsi_parse_blkdesc() argument
1256 switch (link->inqdata.device & SID_TYPE) { in scsi_parse_blkdesc()
1283 scsi_do_mode_sense(struct scsi_link *link, int pg_code, in scsi_do_mode_sense() argument
1292 if (!ISSET(link->flags, SDEV_ATAPI) || in scsi_do_mode_sense()
1293 (link->inqdata.device & SID_TYPE) == T_SEQUENTIAL) { in scsi_do_mode_sense()
1303 error = scsi_mode_sense(link, pg_code, buf, flags); in scsi_do_mode_sense()
1321 if (!ISSET(link->flags, (SDEV_ATAPI | SDEV_UMASS)) && in scsi_do_mode_sense()
1322 SID_ANSII_REV(&link->inqdata) < SCSI_REV_2) in scsi_do_mode_sense()
1328 error = scsi_mode_sense_big(link, pg_code, buf, flags); in scsi_do_mode_sense()
1340 scsi_mode_select(struct scsi_link *link, int byte2, in scsi_mode_select() argument
1350 xs = scsi_xs_get(link, flags | SCSI_DATA_OUT); in scsi_mode_select()
1369 SC_DEBUG(link, SDEV_DB2, ("scsi_mode_select: error = %d\n", error)); in scsi_mode_select()
1375 scsi_mode_select_big(struct scsi_link *link, int byte2, in scsi_mode_select_big() argument
1385 xs = scsi_xs_get(link, flags | SCSI_DATA_OUT); in scsi_mode_select_big()
1404 SC_DEBUG(link, SDEV_DB2, ("scsi_mode_select_big: error = %d\n", in scsi_mode_select_big()
1411 scsi_report_luns(struct scsi_link *link, int selectreport, in scsi_report_luns() argument
1419 xs = scsi_xs_get(link, flags | SCSI_DATA_IN); in scsi_report_luns()
1437 SC_DEBUG(link, SDEV_DB2, ("scsi_report_luns: error = %d\n", error)); in scsi_report_luns()
1640 struct scsi_link *link = xs->sc_link; in scsi_interpret_sense() local
1678 SC_DEBUG(link, SDEV_DB1, in scsi_interpret_sense()
1687 CLR(link->flags, SDEV_MEDIA_LOADED); in scsi_interpret_sense()
1702 CLR(link->flags, SDEV_MEDIA_LOADED); in scsi_interpret_sense()
1740 if (ISSET(link->flags, SDEV_REMOVABLE)) in scsi_interpret_sense()
1741 CLR(link->flags, SDEV_MEDIA_LOADED); in scsi_interpret_sense()
1744 !ISSET(link->flags, SDEV_REMOVABLE)) { in scsi_interpret_sense()
1786 sc_print_addr(struct scsi_link *link) in sc_print_addr() argument
1788 struct device *adapter_device = link->bus->sc_dev.dv_parent; in sc_print_addr()
1791 link->device_softc ? in sc_print_addr()
1792 ((struct device *)link->device_softc)->dv_xname : "probe", in sc_print_addr()
1794 link->target, link->lun); in sc_print_addr()
2757 struct scsi_link *link = xs->sc_link; in scsi_show_sense() local
2759 SC_DEBUG(link, SDEV_DB1, in scsi_show_sense()