Lines Matching refs:sdev
143 struct sbp_dev *sdev; member
335 sbp_show_sdev_info(struct sbp_dev *sdev) in sbp_show_sdev_info() argument
339 fwdev = sdev->target->fwdev; in sbp_show_sdev_info()
340 device_printf(sdev->target->sbp->fd.dev, in sbp_show_sdev_info()
344 sdev->bustgtlun, in sbp_show_sdev_info()
345 (sdev->type & 0x40) >> 6, in sbp_show_sdev_info()
346 (sdev->type & 0x1f), in sbp_show_sdev_info()
353 device_printf(sdev->target->sbp->fd.dev, in sbp_show_sdev_info()
356 sdev->bustgtlun, in sbp_show_sdev_info()
357 sdev->vendor, in sbp_show_sdev_info()
358 sdev->product, in sbp_show_sdev_info()
359 sdev->revision); in sbp_show_sdev_info()
419 struct sbp_dev *sdev, **newluns; in sbp_alloc_lun() local
449 sdev = target->luns[lun]; in sbp_alloc_lun()
450 if (sdev == NULL) in sbp_alloc_lun()
452 sdev->flags &= ~VALID_LUN; in sbp_alloc_lun()
455 sbp_cam_detach_sdev(sdev); in sbp_alloc_lun()
456 sbp_free_sdev(sdev); in sbp_alloc_lun()
499 sdev = target->luns[lun]; in sbp_alloc_lun()
500 if (sdev == NULL) { in sbp_alloc_lun()
501 sdev = malloc(sizeof(struct sbp_dev), in sbp_alloc_lun()
503 if (sdev == NULL) { in sbp_alloc_lun()
507 target->luns[lun] = sdev; in sbp_alloc_lun()
508 sdev->lun_id = lun; in sbp_alloc_lun()
509 sdev->target = target; in sbp_alloc_lun()
510 STAILQ_INIT(&sdev->ocbs); in sbp_alloc_lun()
511 callout_init_mtx(&sdev->login_callout, &sbp->mtx, 0); in sbp_alloc_lun()
512 sdev->status = SBP_DEV_RESET; in sbp_alloc_lun()
514 snprintf(sdev->bustgtlun, 32, "%s:%d:%d", in sbp_alloc_lun()
515 device_get_nameunit(sdev->target->sbp->fd.dev), in sbp_alloc_lun()
516 sdev->target->target_id, in sbp_alloc_lun()
517 sdev->lun_id); in sbp_alloc_lun()
519 sdev->flags |= VALID_LUN; in sbp_alloc_lun()
520 sdev->type = (reg->val & 0xff0000) >> 16; in sbp_alloc_lun()
527 SBP_DMA_SIZE, &sdev->dma, BUS_DMA_NOWAIT | in sbp_alloc_lun()
529 if (sdev->dma.v_addr == NULL) { in sbp_alloc_lun()
532 free(sdev, M_SBP); in sbp_alloc_lun()
536 sdev->login = (struct sbp_login_res *) sdev->dma.v_addr; in sbp_alloc_lun()
537 sdev->ocb = (struct sbp_ocb *) in sbp_alloc_lun()
538 ((char *)sdev->dma.v_addr + SBP_LOGIN_SIZE); in sbp_alloc_lun()
539 bzero((char *)sdev->ocb, in sbp_alloc_lun()
542 STAILQ_INIT(&sdev->free_ocbs); in sbp_alloc_lun()
545 ocb = &sdev->ocb[i]; in sbp_alloc_lun()
546 ocb->bus_addr = sdev->dma.bus_addr in sbp_alloc_lun()
557 sbp_free_ocb(sdev, ocb); in sbp_alloc_lun()
565 sdev = target->luns[lun]; in sbp_alloc_lun()
566 if (sdev != NULL && (sdev->flags & VALID_LUN) == 0) { in sbp_alloc_lun()
567 sbp_cam_detach_sdev(sdev); in sbp_alloc_lun()
568 sbp_free_sdev(sdev); in sbp_alloc_lun()
621 sbp_probe_lun(struct sbp_dev *sdev) in sbp_probe_lun() argument
627 bzero(sdev->vendor, sizeof(sdev->vendor)); in sbp_probe_lun()
628 bzero(sdev->product, sizeof(sdev->product)); in sbp_probe_lun()
630 fwdev = sdev->target->fwdev; in sbp_probe_lun()
635 crom_parse_text(cc, sdev->vendor, sizeof(sdev->vendor)); in sbp_probe_lun()
645 snprintf(sdev->revision, sizeof(sdev->revision), in sbp_probe_lun()
650 crom_parse_text(cc, sdev->product, sizeof(sdev->product)); in sbp_probe_lun()
656 struct sbp_dev *sdev = (struct sbp_dev *)arg; in sbp_login_callout() local
657 SBP_LOCK_ASSERT(sdev->target->sbp); in sbp_login_callout()
658 sbp_mgm_orb(sdev, ORB_FUN_LGI, NULL); in sbp_login_callout()
662 sbp_login(struct sbp_dev *sdev) in sbp_login() argument
669 timevalsub(&delta, &sdev->target->sbp->last_busreset); in sbp_login()
679 callout_reset(&sdev->login_callout, ticks, in sbp_login()
680 sbp_login_callout, (void *)(sdev)); in sbp_login()
690 struct sbp_dev *sdev; in sbp_probe_target() local
704 sdev = target->luns[i]; in sbp_probe_target()
705 if (sdev == NULL) in sbp_probe_target()
707 if (alive && (sdev->status != SBP_DEV_DEAD)) { in sbp_probe_target()
708 if (sdev->path != NULL) { in sbp_probe_target()
709 xpt_freeze_devq(sdev->path, 1); in sbp_probe_target()
710 sdev->freeze++; in sbp_probe_target()
712 sbp_probe_lun(sdev); in sbp_probe_target()
713 sbp_show_sdev_info(sdev); in sbp_probe_target()
716 sbp_abort_all_ocbs(sdev, CAM_SCSI_BUS_RESET); in sbp_probe_target()
718 switch (sdev->status) { in sbp_probe_target()
722 sbp_login(sdev); in sbp_probe_target()
729 sbp_mgm_orb(sdev, ORB_FUN_RCN, NULL); in sbp_probe_target()
733 switch (sdev->status) { in sbp_probe_target()
740 if (sdev->path) { in sbp_probe_target()
741 xpt_freeze_devq(sdev->path, 1); in sbp_probe_target()
742 sdev->freeze++; in sbp_probe_target()
744 sdev->status = SBP_DEV_RETRY; in sbp_probe_target()
745 sbp_cam_detach_sdev(sdev); in sbp_probe_target()
746 sbp_free_sdev(sdev); in sbp_probe_target()
751 sdev->status = SBP_DEV_RESET; in sbp_probe_target()
867 struct sbp_dev *sdev; in sbp_loginres_callback() local
868 sdev = (struct sbp_dev *)xfer->sc; in sbp_loginres_callback()
870 device_printf(sdev->target->sbp->fd.dev,"%s\n", __func__); in sbp_loginres_callback()
873 SBP_LOCK(sdev->target->sbp); in sbp_loginres_callback()
874 STAILQ_INSERT_TAIL(&sdev->target->sbp->fwb.xferlist, xfer, link); in sbp_loginres_callback()
875 SBP_UNLOCK(sdev->target->sbp); in sbp_loginres_callback()
883 struct sbp_dev *sdev; in sbp_xfer_free() local
885 sdev = (struct sbp_dev *)xfer->sc; in sbp_xfer_free()
887 SBP_LOCK_ASSERT(sdev->target->sbp); in sbp_xfer_free()
888 STAILQ_INSERT_TAIL(&sdev->target->xferlist, xfer, link); in sbp_xfer_free()
894 struct sbp_dev *tsdev, *sdev = (struct sbp_dev *)xfer->sc; in sbp_reset_start_callback() local
895 struct sbp_target *target = sdev->target; in sbp_reset_start_callback()
899 device_printf(sdev->target->sbp->fd.dev, in sbp_reset_start_callback()
900 "%s: %s failed: resp=%d\n", __func__, sdev->bustgtlun, xfer->resp); in sbp_reset_start_callback()
913 sbp_reset_start(struct sbp_dev *sdev) in sbp_reset_start() argument
919 device_printf(sdev->target->sbp->fd.dev, in sbp_reset_start()
920 "%s:%s\n", __func__,sdev->bustgtlun); in sbp_reset_start()
923 xfer = sbp_write_cmd(sdev, FWTCODE_WREQQ, 0); in sbp_reset_start()
935 struct sbp_dev *sdev; in sbp_mgm_callback() local
937 sdev = (struct sbp_dev *)xfer->sc; in sbp_mgm_callback()
940 device_printf(sdev->target->sbp->fd.dev, in sbp_mgm_callback()
941 "%s:%s\n", __func__, sdev->bustgtlun); in sbp_mgm_callback()
943 SBP_LOCK(sdev->target->sbp); in sbp_mgm_callback()
945 SBP_UNLOCK(sdev->target->sbp); in sbp_mgm_callback()
967 struct sbp_dev *sdev; in sbp_cam_scan_lun() local
969 sdev = (struct sbp_dev *) ccb->ccb_h.ccb_sdev_ptr; in sbp_cam_scan_lun()
970 target = sdev->target; in sbp_cam_scan_lun()
975 "%s:%s\n", __func__, sdev->bustgtlun); in sbp_cam_scan_lun()
978 sdev->status = SBP_DEV_ATTACHED; in sbp_cam_scan_lun()
981 "%s:%s failed\n", __func__, sdev->bustgtlun); in sbp_cam_scan_lun()
983 sdev = sbp_next_dev(target, sdev->lun_id + 1); in sbp_cam_scan_lun()
984 if (sdev == NULL) { in sbp_cam_scan_lun()
990 xpt_setup_ccb(&ccb->ccb_h, sdev->path, SCAN_PRI); in sbp_cam_scan_lun()
991 ccb->ccb_h.ccb_sdev_ptr = sdev; in sbp_cam_scan_lun()
996 xpt_release_devq(sdev->path, sdev->freeze, TRUE); in sbp_cam_scan_lun()
997 sdev->freeze = 1; in sbp_cam_scan_lun()
1004 struct sbp_dev *sdev; in sbp_cam_scan_target() local
1008 sdev = sbp_next_dev(target, 0); in sbp_cam_scan_target()
1009 if (sdev == NULL) { in sbp_cam_scan_target()
1015 device_printf(sdev->target->sbp->fd.dev, in sbp_cam_scan_target()
1016 "%s:%s\n", __func__, sdev->bustgtlun); in sbp_cam_scan_target()
1025 xpt_setup_ccb(&ccb->ccb_h, sdev->path, SCAN_PRI); in sbp_cam_scan_target()
1030 ccb->ccb_h.ccb_sdev_ptr = sdev; in sbp_cam_scan_target()
1036 xpt_release_devq(sdev->path, sdev->freeze, TRUE); in sbp_cam_scan_target()
1037 sdev->freeze = 1; in sbp_cam_scan_target()
1041 sbp_scan_dev(struct sbp_dev *sdev) in sbp_scan_dev() argument
1043 sdev->status = SBP_DEV_PROBE; in sbp_scan_dev()
1044 callout_reset_sbt(&sdev->target->scan_callout, SBT_1MS * scan_delay, 0, in sbp_scan_dev()
1045 sbp_cam_scan_target, (void *)sdev->target, 0); in sbp_scan_dev()
1051 struct sbp_dev *sdev; in sbp_do_attach() local
1055 sdev = (struct sbp_dev *)xfer->sc; in sbp_do_attach()
1056 target = sdev->target; in sbp_do_attach()
1060 device_printf(sdev->target->sbp->fd.dev, in sbp_do_attach()
1061 "%s:%s\n", __func__, sdev->bustgtlun); in sbp_do_attach()
1065 if (sdev->path == NULL) in sbp_do_attach()
1066 xpt_create_path(&sdev->path, NULL, in sbp_do_attach()
1068 target->target_id, sdev->lun_id); in sbp_do_attach()
1076 sdev->status = SBP_DEV_ATTACHED; in sbp_do_attach()
1081 sbp_scan_dev(sdev); in sbp_do_attach()
1088 struct sbp_dev *sdev; in sbp_agent_reset_callback() local
1090 sdev = (struct sbp_dev *)xfer->sc; in sbp_agent_reset_callback()
1092 device_printf(sdev->target->sbp->fd.dev, in sbp_agent_reset_callback()
1093 "%s:%s\n", __func__, sdev->bustgtlun); in sbp_agent_reset_callback()
1096 device_printf(sdev->target->sbp->fd.dev, in sbp_agent_reset_callback()
1097 "%s:%s resp=%d\n", __func__, sdev->bustgtlun, xfer->resp); in sbp_agent_reset_callback()
1100 SBP_LOCK(sdev->target->sbp); in sbp_agent_reset_callback()
1102 if (sdev->path) { in sbp_agent_reset_callback()
1103 xpt_release_devq(sdev->path, sdev->freeze, TRUE); in sbp_agent_reset_callback()
1104 sdev->freeze = 0; in sbp_agent_reset_callback()
1106 SBP_UNLOCK(sdev->target->sbp); in sbp_agent_reset_callback()
1110 sbp_agent_reset(struct sbp_dev *sdev) in sbp_agent_reset() argument
1115 SBP_LOCK_ASSERT(sdev->target->sbp); in sbp_agent_reset()
1117 device_printf(sdev->target->sbp->fd.dev, in sbp_agent_reset()
1118 "%s:%s\n", __func__, sdev->bustgtlun); in sbp_agent_reset()
1120 xfer = sbp_write_cmd(sdev, FWTCODE_WREQQ, 0x04); in sbp_agent_reset()
1123 if (sdev->status == SBP_DEV_ATTACHED || sdev->status == SBP_DEV_PROBE) in sbp_agent_reset()
1130 sbp_abort_all_ocbs(sdev, CAM_BDR_SENT); in sbp_agent_reset()
1136 struct sbp_dev *sdev; in sbp_busy_timeout_callback() local
1138 sdev = (struct sbp_dev *)xfer->sc; in sbp_busy_timeout_callback()
1140 device_printf(sdev->target->sbp->fd.dev, in sbp_busy_timeout_callback()
1141 "%s:%s\n", __func__, sdev->bustgtlun); in sbp_busy_timeout_callback()
1143 SBP_LOCK(sdev->target->sbp); in sbp_busy_timeout_callback()
1145 sbp_agent_reset(sdev); in sbp_busy_timeout_callback()
1146 SBP_UNLOCK(sdev->target->sbp); in sbp_busy_timeout_callback()
1150 sbp_busy_timeout(struct sbp_dev *sdev) in sbp_busy_timeout() argument
1155 device_printf(sdev->target->sbp->fd.dev, in sbp_busy_timeout()
1156 "%s:%s\n", __func__, sdev->bustgtlun); in sbp_busy_timeout()
1158 xfer = sbp_write_cmd(sdev, FWTCODE_WREQQ, 0); in sbp_busy_timeout()
1171 struct sbp_dev *sdev; in sbp_orb_pointer_callback() local
1172 sdev = (struct sbp_dev *)xfer->sc; in sbp_orb_pointer_callback()
1175 device_printf(sdev->target->sbp->fd.dev, in sbp_orb_pointer_callback()
1176 "%s:%s\n", __func__, sdev->bustgtlun); in sbp_orb_pointer_callback()
1182 SBP_LOCK(sdev->target->sbp); in sbp_orb_pointer_callback()
1185 sdev->flags &= ~ORB_POINTER_ACTIVE; in sbp_orb_pointer_callback()
1187 if ((sdev->flags & ORB_POINTER_NEED) != 0) { in sbp_orb_pointer_callback()
1190 sdev->flags &= ~ORB_POINTER_NEED; in sbp_orb_pointer_callback()
1191 ocb = STAILQ_FIRST(&sdev->ocbs); in sbp_orb_pointer_callback()
1193 sbp_orb_pointer(sdev, ocb); in sbp_orb_pointer_callback()
1195 SBP_UNLOCK(sdev->target->sbp); in sbp_orb_pointer_callback()
1200 sbp_orb_pointer(struct sbp_dev *sdev, struct sbp_ocb *ocb) in sbp_orb_pointer() argument
1205 device_printf(sdev->target->sbp->fd.dev, in sbp_orb_pointer()
1207 __func__, sdev->bustgtlun, in sbp_orb_pointer()
1211 SBP_LOCK_ASSERT(sdev->target->sbp); in sbp_orb_pointer()
1213 if ((sdev->flags & ORB_POINTER_ACTIVE) != 0) { in sbp_orb_pointer()
1217 sdev->flags |= ORB_POINTER_NEED; in sbp_orb_pointer()
1221 sdev->flags |= ORB_POINTER_ACTIVE; in sbp_orb_pointer()
1222 xfer = sbp_write_cmd(sdev, FWTCODE_WREQB, 0x08); in sbp_orb_pointer()
1231 htonl(((sdev->target->sbp->fd.fc->nodeid | FWLOCALBUS) << 16)); in sbp_orb_pointer()
1244 struct sbp_dev *sdev; in sbp_doorbell_callback() local
1245 sdev = (struct sbp_dev *)xfer->sc; in sbp_doorbell_callback()
1248 device_printf(sdev->target->sbp->fd.dev, in sbp_doorbell_callback()
1249 "%s:%s\n", __func__, sdev->bustgtlun); in sbp_doorbell_callback()
1253 device_printf(sdev->target->sbp->fd.dev, in sbp_doorbell_callback()
1256 SBP_LOCK(sdev->target->sbp); in sbp_doorbell_callback()
1258 sdev->flags &= ~ORB_DOORBELL_ACTIVE; in sbp_doorbell_callback()
1259 if ((sdev->flags & ORB_DOORBELL_NEED) != 0) { in sbp_doorbell_callback()
1260 sdev->flags &= ~ORB_DOORBELL_NEED; in sbp_doorbell_callback()
1261 sbp_doorbell(sdev); in sbp_doorbell_callback()
1263 SBP_UNLOCK(sdev->target->sbp); in sbp_doorbell_callback()
1267 sbp_doorbell(struct sbp_dev *sdev) in sbp_doorbell() argument
1272 device_printf(sdev->target->sbp->fd.dev, in sbp_doorbell()
1273 "%s:%s\n", __func__, sdev->bustgtlun); in sbp_doorbell()
1276 if ((sdev->flags & ORB_DOORBELL_ACTIVE) != 0) { in sbp_doorbell()
1277 sdev->flags |= ORB_DOORBELL_NEED; in sbp_doorbell()
1280 sdev->flags |= ORB_DOORBELL_ACTIVE; in sbp_doorbell()
1281 xfer = sbp_write_cmd(sdev, FWTCODE_WREQQ, 0x10); in sbp_doorbell()
1291 sbp_write_cmd(struct sbp_dev *sdev, int tcode, int offset) in sbp_write_cmd() argument
1298 SBP_LOCK_ASSERT(sdev->target->sbp); in sbp_write_cmd()
1300 target = sdev->target; in sbp_write_cmd()
1322 xfer->send.spd = min(sdev->target->fwdev->speed, max_speed); in sbp_write_cmd()
1323 xfer->fc = sdev->target->sbp->fd.fc; in sbp_write_cmd()
1331 xfer->sc = (caddr_t)sdev; in sbp_write_cmd()
1333 fp->mode.wreqq.dest_hi = sdev->login->cmd_hi; in sbp_write_cmd()
1334 fp->mode.wreqq.dest_lo = sdev->login->cmd_lo + offset; in sbp_write_cmd()
1338 fp->mode.wreqq.dst = FWLOCALBUS | sdev->target->fwdev->dst; in sbp_write_cmd()
1344 sbp_mgm_orb(struct sbp_dev *sdev, int func, struct sbp_ocb *aocb) in sbp_mgm_orb() argument
1352 target = sdev->target; in sbp_mgm_orb()
1364 if ((ocb = sbp_get_ocb(sdev)) == NULL) { in sbp_mgm_orb()
1369 ocb->sdev = sdev; in sbp_mgm_orb()
1373 ocb->orb[7] = htonl(SBP_DEV2ADDR(target->target_id, sdev->lun_id)); in sbp_mgm_orb()
1376 device_printf(sdev->target->sbp->fd.dev, in sbp_mgm_orb()
1378 __func__,sdev->bustgtlun, in sbp_mgm_orb()
1385 ocb->orb[3] = htonl(sdev->dma.bus_addr); in sbp_mgm_orb()
1386 ocb->orb[4] = htonl(ORB_NOTIFY | sdev->lun_id); in sbp_mgm_orb()
1390 fwdma_sync(&sdev->dma, BUS_DMASYNC_PREREAD); in sbp_mgm_orb()
1401 ocb->orb[4] = htonl(ORB_NOTIFY | func | sdev->login->id); in sbp_mgm_orb()
1407 STAILQ_INSERT_TAIL(&sdev->target->mgm_ocb_queue, ocb, ocb); in sbp_mgm_orb()
1415 xfer = sbp_write_cmd(sdev, FWTCODE_WREQB, 0); in sbp_mgm_orb()
1422 fp->mode.wreqb.dest_hi = sdev->target->mgm_hi; in sbp_mgm_orb()
1423 fp->mode.wreqb.dest_lo = sdev->target->mgm_lo; in sbp_mgm_orb()
1442 device_get_nameunit(ocb->sdev->target->sbp->fd.dev), in sbp_print_scsi_cmd()
1473 ocb->sdev->bustgtlun, in sbp_scsi_status()
1540 device_printf(ocb->sdev->target->sbp->fd.dev, in sbp_scsi_status()
1542 __func__, ocb->sdev->bustgtlun, in sbp_scsi_status()
1551 struct sbp_dev *sdev; in sbp_fix_inq_data() local
1555 sdev = ocb->sdev; in sbp_fix_inq_data()
1560 device_printf(sdev->target->sbp->fd.dev, in sbp_fix_inq_data()
1561 "%s:%s\n", __func__, sdev->bustgtlun); in sbp_fix_inq_data()
1581 bcopy(sdev->vendor, inq->vendor, sizeof(inq->vendor)); in sbp_fix_inq_data()
1582 bcopy(sdev->product, inq->product, sizeof(inq->product)); in sbp_fix_inq_data()
1583 bcopy(sdev->revision + 2, inq->revision, sizeof(inq->revision)); in sbp_fix_inq_data()
1606 struct sbp_dev *sdev; in sbp_recv1() local
1654 sdev = target->luns[l]; in sbp_recv1()
1669 ocb = sbp_dequeue_ocb(sdev, sbp_status); in sbp_recv1()
1671 device_printf(sdev->target->sbp->fd.dev, in sbp_recv1()
1673 __func__,sdev->bustgtlun, in sbp_recv1()
1679 device_printf(sdev->target->sbp->fd.dev, in sbp_recv1()
1681 __func__, sdev->bustgtlun); in sbp_recv1()
1684 device_printf(sdev->target->sbp->fd.dev, in sbp_recv1()
1686 __func__, sdev->bustgtlun); in sbp_recv1()
1697 device_printf(sdev->target->sbp->fd.dev, in sbp_recv1()
1700 __func__, sdev->bustgtlun, in sbp_recv1()
1705 device_printf(sdev->target->sbp->fd.dev, in sbp_recv1()
1706 "%s\n", sdev->bustgtlun); in sbp_recv1()
1733 if (sdev->path) { in sbp_recv1()
1734 xpt_freeze_devq(sdev->path, 1); in sbp_recv1()
1735 sdev->freeze++; in sbp_recv1()
1755 fwdma_sync(&sdev->dma, BUS_DMASYNC_POSTREAD); in sbp_recv1()
1756 login_res = sdev->login; in sbp_recv1()
1763 device_printf(sdev->target->sbp->fd.dev, in sbp_recv1()
1765 __func__, sdev->bustgtlun, in sbp_recv1()
1770 sbp_busy_timeout(sdev); in sbp_recv1()
1773 device_printf(sdev->target->sbp->fd.dev, in sbp_recv1()
1775 __func__, sdev->bustgtlun); in sbp_recv1()
1776 sdev->status = SBP_DEV_RESET; in sbp_recv1()
1780 login_res = sdev->login; in sbp_recv1()
1783 device_printf(sdev->target->sbp->fd.dev, in sbp_recv1()
1785 __func__, sdev->bustgtlun, in sbp_recv1()
1789 if (sdev->status == SBP_DEV_ATTACHED) in sbp_recv1()
1790 sbp_scan_dev(sdev); in sbp_recv1()
1792 sbp_agent_reset(sdev); in sbp_recv1()
1796 device_printf(sdev->target->sbp->fd.dev, in sbp_recv1()
1798 __func__, sdev->bustgtlun); in sbp_recv1()
1800 sbp_login(sdev); in sbp_recv1()
1804 sdev->status = SBP_DEV_RESET; in sbp_recv1()
1807 sbp_busy_timeout(sdev); in sbp_recv1()
1812 sbp_agent_reset(sdev); in sbp_recv1()
1815 device_printf(sdev->target->sbp->fd.dev, in sbp_recv1()
1817 __func__, sdev->bustgtlun, orb_fun); in sbp_recv1()
1820 sbp_mgm_orb(sdev, ORB_FUN_RUNQUEUE, NULL); in sbp_recv1()
1823 sdev->timeout = 0; in sbp_recv1()
1849 sbp_free_ocb(sdev, ocb); in sbp_recv1()
1852 sbp_agent_reset(sdev); in sbp_recv1()
1868 xfer->spd = min(sdev->target->fwdev->speed, max_speed); in sbp_recv1()
2011 struct sbp_dev *sdev; in sbp_logout_all() local
2023 sdev = target->luns[j]; in sbp_logout_all()
2024 if (sdev == NULL) in sbp_logout_all()
2026 callout_stop(&sdev->login_callout); in sbp_logout_all()
2027 if (sdev->status >= SBP_DEV_TOATTACH && in sbp_logout_all()
2028 sdev->status <= SBP_DEV_ATTACHED) in sbp_logout_all()
2029 sbp_mgm_orb(sdev, ORB_FUN_LGO, NULL); in sbp_logout_all()
2048 sbp_free_sdev(struct sbp_dev *sdev) in sbp_free_sdev() argument
2053 if (sdev == NULL) in sbp_free_sdev()
2055 sbp = sdev->target->sbp; in sbp_free_sdev()
2057 callout_drain(&sdev->login_callout); in sbp_free_sdev()
2059 callout_drain(&sdev->ocb[i].timer); in sbp_free_sdev()
2060 bus_dmamap_destroy(sbp->dmat, sdev->ocb[i].dmamap); in sbp_free_sdev()
2062 fwdma_free(sbp->fd.fc, &sdev->dma); in sbp_free_sdev()
2063 free(sdev, M_SBP); in sbp_free_sdev()
2136 sbp_cam_detach_sdev(struct sbp_dev *sdev) in sbp_cam_detach_sdev() argument
2138 if (sdev == NULL) in sbp_cam_detach_sdev()
2140 if (sdev->status == SBP_DEV_DEAD) in sbp_cam_detach_sdev()
2142 if (sdev->status == SBP_DEV_RESET) in sbp_cam_detach_sdev()
2144 SBP_LOCK_ASSERT(sdev->target->sbp); in sbp_cam_detach_sdev()
2145 sbp_abort_all_ocbs(sdev, CAM_DEV_NOT_THERE); in sbp_cam_detach_sdev()
2146 if (sdev->path) { in sbp_cam_detach_sdev()
2147 xpt_release_devq(sdev->path, in sbp_cam_detach_sdev()
2148 sdev->freeze, TRUE); in sbp_cam_detach_sdev()
2149 sdev->freeze = 0; in sbp_cam_detach_sdev()
2150 xpt_async(AC_LOST_DEVICE, sdev->path, NULL); in sbp_cam_detach_sdev()
2151 xpt_free_path(sdev->path); in sbp_cam_detach_sdev()
2152 sdev->path = NULL; in sbp_cam_detach_sdev()
2173 sbp_target_reset(struct sbp_dev *sdev, int method) in sbp_target_reset() argument
2176 struct sbp_target *target = sdev->target; in sbp_target_reset()
2197 sbp_mgm_orb(sdev, ORB_FUN_RST, NULL); in sbp_target_reset()
2201 sbp_reset_start(sdev); in sbp_target_reset()
2211 struct sbp_dev *sdev = ocb->sdev; in sbp_mgm_timeout() local
2212 struct sbp_target *target = sdev->target; in sbp_mgm_timeout()
2215 device_printf(sdev->target->sbp->fd.dev, in sbp_mgm_timeout()
2217 __func__, sdev->bustgtlun, (uint32_t)ocb->bus_addr); in sbp_mgm_timeout()
2219 sbp_free_ocb(sdev, ocb); in sbp_mgm_timeout()
2223 sbp_mgm_orb(sdev, ORB_FUN_RUNQUEUE, NULL); in sbp_mgm_timeout()
2225 device_printf(sdev->target->sbp->fd.dev, in sbp_mgm_timeout()
2227 __func__, sdev->bustgtlun); in sbp_mgm_timeout()
2228 sbp_reset_start(sdev); in sbp_mgm_timeout()
2235 struct sbp_dev *sdev = ocb->sdev; in sbp_timeout() local
2237 device_printf(sdev->target->sbp->fd.dev, in sbp_timeout()
2239 __func__, sdev->bustgtlun, (uint32_t)ocb->bus_addr); in sbp_timeout()
2241 SBP_LOCK_ASSERT(sdev->target->sbp); in sbp_timeout()
2242 sdev->timeout++; in sbp_timeout()
2243 switch (sdev->timeout) { in sbp_timeout()
2246 xpt_freeze_devq(sdev->path, 1); in sbp_timeout()
2247 sdev->freeze++; in sbp_timeout()
2248 sbp_abort_all_ocbs(sdev, CAM_CMD_TIMEOUT); in sbp_timeout()
2249 sbp_agent_reset(sdev); in sbp_timeout()
2253 sbp_target_reset(sdev, sdev->timeout - 1); in sbp_timeout()
2274 struct sbp_dev *sdev = NULL; in sbp_action() local
2286 sdev = target->luns[ccb->ccb_h.target_lun]; in sbp_action()
2287 if (sdev != NULL && sdev->status != SBP_DEV_ATTACHED && in sbp_action()
2288 sdev->status != SBP_DEV_PROBE) in sbp_action()
2289 sdev = NULL; in sbp_action()
2294 if (sdev == NULL) in sbp_action()
2305 if (sdev == NULL) { in sbp_action()
2378 if (sdev == NULL) { in sbp_action()
2390 if (sdev->status == SBP_DEV_PROBE) { in sbp_action()
2401 if ((ocb = sbp_get_ocb(sdev)) == NULL) { in sbp_action()
2403 if (sdev->freeze == 0) { in sbp_action()
2404 xpt_freeze_devq(sdev->path, 1); in sbp_action()
2405 sdev->freeze++; in sbp_action()
2412 ocb->sdev = sdev; in sbp_action()
2414 ccb->ccb_h.ccb_sdev_ptr = sdev; in sbp_action()
2605 bus_dmamap_sync(ocb->sdev->target->sbp->dmat, ocb->dmamap, in sbp_execute_ocb()
2608 prev = sbp_enqueue_ocb(ocb->sdev, ocb); in sbp_execute_ocb()
2609 fwdma_sync(&ocb->sdev->dma, BUS_DMASYNC_PREWRITE); in sbp_execute_ocb()
2612 if (ocb->sdev->last_ocb != NULL) in sbp_execute_ocb()
2613 sbp_doorbell(ocb->sdev); in sbp_execute_ocb()
2615 sbp_orb_pointer(ocb->sdev, ocb); in sbp_execute_ocb()
2618 if (prev == NULL || (ocb->sdev->flags & ORB_LINK_DEAD) != 0) { in sbp_execute_ocb()
2619 ocb->sdev->flags &= ~ORB_LINK_DEAD; in sbp_execute_ocb()
2620 sbp_orb_pointer(ocb->sdev, ocb); in sbp_execute_ocb()
2640 sbp_dequeue_ocb(struct sbp_dev *sdev, struct sbp_status *sbp_status) in sbp_dequeue_ocb() argument
2647 device_printf(sdev->target->sbp->fd.dev, in sbp_dequeue_ocb()
2649 __func__, sdev->bustgtlun, ntohl(sbp_status->orb_lo), sbp_status->src); in sbp_dequeue_ocb()
2651 SBP_LOCK_ASSERT(sdev->target->sbp); in sbp_dequeue_ocb()
2652 STAILQ_FOREACH_SAFE(ocb, &sdev->ocbs, ocb, next) { in sbp_dequeue_ocb()
2655 STAILQ_REMOVE(&sdev->ocbs, ocb, sbp_ocb, ocb); in sbp_dequeue_ocb()
2659 bus_dmamap_sync(sdev->target->sbp->dmat, in sbp_dequeue_ocb()
2664 bus_dmamap_unload(sdev->target->sbp->dmat, in sbp_dequeue_ocb()
2670 sbp_orb_pointer(sdev, next); in sbp_dequeue_ocb()
2677 sdev->flags |= ORB_LINK_DEAD; in sbp_dequeue_ocb()
2685 if (sdev->last_ocb != NULL) { in sbp_dequeue_ocb()
2686 sbp_free_ocb(sdev, sdev->last_ocb); in sbp_dequeue_ocb()
2688 sdev->last_ocb = ocb; in sbp_dequeue_ocb()
2691 sbp_doorbell(sdev); in sbp_dequeue_ocb()
2699 device_printf(sdev->target->sbp->fd.dev, in sbp_dequeue_ocb()
2701 __func__, sdev->bustgtlun, order); in sbp_dequeue_ocb()
2708 sbp_enqueue_ocb(struct sbp_dev *sdev, struct sbp_ocb *ocb) in sbp_enqueue_ocb() argument
2712 SBP_LOCK_ASSERT(sdev->target->sbp); in sbp_enqueue_ocb()
2714 device_printf(sdev->target->sbp->fd.dev, in sbp_enqueue_ocb()
2715 "%s:%s 0x%08jx\n", __func__, sdev->bustgtlun, (uintmax_t)ocb->bus_addr); in sbp_enqueue_ocb()
2717 prev2 = prev = STAILQ_LAST(&sdev->ocbs, sbp_ocb, ocb); in sbp_enqueue_ocb()
2718 STAILQ_INSERT_TAIL(&sdev->ocbs, ocb, ocb); in sbp_enqueue_ocb()
2727 prev2 = sdev->last_ocb; in sbp_enqueue_ocb()
2729 if (prev2 != NULL && (ocb->sdev->flags & ORB_LINK_DEAD) == 0) { in sbp_enqueue_ocb()
2747 sbp_get_ocb(struct sbp_dev *sdev) in sbp_get_ocb() argument
2751 SBP_LOCK_ASSERT(sdev->target->sbp); in sbp_get_ocb()
2752 ocb = STAILQ_FIRST(&sdev->free_ocbs); in sbp_get_ocb()
2754 sdev->flags |= ORB_SHORTAGE; in sbp_get_ocb()
2758 STAILQ_REMOVE_HEAD(&sdev->free_ocbs, ocb); in sbp_get_ocb()
2764 sbp_free_ocb(struct sbp_dev *sdev, struct sbp_ocb *ocb) in sbp_free_ocb() argument
2769 SBP_LOCK_ASSERT(sdev->target->sbp); in sbp_free_ocb()
2770 STAILQ_INSERT_TAIL(&sdev->free_ocbs, ocb, ocb); in sbp_free_ocb()
2771 if ((sdev->flags & ORB_SHORTAGE) != 0) { in sbp_free_ocb()
2774 sdev->flags &= ~ORB_SHORTAGE; in sbp_free_ocb()
2775 count = sdev->freeze; in sbp_free_ocb()
2776 sdev->freeze = 0; in sbp_free_ocb()
2777 xpt_release_devq(sdev->path, count, TRUE); in sbp_free_ocb()
2784 struct sbp_dev *sdev; in sbp_abort_ocb() local
2786 sdev = ocb->sdev; in sbp_abort_ocb()
2787 SBP_LOCK_ASSERT(sdev->target->sbp); in sbp_abort_ocb()
2789 device_printf(sdev->target->sbp->fd.dev, in sbp_abort_ocb()
2790 "%s:%s 0x%jx\n", __func__, sdev->bustgtlun, (uintmax_t)ocb->bus_addr); in sbp_abort_ocb()
2797 bus_dmamap_sync(sdev->target->sbp->dmat, ocb->dmamap, in sbp_abort_ocb()
2800 bus_dmamap_unload(sdev->target->sbp->dmat, ocb->dmamap); in sbp_abort_ocb()
2807 sbp_free_ocb(sdev, ocb); in sbp_abort_ocb()
2811 sbp_abort_all_ocbs(struct sbp_dev *sdev, int status) in sbp_abort_all_ocbs() argument
2817 SBP_LOCK_ASSERT(sdev->target->sbp); in sbp_abort_all_ocbs()
2818 STAILQ_CONCAT(&temp, &sdev->ocbs); in sbp_abort_all_ocbs()
2819 STAILQ_INIT(&sdev->ocbs); in sbp_abort_all_ocbs()
2824 if (sdev->last_ocb != NULL) { in sbp_abort_all_ocbs()
2825 sbp_free_ocb(sdev, sdev->last_ocb); in sbp_abort_all_ocbs()
2826 sdev->last_ocb = NULL; in sbp_abort_all_ocbs()