Lines Matching +full:qe +full:- +full:firmware

1 // SPDX-License-Identifier: GPL-2.0-only
3 * Copyright (c) 2005-2014 Brocade Communications Systems, Inc.
4 * Copyright (c) 2014- QLogic Corporation.
8 * Linux driver for QLogic BR-series Fibre Channel Host Bus Adapter.
22 (((_fcpim)->itnim_arr + ((_tag) & ((_fcpim)->num_itnims - 1))))
25 list_add_tail(&(__itnim)->qe, &(__itnim)->fcpim->itnim_q)
27 WARN_ON(!bfa_q_is_on_q(&(__itnim)->fcpim->itnim_q, __itnim)); \
29 list_del(&(__itnim)->qe); \
30 WARN_ON(!list_empty(&(__itnim)->io_q)); \
31 WARN_ON(!list_empty(&(__itnim)->io_cleanup_q)); \
32 WARN_ON(!list_empty(&(__itnim)->pending_q)); \
36 if ((__itnim)->bfa->fcs) \
37 bfa_cb_itnim_online((__itnim)->ditn); \
39 bfa_cb_queue((__itnim)->bfa, &(__itnim)->hcb_qe, \
45 if ((__itnim)->bfa->fcs) \
46 bfa_cb_itnim_offline((__itnim)->ditn); \
48 bfa_cb_queue((__itnim)->bfa, &(__itnim)->hcb_qe, \
54 if ((__itnim)->bfa->fcs) \
55 bfa_cb_itnim_sler((__itnim)->ditn); \
57 bfa_cb_queue((__itnim)->bfa, &(__itnim)->hcb_qe, \
71 list_del(&(__ioim)->qe); \
72 list_add_tail(&(__ioim)->qe, &(__ioim)->fcpim->ioim_comp_q); \
77 if ((__fcpim)->profile_comp) \
78 (__fcpim)->profile_comp(__ioim); \
82 if ((__fcpim)->profile_start) \
83 (__fcpim)->profile_start(__ioim); \
95 bfa_cb_queue((__tskim)->bfa, &(__tskim)->hcb_qe, __cbfn, (__tskim));\
100 if ((__tskim)->notify) \
101 bfa_itnim_tskdone((__tskim)->itnim); \
244 *km_len += cfg->fwcfg.num_ioim_reqs * in bfa_fcpim_meminfo()
250 if (cfg->fwcfg.num_tskim_reqs < BFA_TSKIM_MIN) in bfa_fcpim_meminfo()
251 cfg->fwcfg.num_tskim_reqs = BFA_TSKIM_MIN; in bfa_fcpim_meminfo()
252 *km_len += cfg->fwcfg.num_tskim_reqs * sizeof(struct bfa_tskim_s); in bfa_fcpim_meminfo()
260 struct bfa_fcpim_s *fcpim = &fcp->fcpim; in bfa_fcpim_attach()
261 struct bfa_s *bfa = fcp->bfa; in bfa_fcpim_attach()
263 bfa_trc(bfa, cfg->drvcfg.path_tov); in bfa_fcpim_attach()
264 bfa_trc(bfa, cfg->fwcfg.num_rports); in bfa_fcpim_attach()
265 bfa_trc(bfa, cfg->fwcfg.num_ioim_reqs); in bfa_fcpim_attach()
266 bfa_trc(bfa, cfg->fwcfg.num_tskim_reqs); in bfa_fcpim_attach()
268 fcpim->fcp = fcp; in bfa_fcpim_attach()
269 fcpim->bfa = bfa; in bfa_fcpim_attach()
270 fcpim->num_itnims = cfg->fwcfg.num_rports; in bfa_fcpim_attach()
271 fcpim->num_tskim_reqs = cfg->fwcfg.num_tskim_reqs; in bfa_fcpim_attach()
272 fcpim->path_tov = cfg->drvcfg.path_tov; in bfa_fcpim_attach()
273 fcpim->delay_comp = cfg->drvcfg.delay_comp; in bfa_fcpim_attach()
274 fcpim->profile_comp = NULL; in bfa_fcpim_attach()
275 fcpim->profile_start = NULL; in bfa_fcpim_attach()
285 struct bfa_fcpim_s *fcpim = &fcp->fcpim; in bfa_fcpim_iocdisable()
287 struct list_head *qe, *qen; in bfa_fcpim_iocdisable() local
290 list_splice_tail_init(&fcpim->tskim_unused_q, &fcpim->tskim_free_q); in bfa_fcpim_iocdisable()
292 list_for_each_safe(qe, qen, &fcpim->itnim_q) { in bfa_fcpim_iocdisable()
293 itnim = (struct bfa_itnim_s *) qe; in bfa_fcpim_iocdisable()
303 fcpim->path_tov = path_tov * 1000; in bfa_fcpim_path_tov_set()
304 if (fcpim->path_tov > BFA_FCPIM_PATHTOV_MAX) in bfa_fcpim_path_tov_set()
305 fcpim->path_tov = BFA_FCPIM_PATHTOV_MAX; in bfa_fcpim_path_tov_set()
313 return fcpim->path_tov / 1000; in bfa_fcpim_path_tov_get()
317 (__l->__stats += __r->__stats)
374 struct list_head *qe, *qen; in bfa_fcpim_port_iostats() local
379 list_for_each_safe(qe, qen, &fcpim->itnim_q) { in bfa_fcpim_port_iostats()
380 itnim = (struct bfa_itnim_s *) qe; in bfa_fcpim_port_iostats()
381 if (itnim->rport->rport_info.lp_tag != lp_tag) in bfa_fcpim_port_iostats()
383 bfa_fcpim_add_stats(stats, &(itnim->stats)); in bfa_fcpim_port_iostats()
392 &(ioim->itnim->ioprofile.io_latency); in bfa_ioim_profile_comp()
395 val = (u32)(jiffies - ioim->start_time); in bfa_ioim_profile_comp()
396 idx = bfa_ioim_get_index(scsi_bufflen((struct scsi_cmnd *)ioim->dio)); in bfa_ioim_profile_comp()
397 bfa_itnim_ioprofile_update(ioim->itnim, idx); in bfa_ioim_profile_comp()
399 io_lat->count[idx]++; in bfa_ioim_profile_comp()
400 io_lat->min[idx] = (io_lat->min[idx] < val) ? io_lat->min[idx] : val; in bfa_ioim_profile_comp()
401 io_lat->max[idx] = (io_lat->max[idx] > val) ? io_lat->max[idx] : val; in bfa_ioim_profile_comp()
402 io_lat->avg[idx] += val; in bfa_ioim_profile_comp()
408 ioim->start_time = jiffies; in bfa_ioim_profile_start()
416 struct list_head *qe, *qen; in bfa_fcpim_profile_on() local
419 list_for_each_safe(qe, qen, &fcpim->itnim_q) { in bfa_fcpim_profile_on()
420 itnim = (struct bfa_itnim_s *) qe; in bfa_fcpim_profile_on()
423 fcpim->io_profile = BFA_TRUE; in bfa_fcpim_profile_on()
424 fcpim->io_profile_start_time = time; in bfa_fcpim_profile_on()
425 fcpim->profile_comp = bfa_ioim_profile_comp; in bfa_fcpim_profile_on()
426 fcpim->profile_start = bfa_ioim_profile_start; in bfa_fcpim_profile_on()
434 fcpim->io_profile = BFA_FALSE; in bfa_fcpim_profile_off()
435 fcpim->io_profile_start_time = 0; in bfa_fcpim_profile_off()
436 fcpim->profile_comp = NULL; in bfa_fcpim_profile_off()
437 fcpim->profile_start = NULL; in bfa_fcpim_profile_off()
446 return fcpim->q_depth; in bfa_fcpim_qdepth_get()
454 * Beginning/unallocated state - no events expected.
459 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_uninit()
460 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_uninit()
465 itnim->is_online = BFA_FALSE; in bfa_itnim_sm_uninit()
470 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_uninit()
480 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_created()
481 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_created()
501 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_created()
506 * Waiting for itnim create response from firmware.
511 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_fwcreate()
512 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_fwcreate()
517 itnim->is_online = BFA_TRUE; in bfa_itnim_sm_fwcreate()
538 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_fwcreate()
546 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_fwcreate_qfull()
547 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_fwcreate_qfull()
557 bfa_reqq_wcancel(&itnim->reqq_wait); in bfa_itnim_sm_fwcreate_qfull()
563 bfa_reqq_wcancel(&itnim->reqq_wait); in bfa_itnim_sm_fwcreate_qfull()
569 bfa_reqq_wcancel(&itnim->reqq_wait); in bfa_itnim_sm_fwcreate_qfull()
573 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_fwcreate_qfull()
578 * Waiting for itnim create response from firmware, a delete is pending.
584 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_delete_pending()
585 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_delete_pending()
601 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_delete_pending()
606 * Online state - normal parking state.
611 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_online()
612 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_online()
617 itnim->is_online = BFA_FALSE; in bfa_itnim_sm_online()
624 itnim->is_online = BFA_FALSE; in bfa_itnim_sm_online()
630 itnim->is_online = BFA_FALSE; in bfa_itnim_sm_online()
637 itnim->is_online = BFA_FALSE; in bfa_itnim_sm_online()
643 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_online()
653 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_sler()
654 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_sler()
674 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_sler()
685 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_cleanup_offline()
686 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_cleanup_offline()
711 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_cleanup_offline()
722 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_cleanup_delete()
723 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_cleanup_delete()
739 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_cleanup_delete()
744 * Rport offline. Fimrware itnim is being deleted - awaiting f/w response.
749 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_fwdelete()
750 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_fwdelete()
768 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_fwdelete()
776 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_fwdelete_qfull()
777 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_fwdelete_qfull()
791 bfa_reqq_wcancel(&itnim->reqq_wait); in bfa_itnim_sm_fwdelete_qfull()
796 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_fwdelete_qfull()
806 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_offline()
807 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_offline()
828 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_offline()
836 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_iocdisable()
837 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_iocdisable()
861 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_iocdisable()
866 * Itnim is deleted, waiting for firmware response to delete.
871 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_deleting()
872 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_deleting()
882 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_deleting()
890 bfa_trc(itnim->bfa, itnim->rport->rport_tag); in bfa_itnim_sm_deleting_qfull()
891 bfa_trc(itnim->bfa, event); in bfa_itnim_sm_deleting_qfull()
901 bfa_reqq_wcancel(&itnim->reqq_wait); in bfa_itnim_sm_deleting_qfull()
906 bfa_sm_fault(itnim->bfa, event); in bfa_itnim_sm_deleting_qfull()
918 struct list_head *qe, *qen; in bfa_itnim_iocdisable_cleanup() local
920 list_for_each_safe(qe, qen, &itnim->tsk_q) { in bfa_itnim_iocdisable_cleanup()
921 tskim = (struct bfa_tskim_s *) qe; in bfa_itnim_iocdisable_cleanup()
925 list_for_each_safe(qe, qen, &itnim->io_q) { in bfa_itnim_iocdisable_cleanup()
926 ioim = (struct bfa_ioim_s *) qe; in bfa_itnim_iocdisable_cleanup()
933 list_for_each_safe(qe, qen, &itnim->pending_q) { in bfa_itnim_iocdisable_cleanup()
934 ioim = (struct bfa_ioim_s *) qe; in bfa_itnim_iocdisable_cleanup()
938 list_for_each_safe(qe, qen, &itnim->io_cleanup_q) { in bfa_itnim_iocdisable_cleanup()
939 ioim = (struct bfa_ioim_s *) qe; in bfa_itnim_iocdisable_cleanup()
964 struct list_head *qe, *qen; in bfa_itnim_cleanup() local
966 bfa_wc_init(&itnim->wc, bfa_itnim_cleanp_comp, itnim); in bfa_itnim_cleanup()
968 list_for_each_safe(qe, qen, &itnim->io_q) { in bfa_itnim_cleanup()
969 ioim = (struct bfa_ioim_s *) qe; in bfa_itnim_cleanup()
975 list_del(&ioim->qe); in bfa_itnim_cleanup()
976 list_add_tail(&ioim->qe, &itnim->io_cleanup_q); in bfa_itnim_cleanup()
978 bfa_wc_up(&itnim->wc); in bfa_itnim_cleanup()
982 list_for_each_safe(qe, qen, &itnim->tsk_q) { in bfa_itnim_cleanup()
983 tskim = (struct bfa_tskim_s *) qe; in bfa_itnim_cleanup()
984 bfa_wc_up(&itnim->wc); in bfa_itnim_cleanup()
988 bfa_wc_wait(&itnim->wc); in bfa_itnim_cleanup()
997 bfa_cb_itnim_online(itnim->ditn); in __bfa_cb_itnim_online()
1006 bfa_cb_itnim_offline(itnim->ditn); in __bfa_cb_itnim_offline()
1015 bfa_cb_itnim_sler(itnim->ditn); in __bfa_cb_itnim_sler()
1036 bfa_wc_down(&itnim->wc); in bfa_itnim_iodone()
1042 bfa_wc_down(&itnim->wc); in bfa_itnim_tskdone()
1051 *km_len += cfg->fwcfg.num_rports * sizeof(struct bfa_itnim_s); in bfa_itnim_meminfo()
1057 struct bfa_s *bfa = fcpim->bfa; in bfa_itnim_attach()
1058 struct bfa_fcp_mod_s *fcp = fcpim->fcp; in bfa_itnim_attach()
1062 INIT_LIST_HEAD(&fcpim->itnim_q); in bfa_itnim_attach()
1065 fcpim->itnim_arr = itnim; in bfa_itnim_attach()
1067 for (i = 0; i < fcpim->num_itnims; i++, itnim++) { in bfa_itnim_attach()
1069 itnim->bfa = bfa; in bfa_itnim_attach()
1070 itnim->fcpim = fcpim; in bfa_itnim_attach()
1071 itnim->reqq = BFA_REQQ_QOS_LO; in bfa_itnim_attach()
1072 itnim->rport = BFA_RPORT_FROM_TAG(bfa, i); in bfa_itnim_attach()
1073 itnim->iotov_active = BFA_FALSE; in bfa_itnim_attach()
1074 bfa_reqq_winit(&itnim->reqq_wait, bfa_itnim_qresume, itnim); in bfa_itnim_attach()
1076 INIT_LIST_HEAD(&itnim->io_q); in bfa_itnim_attach()
1077 INIT_LIST_HEAD(&itnim->io_cleanup_q); in bfa_itnim_attach()
1078 INIT_LIST_HEAD(&itnim->pending_q); in bfa_itnim_attach()
1079 INIT_LIST_HEAD(&itnim->tsk_q); in bfa_itnim_attach()
1080 INIT_LIST_HEAD(&itnim->delay_comp_q); in bfa_itnim_attach()
1082 itnim->ioprofile.io_latency.min[j] = ~0; in bfa_itnim_attach()
1101 itnim->msg_no++; in bfa_itnim_send_fwcreate()
1106 m = bfa_reqq_next(itnim->bfa, itnim->reqq); in bfa_itnim_send_fwcreate()
1108 bfa_reqq_wait(itnim->bfa, itnim->reqq, &itnim->reqq_wait); in bfa_itnim_send_fwcreate()
1112 bfi_h2i_set(m->mh, BFI_MC_ITN, BFI_ITN_H2I_CREATE_REQ, in bfa_itnim_send_fwcreate()
1113 bfa_fn_lpu(itnim->bfa)); in bfa_itnim_send_fwcreate()
1114 m->fw_handle = itnim->rport->fw_handle; in bfa_itnim_send_fwcreate()
1115 m->class = FC_CLASS_3; in bfa_itnim_send_fwcreate()
1116 m->seq_rec = itnim->seq_rec; in bfa_itnim_send_fwcreate()
1117 m->msg_no = itnim->msg_no; in bfa_itnim_send_fwcreate()
1121 * queue I/O message to firmware in bfa_itnim_send_fwcreate()
1123 bfa_reqq_produce(itnim->bfa, itnim->reqq, m->mh); in bfa_itnim_send_fwcreate()
1135 m = bfa_reqq_next(itnim->bfa, itnim->reqq); in bfa_itnim_send_fwdelete()
1137 bfa_reqq_wait(itnim->bfa, itnim->reqq, &itnim->reqq_wait); in bfa_itnim_send_fwdelete()
1141 bfi_h2i_set(m->mh, BFI_MC_ITN, BFI_ITN_H2I_DELETE_REQ, in bfa_itnim_send_fwdelete()
1142 bfa_fn_lpu(itnim->bfa)); in bfa_itnim_send_fwdelete()
1143 m->fw_handle = itnim->rport->fw_handle; in bfa_itnim_send_fwdelete()
1147 * queue I/O message to firmware in bfa_itnim_send_fwdelete()
1149 bfa_reqq_produce(itnim->bfa, itnim->reqq, m->mh); in bfa_itnim_send_fwdelete()
1160 struct list_head *qe, *qen; in bfa_itnim_delayed_comp() local
1162 list_for_each_safe(qe, qen, &itnim->delay_comp_q) { in bfa_itnim_delayed_comp()
1163 ioim = (struct bfa_ioim_s *)qe; in bfa_itnim_delayed_comp()
1186 while (!list_empty(&itnim->pending_q)) { in bfa_itnim_iotov_online()
1187 bfa_q_deq(&itnim->pending_q, &ioim); in bfa_itnim_iotov_online()
1188 list_add_tail(&ioim->qe, &itnim->io_q); in bfa_itnim_iotov_online()
1209 while (!list_empty(&itnim->pending_q)) { in bfa_itnim_iotov_cleanup()
1210 bfa_q_deq(&itnim->pending_q, &ioim); in bfa_itnim_iotov_cleanup()
1211 list_add_tail(&ioim->qe, &ioim->fcpim->ioim_comp_q); in bfa_itnim_iotov_cleanup()
1224 itnim->iotov_active = BFA_FALSE; in bfa_itnim_iotov()
1226 bfa_cb_itnim_tov_begin(itnim->ditn); in bfa_itnim_iotov()
1228 bfa_cb_itnim_tov(itnim->ditn); in bfa_itnim_iotov()
1237 if (itnim->fcpim->path_tov > 0) { in bfa_itnim_iotov_start()
1239 itnim->iotov_active = BFA_TRUE; in bfa_itnim_iotov_start()
1241 bfa_timer_start(itnim->bfa, &itnim->timer, in bfa_itnim_iotov_start()
1242 bfa_itnim_iotov, itnim, itnim->fcpim->path_tov); in bfa_itnim_iotov_start()
1252 if (itnim->iotov_active) { in bfa_itnim_iotov_stop()
1253 itnim->iotov_active = BFA_FALSE; in bfa_itnim_iotov_stop()
1254 bfa_timer_stop(&itnim->timer); in bfa_itnim_iotov_stop()
1266 if (itnim->iotov_active) in bfa_itnim_iotov_delete()
1271 bfa_cb_itnim_tov_begin(itnim->ditn); in bfa_itnim_iotov_delete()
1274 bfa_cb_itnim_tov(itnim->ditn); in bfa_itnim_iotov_delete()
1280 struct bfa_fcpim_s *fcpim = BFA_FCPIM(itnim->bfa); in bfa_itnim_update_del_itn_stats()
1281 fcpim->del_itn_stats.del_itn_iocomp_aborted += in bfa_itnim_update_del_itn_stats()
1282 itnim->stats.iocomp_aborted; in bfa_itnim_update_del_itn_stats()
1283 fcpim->del_itn_stats.del_itn_iocomp_timedout += in bfa_itnim_update_del_itn_stats()
1284 itnim->stats.iocomp_timedout; in bfa_itnim_update_del_itn_stats()
1285 fcpim->del_itn_stats.del_itn_iocom_sqer_needed += in bfa_itnim_update_del_itn_stats()
1286 itnim->stats.iocom_sqer_needed; in bfa_itnim_update_del_itn_stats()
1287 fcpim->del_itn_stats.del_itn_iocom_res_free += in bfa_itnim_update_del_itn_stats()
1288 itnim->stats.iocom_res_free; in bfa_itnim_update_del_itn_stats()
1289 fcpim->del_itn_stats.del_itn_iocom_hostabrts += in bfa_itnim_update_del_itn_stats()
1290 itnim->stats.iocom_hostabrts; in bfa_itnim_update_del_itn_stats()
1291 fcpim->del_itn_stats.del_itn_total_ios += itnim->stats.total_ios; in bfa_itnim_update_del_itn_stats()
1292 fcpim->del_itn_stats.del_io_iocdowns += itnim->stats.io_iocdowns; in bfa_itnim_update_del_itn_stats()
1293 fcpim->del_itn_stats.del_tm_iocdowns += itnim->stats.tm_iocdowns; in bfa_itnim_update_del_itn_stats()
1310 bfa_trc(bfa, m->mhdr.msg_id); in bfa_itnim_isr()
1314 switch (m->mhdr.msg_id) { in bfa_itnim_isr()
1317 msg.create_rsp->bfa_handle); in bfa_itnim_isr()
1318 WARN_ON(msg.create_rsp->status != BFA_STATUS_OK); in bfa_itnim_isr()
1325 msg.delete_rsp->bfa_handle); in bfa_itnim_isr()
1326 WARN_ON(msg.delete_rsp->status != BFA_STATUS_OK); in bfa_itnim_isr()
1333 msg.sler_event->bfa_handle); in bfa_itnim_isr()
1339 bfa_trc(bfa, m->mhdr.msg_id); in bfa_itnim_isr()
1356 itnim = BFA_ITNIM_FROM_TAG(fcpim, rport->rport_tag); in bfa_itnim_create()
1357 WARN_ON(itnim->rport != rport); in bfa_itnim_create()
1359 itnim->ditn = ditn; in bfa_itnim_create()
1377 itnim->seq_rec = seq_rec; in bfa_itnim_online()
1396 return itnim->fcpim->path_tov && itnim->iotov_active && in bfa_itnim_hold_io()
1416 fcpim = BFA_FCPIM(itnim->bfa); in bfa_itnim_get_ioprofile()
1418 if (!fcpim->io_profile) in bfa_itnim_get_ioprofile()
1421 itnim->ioprofile.index = BFA_IOBUCKET_MAX; in bfa_itnim_get_ioprofile()
1422 /* unsigned 32-bit time_t overflow here in y2106 */ in bfa_itnim_get_ioprofile()
1423 itnim->ioprofile.io_profile_start_time = in bfa_itnim_get_ioprofile()
1424 bfa_io_profile_start_time(itnim->bfa); in bfa_itnim_get_ioprofile()
1425 itnim->ioprofile.clock_res_mul = bfa_io_lat_clock_res_mul; in bfa_itnim_get_ioprofile()
1426 itnim->ioprofile.clock_res_div = bfa_io_lat_clock_res_div; in bfa_itnim_get_ioprofile()
1427 *ioprofile = itnim->ioprofile; in bfa_itnim_get_ioprofile()
1440 memset(&itnim->stats, 0, sizeof(itnim->stats)); in bfa_itnim_clear_stats()
1441 memset(&itnim->ioprofile, 0, sizeof(itnim->ioprofile)); in bfa_itnim_clear_stats()
1443 itnim->ioprofile.io_latency.min[j] = ~0; in bfa_itnim_clear_stats()
1458 if (!bfa_itnim_is_online(ioim->itnim)) { in bfa_ioim_sm_uninit()
1459 if (!bfa_itnim_hold_io(ioim->itnim)) { in bfa_ioim_sm_uninit()
1461 list_del(&ioim->qe); in bfa_ioim_sm_uninit()
1462 list_add_tail(&ioim->qe, in bfa_ioim_sm_uninit()
1463 &ioim->fcpim->ioim_comp_q); in bfa_ioim_sm_uninit()
1464 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, in bfa_ioim_sm_uninit()
1467 list_del(&ioim->qe); in bfa_ioim_sm_uninit()
1468 list_add_tail(&ioim->qe, in bfa_ioim_sm_uninit()
1469 &ioim->itnim->pending_q); in bfa_ioim_sm_uninit()
1474 if (ioim->nsges > BFI_SGE_INLINE) { in bfa_ioim_sm_uninit()
1492 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, in bfa_ioim_sm_uninit()
1502 WARN_ON(!bfa_q_is_on_q(&ioim->itnim->pending_q, ioim)); in bfa_ioim_sm_uninit()
1503 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, in bfa_ioim_sm_uninit()
1508 bfa_sm_fault(ioim->bfa, event); in bfa_ioim_sm_uninit()
1518 bfa_trc(ioim->bfa, ioim->iotag); in bfa_ioim_sm_sgalloc()
1519 bfa_trc(ioim->bfa, event); in bfa_ioim_sm_sgalloc()
1532 bfa_sgpg_wcancel(ioim->bfa, &ioim->iosp->sgpg_wqe); in bfa_ioim_sm_sgalloc()
1533 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_failed, in bfa_ioim_sm_sgalloc()
1540 bfa_sgpg_wcancel(ioim->bfa, &ioim->iosp->sgpg_wqe); in bfa_ioim_sm_sgalloc()
1542 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_abort, in bfa_ioim_sm_sgalloc()
1548 bfa_sgpg_wcancel(ioim->bfa, &ioim->iosp->sgpg_wqe); in bfa_ioim_sm_sgalloc()
1550 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_failed, in bfa_ioim_sm_sgalloc()
1555 bfa_sm_fault(ioim->bfa, event); in bfa_ioim_sm_sgalloc()
1569 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, in bfa_ioim_sm_active()
1576 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_comp, in bfa_ioim_sm_active()
1583 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_comp, in bfa_ioim_sm_active()
1588 ioim->iosp->abort_explicit = BFA_TRUE; in bfa_ioim_sm_active()
1589 ioim->io_cbfn = __bfa_cb_ioim_abort; in bfa_ioim_sm_active()
1595 bfa_stats(ioim->itnim, qwait); in bfa_ioim_sm_active()
1596 bfa_reqq_wait(ioim->bfa, ioim->reqq, in bfa_ioim_sm_active()
1597 &ioim->iosp->reqq_wait); in bfa_ioim_sm_active()
1602 ioim->iosp->abort_explicit = BFA_FALSE; in bfa_ioim_sm_active()
1603 ioim->io_cbfn = __bfa_cb_ioim_failed; in bfa_ioim_sm_active()
1609 bfa_stats(ioim->itnim, qwait); in bfa_ioim_sm_active()
1610 bfa_reqq_wait(ioim->bfa, ioim->reqq, in bfa_ioim_sm_active()
1611 &ioim->iosp->reqq_wait); in bfa_ioim_sm_active()
1618 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_failed, in bfa_ioim_sm_active()
1627 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, in bfa_ioim_sm_active()
1636 bfa_sm_fault(ioim->bfa, event); in bfa_ioim_sm_active()
1658 ioim->iosp->abort_explicit = BFA_FALSE; in bfa_ioim_sm_cmnd_retry()
1659 ioim->io_cbfn = __bfa_cb_ioim_failed; in bfa_ioim_sm_cmnd_retry()
1665 bfa_stats(ioim->itnim, qwait); in bfa_ioim_sm_cmnd_retry()
1666 bfa_reqq_wait(ioim->bfa, ioim->reqq, in bfa_ioim_sm_cmnd_retry()
1667 &ioim->iosp->reqq_wait); in bfa_ioim_sm_cmnd_retry()
1674 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, in bfa_ioim_sm_cmnd_retry()
1683 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_abort, in bfa_ioim_sm_cmnd_retry()
1688 bfa_sm_fault(ioim->bfa, event); in bfa_ioim_sm_cmnd_retry()
1693 * IO is being aborted, waiting for completion from firmware.
1698 bfa_trc(ioim->bfa, ioim->iotag); in bfa_ioim_sm_abort()
1699 bfa_trc(ioim->bfa, event); in bfa_ioim_sm_abort()
1710 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_abort, in bfa_ioim_sm_abort()
1717 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_abort, in bfa_ioim_sm_abort()
1724 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_abort, in bfa_ioim_sm_abort()
1729 WARN_ON(ioim->iosp->abort_explicit != BFA_TRUE); in bfa_ioim_sm_abort()
1730 ioim->iosp->abort_explicit = BFA_FALSE; in bfa_ioim_sm_abort()
1736 bfa_stats(ioim->itnim, qwait); in bfa_ioim_sm_abort()
1737 bfa_reqq_wait(ioim->bfa, ioim->reqq, in bfa_ioim_sm_abort()
1738 &ioim->iosp->reqq_wait); in bfa_ioim_sm_abort()
1745 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_failed, in bfa_ioim_sm_abort()
1750 bfa_sm_fault(ioim->bfa, event); in bfa_ioim_sm_abort()
1756 * firmware.
1761 bfa_trc(ioim->bfa, ioim->iotag); in bfa_ioim_sm_cleanup()
1762 bfa_trc(ioim->bfa, event); in bfa_ioim_sm_cleanup()
1775 ioim->io_cbfn = __bfa_cb_ioim_abort; in bfa_ioim_sm_cleanup()
1780 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, ioim->io_cbfn, ioim); in bfa_ioim_sm_cleanup()
1786 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, ioim->io_cbfn, ioim); in bfa_ioim_sm_cleanup()
1792 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, ioim->io_cbfn, ioim); in bfa_ioim_sm_cleanup()
1799 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_failed, in bfa_ioim_sm_cleanup()
1811 bfa_sm_fault(ioim->bfa, event); in bfa_ioim_sm_cleanup()
1821 bfa_trc(ioim->bfa, ioim->iotag); in bfa_ioim_sm_qfull()
1822 bfa_trc(ioim->bfa, event); in bfa_ioim_sm_qfull()
1832 bfa_reqq_wcancel(&ioim->iosp->reqq_wait); in bfa_ioim_sm_qfull()
1834 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_abort, in bfa_ioim_sm_qfull()
1840 bfa_reqq_wcancel(&ioim->iosp->reqq_wait); in bfa_ioim_sm_qfull()
1841 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_failed, in bfa_ioim_sm_qfull()
1848 bfa_reqq_wcancel(&ioim->iosp->reqq_wait); in bfa_ioim_sm_qfull()
1850 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_failed, in bfa_ioim_sm_qfull()
1855 bfa_sm_fault(ioim->bfa, event); in bfa_ioim_sm_qfull()
1865 bfa_trc(ioim->bfa, ioim->iotag); in bfa_ioim_sm_abort_qfull()
1866 bfa_trc(ioim->bfa, event); in bfa_ioim_sm_abort_qfull()
1875 WARN_ON(ioim->iosp->abort_explicit != BFA_TRUE); in bfa_ioim_sm_abort_qfull()
1876 ioim->iosp->abort_explicit = BFA_FALSE; in bfa_ioim_sm_abort_qfull()
1883 bfa_reqq_wcancel(&ioim->iosp->reqq_wait); in bfa_ioim_sm_abort_qfull()
1885 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_abort, in bfa_ioim_sm_abort_qfull()
1891 bfa_reqq_wcancel(&ioim->iosp->reqq_wait); in bfa_ioim_sm_abort_qfull()
1893 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_abort, in bfa_ioim_sm_abort_qfull()
1899 bfa_reqq_wcancel(&ioim->iosp->reqq_wait); in bfa_ioim_sm_abort_qfull()
1901 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_failed, in bfa_ioim_sm_abort_qfull()
1906 bfa_sm_fault(ioim->bfa, event); in bfa_ioim_sm_abort_qfull()
1916 bfa_trc(ioim->bfa, ioim->iotag); in bfa_ioim_sm_cleanup_qfull()
1917 bfa_trc(ioim->bfa, event); in bfa_ioim_sm_cleanup_qfull()
1929 ioim->io_cbfn = __bfa_cb_ioim_abort; in bfa_ioim_sm_cleanup_qfull()
1935 bfa_reqq_wcancel(&ioim->iosp->reqq_wait); in bfa_ioim_sm_cleanup_qfull()
1936 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, ioim->io_cbfn, ioim); in bfa_ioim_sm_cleanup_qfull()
1942 bfa_reqq_wcancel(&ioim->iosp->reqq_wait); in bfa_ioim_sm_cleanup_qfull()
1943 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, ioim->io_cbfn, ioim); in bfa_ioim_sm_cleanup_qfull()
1949 bfa_reqq_wcancel(&ioim->iosp->reqq_wait); in bfa_ioim_sm_cleanup_qfull()
1951 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, __bfa_cb_ioim_failed, in bfa_ioim_sm_cleanup_qfull()
1956 bfa_sm_fault(ioim->bfa, event); in bfa_ioim_sm_cleanup_qfull()
1980 bfa_sm_fault(ioim->bfa, event); in bfa_ioim_sm_hcb()
1990 bfa_trc(ioim->bfa, ioim->iotag); in bfa_ioim_sm_hcb_free()
1991 bfa_trc(ioim->bfa, event); in bfa_ioim_sm_hcb_free()
1996 list_del(&ioim->qe); in bfa_ioim_sm_hcb_free()
1997 list_add_tail(&ioim->qe, &ioim->fcpim->ioim_resfree_q); in bfa_ioim_sm_hcb_free()
2013 bfa_sm_fault(ioim->bfa, event); in bfa_ioim_sm_hcb_free()
2018 * IO is completed, waiting resource free from firmware.
2023 bfa_trc(ioim->bfa, ioim->iotag); in bfa_ioim_sm_resfree()
2024 bfa_trc(ioim->bfa, event); in bfa_ioim_sm_resfree()
2040 bfa_sm_fault(ioim->bfa, event); in bfa_ioim_sm_resfree()
2076 bfa_cb_ioim_good_comp(ioim->bfa->bfad, ioim->dio); in __bfa_cb_ioim_good_comp()
2093 m = (struct bfi_ioim_rsp_s *) &ioim->iosp->comp_rspmsg; in __bfa_cb_ioim_comp()
2094 if (m->io_status == BFI_IOIM_STS_OK) { in __bfa_cb_ioim_comp()
2098 if ((m->scsi_status == SAM_STAT_CHECK_CONDITION) && in __bfa_cb_ioim_comp()
2099 m->sns_len) { in __bfa_cb_ioim_comp()
2100 sns_len = m->sns_len; in __bfa_cb_ioim_comp()
2101 snsinfo = BFA_SNSINFO_FROM_TAG(ioim->fcpim->fcp, in __bfa_cb_ioim_comp()
2102 ioim->iotag); in __bfa_cb_ioim_comp()
2108 if (m->resid_flags == FCP_RESID_UNDER) { in __bfa_cb_ioim_comp()
2109 residue = be32_to_cpu(m->residue); in __bfa_cb_ioim_comp()
2110 bfa_stats(ioim->itnim, iocomp_underrun); in __bfa_cb_ioim_comp()
2112 if (m->resid_flags == FCP_RESID_OVER) { in __bfa_cb_ioim_comp()
2113 residue = be32_to_cpu(m->residue); in __bfa_cb_ioim_comp()
2114 residue = -residue; in __bfa_cb_ioim_comp()
2115 bfa_stats(ioim->itnim, iocomp_overrun); in __bfa_cb_ioim_comp()
2119 bfa_cb_ioim_done(ioim->bfa->bfad, ioim->dio, m->io_status, in __bfa_cb_ioim_comp()
2120 m->scsi_status, sns_len, snsinfo, residue); in __bfa_cb_ioim_comp()
2175 lun_mask->status = update; in bfa_fcpim_lunmask_update()
2234 port = bfa_fcs_lookup_port(&((struct bfad_s *)bfa->bfad)->bfa_fcs, in bfa_fcpim_lunmask_add()
2237 *pwwn = port->port_cfg.pwwn; in bfa_fcpim_lunmask_add()
2240 rp = rp_fcs->bfa_rport; in bfa_fcpim_lunmask_add()
2260 rp->rport_info.local_pid); in bfa_fcpim_lunmask_add()
2261 lunm_list[free_index].rp_tag = rp->rport_tag; in bfa_fcpim_lunmask_add()
2301 &((struct bfad_s *)bfa->bfad)->bfa_fcs, in bfa_fcpim_lunmask_delete()
2304 *pwwn = port->port_cfg.pwwn; in bfa_fcpim_lunmask_delete()
2345 bfa_cb_ioim_done(ioim->bfa->bfad, ioim->dio, BFI_IOIM_STS_ABORTED, in __bfa_cb_ioim_failed()
2354 bfa_stats(ioim->itnim, path_tov_expired); in __bfa_cb_ioim_pathtov()
2360 bfa_cb_ioim_done(ioim->bfa->bfad, ioim->dio, BFI_IOIM_STS_PATHTOV, in __bfa_cb_ioim_pathtov()
2374 bfa_cb_ioim_abort(ioim->bfa->bfad, ioim->dio); in __bfa_cb_ioim_abort()
2382 ioim->nsgpgs = BFA_SGPG_NPAGE(ioim->nsges); in bfa_ioim_sgpg_alloced()
2383 list_splice_tail_init(&ioim->iosp->sgpg_wqe.sgpg_q, &ioim->sgpg_q); in bfa_ioim_sgpg_alloced()
2384 ioim->sgpg = bfa_q_first(&ioim->sgpg_q); in bfa_ioim_sgpg_alloced()
2389 * Send I/O request to firmware.
2394 struct bfa_itnim_s *itnim = ioim->itnim; in bfa_ioim_send_ioreq()
2403 struct scsi_cmnd *cmnd = (struct scsi_cmnd *) ioim->dio; in bfa_ioim_send_ioreq()
2410 m = bfa_reqq_next(ioim->bfa, ioim->reqq); in bfa_ioim_send_ioreq()
2412 bfa_stats(ioim->itnim, qwait); in bfa_ioim_send_ioreq()
2413 bfa_reqq_wait(ioim->bfa, ioim->reqq, in bfa_ioim_send_ioreq()
2414 &ioim->iosp->reqq_wait); in bfa_ioim_send_ioreq()
2421 m->io_tag = cpu_to_be16(ioim->iotag); in bfa_ioim_send_ioreq()
2422 m->rport_hdl = ioim->itnim->rport->fw_handle; in bfa_ioim_send_ioreq()
2423 m->io_timeout = 0; in bfa_ioim_send_ioreq()
2425 sge = &m->sges[0]; in bfa_ioim_send_ioreq()
2426 sgpg = ioim->sgpg; in bfa_ioim_send_ioreq()
2430 scsi_for_each_sg(cmnd, sg, ioim->nsges, i) { in bfa_ioim_send_ioreq()
2434 sge->sga = *(union bfi_addr_u *) &addr; in bfa_ioim_send_ioreq()
2436 sge->sg_len = pgdlen; in bfa_ioim_send_ioreq()
2437 sge->flags = (ioim->nsges > BFI_SGE_INLINE) ? in bfa_ioim_send_ioreq()
2443 sgpge = sgpg->sgpg->sges; in bfa_ioim_send_ioreq()
2446 sgpge->sga = *(union bfi_addr_u *) &addr; in bfa_ioim_send_ioreq()
2447 sgpge->sg_len = sg_dma_len(sg); in bfa_ioim_send_ioreq()
2448 pgcumsz += sgpge->sg_len; in bfa_ioim_send_ioreq()
2451 if (i < (ioim->nsges - 1) && in bfa_ioim_send_ioreq()
2452 sge_id < (BFI_SGPG_DATA_SGES - 1)) in bfa_ioim_send_ioreq()
2453 sgpge->flags = BFI_SGE_DATA; in bfa_ioim_send_ioreq()
2454 else if (i < (ioim->nsges - 1)) in bfa_ioim_send_ioreq()
2455 sgpge->flags = BFI_SGE_DATA_CPL; in bfa_ioim_send_ioreq()
2457 sgpge->flags = BFI_SGE_DATA_LAST; in bfa_ioim_send_ioreq()
2462 if (i == (ioim->nsges - 1)) { in bfa_ioim_send_ioreq()
2463 sgpge->flags = BFI_SGE_PGDLEN; in bfa_ioim_send_ioreq()
2464 sgpge->sga.a32.addr_lo = 0; in bfa_ioim_send_ioreq()
2465 sgpge->sga.a32.addr_hi = 0; in bfa_ioim_send_ioreq()
2466 sgpge->sg_len = pgcumsz; in bfa_ioim_send_ioreq()
2470 sgpge->flags = BFI_SGE_LINK; in bfa_ioim_send_ioreq()
2471 sgpge->sga = sgpg->sgpg_pa; in bfa_ioim_send_ioreq()
2472 sgpge->sg_len = pgcumsz; in bfa_ioim_send_ioreq()
2480 if (ioim->nsges > BFI_SGE_INLINE) { in bfa_ioim_send_ioreq()
2481 sge->sga = ioim->sgpg->sgpg_pa; in bfa_ioim_send_ioreq()
2483 sge->sga.a32.addr_lo = 0; in bfa_ioim_send_ioreq()
2484 sge->sga.a32.addr_hi = 0; in bfa_ioim_send_ioreq()
2486 sge->sg_len = pgdlen; in bfa_ioim_send_ioreq()
2487 sge->flags = BFI_SGE_PGDLEN; in bfa_ioim_send_ioreq()
2493 m->cmnd = cmnd_z0; in bfa_ioim_send_ioreq()
2494 int_to_scsilun(cmnd->device->lun, &m->cmnd.lun); in bfa_ioim_send_ioreq()
2495 dmadir = cmnd->sc_data_direction; in bfa_ioim_send_ioreq()
2497 m->cmnd.iodir = FCP_IODIR_WRITE; in bfa_ioim_send_ioreq()
2499 m->cmnd.iodir = FCP_IODIR_READ; in bfa_ioim_send_ioreq()
2501 m->cmnd.iodir = FCP_IODIR_NONE; in bfa_ioim_send_ioreq()
2503 m->cmnd.cdb = *(struct scsi_cdb_s *) cmnd->cmnd; in bfa_ioim_send_ioreq()
2505 m->cmnd.fcp_dl = cpu_to_be32(fcp_dl); in bfa_ioim_send_ioreq()
2510 switch (m->cmnd.iodir) { in bfa_ioim_send_ioreq()
2512 bfi_h2i_set(m->mh, BFI_MC_IOIM_READ, 0, bfa_fn_lpu(ioim->bfa)); in bfa_ioim_send_ioreq()
2514 ioim->itnim->stats.rd_throughput += fcp_dl; in bfa_ioim_send_ioreq()
2517 bfi_h2i_set(m->mh, BFI_MC_IOIM_WRITE, 0, bfa_fn_lpu(ioim->bfa)); in bfa_ioim_send_ioreq()
2519 ioim->itnim->stats.wr_throughput += fcp_dl; in bfa_ioim_send_ioreq()
2526 bfi_h2i_set(m->mh, BFI_MC_IOIM_IO, 0, bfa_fn_lpu(ioim->bfa)); in bfa_ioim_send_ioreq()
2528 if (itnim->seq_rec || in bfa_ioim_send_ioreq()
2529 (scsi_bufflen(cmnd) & (sizeof(u32) - 1))) in bfa_ioim_send_ioreq()
2530 bfi_h2i_set(m->mh, BFI_MC_IOIM_IO, 0, bfa_fn_lpu(ioim->bfa)); in bfa_ioim_send_ioreq()
2533 * queue I/O message to firmware in bfa_ioim_send_ioreq()
2535 bfa_reqq_produce(ioim->bfa, ioim->reqq, m->mh); in bfa_ioim_send_ioreq()
2548 WARN_ON(ioim->nsges <= BFI_SGE_INLINE); in bfa_ioim_sgpg_alloc()
2553 nsgpgs = BFA_SGPG_NPAGE(ioim->nsges); in bfa_ioim_sgpg_alloc()
2557 if (bfa_sgpg_malloc(ioim->bfa, &ioim->sgpg_q, nsgpgs) in bfa_ioim_sgpg_alloc()
2559 bfa_sgpg_wait(ioim->bfa, &ioim->iosp->sgpg_wqe, nsgpgs); in bfa_ioim_sgpg_alloc()
2563 ioim->nsgpgs = nsgpgs; in bfa_ioim_sgpg_alloc()
2564 ioim->sgpg = bfa_q_first(&ioim->sgpg_q); in bfa_ioim_sgpg_alloc()
2570 * Send I/O abort request to firmware.
2581 m = bfa_reqq_next(ioim->bfa, ioim->reqq); in bfa_ioim_send_abort()
2588 if (ioim->iosp->abort_explicit) in bfa_ioim_send_abort()
2593 bfi_h2i_set(m->mh, BFI_MC_IOIM, msgop, bfa_fn_lpu(ioim->bfa)); in bfa_ioim_send_abort()
2594 m->io_tag = cpu_to_be16(ioim->iotag); in bfa_ioim_send_abort()
2595 m->abort_tag = ++ioim->abort_tag; in bfa_ioim_send_abort()
2598 * queue I/O message to firmware in bfa_ioim_send_abort()
2600 bfa_reqq_produce(ioim->bfa, ioim->reqq, m->mh); in bfa_ioim_send_abort()
2612 bfa_stats(ioim->itnim, qresumes); in bfa_ioim_qresume()
2624 list_del(&ioim->qe); in bfa_ioim_notify_cleanup()
2625 list_add_tail(&ioim->qe, &ioim->fcpim->ioim_comp_q); in bfa_ioim_notify_cleanup()
2627 if (!ioim->iosp->tskim) { in bfa_ioim_notify_cleanup()
2628 if (ioim->fcpim->delay_comp && ioim->itnim->iotov_active) { in bfa_ioim_notify_cleanup()
2629 bfa_cb_dequeue(&ioim->hcb_qe); in bfa_ioim_notify_cleanup()
2630 list_del(&ioim->qe); in bfa_ioim_notify_cleanup()
2631 list_add_tail(&ioim->qe, &ioim->itnim->delay_comp_q); in bfa_ioim_notify_cleanup()
2633 bfa_itnim_iodone(ioim->itnim); in bfa_ioim_notify_cleanup()
2635 bfa_wc_down(&ioim->iosp->tskim->wc); in bfa_ioim_notify_cleanup()
2642 (!bfa_q_is_on_q(&ioim->itnim->pending_q, ioim))) || in bfa_ioim_is_abortable()
2657 * If path tov timer expired, failback with PATHTOV status - these in bfa_ioim_delayed_comp()
2664 ioim->io_cbfn = __bfa_cb_ioim_pathtov; in bfa_ioim_delayed_comp()
2666 ioim->io_cbfn = __bfa_cb_ioim_failed; in bfa_ioim_delayed_comp()
2667 bfa_stats(ioim->itnim, iocom_nexus_abort); in bfa_ioim_delayed_comp()
2669 bfa_cb_queue(ioim->bfa, &ioim->hcb_qe, ioim->io_cbfn, ioim); in bfa_ioim_delayed_comp()
2675 list_del(&ioim->qe); in bfa_ioim_delayed_comp()
2676 list_add_tail(&ioim->qe, &ioim->fcpim->ioim_comp_q); in bfa_ioim_delayed_comp()
2687 struct bfa_fcp_mod_s *fcp = fcpim->fcp; in bfa_ioim_attach()
2695 fcpim->ioim_arr = ioim; in bfa_ioim_attach()
2696 bfa_mem_kva_curp(fcp) = (u8 *) (ioim + fcpim->fcp->num_ioim_reqs); in bfa_ioim_attach()
2699 fcpim->ioim_sp_arr = iosp; in bfa_ioim_attach()
2700 bfa_mem_kva_curp(fcp) = (u8 *) (iosp + fcpim->fcp->num_ioim_reqs); in bfa_ioim_attach()
2705 INIT_LIST_HEAD(&fcpim->ioim_resfree_q); in bfa_ioim_attach()
2706 INIT_LIST_HEAD(&fcpim->ioim_comp_q); in bfa_ioim_attach()
2708 for (i = 0; i < fcpim->fcp->num_ioim_reqs; in bfa_ioim_attach()
2714 ioim->iotag = i; in bfa_ioim_attach()
2715 ioim->bfa = fcpim->bfa; in bfa_ioim_attach()
2716 ioim->fcpim = fcpim; in bfa_ioim_attach()
2717 ioim->iosp = iosp; in bfa_ioim_attach()
2718 INIT_LIST_HEAD(&ioim->sgpg_q); in bfa_ioim_attach()
2719 bfa_reqq_winit(&ioim->iosp->reqq_wait, in bfa_ioim_attach()
2721 bfa_sgpg_winit(&ioim->iosp->sgpg_wqe, in bfa_ioim_attach()
2736 iotag = be16_to_cpu(rsp->io_tag); in bfa_ioim_isr()
2739 WARN_ON(ioim->iotag != iotag); in bfa_ioim_isr()
2741 bfa_trc(ioim->bfa, ioim->iotag); in bfa_ioim_isr()
2742 bfa_trc(ioim->bfa, rsp->io_status); in bfa_ioim_isr()
2743 bfa_trc(ioim->bfa, rsp->reuse_io_tag); in bfa_ioim_isr()
2746 ioim->iosp->comp_rspmsg = *m; in bfa_ioim_isr()
2748 switch (rsp->io_status) { in bfa_ioim_isr()
2750 bfa_stats(ioim->itnim, iocomp_ok); in bfa_ioim_isr()
2751 if (rsp->reuse_io_tag == 0) in bfa_ioim_isr()
2758 bfa_stats(ioim->itnim, iocomp_timedout); in bfa_ioim_isr()
2761 rsp->io_status = BFI_IOIM_STS_ABORTED; in bfa_ioim_isr()
2762 bfa_stats(ioim->itnim, iocomp_aborted); in bfa_ioim_isr()
2763 if (rsp->reuse_io_tag == 0) in bfa_ioim_isr()
2770 bfa_stats(ioim->itnim, iocom_proto_err); in bfa_ioim_isr()
2771 WARN_ON(!rsp->reuse_io_tag); in bfa_ioim_isr()
2776 bfa_stats(ioim->itnim, iocom_sqer_needed); in bfa_ioim_isr()
2777 WARN_ON(rsp->reuse_io_tag != 0); in bfa_ioim_isr()
2782 bfa_stats(ioim->itnim, iocom_res_free); in bfa_ioim_isr()
2787 bfa_stats(ioim->itnim, iocom_hostabrts); in bfa_ioim_isr()
2788 if (rsp->abort_tag != ioim->abort_tag) { in bfa_ioim_isr()
2789 bfa_trc(ioim->bfa, rsp->abort_tag); in bfa_ioim_isr()
2790 bfa_trc(ioim->bfa, ioim->abort_tag); in bfa_ioim_isr()
2794 if (rsp->reuse_io_tag) in bfa_ioim_isr()
2801 bfa_stats(ioim->itnim, iocom_utags); in bfa_ioim_isr()
2820 iotag = be16_to_cpu(rsp->io_tag); in bfa_ioim_good_comp_isr()
2823 WARN_ON(ioim->iotag != iotag); in bfa_ioim_good_comp_isr()
2836 bfa_trc(ioim->bfa, ioim->iotag); in bfa_ioim_cleanup()
2837 bfa_stats(ioim->itnim, io_cleanups); in bfa_ioim_cleanup()
2839 ioim->iosp->tskim = NULL; in bfa_ioim_cleanup()
2846 bfa_trc(ioim->bfa, ioim->iotag); in bfa_ioim_cleanup_tm()
2847 bfa_stats(ioim->itnim, io_tmaborts); in bfa_ioim_cleanup_tm()
2849 ioim->iosp->tskim = tskim; in bfa_ioim_cleanup_tm()
2859 bfa_trc(ioim->bfa, ioim->iotag); in bfa_ioim_iocdisable()
2860 bfa_stats(ioim->itnim, io_iocdowns); in bfa_ioim_iocdisable()
2870 bfa_trc(ioim->bfa, ioim->iotag); in bfa_ioim_tov()
2889 bfa_q_deq(&fcpim->fcp->iotag_ioim_free_q, &iotag); in bfa_ioim_alloc()
2895 ioim = BFA_IOIM_FROM_TAG(fcpim, iotag->tag); in bfa_ioim_alloc()
2897 ioim->dio = dio; in bfa_ioim_alloc()
2898 ioim->itnim = itnim; in bfa_ioim_alloc()
2899 ioim->nsges = nsges; in bfa_ioim_alloc()
2900 ioim->nsgpgs = 0; in bfa_ioim_alloc()
2903 fcpim->ios_active++; in bfa_ioim_alloc()
2905 list_add_tail(&ioim->qe, &itnim->io_q); in bfa_ioim_alloc()
2913 struct bfa_fcpim_s *fcpim = ioim->fcpim; in bfa_ioim_free()
2916 if (ioim->nsgpgs > 0) in bfa_ioim_free()
2917 bfa_sgpg_mfree(ioim->bfa, &ioim->sgpg_q, ioim->nsgpgs); in bfa_ioim_free()
2919 bfa_stats(ioim->itnim, io_comps); in bfa_ioim_free()
2920 fcpim->ios_active--; in bfa_ioim_free()
2922 ioim->iotag &= BFA_IOIM_IOTAG_MASK; in bfa_ioim_free()
2924 WARN_ON(!(ioim->iotag < in bfa_ioim_free()
2925 (fcpim->fcp->num_ioim_reqs + fcpim->fcp->num_fwtio_reqs))); in bfa_ioim_free()
2926 iotag = BFA_IOTAG_FROM_TAG(fcpim->fcp, ioim->iotag); in bfa_ioim_free()
2928 if (ioim->iotag < fcpim->fcp->num_ioim_reqs) in bfa_ioim_free()
2929 list_add_tail(&iotag->qe, &fcpim->fcp->iotag_ioim_free_q); in bfa_ioim_free()
2931 list_add_tail(&iotag->qe, &fcpim->fcp->iotag_tio_free_q); in bfa_ioim_free()
2933 list_del(&ioim->qe); in bfa_ioim_free()
2939 bfa_ioim_cb_profile_start(ioim->fcpim, ioim); in bfa_ioim_start()
2944 ioim->reqq = bfa_fcpim_ioredirect_enabled(ioim->bfa) ? in bfa_ioim_start()
2957 bfa_trc(ioim->bfa, ioim->iotag); in bfa_ioim_abort()
2962 bfa_stats(ioim->itnim, io_aborts); in bfa_ioim_abort()
2978 bfa_trc(tskim->bfa, tskim->tsk_tag << 16 | event); in bfa_tskim_sm_uninit()
2989 if (!bfa_itnim_is_online(tskim->itnim)) { in bfa_tskim_sm_uninit()
2991 tskim->tsk_status = BFI_TSKIM_STS_OK; in bfa_tskim_sm_uninit()
2998 bfa_stats(tskim->itnim, tm_qwait); in bfa_tskim_sm_uninit()
2999 bfa_reqq_wait(tskim->bfa, tskim->itnim->reqq, in bfa_tskim_sm_uninit()
3000 &tskim->reqq_wait); in bfa_tskim_sm_uninit()
3005 bfa_sm_fault(tskim->bfa, event); in bfa_tskim_sm_uninit()
3010 * TM command is active, awaiting completion from firmware to
3016 bfa_trc(tskim->bfa, tskim->tsk_tag << 16 | event); in bfa_tskim_sm_active()
3028 bfa_stats(tskim->itnim, tm_qwait); in bfa_tskim_sm_active()
3029 bfa_reqq_wait(tskim->bfa, tskim->itnim->reqq, in bfa_tskim_sm_active()
3030 &tskim->reqq_wait); in bfa_tskim_sm_active()
3041 bfa_sm_fault(tskim->bfa, event); in bfa_tskim_sm_active()
3047 * completion event from firmware.
3052 bfa_trc(tskim->bfa, tskim->tsk_tag << 16 | event); in bfa_tskim_sm_cleanup()
3057 * Ignore and wait for ABORT completion from firmware. in bfa_tskim_sm_cleanup()
3074 bfa_sm_fault(tskim->bfa, event); in bfa_tskim_sm_cleanup()
3081 bfa_trc(tskim->bfa, tskim->tsk_tag << 16 | event); in bfa_tskim_sm_iocleanup()
3103 bfa_sm_fault(tskim->bfa, event); in bfa_tskim_sm_iocleanup()
3113 bfa_trc(tskim->bfa, tskim->tsk_tag << 16 | event); in bfa_tskim_sm_qfull()
3126 bfa_reqq_wcancel(&tskim->reqq_wait); in bfa_tskim_sm_qfull()
3132 bfa_reqq_wcancel(&tskim->reqq_wait); in bfa_tskim_sm_qfull()
3138 bfa_sm_fault(tskim->bfa, event); in bfa_tskim_sm_qfull()
3150 bfa_trc(tskim->bfa, tskim->tsk_tag << 16 | event); in bfa_tskim_sm_cleanup_qfull()
3154 bfa_reqq_wcancel(&tskim->reqq_wait); in bfa_tskim_sm_cleanup_qfull()
3163 bfa_reqq_wcancel(&tskim->reqq_wait); in bfa_tskim_sm_cleanup_qfull()
3169 bfa_sm_fault(tskim->bfa, event); in bfa_tskim_sm_cleanup_qfull()
3179 bfa_trc(tskim->bfa, tskim->tsk_tag << 16 | event); in bfa_tskim_sm_hcb()
3195 bfa_sm_fault(tskim->bfa, event); in bfa_tskim_sm_hcb()
3209 bfa_stats(tskim->itnim, tm_success); in __bfa_cb_tskim_done()
3210 bfa_cb_tskim_done(tskim->bfa->bfad, tskim->dtsk, tskim->tsk_status); in __bfa_cb_tskim_done()
3223 bfa_stats(tskim->itnim, tm_failures); in __bfa_cb_tskim_failed()
3224 bfa_cb_tskim_done(tskim->bfa->bfad, tskim->dtsk, in __bfa_cb_tskim_failed()
3231 switch (tskim->tm_cmnd) { in bfa_tskim_match_scope()
3239 return !memcmp(&tskim->lun, &lun, sizeof(lun)); in bfa_tskim_match_scope()
3254 struct bfa_itnim_s *itnim = tskim->itnim; in bfa_tskim_gather_ios()
3256 struct list_head *qe, *qen; in bfa_tskim_gather_ios() local
3260 INIT_LIST_HEAD(&tskim->io_q); in bfa_tskim_gather_ios()
3265 list_for_each_safe(qe, qen, &itnim->io_q) { in bfa_tskim_gather_ios()
3266 ioim = (struct bfa_ioim_s *) qe; in bfa_tskim_gather_ios()
3267 cmnd = (struct scsi_cmnd *) ioim->dio; in bfa_tskim_gather_ios()
3268 int_to_scsilun(cmnd->device->lun, &scsilun); in bfa_tskim_gather_ios()
3270 list_del(&ioim->qe); in bfa_tskim_gather_ios()
3271 list_add_tail(&ioim->qe, &tskim->io_q); in bfa_tskim_gather_ios()
3278 list_for_each_safe(qe, qen, &itnim->pending_q) { in bfa_tskim_gather_ios()
3279 ioim = (struct bfa_ioim_s *) qe; in bfa_tskim_gather_ios()
3280 cmnd = (struct scsi_cmnd *) ioim->dio; in bfa_tskim_gather_ios()
3281 int_to_scsilun(cmnd->device->lun, &scsilun); in bfa_tskim_gather_ios()
3283 list_del(&ioim->qe); in bfa_tskim_gather_ios()
3284 list_add_tail(&ioim->qe, &ioim->fcpim->ioim_comp_q); in bfa_tskim_gather_ios()
3298 bfa_stats(tskim->itnim, tm_io_comps); in bfa_tskim_cleanp_comp()
3309 struct list_head *qe, *qen; in bfa_tskim_cleanup_ios() local
3311 bfa_wc_init(&tskim->wc, bfa_tskim_cleanp_comp, tskim); in bfa_tskim_cleanup_ios()
3313 list_for_each_safe(qe, qen, &tskim->io_q) { in bfa_tskim_cleanup_ios()
3314 ioim = (struct bfa_ioim_s *) qe; in bfa_tskim_cleanup_ios()
3315 bfa_wc_up(&tskim->wc); in bfa_tskim_cleanup_ios()
3319 bfa_wc_wait(&tskim->wc); in bfa_tskim_cleanup_ios()
3323 * Send task management request to firmware.
3328 struct bfa_itnim_s *itnim = tskim->itnim; in bfa_tskim_send()
3334 m = bfa_reqq_next(tskim->bfa, itnim->reqq); in bfa_tskim_send()
3341 bfi_h2i_set(m->mh, BFI_MC_TSKIM, BFI_TSKIM_H2I_TM_REQ, in bfa_tskim_send()
3342 bfa_fn_lpu(tskim->bfa)); in bfa_tskim_send()
3344 m->tsk_tag = cpu_to_be16(tskim->tsk_tag); in bfa_tskim_send()
3345 m->itn_fhdl = tskim->itnim->rport->fw_handle; in bfa_tskim_send()
3346 m->t_secs = tskim->tsecs; in bfa_tskim_send()
3347 m->lun = tskim->lun; in bfa_tskim_send()
3348 m->tm_flags = tskim->tm_cmnd; in bfa_tskim_send()
3351 * queue I/O message to firmware in bfa_tskim_send()
3353 bfa_reqq_produce(tskim->bfa, itnim->reqq, m->mh); in bfa_tskim_send()
3358 * Send abort request to cleanup an active TM to firmware.
3363 struct bfa_itnim_s *itnim = tskim->itnim; in bfa_tskim_send_abort()
3369 m = bfa_reqq_next(tskim->bfa, itnim->reqq); in bfa_tskim_send_abort()
3376 bfi_h2i_set(m->mh, BFI_MC_TSKIM, BFI_TSKIM_H2I_ABORT_REQ, in bfa_tskim_send_abort()
3377 bfa_fn_lpu(tskim->bfa)); in bfa_tskim_send_abort()
3379 m->tsk_tag = cpu_to_be16(tskim->tsk_tag); in bfa_tskim_send_abort()
3382 * queue I/O message to firmware in bfa_tskim_send_abort()
3384 bfa_reqq_produce(tskim->bfa, itnim->reqq, m->mh); in bfa_tskim_send_abort()
3396 bfa_stats(tskim->itnim, tm_qresumes); in bfa_tskim_qresume()
3407 struct list_head *qe, *qen; in bfa_tskim_iocdisable_ios() local
3409 list_for_each_safe(qe, qen, &tskim->io_q) { in bfa_tskim_iocdisable_ios()
3410 ioim = (struct bfa_ioim_s *) qe; in bfa_tskim_iocdisable_ios()
3421 tskim->notify = BFA_FALSE; in bfa_tskim_iocdisable()
3422 bfa_stats(tskim->itnim, tm_iocdowns); in bfa_tskim_iocdisable()
3432 tskim->notify = BFA_TRUE; in bfa_tskim_cleanup()
3433 bfa_stats(tskim->itnim, tm_cleanups); in bfa_tskim_cleanup()
3444 struct bfa_fcp_mod_s *fcp = fcpim->fcp; in bfa_tskim_attach()
3447 INIT_LIST_HEAD(&fcpim->tskim_free_q); in bfa_tskim_attach()
3448 INIT_LIST_HEAD(&fcpim->tskim_unused_q); in bfa_tskim_attach()
3451 fcpim->tskim_arr = tskim; in bfa_tskim_attach()
3453 for (i = 0; i < fcpim->num_tskim_reqs; i++, tskim++) { in bfa_tskim_attach()
3458 tskim->tsk_tag = i; in bfa_tskim_attach()
3459 tskim->bfa = fcpim->bfa; in bfa_tskim_attach()
3460 tskim->fcpim = fcpim; in bfa_tskim_attach()
3461 tskim->notify = BFA_FALSE; in bfa_tskim_attach()
3462 bfa_reqq_winit(&tskim->reqq_wait, bfa_tskim_qresume, in bfa_tskim_attach()
3466 list_add_tail(&tskim->qe, &fcpim->tskim_free_q); in bfa_tskim_attach()
3478 u16 tsk_tag = be16_to_cpu(rsp->tsk_tag); in bfa_tskim_isr()
3481 WARN_ON(tskim->tsk_tag != tsk_tag); in bfa_tskim_isr()
3483 tskim->tsk_status = rsp->tsk_status; in bfa_tskim_isr()
3486 * Firmware sends BFI_TSKIM_STS_ABORTED status for abort in bfa_tskim_isr()
3489 if (rsp->tsk_status == BFI_TSKIM_STS_ABORTED) { in bfa_tskim_isr()
3490 bfa_stats(tskim->itnim, tm_cleanup_comps); in bfa_tskim_isr()
3492 } else if (rsp->tsk_status == BFI_TSKIM_STS_UTAG) { in bfa_tskim_isr()
3495 bfa_stats(tskim->itnim, tm_fw_rsps); in bfa_tskim_isr()
3507 bfa_q_deq(&fcpim->tskim_free_q, &tskim); in bfa_tskim_alloc()
3510 tskim->dtsk = dtsk; in bfa_tskim_alloc()
3518 WARN_ON(!bfa_q_is_on_q_func(&tskim->itnim->tsk_q, &tskim->qe)); in bfa_tskim_free()
3519 list_del(&tskim->qe); in bfa_tskim_free()
3520 list_add_tail(&tskim->qe, &tskim->fcpim->tskim_free_q); in bfa_tskim_free()
3527 * @param[in] itnim i-t nexus for the task management command
3539 tskim->itnim = itnim; in bfa_tskim_start()
3540 tskim->lun = lun; in bfa_tskim_start()
3541 tskim->tm_cmnd = tm_cmnd; in bfa_tskim_start()
3542 tskim->tsecs = tsecs; in bfa_tskim_start()
3543 tskim->notify = BFA_FALSE; in bfa_tskim_start()
3546 list_add_tail(&tskim->qe, &itnim->tsk_q); in bfa_tskim_start()
3554 struct list_head *qe; in bfa_tskim_res_recfg() local
3557 for (i = 0; i < (fcpim->num_tskim_reqs - num_tskim_fw); i++) { in bfa_tskim_res_recfg()
3558 bfa_q_deq_tail(&fcpim->tskim_free_q, &qe); in bfa_tskim_res_recfg()
3559 list_add_tail(qe, &fcpim->tskim_unused_q); in bfa_tskim_res_recfg()
3577 if (cfg->fwcfg.num_ioim_reqs && in bfa_fcp_meminfo()
3578 cfg->fwcfg.num_ioim_reqs < BFA_IOIM_MIN) in bfa_fcp_meminfo()
3579 cfg->fwcfg.num_ioim_reqs = BFA_IOIM_MIN; in bfa_fcp_meminfo()
3580 else if (cfg->fwcfg.num_ioim_reqs > BFA_IOIM_MAX) in bfa_fcp_meminfo()
3581 cfg->fwcfg.num_ioim_reqs = BFA_IOIM_MAX; in bfa_fcp_meminfo()
3583 if (cfg->fwcfg.num_fwtio_reqs > BFA_FWTIO_MAX) in bfa_fcp_meminfo()
3584 cfg->fwcfg.num_fwtio_reqs = BFA_FWTIO_MAX; in bfa_fcp_meminfo()
3586 num_io_req = (cfg->fwcfg.num_ioim_reqs + cfg->fwcfg.num_fwtio_reqs); in bfa_fcp_meminfo()
3588 if (cfg->fwcfg.num_ioim_reqs && cfg->fwcfg.num_fwtio_reqs) { in bfa_fcp_meminfo()
3589 cfg->fwcfg.num_ioim_reqs = BFA_IO_MAX/2; in bfa_fcp_meminfo()
3590 cfg->fwcfg.num_fwtio_reqs = BFA_IO_MAX/2; in bfa_fcp_meminfo()
3591 } else if (cfg->fwcfg.num_fwtio_reqs) in bfa_fcp_meminfo()
3592 cfg->fwcfg.num_fwtio_reqs = BFA_FWTIO_MAX; in bfa_fcp_meminfo()
3594 cfg->fwcfg.num_ioim_reqs = BFA_IOIM_MAX; in bfa_fcp_meminfo()
3599 num_io_req = (cfg->fwcfg.num_ioim_reqs + cfg->fwcfg.num_fwtio_reqs); in bfa_fcp_meminfo()
3601 km_len += cfg->fwcfg.num_rports * sizeof(struct bfa_itn_s); in bfa_fcp_meminfo()
3609 num_io_req -= per_seg_ios; in bfa_fcp_meminfo()
3629 fcp->max_ioim_reqs = cfg->fwcfg.num_ioim_reqs; in bfa_fcp_attach()
3630 fcp->num_ioim_reqs = cfg->fwcfg.num_ioim_reqs; in bfa_fcp_attach()
3631 fcp->num_fwtio_reqs = cfg->fwcfg.num_fwtio_reqs; in bfa_fcp_attach()
3632 fcp->num_itns = cfg->fwcfg.num_rports; in bfa_fcp_attach()
3633 fcp->bfa = bfa; in bfa_fcp_attach()
3639 num_io_req = (cfg->fwcfg.num_ioim_reqs + cfg->fwcfg.num_fwtio_reqs); in bfa_fcp_attach()
3647 fcp->snsbase[idx].pa = bfa_mem_dma_phys(seg_ptr); in bfa_fcp_attach()
3648 fcp->snsbase[idx].kva = bfa_mem_dma_virt(seg_ptr); in bfa_fcp_attach()
3649 bfa_iocfc_set_snsbase(bfa, idx, fcp->snsbase[idx].pa); in bfa_fcp_attach()
3652 fcp->throttle_update_required = 1; in bfa_fcp_attach()
3657 fcp->itn_arr = (struct bfa_itn_s *) bfa_mem_kva_curp(fcp); in bfa_fcp_attach()
3658 bfa_mem_kva_curp(fcp) = (u8 *)fcp->itn_arr + in bfa_fcp_attach()
3659 (fcp->num_itns * sizeof(struct bfa_itn_s)); in bfa_fcp_attach()
3660 memset(fcp->itn_arr, 0, in bfa_fcp_attach()
3661 (fcp->num_itns * sizeof(struct bfa_itn_s))); in bfa_fcp_attach()
3676 struct list_head *qe; in bfa_fcp_res_recfg() local
3680 if (!mod->throttle_update_required) in bfa_fcp_res_recfg()
3683 for (i = 0; i < (mod->num_ioim_reqs - num_ioim_fw); i++) { in bfa_fcp_res_recfg()
3684 bfa_q_deq_tail(&mod->iotag_ioim_free_q, &qe); in bfa_fcp_res_recfg()
3685 list_add_tail(qe, &mod->iotag_unused_q); in bfa_fcp_res_recfg()
3688 if (mod->num_ioim_reqs != num_ioim_fw) { in bfa_fcp_res_recfg()
3689 bfa_trc(bfa, mod->num_ioim_reqs); in bfa_fcp_res_recfg()
3693 mod->max_ioim_reqs = max_ioim_fw; in bfa_fcp_res_recfg()
3694 mod->num_ioim_reqs = num_ioim_fw; in bfa_fcp_res_recfg()
3695 mod->throttle_update_required = 0; in bfa_fcp_res_recfg()
3705 itn = BFA_ITN_FROM_TAG(fcp, rport->rport_tag); in bfa_itn_create()
3706 itn->isr = isr; in bfa_itn_create()
3720 itn = BFA_ITN_FROM_TAG(fcp, msg.create_rsp->bfa_handle); in bfa_itn_isr()
3722 if (itn->isr) in bfa_itn_isr()
3723 itn->isr(bfa, m); in bfa_itn_isr()
3735 fcp->iotag_arr = iotag; in bfa_iotag_attach()
3737 INIT_LIST_HEAD(&fcp->iotag_ioim_free_q); in bfa_iotag_attach()
3738 INIT_LIST_HEAD(&fcp->iotag_tio_free_q); in bfa_iotag_attach()
3739 INIT_LIST_HEAD(&fcp->iotag_unused_q); in bfa_iotag_attach()
3741 num_io_req = fcp->num_ioim_reqs + fcp->num_fwtio_reqs; in bfa_iotag_attach()
3744 iotag->tag = i; in bfa_iotag_attach()
3745 if (i < fcp->num_ioim_reqs) in bfa_iotag_attach()
3746 list_add_tail(&iotag->qe, &fcp->iotag_ioim_free_q); in bfa_iotag_attach()
3748 list_add_tail(&iotag->qe, &fcp->iotag_tio_free_q); in bfa_iotag_attach()
3772 if (!fcp->throttle_update_required) in bfa_fcpim_get_throttle_cfg()
3773 return (u16)fcp->num_ioim_reqs; in bfa_fcpim_get_throttle_cfg()
3786 BFA_DCONF_MOD(bfa)->dconf->throttle_cfg.value = value; in bfa_fcpim_write_throttle()
3787 BFA_DCONF_MOD(bfa)->dconf->throttle_cfg.is_valid = 1; in bfa_fcpim_write_throttle()
3798 &(BFA_DCONF_MOD(bfa)->dconf->throttle_cfg); in bfa_fcpim_read_throttle()
3801 ((throttle_cfg->is_valid == 1) ? (throttle_cfg->value) : 0) : 0); in bfa_fcpim_read_throttle()
3829 throttle.cur_value = (u16)(fcpim->fcp->num_ioim_reqs); in bfa_fcpim_throttle_get()
3833 throttle.max_value = (u16)(fcpim->fcp->max_ioim_reqs); in bfa_fcpim_throttle_get()