Lines Matching refs:link
286 struct scsi_link *link = sa->sa_sc_link; in scsibussubmatch() local
288 if (cf->cf_loc[0] != -1 && cf->cf_loc[0] != link->target) in scsibussubmatch()
290 if (cf->cf_loc[1] != -1 && cf->cf_loc[1] != link->lun) in scsibussubmatch()
355 struct scsi_link *link; in scsi_activate_bus() local
359 SLIST_FOREACH(link, &sb->sc_link_list, bus_list) { in scsi_activate_bus()
360 r = scsi_activate_link(link, act); in scsi_activate_bus()
370 struct scsi_link *link; in scsi_activate_target() local
374 SLIST_FOREACH(link, &sb->sc_link_list, bus_list) { in scsi_activate_target()
375 if (link->target == target) { in scsi_activate_target()
376 r = scsi_activate_link(link, act); in scsi_activate_target()
387 struct scsi_link *link; in scsi_activate_lun() local
390 link = scsi_get_link(sb, target, lun); in scsi_activate_lun()
391 if (link == NULL) in scsi_activate_lun()
394 return scsi_activate_link(link, act); in scsi_activate_lun()
398 scsi_activate_link(struct scsi_link *link, int act) in scsi_activate_link() argument
403 dev = link->device_softc; in scsi_activate_link()
406 atomic_setbits_int(&link->state, SDEV_S_DYING); in scsi_activate_link()
481 struct scsi_link *link, *link0; in scsi_probe_link() local
490 link = malloc(sizeof(*link), M_DEVBUF, M_NOWAIT); in scsi_probe_link()
491 if (link == NULL) { in scsi_probe_link()
492 SC_DEBUG(link, SDEV_DB2, ("malloc(scsi_link) failed.\n")); in scsi_probe_link()
496 link->state = 0; in scsi_probe_link()
497 link->target = target; in scsi_probe_link()
498 link->lun = lun; in scsi_probe_link()
499 link->openings = sb->sb_openings; in scsi_probe_link()
500 link->node_wwn = link->port_wwn = 0; in scsi_probe_link()
501 link->flags = sb->sb_flags; in scsi_probe_link()
502 link->quirks = sb->sb_quirks; in scsi_probe_link()
503 link->interpret_sense = scsi_interpret_sense; in scsi_probe_link()
504 link->device_softc = NULL; in scsi_probe_link()
505 link->bus = sb; in scsi_probe_link()
506 memset(&link->inqdata, 0, sizeof(link->inqdata)); in scsi_probe_link()
507 link->id = NULL; in scsi_probe_link()
508 TAILQ_INIT(&link->queue); in scsi_probe_link()
509 link->running = 0; in scsi_probe_link()
510 link->pending = 0; in scsi_probe_link()
511 link->pool = sb->sb_pool; in scsi_probe_link()
513 SC_DEBUG(link, SDEV_DB2, ("scsi_link created.\n")); in scsi_probe_link()
517 sb->sb_adapter->dev_probe(link) != 0) { in scsi_probe_link()
519 SC_DEBUG(link, SDEV_DB2, ("dev_probe(link) failed.\n")); in scsi_probe_link()
522 free(link, M_DEVBUF, sizeof(*link)); in scsi_probe_link()
530 if (link->pool == NULL) { in scsi_probe_link()
531 link->pool = malloc(sizeof(*link->pool), M_DEVBUF, M_NOWAIT); in scsi_probe_link()
532 if (link->pool == NULL) { in scsi_probe_link()
533 SC_DEBUG(link, SDEV_DB2, ("malloc(pool) failed.\n")); in scsi_probe_link()
537 scsi_iopool_init(link->pool, link, scsi_default_get, in scsi_probe_link()
540 SET(link->flags, SDEV_OWN_IOPL); in scsi_probe_link()
549 devquirks = link->quirks; in scsi_probe_link()
550 SET(link->quirks, SDEV_NOSYNC | SDEV_NOWIDE | SDEV_NOTAGS); in scsi_probe_link()
560 SET(link->flags, scsidebug_level); in scsi_probe_link()
565 scsi_test_unit_ready(link, TEST_READY_RETRIES, in scsi_probe_link()
573 SC_DEBUG(link, SDEV_DB2, ("dma_alloc(inqbuf) failed.\n")); in scsi_probe_link()
578 rslt = scsi_inquire(link, inqbuf, scsi_autoconf | SCSI_SILENT); in scsi_probe_link()
586 memcpy(&link->inqdata, inqbuf, inqbytes); in scsi_probe_link()
588 inqbuf = &link->inqdata; in scsi_probe_link()
613 scsi_devid(link); in scsi_probe_link()
618 else if (ISSET(link->flags, SDEV_UMASS)) in scsi_probe_link()
620 else if (link->id != NULL && !DEVID_CMP(link0->id, link->id)) in scsi_probe_link()
625 SC_DEBUG(link, SDEV_DB1, ("IDENTIFY not supported.\n")); in scsi_probe_link()
630 link->quirks = devquirks; /* Restore what the device wanted. */ in scsi_probe_link()
637 SET(link->quirks, finger->quirks); in scsi_probe_link()
642 SET(link->quirks, SDEV_NOTAGS | SDEV_NOSYNC | SDEV_NOWIDE | in scsi_probe_link()
649 SET(link->quirks, SDEV_NOTAGS); in scsi_probe_link()
651 SET(link->quirks, SDEV_NOSYNC); in scsi_probe_link()
653 SET(link->quirks, SDEV_NOWIDE); in scsi_probe_link()
660 SET(link->quirks, SDEV_NOTAGS); in scsi_probe_link()
669 if (ISSET(link->quirks, SDEV_NOTAGS)) in scsi_probe_link()
670 link->openings = 1; in scsi_probe_link()
676 SET(link->flags, SDEV_REMOVABLE); in scsi_probe_link()
678 sa.sa_sc_link = link; in scsi_probe_link()
693 if (lun == 0 && ISSET(link->flags, SDEV_UMASS) && in scsi_probe_link()
697 link->lun = 1; in scsi_probe_link()
698 scsi_inquire(link, usbinqbuf, scsi_autoconf | SCSI_SILENT); in scsi_probe_link()
699 link->lun = 0; in scsi_probe_link()
704 scsi_add_link(link); in scsi_probe_link()
715 scsi_test_unit_ready(link, TEST_READY_RETRIES, in scsi_probe_link()
723 scsi_detach_link(link, DETACH_FORCE); in scsi_probe_link()
741 struct scsi_link *link, *tmp; in scsi_detach_bus() local
745 SLIST_FOREACH_SAFE(link, &sb->sc_link_list, bus_list, tmp) { in scsi_detach_bus()
746 r = scsi_detach_link(link, flags); in scsi_detach_bus()
756 struct scsi_link *link, *tmp; in scsi_detach_target() local
760 SLIST_FOREACH_SAFE(link, &sb->sc_link_list, bus_list, tmp) { in scsi_detach_target()
761 if (link->target == target) { in scsi_detach_target()
762 r = scsi_detach_link(link, flags); in scsi_detach_target()
773 struct scsi_link *link; in scsi_detach_lun() local
776 link = scsi_get_link(sb, target, lun); in scsi_detach_lun()
777 if (link == NULL) in scsi_detach_lun()
780 return scsi_detach_link(link, flags); in scsi_detach_lun()
784 scsi_detach_link(struct scsi_link *link, int flags) in scsi_detach_link() argument
786 struct scsibus_softc *sb = link->bus; in scsi_detach_link()
789 if (!ISSET(flags, DETACH_FORCE) && ISSET(link->flags, SDEV_OPEN)) in scsi_detach_link()
795 if (link->pool != NULL) in scsi_detach_link()
796 scsi_link_shutdown(link); in scsi_detach_link()
799 if (link->device_softc != NULL) { in scsi_detach_link()
800 rv = config_detach(link->device_softc, flags); in scsi_detach_link()
806 if (link->pool != NULL && ISSET(link->flags, SDEV_OWN_IOPL)) { in scsi_detach_link()
807 scsi_iopool_destroy(link->pool); in scsi_detach_link()
808 free(link->pool, M_DEVBUF, sizeof(*link->pool)); in scsi_detach_link()
813 sb->sb_adapter->dev_free(link); in scsi_detach_link()
816 if (link->id != NULL) in scsi_detach_link()
817 devid_free(link->id); in scsi_detach_link()
818 scsi_remove_link(link); in scsi_detach_link()
819 free(link, M_DEVBUF, sizeof(*link)); in scsi_detach_link()
827 struct scsi_link *link; in scsi_get_link() local
829 SLIST_FOREACH(link, &sb->sc_link_list, bus_list) { in scsi_get_link()
830 if (link->target == target && link->lun == lun) in scsi_get_link()
831 return link; in scsi_get_link()
838 scsi_add_link(struct scsi_link *link) in scsi_add_link() argument
840 SLIST_INSERT_HEAD(&link->bus->sc_link_list, link, bus_list); in scsi_add_link()
844 scsi_remove_link(struct scsi_link *link) in scsi_remove_link() argument
846 struct scsibus_softc *sb = link->bus; in scsi_remove_link()
850 if (elm == link) { in scsi_remove_link()
979 scsi_print_link(struct scsi_link *link) in scsi_print_link() argument
986 printf(" targ %d lun %d: ", link->target, link->lun); in scsi_print_link()
988 inqbuf = &link->inqdata; in scsi_print_link()
998 if (ISSET(link->flags, SDEV_ATAPI)) in scsi_print_link()
1008 if (ISSET(link->flags, SDEV_REMOVABLE)) in scsi_print_link()
1011 if (link->id != NULL && link->id->d_type != DEVID_NONE) { in scsi_print_link()
1012 id = (u_int8_t *)(link->id + 1); in scsi_print_link()
1013 switch (link->id->d_type) { in scsi_print_link()
1031 if (ISSET(link->id->d_flags, DEVID_F_PRINT)) { in scsi_print_link()
1032 for (i = 0; i < link->id->d_len; i++) { in scsi_print_link()
1047 for (i = 0; i < link->id->d_len; i++) in scsi_print_link()
1053 sc_print_addr(link); in scsi_print_link()
1055 link->state, link->bus->sb_luns, link->openings); in scsi_print_link()
1057 sc_print_addr(link); in scsi_print_link()
1058 printf("flags (0x%04x) ", link->flags); in scsi_print_link()
1059 scsi_show_flags(link->flags, flagnames); in scsi_print_link()
1062 sc_print_addr(link); in scsi_print_link()
1063 printf("quirks (0x%04x) ", link->quirks); in scsi_print_link()
1064 scsi_show_flags(link->quirks, quirknames); in scsi_print_link()
1134 scsi_devid(struct scsi_link *link) in scsi_devid() argument
1143 if (link->id != NULL) in scsi_devid()
1148 if (SID_ANSII_REV(&link->inqdata) >= SCSI_REV_2) { in scsi_devid()
1149 if (scsi_inquire_vpd(link, pg, sizeof(*pg), SI_PG_SUPPORTED, in scsi_devid()
1165 if (pg83 && scsi_devid_pg83(link) == 0) in scsi_devid()
1167 if (pg80 && scsi_devid_pg80(link) == 0) in scsi_devid()
1172 scsi_devid_wwn(link); in scsi_devid()
1178 scsi_devid_pg83(struct scsi_link *link) in scsi_devid_pg83() argument
1189 rv = scsi_inquire_vpd(link, hdr, sizeof(*hdr), SI_PG_DEVID, in scsi_devid_pg83()
1197 rv = scsi_inquire_vpd(link, pg, len, SI_PG_DEVID, scsi_autoconf); in scsi_devid_pg83()
1259 link->id = devid_alloc(idtype, idflags, chdr.len, id); in scsi_devid_pg83()
1272 scsi_devid_pg80(struct scsi_link *link) in scsi_devid_pg80() argument
1282 rv = scsi_inquire_vpd(link, hdr, sizeof(*hdr), SI_PG_SERIAL, in scsi_devid_pg80()
1296 rv = scsi_inquire_vpd(link, pg, pglen, SI_PG_SERIAL, scsi_autoconf); in scsi_devid_pg80()
1300 idlen = sizeof(link->inqdata.vendor) + in scsi_devid_pg80()
1301 sizeof(link->inqdata.product) + len; in scsi_devid_pg80()
1303 memcpy(id, link->inqdata.vendor, sizeof(link->inqdata.vendor)); in scsi_devid_pg80()
1304 memcpy(id + sizeof(link->inqdata.vendor), link->inqdata.product, in scsi_devid_pg80()
1305 sizeof(link->inqdata.product)); in scsi_devid_pg80()
1306 memcpy(id + sizeof(link->inqdata.vendor) + in scsi_devid_pg80()
1307 sizeof(link->inqdata.product), pg + sizeof(*hdr), len); in scsi_devid_pg80()
1309 link->id = devid_alloc(DEVID_SERIAL, DEVID_F_PRINT, in scsi_devid_pg80()
1310 sizeof(link->inqdata.vendor) + sizeof(link->inqdata.product) + len, in scsi_devid_pg80()
1323 scsi_devid_wwn(struct scsi_link *link) in scsi_devid_wwn() argument
1327 if (link->lun != 0 || link->node_wwn == 0) in scsi_devid_wwn()
1330 wwnn = htobe64(link->node_wwn); in scsi_devid_wwn()
1331 link->id = devid_alloc(DEVID_WWN, 0, sizeof(wwnn), (u_int8_t *)&wwnn); in scsi_devid_wwn()