Lines Matching refs:sassc

147 static void mprsas_send_smpcmd(struct mprsas_softc *sassc,
149 static void mprsas_action_smpio(struct mprsas_softc *sassc, union ccb *ccb);
153 mprsas_find_target_by_handle(struct mprsas_softc *sassc, int start,
159 for (i = start; i < sassc->maxtargets; i++) {
160 target = &sassc->targets[i];
176 mprsas_startup_increment(struct mprsas_softc *sassc)
178 MPR_FUNCTRACE(sassc->sc);
180 if ((sassc->flags & MPRSAS_IN_STARTUP) != 0) {
181 if (sassc->startup_refcount++ == 0) {
183 mpr_dprint(sassc->sc, MPR_INIT,
189 xpt_freeze_simq(sassc->sim, 1);
191 mpr_dprint(sassc->sc, MPR_INIT, "%s refcount %u\n", __func__,
192 sassc->startup_refcount);
197 mprsas_release_simq_reinit(struct mprsas_softc *sassc)
199 if (sassc->flags & MPRSAS_QUEUE_FROZEN) {
200 sassc->flags &= ~MPRSAS_QUEUE_FROZEN;
201 xpt_release_simq(sassc->sim, 1);
202 mpr_dprint(sassc->sc, MPR_INFO, "Unfreezing SIM queue\n");
207 mprsas_startup_decrement(struct mprsas_softc *sassc)
209 MPR_FUNCTRACE(sassc->sc);
211 if ((sassc->flags & MPRSAS_IN_STARTUP) != 0) {
212 if (--sassc->startup_refcount == 0) {
216 mpr_dprint(sassc->sc, MPR_INIT,
218 sassc->flags &= ~MPRSAS_IN_STARTUP;
219 xpt_release_simq(sassc->sim, 1);
224 mprsas_rescan_target(sassc->sc, NULL);
227 mpr_dprint(sassc->sc, MPR_INIT, "%s refcount %u\n", __func__,
228 sassc->startup_refcount);
275 struct mprsas_softc *sassc = sc->sassc;
281 pathid = cam_sim_path(sassc->sim);
285 targetid = targ - sassc->targets;
342 cam_sim_name(cm->cm_sc->sassc->sim),
343 cam_sim_unit(cm->cm_sc->sassc->sim),
344 cam_sim_bus(cm->cm_sc->sassc->sim),
427 mprsas_prepare_volume_remove(struct mprsas_softc *sassc, uint16_t handle)
434 MPR_FUNCTRACE(sassc->sc);
435 sc = sassc->sc;
437 targ = mprsas_find_target_by_handle(sassc, 0, handle);
489 mprsas_prepare_remove(struct mprsas_softc *sassc, uint16_t handle)
496 MPR_FUNCTRACE(sassc->sc);
498 sc = sassc->sc;
500 targ = mprsas_find_target_by_handle(sassc, 0, handle);
712 &sc->sassc->mprsas_eh);
720 struct mprsas_softc *sassc;
726 sassc = malloc(sizeof(struct mprsas_softc), M_MPR, M_WAITOK|M_ZERO);
727 if (!sassc) {
739 sassc->maxtargets = sc->facts->MaxTargets;
740 sassc->targets = malloc(sizeof(struct mprsas_target) *
741 sassc->maxtargets, M_MPR, M_WAITOK|M_ZERO);
742 if (!sassc->targets) {
745 free(sassc, M_MPR);
748 sc->sassc = sassc;
749 sassc->sc = sc;
751 if ((sassc->devq = cam_simq_alloc(sc->num_reqs)) == NULL) {
758 sassc->sim = cam_sim_alloc(mprsas_action, mprsas_poll, "mpr", sassc,
759 unit, &sc->mpr_mtx, sc->num_reqs, sc->num_reqs, sassc->devq);
760 if (sassc->sim == NULL) {
766 TAILQ_INIT(&sassc->ev_queue);
769 TASK_INIT(&sassc->ev_task, 0, mprsas_firmware_event_work, sc);
770 sassc->ev_tq = taskqueue_create("mpr_taskq", M_NOWAIT | M_ZERO,
771 taskqueue_thread_enqueue, &sassc->ev_tq);
774 taskqueue_start_threads(&sassc->ev_tq, 1, 255, "%s taskq",
784 if ((error = xpt_bus_register(sassc->sim, sc->mpr_dev, 0)) != 0) {
796 sassc->flags |= MPRSAS_IN_STARTUP | MPRSAS_IN_DISCOVERY;
797 sc->sassc->startup_refcount = 0;
798 mprsas_startup_increment(sassc);
800 callout_init(&sassc->discovery_callout, 1 /*mpsafe*/);
806 status = xpt_create_path(&sassc->path, /*periph*/NULL,
807 cam_sim_path(sc->sassc->sim), CAM_TARGET_WILDCARD,
811 sassc->path = NULL;
861 sassc->path);
868 xpt_free_path(sassc->path);
869 sassc->path = NULL;
892 struct mprsas_softc *sassc;
899 if (sc->sassc == NULL)
902 sassc = sc->sassc;
903 mpr_deregister_events(sc, sassc->mprsas_eh);
910 if (sassc->ev_tq != NULL)
911 taskqueue_free(sassc->ev_tq);
917 if (sassc->path != NULL) {
918 xpt_register_async(0, mprsas_async, sc, sassc->path);
919 xpt_free_path(sassc->path);
920 sassc->path = NULL;
923 if (sassc->flags & MPRSAS_IN_STARTUP)
924 xpt_release_simq(sassc->sim, 1);
926 if (sassc->sim != NULL) {
927 xpt_bus_deregister(cam_sim_path(sassc->sim));
928 cam_sim_free(sassc->sim, FALSE);
931 sassc->flags |= MPRSAS_SHUTDOWN;
934 if (sassc->devq != NULL)
935 cam_simq_free(sassc->devq);
937 for (i = 0; i < sassc->maxtargets; i++) {
938 targ = &sassc->targets[i];
943 free(sassc->targets, M_MPR);
944 free(sassc, M_MPR);
945 sc->sassc = NULL;
951 mprsas_discovery_end(struct mprsas_softc *sassc)
953 struct mpr_softc *sc = sassc->sc;
957 if (sassc->flags & MPRSAS_DISCOVERY_TIMEOUT_PENDING)
958 callout_stop(&sassc->discovery_callout);
965 struct mprsas_softc *sassc;
967 sassc = cam_sim_softc(sim);
969 MPR_FUNCTRACE(sassc->sc);
970 mpr_dprint(sassc->sc, MPR_TRACE, "ccb func_code 0x%x\n",
972 mtx_assert(&sassc->sc->mpr_mtx, MA_OWNED);
989 cpi->max_target = sassc->maxtargets - 1;
991 cpi->initiator_id = sassc->maxtargets - 1;
1027 KASSERT(cts->ccb_h.target_id < sassc->maxtargets,
1030 targ = &sassc->targets[cts->ccb_h.target_id];
1070 mpr_dprint(sassc->sc, MPR_XINFO,
1072 mprsas_action_resetdev(sassc, ccb);
1077 mpr_dprint(sassc->sc, MPR_XINFO,
1082 mprsas_action_scsiio(sassc, ccb);
1086 mprsas_action_smpio(sassc, ccb);
1101 path_id_t path_id = cam_sim_path(sc->sassc->sim);
1185 sc->sassc->flags |= MPRSAS_IN_STARTUP;
1186 sc->sassc->flags |= MPRSAS_IN_DISCOVERY;
1187 mprsas_startup_increment(sc->sassc);
1197 __func__, sc->sassc->startup_refcount);
1203 for (i = 0; i < sc->sassc->maxtargets; i++) {
1204 if (sc->sassc->targets[i].outstanding != 0)
1206 i, sc->sassc->targets[i].outstanding);
1207 sc->sassc->targets[i].handle = 0x0;
1208 sc->sassc->targets[i].exp_dev_handle = 0x0;
1209 sc->sassc->targets[i].outstanding = 0;
1210 sc->sassc->targets[i].flags = MPRSAS_TARGET_INDIAGRESET;
1677 mprsas_action_scsiio(struct mprsas_softc *sassc, union ccb *ccb)
1689 sc = sassc->sc;
1694 KASSERT(csio->ccb_h.target_id < sassc->maxtargets,
1697 targ = &sassc->targets[csio->ccb_h.target_id];
1763 if ((sassc->flags & MPRSAS_QUEUE_FROZEN) == 0) {
1764 xpt_freeze_simq(sassc->sim, 1);
1765 sassc->flags |= MPRSAS_QUEUE_FROZEN;
2150 struct mprsas_softc *sassc;
2167 sassc = sc->sassc;
2242 if ((sassc->flags & MPRSAS_QUEUE_FROZEN) == 0) {
2243 xpt_freeze_simq(sassc->sim, 1);
2244 sassc->flags |= MPRSAS_QUEUE_FROZEN;
2271 if (sassc->flags & MPRSAS_QUEUE_FROZEN) {
2273 sassc->flags &= ~MPRSAS_QUEUE_FROZEN;
2424 target = &sassc->targets[target_id];
2502 if (sassc->flags & MPRSAS_QUEUE_FROZEN) {
2504 sassc->flags &= ~MPRSAS_QUEUE_FROZEN;
2583 mprsas_send_smpcmd(struct mprsas_softc *sassc, union ccb *ccb,
2593 sc = sassc->sc;
2815 mprsas_action_smpio(struct mprsas_softc *sassc, union ccb *ccb)
2821 sc = sassc->sc;
2826 KASSERT(ccb->ccb_h.target_id < sassc->maxtargets,
2828 targ = &sassc->targets[ccb->ccb_h.target_id];
2884 parent_target = mprsas_find_target_by_handle(sassc, 0,
2933 mprsas_send_smpcmd(sassc, ccb, sasaddr);
2944 mprsas_action_resetdev(struct mprsas_softc *sassc, union ccb *ccb)
2951 MPR_FUNCTRACE(sassc->sc);
2952 mtx_assert(&sassc->sc->mpr_mtx, MA_OWNED);
2954 KASSERT(ccb->ccb_h.target_id < sassc->maxtargets,
2957 sc = sassc->sc;
2967 targ = &sassc->targets[ccb->ccb_h.target_id];
3040 struct mprsas_softc *sassc;
3042 sassc = cam_sim_softc(sim);
3044 if (sassc->sc->mpr_debug & MPR_TRACE) {
3048 mpr_dprint(sassc->sc, MPR_XINFO, "%s clearing MPR_TRACE\n",
3050 sassc->sc->mpr_debug &= ~MPR_TRACE;
3053 mpr_intr_locked(sassc->sc);
3069 struct mprsas_softc *sassc;
3080 sassc = sc->sassc;
3096 if (xpt_path_path_id(path) != sassc->sim->path_id)
3103 KASSERT(xpt_path_target_id(path) < sassc->maxtargets,
3106 target = &sassc->targets[xpt_path_target_id(path)];
3170 if (xpt_path_path_id(path) != sc->sassc->sim->path_id)
3192 struct mprsas_softc *sassc = sc->sassc;
3206 pathid = cam_sim_path(sassc->sim);
3210 KASSERT(targetid < sassc->maxtargets,
3212 target = &sassc->targets[targetid];
3306 ccb->ccb_h.ppriv_ptr1 = sassc;
3313 struct mprsas_softc *sassc;
3341 sassc = (struct mprsas_softc *)done_ccb->ccb_h.ppriv_ptr1;
3342 KASSERT(done_ccb->ccb_h.target_id < sassc->maxtargets,
3345 target = &sassc->targets[done_ccb->ccb_h.target_id];
3364 mpr_dprint(sassc->sc, MPR_INFO, "LUN %d for target ID "
3398 path_id = cam_sim_path(sc->sassc->sim);
3453 struct mprsas_softc *sassc;
3456 sassc = sc->sassc;
3490 mprsas_startup_decrement(sassc);
3494 mprsas_check_id(struct mprsas_softc *sassc, int id)
3496 struct mpr_softc *sc = sassc->sc;
3514 struct mprsas_softc *sassc;
3519 sassc = sc->sassc;
3526 targ = &sassc->targets[i];
3531 free(sassc->targets, M_MPR);
3533 sassc->targets = malloc(sizeof(struct mprsas_target) * maxtargets,
3535 if (!sassc->targets) {