Lines Matching defs:tskim
119 BFA_IOIM_SM_TMSTART = 15, /* IO cleanup from tskim */
120 BFA_IOIM_SM_TMDONE = 16, /* IO cleanup from tskim */
254 static bfa_boolean_t bfa_tskim_match_scope(struct bfa_tskim_s *tskim,
256 static void bfa_tskim_gather_ios(struct bfa_tskim_s *tskim);
258 static void bfa_tskim_cleanup_ios(struct bfa_tskim_s *tskim);
259 static bfa_boolean_t bfa_tskim_send(struct bfa_tskim_s *tskim);
260 static bfa_boolean_t bfa_tskim_send_abort(struct bfa_tskim_s *tskim);
261 static void bfa_tskim_iocdisable_ios(struct bfa_tskim_s *tskim);
266 static void bfa_tskim_sm_uninit(struct bfa_tskim_s *tskim,
268 static void bfa_tskim_sm_active(struct bfa_tskim_s *tskim,
270 static void bfa_tskim_sm_cleanup(struct bfa_tskim_s *tskim,
272 static void bfa_tskim_sm_iocleanup(struct bfa_tskim_s *tskim,
274 static void bfa_tskim_sm_qfull(struct bfa_tskim_s *tskim,
276 static void bfa_tskim_sm_cleanup_qfull(struct bfa_tskim_s *tskim,
278 static void bfa_tskim_sm_hcb(struct bfa_tskim_s *tskim,
967 struct bfa_tskim_s *tskim;
972 tskim = (struct bfa_tskim_s *) qe;
973 bfa_tskim_iocdisable(tskim);
1014 struct bfa_tskim_s *tskim;
1034 tskim = (struct bfa_tskim_s *) qe;
1036 bfa_tskim_cleanup(tskim);
2678 if (!ioim->iosp->tskim) {
2686 bfa_wc_down(&ioim->iosp->tskim->wc);
2890 ioim->iosp->tskim = NULL;
2895 bfa_ioim_cleanup_tm(struct bfa_ioim_s *ioim, struct bfa_tskim_s *tskim)
2900 ioim->iosp->tskim = tskim;
3027 bfa_tskim_sm_uninit(struct bfa_tskim_s *tskim, enum bfa_tskim_event event)
3029 bfa_trc(tskim->bfa, tskim->tsk_tag << 16 | event);
3033 bfa_sm_set_state(tskim, bfa_tskim_sm_active);
3034 bfa_tskim_gather_ios(tskim);
3040 if (!bfa_itnim_is_online(tskim->itnim)) {
3041 bfa_sm_set_state(tskim, bfa_tskim_sm_iocleanup);
3042 tskim->tsk_status = BFI_TSKIM_STS_OK;
3043 bfa_tskim_cleanup_ios(tskim);
3047 if (!bfa_tskim_send(tskim)) {
3048 bfa_sm_set_state(tskim, bfa_tskim_sm_qfull);
3049 bfa_stats(tskim->itnim, tm_qwait);
3050 bfa_reqq_wait(tskim->bfa, tskim->itnim->reqq,
3051 &tskim->reqq_wait);
3056 bfa_sm_fault(tskim->bfa, event);
3065 bfa_tskim_sm_active(struct bfa_tskim_s *tskim, enum bfa_tskim_event event)
3067 bfa_trc(tskim->bfa, tskim->tsk_tag << 16 | event);
3071 bfa_sm_set_state(tskim, bfa_tskim_sm_iocleanup);
3072 bfa_tskim_cleanup_ios(tskim);
3076 bfa_sm_set_state(tskim, bfa_tskim_sm_cleanup);
3077 if (!bfa_tskim_send_abort(tskim)) {
3078 bfa_sm_set_state(tskim, bfa_tskim_sm_cleanup_qfull);
3079 bfa_stats(tskim->itnim, tm_qwait);
3080 bfa_reqq_wait(tskim->bfa, tskim->itnim->reqq,
3081 &tskim->reqq_wait);
3086 bfa_sm_set_state(tskim, bfa_tskim_sm_hcb);
3087 bfa_tskim_iocdisable_ios(tskim);
3088 bfa_tskim_qcomp(tskim, __bfa_cb_tskim_failed);
3092 bfa_sm_fault(tskim->bfa, event);
3101 bfa_tskim_sm_cleanup(struct bfa_tskim_s *tskim, enum bfa_tskim_event event)
3103 bfa_trc(tskim->bfa, tskim->tsk_tag << 16 | event);
3114 bfa_sm_set_state(tskim, bfa_tskim_sm_iocleanup);
3115 bfa_tskim_cleanup_ios(tskim);
3119 bfa_sm_set_state(tskim, bfa_tskim_sm_hcb);
3120 bfa_tskim_iocdisable_ios(tskim);
3121 bfa_tskim_qcomp(tskim, __bfa_cb_tskim_failed);
3125 bfa_sm_fault(tskim->bfa, event);
3130 bfa_tskim_sm_iocleanup(struct bfa_tskim_s *tskim, enum bfa_tskim_event event)
3132 bfa_trc(tskim->bfa, tskim->tsk_tag << 16 | event);
3136 bfa_sm_set_state(tskim, bfa_tskim_sm_hcb);
3137 bfa_tskim_qcomp(tskim, __bfa_cb_tskim_done);
3148 bfa_sm_set_state(tskim, bfa_tskim_sm_hcb);
3149 bfa_tskim_iocdisable_ios(tskim);
3150 bfa_tskim_qcomp(tskim, __bfa_cb_tskim_failed);
3154 bfa_sm_fault(tskim->bfa, event);
3162 bfa_tskim_sm_qfull(struct bfa_tskim_s *tskim, enum bfa_tskim_event event)
3164 bfa_trc(tskim->bfa, tskim->tsk_tag << 16 | event);
3168 bfa_sm_set_state(tskim, bfa_tskim_sm_active);
3169 bfa_tskim_send(tskim);
3176 bfa_sm_set_state(tskim, bfa_tskim_sm_iocleanup);
3177 bfa_reqq_wcancel(&tskim->reqq_wait);
3178 bfa_tskim_cleanup_ios(tskim);
3182 bfa_sm_set_state(tskim, bfa_tskim_sm_hcb);
3183 bfa_reqq_wcancel(&tskim->reqq_wait);
3184 bfa_tskim_iocdisable_ios(tskim);
3185 bfa_tskim_qcomp(tskim, __bfa_cb_tskim_failed);
3189 bfa_sm_fault(tskim->bfa, event);
3198 bfa_tskim_sm_cleanup_qfull(struct bfa_tskim_s *tskim,
3201 bfa_trc(tskim->bfa, tskim->tsk_tag << 16 | event);
3205 bfa_reqq_wcancel(&tskim->reqq_wait);
3208 bfa_sm_set_state(tskim, bfa_tskim_sm_cleanup);
3209 bfa_tskim_send_abort(tskim);
3213 bfa_sm_set_state(tskim, bfa_tskim_sm_hcb);
3214 bfa_reqq_wcancel(&tskim->reqq_wait);
3215 bfa_tskim_iocdisable_ios(tskim);
3216 bfa_tskim_qcomp(tskim, __bfa_cb_tskim_failed);
3220 bfa_sm_fault(tskim->bfa, event);
3228 bfa_tskim_sm_hcb(struct bfa_tskim_s *tskim, enum bfa_tskim_event event)
3230 bfa_trc(tskim->bfa, tskim->tsk_tag << 16 | event);
3234 bfa_sm_set_state(tskim, bfa_tskim_sm_uninit);
3235 bfa_tskim_free(tskim);
3239 bfa_tskim_notify_comp(tskim);
3246 bfa_sm_fault(tskim->bfa, event);
3253 struct bfa_tskim_s *tskim = cbarg;
3256 bfa_sm_send_event(tskim, BFA_TSKIM_SM_HCB);
3260 bfa_stats(tskim->itnim, tm_success);
3261 bfa_cb_tskim_done(tskim->bfa->bfad, tskim->dtsk, tskim->tsk_status);
3267 struct bfa_tskim_s *tskim = cbarg;
3270 bfa_sm_send_event(tskim, BFA_TSKIM_SM_HCB);
3274 bfa_stats(tskim->itnim, tm_failures);
3275 bfa_cb_tskim_done(tskim->bfa->bfad, tskim->dtsk,
3280 bfa_tskim_match_scope(struct bfa_tskim_s *tskim, struct scsi_lun lun)
3282 switch (tskim->tm_cmnd) {
3290 return !memcmp(&tskim->lun, &lun, sizeof(lun));
3303 bfa_tskim_gather_ios(struct bfa_tskim_s *tskim)
3305 struct bfa_itnim_s *itnim = tskim->itnim;
3311 INIT_LIST_HEAD(&tskim->io_q);
3320 if (bfa_tskim_match_scope(tskim, scsilun)) {
3322 list_add_tail(&ioim->qe, &tskim->io_q);
3333 if (bfa_tskim_match_scope(tskim, scsilun)) {
3347 struct bfa_tskim_s *tskim = tskim_cbarg;
3349 bfa_stats(tskim->itnim, tm_io_comps);
3350 bfa_sm_send_event(tskim, BFA_TSKIM_SM_IOS_DONE);
3357 bfa_tskim_cleanup_ios(struct bfa_tskim_s *tskim)
3362 bfa_wc_init(&tskim->wc, bfa_tskim_cleanp_comp, tskim);
3364 list_for_each_safe(qe, qen, &tskim->io_q) {
3366 bfa_wc_up(&tskim->wc);
3367 bfa_ioim_cleanup_tm(ioim, tskim);
3370 bfa_wc_wait(&tskim->wc);
3377 bfa_tskim_send(struct bfa_tskim_s *tskim)
3379 struct bfa_itnim_s *itnim = tskim->itnim;
3385 m = bfa_reqq_next(tskim->bfa, itnim->reqq);
3393 bfa_fn_lpu(tskim->bfa));
3395 m->tsk_tag = cpu_to_be16(tskim->tsk_tag);
3396 m->itn_fhdl = tskim->itnim->rport->fw_handle;
3397 m->t_secs = tskim->tsecs;
3398 m->lun = tskim->lun;
3399 m->tm_flags = tskim->tm_cmnd;
3404 bfa_reqq_produce(tskim->bfa, itnim->reqq, m->mh);
3412 bfa_tskim_send_abort(struct bfa_tskim_s *tskim)
3414 struct bfa_itnim_s *itnim = tskim->itnim;
3420 m = bfa_reqq_next(tskim->bfa, itnim->reqq);
3428 bfa_fn_lpu(tskim->bfa));
3430 m->tsk_tag = cpu_to_be16(tskim->tsk_tag);
3435 bfa_reqq_produce(tskim->bfa, itnim->reqq, m->mh);
3445 struct bfa_tskim_s *tskim = cbarg;
3447 bfa_stats(tskim->itnim, tm_qresumes);
3448 bfa_sm_send_event(tskim, BFA_TSKIM_SM_QRESUME);
3455 bfa_tskim_iocdisable_ios(struct bfa_tskim_s *tskim)
3460 list_for_each_safe(qe, qen, &tskim->io_q) {
3470 bfa_tskim_iodone(struct bfa_tskim_s *tskim)
3472 bfa_wc_down(&tskim->wc);
3479 bfa_tskim_iocdisable(struct bfa_tskim_s *tskim)
3481 tskim->notify = BFA_FALSE;
3482 bfa_stats(tskim->itnim, tm_iocdowns);
3483 bfa_sm_send_event(tskim, BFA_TSKIM_SM_HWFAIL);
3490 bfa_tskim_cleanup(struct bfa_tskim_s *tskim)
3492 tskim->notify = BFA_TRUE;
3493 bfa_stats(tskim->itnim, tm_cleanups);
3494 bfa_sm_send_event(tskim, BFA_TSKIM_SM_CLEANUP);
3503 struct bfa_tskim_s *tskim;
3510 tskim = (struct bfa_tskim_s *) bfa_mem_kva_curp(fcp);
3511 fcpim->tskim_arr = tskim;
3513 for (i = 0; i < fcpim->num_tskim_reqs; i++, tskim++) {
3517 memset(tskim, 0, sizeof(struct bfa_tskim_s));
3518 tskim->tsk_tag = i;
3519 tskim->bfa = fcpim->bfa;
3520 tskim->fcpim = fcpim;
3521 tskim->notify = BFA_FALSE;
3522 bfa_reqq_winit(&tskim->reqq_wait, bfa_tskim_qresume,
3523 tskim);
3524 bfa_sm_set_state(tskim, bfa_tskim_sm_uninit);
3526 list_add_tail(&tskim->qe, &fcpim->tskim_free_q);
3529 bfa_mem_kva_curp(fcp) = (u8 *) tskim;
3537 struct bfa_tskim_s *tskim;
3540 tskim = BFA_TSKIM_FROM_TAG(fcpim, tsk_tag);
3541 WARN_ON(tskim->tsk_tag != tsk_tag);
3543 tskim->tsk_status = rsp->tsk_status;
3550 bfa_stats(tskim->itnim, tm_cleanup_comps);
3551 bfa_sm_send_event(tskim, BFA_TSKIM_SM_CLEANUP_DONE);
3553 bfa_sm_send_event(tskim, BFA_TSKIM_SM_UTAG);
3555 bfa_stats(tskim->itnim, tm_fw_rsps);
3556 bfa_sm_send_event(tskim, BFA_TSKIM_SM_DONE);
3565 struct bfa_tskim_s *tskim;
3567 bfa_q_deq(&fcpim->tskim_free_q, &tskim);
3569 if (tskim)
3570 tskim->dtsk = dtsk;
3572 return tskim;
3576 bfa_tskim_free(struct bfa_tskim_s *tskim)
3578 WARN_ON(!bfa_q_is_on_q_func(&tskim->itnim->tsk_q, &tskim->qe));
3579 list_del(&tskim->qe);
3580 list_add_tail(&tskim->qe, &tskim->fcpim->tskim_free_q);
3586 * @param[in] tskim BFA task management command instance
3595 bfa_tskim_start(struct bfa_tskim_s *tskim, struct bfa_itnim_s *itnim,
3599 tskim->itnim = itnim;
3600 tskim->lun = lun;
3601 tskim->tm_cmnd = tm_cmnd;
3602 tskim->tsecs = tsecs;
3603 tskim->notify = BFA_FALSE;
3606 list_add_tail(&tskim->qe, &itnim->tsk_q);
3607 bfa_sm_send_event(tskim, BFA_TSKIM_SM_START);