Lines Matching defs:sbp
61 #include <dev/firewire/sbp.h>
113 static SYSCTL_NODE(_hw_firewire, OID_AUTO, sbp, CTLFLAG_RD | CTLFLAG_MPSAFE, 0,
196 struct sbp_softc *sbp;
219 #define SBP_LOCK(sbp) mtx_lock(&(sbp)->mtx)
220 #define SBP_UNLOCK(sbp) mtx_unlock(&(sbp)->mtx)
221 #define SBP_LOCK_ASSERT(sbp) mtx_assert(&(sbp)->mtx, MA_OWNED)
247 static MALLOC_DEFINE(M_SBP, "sbp", "SBP-II/FireWire");
306 if (device_find_child(parent, "sbp", -1) == NULL)
307 BUS_ADD_CHILD(parent, 0, "sbp", DEVICE_UNIT_ANY);
340 device_printf(sdev->target->sbp->fd.dev,
353 device_printf(sdev->target->sbp->fd.dev,
377 sbp_new_target(struct sbp_softc *sbp, struct fw_device *fwdev)
383 bus = device_get_unit(sbp->fd.dev);
397 sbp->targets[target].fwdev == NULL)
399 device_printf(sbp->fd.dev,
406 if (sbp->targets[i].fwdev == NULL && w[i] == 0) {
420 struct sbp_softc *sbp;
423 sbp = target->sbp;
440 device_printf(target->sbp->fd.dev, "%d no LUN found\n",
511 callout_init_mtx(&sdev->login_callout, &sbp->mtx, 0);
515 device_get_nameunit(sdev->target->sbp->fd.dev),
525 fwdma_malloc(sbp->fd.fc,
550 if (bus_dmamap_create(sbp->dmat, 0, &ocb->dmamap)) {
555 callout_init_mtx(&ocb->timer, &sbp->mtx, 0);
556 SBP_LOCK(sbp);
558 SBP_UNLOCK(sbp);
575 sbp_alloc_target(struct sbp_softc *sbp, struct fw_device *fwdev)
585 i = sbp_new_target(sbp, fwdev);
587 device_printf(sbp->fd.dev, "increase SBP_NUM_TARGETS!\n");
591 target = &sbp->targets[i];
612 callout_init_mtx(&target->mgm_ocb_timeout, &sbp->mtx, 0);
613 callout_init_mtx(&target->scan_callout, &sbp->mtx, 0);
657 SBP_LOCK_ASSERT(sdev->target->sbp);
669 timevalsub(&delta, &sdev->target->sbp->last_busreset);
689 struct sbp_softc *sbp = target->sbp;
695 device_printf(sbp->fd.dev, "%s %d%salive\n",
715 SBP_LOCK(sbp);
717 SBP_UNLOCK(sbp);
737 device_printf(sbp->fd.dev, "%s: lost target\n",
765 struct sbp_softc *sbp;
767 sbp = (struct sbp_softc *)arg;
771 SBP_LOCK(sbp);
772 if ((sbp->flags & SIMQ_FREEZED) == 0) {
773 xpt_freeze_simq(sbp->sim, /*count*/1);
774 sbp->flags |= SIMQ_FREEZED;
776 microtime(&sbp->last_busreset);
777 SBP_UNLOCK(sbp);
783 struct sbp_softc *sbp = (struct sbp_softc *)arg;
798 SBP_LOCK(sbp);
802 target = &sbp->targets[i];
806 STAILQ_FOREACH(fwdev, &sbp->fd.fc->devices, link)
817 STAILQ_FOREACH(fwdev, &sbp->fd.fc->devices, link) {
819 device_printf(sbp->fd.dev,"%s:: EUI:%08x%08x %s attached, state=%d\n",
826 target = &sbp->targets[i];
835 target = sbp_alloc_target(sbp, fwdev);
850 SBP_UNLOCK(sbp);
852 SBP_LOCK(sbp);
856 if ((sbp->flags & SIMQ_FREEZED) != 0) {
857 xpt_release_simq(sbp->sim, /*run queue*/TRUE);
858 sbp->flags &= ~SIMQ_FREEZED;
860 SBP_UNLOCK(sbp);
870 device_printf(sdev->target->sbp->fd.dev,"%s\n", __func__);
873 SBP_LOCK(sdev->target->sbp);
874 STAILQ_INSERT_TAIL(&sdev->target->sbp->fwb.xferlist, xfer, link);
875 SBP_UNLOCK(sdev->target->sbp);
887 SBP_LOCK_ASSERT(sdev->target->sbp);
899 device_printf(sdev->target->sbp->fd.dev,
903 SBP_LOCK(target->sbp);
909 SBP_UNLOCK(target->sbp);
919 device_printf(sdev->target->sbp->fd.dev,
940 device_printf(sdev->target->sbp->fd.dev,
943 SBP_LOCK(sdev->target->sbp);
945 SBP_UNLOCK(sdev->target->sbp);
965 struct sbp_softc *sbp;
971 sbp = target->sbp;
972 SBP_LOCK(sbp);
974 device_printf(sbp->fd.dev,
980 device_printf(sbp->fd.dev,
985 SBP_UNLOCK(sbp);
993 SBP_UNLOCK(sbp);
1007 SBP_LOCK_ASSERT(target->sbp);
1015 device_printf(sdev->target->sbp->fd.dev,
1023 SBP_UNLOCK(target->sbp);
1035 SBP_LOCK(target->sbp);
1053 struct sbp_softc *sbp;
1057 sbp = target->sbp;
1058 SBP_LOCK(sbp);
1060 device_printf(sdev->target->sbp->fd.dev,
1067 cam_sim_path(target->sbp->sim),
1077 SBP_UNLOCK(sbp);
1082 SBP_UNLOCK(sbp);
1092 device_printf(sdev->target->sbp->fd.dev,
1096 device_printf(sdev->target->sbp->fd.dev,
1100 SBP_LOCK(sdev->target->sbp);
1106 SBP_UNLOCK(sdev->target->sbp);
1115 SBP_LOCK_ASSERT(sdev->target->sbp);
1117 device_printf(sdev->target->sbp->fd.dev,
1140 device_printf(sdev->target->sbp->fd.dev,
1143 SBP_LOCK(sdev->target->sbp);
1146 SBP_UNLOCK(sdev->target->sbp);
1155 device_printf(sdev->target->sbp->fd.dev,
1175 device_printf(sdev->target->sbp->fd.dev,
1182 SBP_LOCK(sdev->target->sbp);
1195 SBP_UNLOCK(sdev->target->sbp);
1205 device_printf(sdev->target->sbp->fd.dev,
1211 SBP_LOCK_ASSERT(sdev->target->sbp);
1231 htonl(((sdev->target->sbp->fd.fc->nodeid | FWLOCALBUS) << 16));
1248 device_printf(sdev->target->sbp->fd.dev,
1253 device_printf(sdev->target->sbp->fd.dev,
1256 SBP_LOCK(sdev->target->sbp);
1263 SBP_UNLOCK(sdev->target->sbp);
1272 device_printf(sdev->target->sbp->fd.dev,
1298 SBP_LOCK_ASSERT(sdev->target->sbp);
1304 printf("sbp: no more xfer for this target\n");
1309 printf("sbp: fw_xfer_alloc_buf failed\n");
1314 printf("sbp: alloc %d xfer\n", target->n_xfer);
1323 xfer->fc = sdev->target->sbp->fd.fc;
1353 nid = target->sbp->fd.fc->nodeid | FWLOCALBUS;
1355 SBP_LOCK_ASSERT(target->sbp);
1376 device_printf(sdev->target->sbp->fd.dev,
1442 device_get_nameunit(ocb->sdev->target->sbp->fd.dev),
1540 device_printf(ocb->sdev->target->sbp->fd.dev,
1560 device_printf(sdev->target->sbp->fd.dev,
1605 struct sbp_softc *sbp;
1616 printf("sbp %x %d %d %08x %08x %08x %08x\n",
1618 printf("sbp %08x %08x %08x %08x\n", ntohl(ld[4]), ntohl(ld[5]), ntohl(ld[6]), ntohl(ld[7]));
1619 printf("sbp %08x %08x %08x %08x\n", ntohl(ld[8]), ntohl(ld[9]), ntohl(ld[10]), ntohl(ld[11]));
1621 sbp = (struct sbp_softc *)xfer->sc;
1622 SBP_LOCK_ASSERT(sbp);
1643 device_printf(sbp->fd.dev,
1647 target = &sbp->targets[t];
1650 device_printf(sbp->fd.dev,
1671 device_printf(sdev->target->sbp->fd.dev,
1679 device_printf(sdev->target->sbp->fd.dev,
1684 device_printf(sdev->target->sbp->fd.dev,
1697 device_printf(sdev->target->sbp->fd.dev,
1705 device_printf(sdev->target->sbp->fd.dev,
1763 device_printf(sdev->target->sbp->fd.dev,
1773 device_printf(sdev->target->sbp->fd.dev,
1783 device_printf(sdev->target->sbp->fd.dev,
1796 device_printf(sdev->target->sbp->fd.dev,
1815 device_printf(sdev->target->sbp->fd.dev,
1879 STAILQ_INSERT_TAIL(&sbp->fwb.xferlist, xfer, link);
1886 struct sbp_softc *sbp;
1888 sbp = (struct sbp_softc *)xfer->sc;
1889 SBP_LOCK(sbp);
1891 SBP_UNLOCK(sbp);
1899 struct sbp_softc *sbp;
1918 sbp = device_get_softc(dev);
1919 sbp->fd.dev = dev;
1920 sbp->fd.fc = fc = device_get_ivars(dev);
1921 mtx_init(&sbp->mtx, "sbp", NULL, MTX_DEF);
1937 /*lockarg*/&sbp->mtx,
1938 &sbp->dmat);
1950 sbp->targets[i].fwdev = NULL;
1951 sbp->targets[i].luns = NULL;
1952 sbp->targets[i].sbp = sbp;
1955 sbp->sim = cam_sim_alloc(sbp_action, sbp_poll, "sbp", sbp,
1957 &sbp->mtx,
1962 if (sbp->sim == NULL) {
1967 SBP_LOCK(sbp);
1968 if (xpt_bus_register(sbp->sim, dev, /*bus*/0) != CAM_SUCCESS)
1971 if (xpt_create_path(&sbp->path, NULL, cam_sim_path(sbp->sim),
1973 xpt_bus_deregister(cam_sim_path(sbp->sim));
1976 SBP_UNLOCK(sbp);
1979 sbp->fwb.start = ((u_int64_t)SBP_BIND_HI << 32) | SBP_DEV2ADDR(0, 0);
1980 sbp->fwb.end = sbp->fwb.start + 0xffff;
1982 STAILQ_INIT(&sbp->fwb.xferlist);
1983 fw_xferlist_add(&sbp->fwb.xferlist, M_SBP,
1985 fc, (void *)sbp, sbp_recv);
1987 fw_bindadd(fc, &sbp->fwb);
1989 sbp->fd.post_busreset = sbp_post_busreset;
1990 sbp->fd.post_explore = sbp_post_explore;
1993 sbp_post_busreset(sbp);
1994 sbp_post_explore(sbp);
1996 SBP_LOCK(sbp);
1997 xpt_async(AC_BUS_RESET, sbp->path, /*arg*/ NULL);
1998 SBP_UNLOCK(sbp);
2002 SBP_UNLOCK(sbp);
2003 cam_sim_free(sbp->sim, /*free_devq*/TRUE);
2008 sbp_logout_all(struct sbp_softc *sbp)
2017 SBP_LOCK_ASSERT(sbp);
2019 target = &sbp->targets[i];
2039 struct sbp_softc *sbp = ((struct sbp_softc *)device_get_softc(dev));
2041 SBP_LOCK(sbp);
2042 sbp_logout_all(sbp);
2043 SBP_UNLOCK(sbp);
2050 struct sbp_softc *sbp;
2055 sbp = sdev->target->sbp;
2056 SBP_UNLOCK(sbp);
2060 bus_dmamap_destroy(sbp->dmat, sdev->ocb[i].dmamap);
2062 fwdma_free(sbp->fd.fc, &sdev->dma);
2064 SBP_LOCK(sbp);
2070 struct sbp_softc *sbp;
2076 sbp = target->sbp;
2077 SBP_LOCK_ASSERT(sbp);
2078 SBP_UNLOCK(sbp);
2081 SBP_LOCK(sbp);
2098 struct sbp_softc *sbp = ((struct sbp_softc *)device_get_softc(dev));
2099 struct firewire_comm *fc = sbp->fd.fc;
2106 SBP_LOCK(sbp);
2108 sbp_cam_detach_target(&sbp->targets[i]);
2110 xpt_async(AC_LOST_DEVICE, sbp->path, NULL);
2111 xpt_free_path(sbp->path);
2112 xpt_bus_deregister(cam_sim_path(sbp->sim));
2113 cam_sim_free(sbp->sim, /*free_devq*/ TRUE);
2115 sbp_logout_all(sbp);
2116 SBP_UNLOCK(sbp);
2121 SBP_LOCK(sbp);
2123 sbp_free_target(&sbp->targets[i]);
2124 SBP_UNLOCK(sbp);
2126 fw_bindremove(fc, &sbp->fwb);
2127 fw_xferlist_remove(&sbp->fwb.xferlist);
2129 bus_dma_tag_destroy(sbp->dmat);
2130 mtx_destroy(&sbp->mtx);
2144 SBP_LOCK_ASSERT(sdev->target->sbp);
2161 SBP_LOCK_ASSERT(target->sbp);
2179 SBP_LOCK_ASSERT(target->sbp);
2214 SBP_LOCK_ASSERT(target->sbp);
2215 device_printf(sdev->target->sbp->fd.dev,
2225 device_printf(sdev->target->sbp->fd.dev,
2237 device_printf(sdev->target->sbp->fd.dev,
2241 SBP_LOCK_ASSERT(sdev->target->sbp);
2272 struct sbp_softc *sbp = cam_sim_softc(sim);
2276 if (sbp != NULL)
2277 SBP_LOCK_ASSERT(sbp);
2279 if (sbp != NULL
2282 target = &sbp->targets[ccb->ccb_h.target_id];
2309 device_get_nameunit(sbp->fd.dev),
2326 if (sbp == NULL &&
2331 device_get_nameunit(sbp->fd.dev),
2362 device_get_nameunit(sbp->fd.dev),
2417 ocb->orb[2] = htonl(((sbp->fd.fc->nodeid | FWLOCALBUS) << 16));
2438 error = bus_dmamap_load_ccb(/*dma tag*/sbp->dmat,
2445 printf("sbp: bus_dmamap_load error %d\n", error);
2464 device_get_nameunit(sbp->fd.dev),
2465 cam_sim_path(sbp->sim),
2479 device_get_nameunit(sbp->fd.dev), cam_sim_path(sbp->sim));
2492 device_get_nameunit(sbp->fd.dev),
2536 device_get_nameunit(sbp->fd.dev),
2605 bus_dmamap_sync(ocb->sdev->target->sbp->dmat, ocb->dmamap,
2628 struct sbp_softc *sbp;
2631 sbp = cam_sim_softc(sim);
2632 fc = sbp->fd.fc;
2647 device_printf(sdev->target->sbp->fd.dev,
2651 SBP_LOCK_ASSERT(sdev->target->sbp);
2659 bus_dmamap_sync(sdev->target->sbp->dmat,
2664 bus_dmamap_unload(sdev->target->sbp->dmat,
2699 device_printf(sdev->target->sbp->fd.dev,
2712 SBP_LOCK_ASSERT(sdev->target->sbp);
2714 device_printf(sdev->target->sbp->fd.dev,
2751 SBP_LOCK_ASSERT(sdev->target->sbp);
2769 SBP_LOCK_ASSERT(sdev->target->sbp);
2787 SBP_LOCK_ASSERT(sdev->target->sbp);
2789 device_printf(sdev->target->sbp->fd.dev,
2797 bus_dmamap_sync(sdev->target->sbp->dmat, ocb->dmamap,
2800 bus_dmamap_unload(sdev->target->sbp->dmat, ocb->dmamap);
2817 SBP_LOCK_ASSERT(sdev->target->sbp);
2842 "sbp",
2846 DRIVER_MODULE(sbp, firewire, sbp_driver, 0, 0);
2847 MODULE_VERSION(sbp, 1);
2848 MODULE_DEPEND(sbp, firewire, 1, 1, 1);
2849 MODULE_DEPEND(sbp, cam, 1, 1, 1);