Lines Matching refs:qedf

121 void qedf_set_vlan_id(struct qedf_ctx *qedf, int vlan_id)  in qedf_set_vlan_id()  argument
125 vlan_id_tmp = vlan_id | (qedf->prio << VLAN_PRIO_SHIFT); in qedf_set_vlan_id()
126 qedf->vlan_id = vlan_id_tmp; in qedf_set_vlan_id()
127 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, in qedf_set_vlan_id()
129 vlan_id_tmp, qedf->prio); in qedf_set_vlan_id()
133 static bool qedf_initiate_fipvlan_req(struct qedf_ctx *qedf) in qedf_initiate_fipvlan_req() argument
136 while (qedf->fipvlan_retries--) { in qedf_initiate_fipvlan_req()
138 if (atomic_read(&qedf->link_state) == QEDF_LINK_DOWN) { in qedf_initiate_fipvlan_req()
139 QEDF_ERR(&qedf->dbg_ctx, "Link not up.\n"); in qedf_initiate_fipvlan_req()
143 if (test_bit(QEDF_UNLOADING, &qedf->flags)) { in qedf_initiate_fipvlan_req()
144 QEDF_ERR(&qedf->dbg_ctx, "Driver unloading.\n"); in qedf_initiate_fipvlan_req()
148 if (qedf->vlan_id > 0) { in qedf_initiate_fipvlan_req()
149 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, in qedf_initiate_fipvlan_req()
151 qedf->vlan_id); in qedf_initiate_fipvlan_req()
152 if (atomic_read(&qedf->link_state) == QEDF_LINK_UP) in qedf_initiate_fipvlan_req()
153 fcoe_ctlr_link_up(&qedf->ctlr); in qedf_initiate_fipvlan_req()
157 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_initiate_fipvlan_req()
158 "Retry %d.\n", qedf->fipvlan_retries); in qedf_initiate_fipvlan_req()
159 init_completion(&qedf->fipvlan_compl); in qedf_initiate_fipvlan_req()
160 qedf_fcoe_send_vlan_req(qedf); in qedf_initiate_fipvlan_req()
161 wait_for_completion_timeout(&qedf->fipvlan_compl, 1 * HZ); in qedf_initiate_fipvlan_req()
169 struct qedf_ctx *qedf = in qedf_handle_link_update() local
173 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, "Entered. link_state=%d.\n", in qedf_handle_link_update()
174 atomic_read(&qedf->link_state)); in qedf_handle_link_update()
176 if (atomic_read(&qedf->link_state) == QEDF_LINK_UP) { in qedf_handle_link_update()
177 rc = qedf_initiate_fipvlan_req(qedf); in qedf_handle_link_update()
181 if (atomic_read(&qedf->link_state) != QEDF_LINK_UP) { in qedf_handle_link_update()
182 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, in qedf_handle_link_update()
184 qedf->vlan_id = 0; in qedf_handle_link_update()
193 QEDF_WARN(&(qedf->dbg_ctx), "Did not receive FIP VLAN " in qedf_handle_link_update()
196 qedf_set_vlan_id(qedf, qedf_fallback_vlan); in qedf_handle_link_update()
202 eth_zero_addr(qedf->data_src_addr); in qedf_handle_link_update()
203 fcoe_ctlr_link_up(&qedf->ctlr); in qedf_handle_link_update()
204 } else if (atomic_read(&qedf->link_state) == QEDF_LINK_DOWN) { in qedf_handle_link_update()
210 atomic_set(&qedf->link_down_tmo_valid, 0); in qedf_handle_link_update()
211 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_handle_link_update()
213 fcoe_ctlr_link_down(&qedf->ctlr); in qedf_handle_link_update()
214 if (qedf_wait_for_upload(qedf) == false) in qedf_handle_link_update()
215 QEDF_ERR(&qedf->dbg_ctx, in qedf_handle_link_update()
218 qedf->fipvlan_retries = qedf_fipvlan_retries; in qedf_handle_link_update()
225 static void qedf_set_data_src_addr(struct qedf_ctx *qedf, struct fc_frame *fp) in qedf_set_data_src_addr() argument
246 ether_addr_copy(qedf->data_src_addr, granted_mac); in qedf_set_data_src_addr()
248 } else if (qedf->ctlr.sel_fcf->fc_map != 0) { in qedf_set_data_src_addr()
249 hton24(fc_map, qedf->ctlr.sel_fcf->fc_map); in qedf_set_data_src_addr()
250 qedf->data_src_addr[0] = fc_map[0]; in qedf_set_data_src_addr()
251 qedf->data_src_addr[1] = fc_map[1]; in qedf_set_data_src_addr()
252 qedf->data_src_addr[2] = fc_map[2]; in qedf_set_data_src_addr()
253 qedf->data_src_addr[3] = fh->fh_d_id[0]; in qedf_set_data_src_addr()
254 qedf->data_src_addr[4] = fh->fh_d_id[1]; in qedf_set_data_src_addr()
255 qedf->data_src_addr[5] = fh->fh_d_id[2]; in qedf_set_data_src_addr()
258 fc_fcoe_set_mac(qedf->data_src_addr, fh->fh_d_id); in qedf_set_data_src_addr()
262 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_set_data_src_addr()
263 "QEDF data_src_mac=%pM method=%d.\n", qedf->data_src_addr, method); in qedf_set_data_src_addr()
271 struct qedf_ctx *qedf = lport_priv(lport); in qedf_flogi_resp() local
273 if (!qedf) { in qedf_flogi_resp()
283 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_ELS, in qedf_flogi_resp()
290 qedf->flogi_failed++; in qedf_flogi_resp()
293 qedf_set_data_src_addr(qedf, fp); in qedf_flogi_resp()
294 qedf->flogi_pending = 0; in qedf_flogi_resp()
298 complete(&qedf->flogi_compl); in qedf_flogi_resp()
312 struct qedf_ctx *qedf = lport_priv(lport); in qedf_elsct_send() local
319 qedf->flogi_cnt++; in qedf_elsct_send()
320 if (qedf->flogi_pending >= QEDF_FLOGI_RETRY_CNT) { in qedf_elsct_send()
321 schedule_delayed_work(&qedf->stag_work, 2); in qedf_elsct_send()
324 qedf->flogi_pending++; in qedf_elsct_send()
332 int qedf_send_flogi(struct qedf_ctx *qedf) in qedf_send_flogi() argument
337 lport = qedf->lport; in qedf_send_flogi()
340 QEDF_ERR(&qedf->dbg_ctx, "tt.elsct_send not set.\n"); in qedf_send_flogi()
346 QEDF_ERR(&(qedf->dbg_ctx), "fc_frame_alloc failed.\n"); in qedf_send_flogi()
350 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_ELS, in qedf_send_flogi()
355 init_completion(&qedf->flogi_compl); in qedf_send_flogi()
367 struct qedf_ctx *qedf = in qedf_link_recovery() local
369 struct fc_lport *lport = qedf->lport; in qedf_link_recovery()
378 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_link_recovery()
385 qedf->ctlr.state = FIP_ST_LINK_WAIT; in qedf_link_recovery()
386 fcoe_ctlr_link_down(&qedf->ctlr); in qedf_link_recovery()
392 fcoe_ctlr_link_up(&qedf->ctlr); in qedf_link_recovery()
395 qedf->fipvlan_retries = qedf_fipvlan_retries; in qedf_link_recovery()
396 rc = qedf_initiate_fipvlan_req(qedf); in qedf_link_recovery()
399 qedf_set_vlan_id(qedf, qedf_fallback_vlan); in qedf_link_recovery()
406 if (qedf->ctlr.sel_fcf) { in qedf_link_recovery()
407 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_link_recovery()
416 QEDF_ERR(&(qedf->dbg_ctx), "Exhausted retries waiting for " in qedf_link_recovery()
421 rval = qedf_send_flogi(qedf); in qedf_link_recovery()
426 i = wait_for_completion_timeout(&qedf->flogi_compl, in qedf_link_recovery()
427 qedf->lport->r_a_tov); in qedf_link_recovery()
429 QEDF_ERR(&(qedf->dbg_ctx), "FLOGI timed out.\n"); in qedf_link_recovery()
447 static void qedf_update_link_speed(struct qedf_ctx *qedf, in qedf_update_link_speed() argument
451 struct fc_lport *lport = qedf->lport; in qedf_update_link_speed()
546 struct qedf_ctx *qedf = (struct qedf_ctx *)dev; in qedf_bw_update() local
550 qed_ops->common->get_link(qedf->cdev, &link); in qedf_bw_update()
552 if (test_bit(QEDF_UNLOADING, &qedf->flags)) { in qedf_bw_update()
553 QEDF_ERR(&qedf->dbg_ctx, in qedf_bw_update()
559 if (atomic_read(&qedf->link_state) == QEDF_LINK_UP) in qedf_bw_update()
560 qedf_update_link_speed(qedf, &link); in qedf_bw_update()
562 QEDF_ERR(&qedf->dbg_ctx, in qedf_bw_update()
566 QEDF_ERR(&qedf->dbg_ctx, "link_up is not set.\n"); in qedf_bw_update()
572 struct qedf_ctx *qedf = (struct qedf_ctx *)dev; in qedf_link_update() local
578 if (test_bit(QEDF_UNLOADING, &qedf->flags)) { in qedf_link_update()
579 QEDF_ERR(&qedf->dbg_ctx, in qedf_link_update()
585 if (atomic_read(&qedf->link_state) == QEDF_LINK_UP) { in qedf_link_update()
586 QEDF_INFO((&qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_link_update()
590 QEDF_ERR(&(qedf->dbg_ctx), "LINK UP (%d GB/s).\n", in qedf_link_update()
594 cancel_delayed_work(&qedf->link_update); in qedf_link_update()
596 atomic_set(&qedf->link_state, QEDF_LINK_UP); in qedf_link_update()
597 qedf_update_link_speed(qedf, link); in qedf_link_update()
599 if (atomic_read(&qedf->dcbx) == QEDF_DCBX_DONE || in qedf_link_update()
601 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_link_update()
603 if (atomic_read(&qedf->link_down_tmo_valid) > 0) in qedf_link_update()
604 queue_delayed_work(qedf->link_update_wq, in qedf_link_update()
605 &qedf->link_recovery, 0); in qedf_link_update()
607 queue_delayed_work(qedf->link_update_wq, in qedf_link_update()
608 &qedf->link_update, 0); in qedf_link_update()
609 atomic_set(&qedf->link_down_tmo_valid, 0); in qedf_link_update()
613 QEDF_ERR(&(qedf->dbg_ctx), "LINK DOWN.\n"); in qedf_link_update()
615 atomic_set(&qedf->link_state, QEDF_LINK_DOWN); in qedf_link_update()
616 atomic_set(&qedf->dcbx, QEDF_DCBX_PENDING); in qedf_link_update()
622 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_link_update()
624 atomic_set(&qedf->link_down_tmo_valid, 1); in qedf_link_update()
626 qedf->vlan_id = 0; in qedf_link_update()
627 qedf_update_link_speed(qedf, link); in qedf_link_update()
628 queue_delayed_work(qedf->link_update_wq, &qedf->link_update, in qedf_link_update()
636 struct qedf_ctx *qedf = (struct qedf_ctx *)dev; in qedf_dcbx_handler() local
639 QEDF_ERR(&(qedf->dbg_ctx), "DCBx event valid=%d enabled=%d fcoe " in qedf_dcbx_handler()
645 if (atomic_read(&qedf->dcbx) == QEDF_DCBX_DONE) { in qedf_dcbx_handler()
646 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_dcbx_handler()
651 atomic_set(&qedf->dcbx, QEDF_DCBX_DONE); in qedf_dcbx_handler()
662 qedf->prio = qedf_default_prio; in qedf_dcbx_handler()
664 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_dcbx_handler()
667 qedf->prio = QEDF_DEFAULT_PRIO; in qedf_dcbx_handler()
669 qedf->prio = tmp_prio; in qedf_dcbx_handler()
671 if (atomic_read(&qedf->link_state) == QEDF_LINK_UP && in qedf_dcbx_handler()
673 if (atomic_read(&qedf->link_down_tmo_valid) > 0) in qedf_dcbx_handler()
674 queue_delayed_work(qedf->link_update_wq, in qedf_dcbx_handler()
675 &qedf->link_recovery, 0); in qedf_dcbx_handler()
677 queue_delayed_work(qedf->link_update_wq, in qedf_dcbx_handler()
678 &qedf->link_update, 0); in qedf_dcbx_handler()
679 atomic_set(&qedf->link_down_tmo_valid, 0); in qedf_dcbx_handler()
687 struct qedf_ctx *qedf; in qedf_get_login_failures() local
689 qedf = (struct qedf_ctx *)cookie; in qedf_get_login_failures()
690 return qedf->flogi_failed; in qedf_get_login_failures()
719 struct qedf_ctx *qedf; in qedf_eh_abort() local
731 qedf = (struct qedf_ctx *)lport_priv(lport); in qedf_eh_abort()
737 QEDF_ERR(&qedf->dbg_ctx, "stale rport, sc_cmd=%p\n", sc_cmd); in qedf_eh_abort()
745 QEDF_ERR(&qedf->dbg_ctx, in qedf_eh_abort()
759 QEDF_ERR(&qedf->dbg_ctx, in qedf_eh_abort()
768 QEDF_ERR(&qedf->dbg_ctx, in qedf_eh_abort()
781 QEDF_ERR(&qedf->dbg_ctx, in qedf_eh_abort()
789 QEDF_ERR(&qedf->dbg_ctx, "ABTS succeeded\n"); in qedf_eh_abort()
792 QEDF_ERR(&qedf->dbg_ctx, "ABTS failed\n"); in qedf_eh_abort()
799 QEDF_ERR(&qedf->dbg_ctx, "link not ready.\n"); in qedf_eh_abort()
803 QEDF_ERR(&qedf->dbg_ctx, in qedf_eh_abort()
808 if (qedf->stop_io_on_error) { in qedf_eh_abort()
809 qedf_stop_all_io(qedf); in qedf_eh_abort()
817 QEDF_ERR(&(qedf->dbg_ctx), "Failed to queue ABTS.\n"); in qedf_eh_abort()
823 qedf_scsi_done(qedf, io_req, DID_ERROR); in qedf_eh_abort()
844 QEDF_ERR(&(qedf->dbg_ctx), "ABTS succeeded, xid=0x%x.\n", in qedf_eh_abort()
847 QEDF_ERR(&(qedf->dbg_ctx), "ABTS failed, xid=0x%x.\n", in qedf_eh_abort()
874 bool qedf_wait_for_upload(struct qedf_ctx *qedf) in qedf_wait_for_upload() argument
880 if (atomic_read(&qedf->num_offloads)) in qedf_wait_for_upload()
881 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, in qedf_wait_for_upload()
883 atomic_read(&qedf->num_offloads)); in qedf_wait_for_upload()
890 list_for_each_entry_rcu(fcport, &qedf->fcports, peers) { in qedf_wait_for_upload()
894 QEDF_ERR(&qedf->dbg_ctx, in qedf_wait_for_upload()
898 QEDF_ERR(&qedf->dbg_ctx, in qedf_wait_for_upload()
910 struct qedf_ctx *qedf; in qedf_ctx_soft_reset() local
918 qedf = lport_priv(lport); in qedf_ctx_soft_reset()
920 qedf->flogi_pending = 0; in qedf_ctx_soft_reset()
922 atomic_set(&qedf->link_state, QEDF_LINK_DOWN); in qedf_ctx_soft_reset()
923 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, in qedf_ctx_soft_reset()
925 queue_delayed_work(qedf->link_update_wq, &qedf->link_update, in qedf_ctx_soft_reset()
928 if (qedf_wait_for_upload(qedf) == false) { in qedf_ctx_soft_reset()
929 QEDF_ERR(&qedf->dbg_ctx, "Could not upload all sessions.\n"); in qedf_ctx_soft_reset()
930 WARN_ON(atomic_read(&qedf->num_offloads)); in qedf_ctx_soft_reset()
934 qed_ops->common->get_link(qedf->cdev, &if_link); in qedf_ctx_soft_reset()
937 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, in qedf_ctx_soft_reset()
942 flush_delayed_work(&qedf->link_update); in qedf_ctx_soft_reset()
945 atomic_set(&qedf->link_state, QEDF_LINK_UP); in qedf_ctx_soft_reset()
946 qedf->vlan_id = 0; in qedf_ctx_soft_reset()
947 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, in qedf_ctx_soft_reset()
949 queue_delayed_work(qedf->link_update_wq, &qedf->link_update, in qedf_ctx_soft_reset()
957 struct qedf_ctx *qedf; in qedf_eh_host_reset() local
960 qedf = lport_priv(lport); in qedf_eh_host_reset()
962 if (atomic_read(&qedf->link_state) == QEDF_LINK_DOWN || in qedf_eh_host_reset()
963 test_bit(QEDF_UNLOADING, &qedf->flags)) in qedf_eh_host_reset()
966 QEDF_ERR(&(qedf->dbg_ctx), "HOST RESET Issued..."); in qedf_eh_host_reset()
1012 static struct qedf_rport *qedf_fcport_lookup(struct qedf_ctx *qedf, u32 port_id) in qedf_fcport_lookup() argument
1018 list_for_each_entry_rcu(fcport, &qedf->fcports, peers) { in qedf_fcport_lookup()
1059 struct qedf_ctx *qedf; in qedf_xmit() local
1076 qedf = (struct qedf_ctx *)lport_priv(lport); in qedf_xmit()
1104 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_LL2, in qedf_xmit()
1116 if (!qedf->ctlr.sel_fcf) { in qedf_xmit()
1121 if (!test_bit(QEDF_LL2_STARTED, &qedf->flags)) { in qedf_xmit()
1122 QEDF_WARN(&(qedf->dbg_ctx), "LL2 not started\n"); in qedf_xmit()
1127 if (atomic_read(&qedf->link_state) != QEDF_LINK_UP) { in qedf_xmit()
1128 QEDF_WARN(&(qedf->dbg_ctx), "qedf link down\n"); in qedf_xmit()
1134 if (fcoe_ctlr_els_send(&qedf->ctlr, lport, skb)) in qedf_xmit()
1139 fcport = qedf_fcport_lookup(qedf, ntoh24(fh->fh_d_id)); in qedf_xmit()
1196 __vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q), qedf->vlan_id); in qedf_xmit()
1201 if (qedf->ctlr.map_dest) in qedf_xmit()
1205 ether_addr_copy(eh->h_dest, qedf->ctlr.dest_addr); in qedf_xmit()
1208 ether_addr_copy(eh->h_source, qedf->data_src_addr); in qedf_xmit()
1227 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_LL2, "FCoE frame send: " in qedf_xmit()
1234 rc = qed_ops->ll2->start_xmit(qedf->cdev, skb, 0); in qedf_xmit()
1236 QEDF_ERR(&qedf->dbg_ctx, "start_xmit failed rc = %d.\n", rc); in qedf_xmit()
1244 static int qedf_alloc_sq(struct qedf_ctx *qedf, struct qedf_rport *fcport) in qedf_alloc_sq() argument
1258 fcport->sq = dma_alloc_coherent(&qedf->pdev->dev, fcport->sq_mem_size, in qedf_alloc_sq()
1261 QEDF_WARN(&(qedf->dbg_ctx), "Could not allocate send queue.\n"); in qedf_alloc_sq()
1266 fcport->sq_pbl = dma_alloc_coherent(&qedf->pdev->dev, in qedf_alloc_sq()
1270 QEDF_WARN(&(qedf->dbg_ctx), "Could not allocate send queue PBL.\n"); in qedf_alloc_sq()
1291 dma_free_coherent(&qedf->pdev->dev, fcport->sq_mem_size, fcport->sq, in qedf_alloc_sq()
1297 static void qedf_free_sq(struct qedf_ctx *qedf, struct qedf_rport *fcport) in qedf_free_sq() argument
1300 dma_free_coherent(&qedf->pdev->dev, fcport->sq_pbl_size, in qedf_free_sq()
1303 dma_free_coherent(&qedf->pdev->dev, fcport->sq_mem_size, in qedf_free_sq()
1307 static int qedf_offload_connection(struct qedf_ctx *qedf, in qedf_offload_connection() argument
1315 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_CONN, "Offloading connection " in qedf_offload_connection()
1317 rval = qed_ops->acquire_conn(qedf->cdev, &fcport->handle, in qedf_offload_connection()
1320 QEDF_WARN(&(qedf->dbg_ctx), "Could not acquire connection " in qedf_offload_connection()
1326 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_CONN, "portid=%06x " in qedf_offload_connection()
1340 ether_addr_copy(conn_info.src_mac, qedf->data_src_addr); in qedf_offload_connection()
1342 ether_addr_copy(conn_info.dst_mac, qedf->ctlr.dest_addr); in qedf_offload_connection()
1345 conn_info.e_d_tov_timer_val = qedf->lport->e_d_tov; in qedf_offload_connection()
1350 conn_info.vlan_tag = qedf->vlan_id << in qedf_offload_connection()
1353 qedf->prio << FCOE_CONN_OFFLOAD_RAMROD_DATA_PRIORITY_SHIFT; in qedf_offload_connection()
1358 port_id = fc_host_port_id(qedf->lport->host); in qedf_offload_connection()
1376 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_CONN, in qedf_offload_connection()
1386 rval = qed_ops->offload_conn(qedf->cdev, fcport->handle, &conn_info); in qedf_offload_connection()
1388 QEDF_WARN(&(qedf->dbg_ctx), "Could not offload connection " in qedf_offload_connection()
1392 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_CONN, "Offload " in qedf_offload_connection()
1400 qed_ops->release_conn(qedf->cdev, fcport->handle); in qedf_offload_connection()
1406 static void qedf_upload_connection(struct qedf_ctx *qedf, in qedf_upload_connection() argument
1416 term_params = dma_alloc_coherent(&qedf->pdev->dev, QEDF_TERM_BUFF_SIZE, in qedf_upload_connection()
1419 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_CONN, "Uploading connection " in qedf_upload_connection()
1422 qed_ops->destroy_conn(qedf->cdev, fcport->handle, term_params_dma); in qedf_upload_connection()
1423 qed_ops->release_conn(qedf->cdev, fcport->handle); in qedf_upload_connection()
1425 dma_free_coherent(&qedf->pdev->dev, QEDF_TERM_BUFF_SIZE, term_params, in qedf_upload_connection()
1429 static void qedf_cleanup_fcport(struct qedf_ctx *qedf, in qedf_cleanup_fcport() argument
1434 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_CONN, "Cleaning up portid=%06x.\n", in qedf_cleanup_fcport()
1441 qedf_upload_connection(qedf, fcport); in qedf_cleanup_fcport()
1442 qedf_free_sq(qedf, fcport); in qedf_cleanup_fcport()
1444 fcport->qedf = NULL; in qedf_cleanup_fcport()
1457 struct qedf_ctx *qedf = lport_priv(lport); in qedf_rport_event_handler() local
1465 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, "event = %d, " in qedf_rport_event_handler()
1471 QEDF_WARN(&(qedf->dbg_ctx), "rport is NULL.\n"); in qedf_rport_event_handler()
1477 fcport->qedf = qedf; in qedf_rport_event_handler()
1479 if (atomic_read(&qedf->num_offloads) >= QEDF_MAX_SESSIONS) { in qedf_rport_event_handler()
1480 QEDF_ERR(&(qedf->dbg_ctx), "Not offloading " in qedf_rport_event_handler()
1491 QEDF_WARN(&(qedf->dbg_ctx), "Session already " in qedf_rport_event_handler()
1504 QEDF_WARN(&(qedf->dbg_ctx), "rport struct does not " in qedf_rport_event_handler()
1511 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_rport_event_handler()
1516 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_rport_event_handler()
1526 rval = qedf_alloc_sq(qedf, fcport); in qedf_rport_event_handler()
1528 qedf_cleanup_fcport(qedf, fcport); in qedf_rport_event_handler()
1537 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_rport_event_handler()
1544 rval = qedf_offload_connection(qedf, fcport); in qedf_rport_event_handler()
1546 qedf_cleanup_fcport(qedf, fcport); in qedf_rport_event_handler()
1551 spin_lock_irqsave(&qedf->hba_lock, flags); in qedf_rport_event_handler()
1552 list_add_rcu(&fcport->peers, &qedf->fcports); in qedf_rport_event_handler()
1553 spin_unlock_irqrestore(&qedf->hba_lock, flags); in qedf_rport_event_handler()
1560 atomic_inc(&qedf->num_offloads); in qedf_rport_event_handler()
1571 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_rport_event_handler()
1576 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_rport_event_handler()
1582 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_rport_event_handler()
1601 qedf_cleanup_fcport(qedf, fcport); in qedf_rport_event_handler()
1606 spin_lock_irqsave(&qedf->hba_lock, flags); in qedf_rport_event_handler()
1608 spin_unlock_irqrestore(&qedf->hba_lock, flags); in qedf_rport_event_handler()
1612 atomic_dec(&qedf->num_offloads); in qedf_rport_event_handler()
1645 static void qedf_fcoe_ctlr_setup(struct qedf_ctx *qedf) in qedf_fcoe_ctlr_setup() argument
1647 fcoe_ctlr_init(&qedf->ctlr, FIP_MODE_AUTO); in qedf_fcoe_ctlr_setup()
1649 qedf->ctlr.send = qedf_fip_send; in qedf_fcoe_ctlr_setup()
1650 qedf->ctlr.get_src_addr = qedf_get_src_mac; in qedf_fcoe_ctlr_setup()
1651 ether_addr_copy(qedf->ctlr.ctl_src_addr, qedf->mac); in qedf_fcoe_ctlr_setup()
1654 static void qedf_setup_fdmi(struct qedf_ctx *qedf) in qedf_setup_fdmi() argument
1656 struct fc_lport *lport = qedf->lport; in qedf_setup_fdmi()
1673 pos = pci_find_ext_capability(qedf->pdev, PCI_EXT_CAP_ID_DSN); in qedf_setup_fdmi()
1677 pci_read_config_byte(qedf->pdev, pos + i, &buf[i]); in qedf_setup_fdmi()
1691 if (qedf->pdev->device == QL45xxx) { in qedf_setup_fdmi()
1700 if (qedf->pdev->device == QL41xxx) { in qedf_setup_fdmi()
1710 FC_VERSION_STRING_SIZE, "Rev %d", qedf->pdev->revision); in qedf_setup_fdmi()
1722 static int qedf_lport_setup(struct qedf_ctx *qedf) in qedf_lport_setup() argument
1724 struct fc_lport *lport = qedf->lport; in qedf_lport_setup()
1739 fc_set_wwnn(lport, qedf->wwnn); in qedf_lport_setup()
1740 fc_set_wwpn(lport, qedf->wwpn); in qedf_lport_setup()
1742 if (fcoe_libfc_config(lport, &qedf->ctlr, &qedf_lport_template, 0)) { in qedf_lport_setup()
1743 QEDF_ERR(&qedf->dbg_ctx, in qedf_lport_setup()
1766 if (qedf->pdev->device == QL45xxx) in qedf_lport_setup()
1770 if (qedf->pdev->device == QL41xxx) in qedf_lport_setup()
1774 qedf_setup_fdmi(qedf); in qedf_lport_setup()
1960 struct qedf_ctx *qedf = lport_priv(vn_port); in qedf_vport_destroy() local
1962 if (!qedf) { in qedf_vport_destroy()
1968 set_bit(QEDF_UNLOADING, &qedf->flags); in qedf_vport_destroy()
2019 static void qedf_wait_for_vport_destroy(struct qedf_ctx *qedf) in qedf_wait_for_vport_destroy() argument
2021 struct fc_host_attrs *fc_host = shost_to_fc_host(qedf->lport->host); in qedf_wait_for_vport_destroy()
2023 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_NPIV, in qedf_wait_for_vport_destroy()
2026 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_NPIV, in qedf_wait_for_vport_destroy()
2059 struct qedf_ctx *qedf = lport_priv(lport); in qedf_fc_get_host_stats() local
2070 QEDF_ERR(&(qedf->dbg_ctx), "Could not allocate memory for " in qedf_fc_get_host_stats()
2075 mutex_lock(&qedf->stats_mutex); in qedf_fc_get_host_stats()
2078 qed_ops->get_stats(qedf->cdev, fw_fcoe_stats); in qedf_fc_get_host_stats()
2104 qedf_stats->fcp_input_requests += qedf->input_requests; in qedf_fc_get_host_stats()
2105 qedf_stats->fcp_output_requests += qedf->output_requests; in qedf_fc_get_host_stats()
2106 qedf_stats->fcp_control_requests += qedf->control_requests; in qedf_fc_get_host_stats()
2107 qedf_stats->fcp_packet_aborts += qedf->packet_aborts; in qedf_fc_get_host_stats()
2108 qedf_stats->fcp_frame_alloc_failures += qedf->alloc_failures; in qedf_fc_get_host_stats()
2110 mutex_unlock(&qedf->stats_mutex); in qedf_fc_get_host_stats()
2188 struct qedf_ctx *qedf = fp->qedf; in qedf_fp_has_work() local
2195 que = qedf->global_queues[fp->sb_id]; in qedf_fp_has_work()
2216 struct qedf_ctx *qedf = fp->qedf; in qedf_process_completions() local
2234 que = qedf->global_queues[fp->sb_id]; in qedf_process_completions()
2257 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_UNSOL, in qedf_process_completions()
2259 qedf_process_unsol_compl(qedf, fp->sb_id, cqe); in qedf_process_completions()
2268 io_req = &qedf->cmd_mgr->cmds[xid]; in qedf_process_completions()
2284 io_work = mempool_alloc(qedf->io_mempool, GFP_ATOMIC); in qedf_process_completions()
2286 QEDF_WARN(&(qedf->dbg_ctx), "Could not allocate " in qedf_process_completions()
2297 io_work->qedf = fp->qedf; in qedf_process_completions()
2359 struct qedf_ctx *qedf = (struct qedf_ctx *)cookie; in qedf_simd_int_handler() local
2361 QEDF_WARN(&(qedf->dbg_ctx), "qedf=%p.\n", qedf); in qedf_simd_int_handler()
2365 static void qedf_sync_free_irqs(struct qedf_ctx *qedf) in qedf_sync_free_irqs() argument
2371 if (qedf->int_info.msix_cnt) { in qedf_sync_free_irqs()
2372 for (i = 0; i < qedf->int_info.used_cnt; i++) { in qedf_sync_free_irqs()
2373 vector_idx = i * qedf->dev_info.common.num_hwfns + in qedf_sync_free_irqs()
2374 qed_ops->common->get_affin_hwfn_idx(qedf->cdev); in qedf_sync_free_irqs()
2375 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, in qedf_sync_free_irqs()
2378 vector = qedf->int_info.msix[vector_idx].vector; in qedf_sync_free_irqs()
2382 free_irq(vector, &qedf->fp_array[i]); in qedf_sync_free_irqs()
2385 qed_ops->common->simd_handler_clean(qedf->cdev, in qedf_sync_free_irqs()
2388 qedf->int_info.used_cnt = 0; in qedf_sync_free_irqs()
2389 qed_ops->common->set_fp_int(qedf->cdev, 0); in qedf_sync_free_irqs()
2392 static int qedf_request_msix_irq(struct qedf_ctx *qedf) in qedf_request_msix_irq() argument
2399 for (i = 0; i < qedf->num_queues; i++) { in qedf_request_msix_irq()
2400 vector_idx = i * qedf->dev_info.common.num_hwfns + in qedf_request_msix_irq()
2401 qed_ops->common->get_affin_hwfn_idx(qedf->cdev); in qedf_request_msix_irq()
2402 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, in qedf_request_msix_irq()
2405 vector = qedf->int_info.msix[vector_idx].vector; in qedf_request_msix_irq()
2407 &qedf->fp_array[i]); in qedf_request_msix_irq()
2410 QEDF_WARN(&(qedf->dbg_ctx), "request_irq failed.\n"); in qedf_request_msix_irq()
2411 qedf_sync_free_irqs(qedf); in qedf_request_msix_irq()
2415 qedf->int_info.used_cnt++; in qedf_request_msix_irq()
2423 static int qedf_setup_int(struct qedf_ctx *qedf) in qedf_setup_int() argument
2430 rc = qed_ops->common->set_fp_int(qedf->cdev, num_online_cpus()); in qedf_setup_int()
2434 rc = qed_ops->common->get_fp_int(qedf->cdev, &qedf->int_info); in qedf_setup_int()
2438 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, "Number of msix_cnt = " in qedf_setup_int()
2439 "0x%x num of cpus = 0x%x\n", qedf->int_info.msix_cnt, in qedf_setup_int()
2442 if (qedf->int_info.msix_cnt) in qedf_setup_int()
2443 return qedf_request_msix_irq(qedf); in qedf_setup_int()
2445 qed_ops->common->simd_handler_config(qedf->cdev, &qedf, in qedf_setup_int()
2447 qedf->int_info.used_cnt = 1; in qedf_setup_int()
2449 QEDF_ERR(&qedf->dbg_ctx, in qedf_setup_int()
2455 static void qedf_recv_frame(struct qedf_ctx *qedf, in qedf_recv_frame() argument
2470 lport = qedf->lport; in qedf_recv_frame()
2537 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_LL2, in qedf_recv_frame()
2543 if (qedf->ctlr.state) { in qedf_recv_frame()
2544 if (!ether_addr_equal(mac, qedf->ctlr.dest_addr)) { in qedf_recv_frame()
2545 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_LL2, in qedf_recv_frame()
2547 mac, qedf->ctlr.dest_addr); in qedf_recv_frame()
2561 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_LL2, in qedf_recv_frame()
2572 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_LL2, in qedf_recv_frame()
2585 fcport = qedf_fcport_lookup(qedf, ntoh24(fh->fh_d_id)); in qedf_recv_frame()
2589 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_LL2, in qedf_recv_frame()
2595 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_LL2, "FCoE frame receive: " in qedf_recv_frame()
2609 struct qedf_ctx *qedf = skb_work->qedf; in qedf_ll2_process_skb() local
2613 if (!qedf) { in qedf_ll2_process_skb()
2633 qedf_fip_recv(qedf, skb); in qedf_ll2_process_skb()
2637 qedf_recv_frame(qedf, skb); in qedf_ll2_process_skb()
2652 struct qedf_ctx *qedf = (struct qedf_ctx *)cookie; in qedf_ll2_rx() local
2655 if (atomic_read(&qedf->link_state) == QEDF_LINK_DOWN) { in qedf_ll2_rx()
2656 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_LL2, in qedf_ll2_rx()
2664 QEDF_WARN(&(qedf->dbg_ctx), "Could not allocate skb_work so " in qedf_ll2_rx()
2672 skb_work->qedf = qedf; in qedf_ll2_rx()
2673 queue_work(qedf->ll2_recv_wq, &skb_work->work); in qedf_ll2_rx()
2699 fc_exch_recv(io_work->qedf->lport, io_work->fp); in qedf_fp_io_handler()
2701 qedf_process_cqe(io_work->qedf, &io_work->cqe); in qedf_fp_io_handler()
2706 static int qedf_alloc_and_init_sb(struct qedf_ctx *qedf, in qedf_alloc_and_init_sb() argument
2713 sb_virt = dma_alloc_coherent(&qedf->pdev->dev, in qedf_alloc_and_init_sb()
2717 QEDF_ERR(&qedf->dbg_ctx, in qedf_alloc_and_init_sb()
2723 ret = qed_ops->common->sb_init(qedf->cdev, sb_info, sb_virt, sb_phys, in qedf_alloc_and_init_sb()
2727 QEDF_ERR(&qedf->dbg_ctx, in qedf_alloc_and_init_sb()
2736 static void qedf_free_sb(struct qedf_ctx *qedf, struct qed_sb_info *sb_info) in qedf_free_sb() argument
2739 dma_free_coherent(&qedf->pdev->dev, sizeof(*sb_info->sb_virt), in qedf_free_sb()
2743 static void qedf_destroy_sb(struct qedf_ctx *qedf) in qedf_destroy_sb() argument
2748 for (id = 0; id < qedf->num_queues; id++) { in qedf_destroy_sb()
2749 fp = &(qedf->fp_array[id]); in qedf_destroy_sb()
2752 qedf_free_sb(qedf, fp->sb_info); in qedf_destroy_sb()
2755 kfree(qedf->fp_array); in qedf_destroy_sb()
2758 static int qedf_prepare_sb(struct qedf_ctx *qedf) in qedf_prepare_sb() argument
2764 qedf->fp_array = in qedf_prepare_sb()
2765 kcalloc(qedf->num_queues, sizeof(struct qedf_fastpath), in qedf_prepare_sb()
2768 if (!qedf->fp_array) { in qedf_prepare_sb()
2769 QEDF_ERR(&(qedf->dbg_ctx), "fastpath array allocation " in qedf_prepare_sb()
2774 for (id = 0; id < qedf->num_queues; id++) { in qedf_prepare_sb()
2775 fp = &(qedf->fp_array[id]); in qedf_prepare_sb()
2779 QEDF_ERR(&(qedf->dbg_ctx), "SB info struct " in qedf_prepare_sb()
2783 ret = qedf_alloc_and_init_sb(qedf, fp->sb_info, id); in qedf_prepare_sb()
2785 QEDF_ERR(&(qedf->dbg_ctx), "SB allocation and " in qedf_prepare_sb()
2790 fp->qedf = qedf; in qedf_prepare_sb()
2792 qedf->global_queues[id]->cq_mem_size / in qedf_prepare_sb()
2799 void qedf_process_cqe(struct qedf_ctx *qedf, struct fcoe_cqe *cqe) in qedf_process_cqe() argument
2810 io_req = &qedf->cmd_mgr->cmds[xid]; in qedf_process_cqe()
2814 QEDF_ERR(&qedf->dbg_ctx, in qedf_process_cqe()
2822 QEDF_ERR(&qedf->dbg_ctx, in qedf_process_cqe()
2833 QEDF_ERR(&qedf->dbg_ctx, in qedf_process_cqe()
2844 qedf_scsi_completion(qedf, cqe, io_req); in qedf_process_cqe()
2847 qedf_process_els_compl(qedf, cqe, io_req); in qedf_process_cqe()
2850 qedf_process_tmf_compl(qedf, cqe, io_req); in qedf_process_cqe()
2853 qedf_process_seq_cleanup_compl(qedf, cqe, io_req); in qedf_process_cqe()
2859 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_IO, in qedf_process_cqe()
2861 qedf_process_error_detect(qedf, cqe, io_req); in qedf_process_cqe()
2865 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_IO, in qedf_process_cqe()
2867 qedf_process_cleanup_compl(qedf, cqe, io_req); in qedf_process_cqe()
2871 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_IO, in qedf_process_cqe()
2873 qedf_process_abts_compl(qedf, cqe, io_req); in qedf_process_cqe()
2877 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_IO, in qedf_process_cqe()
2882 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_IO, in qedf_process_cqe()
2887 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_IO, in qedf_process_cqe()
2889 qedf_process_warning_compl(qedf, cqe, io_req); in qedf_process_cqe()
2893 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_IO, in qedf_process_cqe()
2897 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_IO, in qedf_process_cqe()
2903 static void qedf_free_bdq(struct qedf_ctx *qedf) in qedf_free_bdq() argument
2907 if (qedf->bdq_pbl_list) in qedf_free_bdq()
2908 dma_free_coherent(&qedf->pdev->dev, QEDF_PAGE_SIZE, in qedf_free_bdq()
2909 qedf->bdq_pbl_list, qedf->bdq_pbl_list_dma); in qedf_free_bdq()
2911 if (qedf->bdq_pbl) in qedf_free_bdq()
2912 dma_free_coherent(&qedf->pdev->dev, qedf->bdq_pbl_mem_size, in qedf_free_bdq()
2913 qedf->bdq_pbl, qedf->bdq_pbl_dma); in qedf_free_bdq()
2916 if (qedf->bdq[i].buf_addr) { in qedf_free_bdq()
2917 dma_free_coherent(&qedf->pdev->dev, QEDF_BDQ_BUF_SIZE, in qedf_free_bdq()
2918 qedf->bdq[i].buf_addr, qedf->bdq[i].buf_dma); in qedf_free_bdq()
2923 static void qedf_free_global_queues(struct qedf_ctx *qedf) in qedf_free_global_queues() argument
2926 struct global_queue **gl = qedf->global_queues; in qedf_free_global_queues()
2928 for (i = 0; i < qedf->num_queues; i++) { in qedf_free_global_queues()
2933 dma_free_coherent(&qedf->pdev->dev, in qedf_free_global_queues()
2936 dma_free_coherent(&qedf->pdev->dev, gl[i]->cq_pbl_size, in qedf_free_global_queues()
2942 qedf_free_bdq(qedf); in qedf_free_global_queues()
2945 static int qedf_alloc_bdq(struct qedf_ctx *qedf) in qedf_alloc_bdq() argument
2954 qedf->bdq[i].buf_addr = dma_alloc_coherent(&qedf->pdev->dev, in qedf_alloc_bdq()
2955 QEDF_BDQ_BUF_SIZE, &qedf->bdq[i].buf_dma, GFP_KERNEL); in qedf_alloc_bdq()
2956 if (!qedf->bdq[i].buf_addr) { in qedf_alloc_bdq()
2957 QEDF_ERR(&(qedf->dbg_ctx), "Could not allocate BDQ " in qedf_alloc_bdq()
2964 qedf->bdq_pbl_mem_size = in qedf_alloc_bdq()
2966 qedf->bdq_pbl_mem_size = in qedf_alloc_bdq()
2967 ALIGN(qedf->bdq_pbl_mem_size, QEDF_PAGE_SIZE); in qedf_alloc_bdq()
2969 qedf->bdq_pbl = dma_alloc_coherent(&qedf->pdev->dev, in qedf_alloc_bdq()
2970 qedf->bdq_pbl_mem_size, &qedf->bdq_pbl_dma, GFP_KERNEL); in qedf_alloc_bdq()
2971 if (!qedf->bdq_pbl) { in qedf_alloc_bdq()
2972 QEDF_ERR(&(qedf->dbg_ctx), "Could not allocate BDQ PBL.\n"); in qedf_alloc_bdq()
2976 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_alloc_bdq()
2978 qedf->bdq_pbl, &qedf->bdq_pbl_dma); in qedf_alloc_bdq()
2984 pbl = (struct scsi_bd *)qedf->bdq_pbl; in qedf_alloc_bdq()
2986 pbl->address.hi = cpu_to_le32(U64_HI(qedf->bdq[i].buf_dma)); in qedf_alloc_bdq()
2987 pbl->address.lo = cpu_to_le32(U64_LO(qedf->bdq[i].buf_dma)); in qedf_alloc_bdq()
2995 qedf->bdq_pbl_list = dma_alloc_coherent(&qedf->pdev->dev, in qedf_alloc_bdq()
2997 &qedf->bdq_pbl_list_dma, in qedf_alloc_bdq()
2999 if (!qedf->bdq_pbl_list) { in qedf_alloc_bdq()
3000 QEDF_ERR(&(qedf->dbg_ctx), "Could not allocate list of PBL pages.\n"); in qedf_alloc_bdq()
3008 qedf->bdq_pbl_list_num_entries = qedf->bdq_pbl_mem_size / in qedf_alloc_bdq()
3010 list = (u64 *)qedf->bdq_pbl_list; in qedf_alloc_bdq()
3011 page = qedf->bdq_pbl_list_dma; in qedf_alloc_bdq()
3012 for (i = 0; i < qedf->bdq_pbl_list_num_entries; i++) { in qedf_alloc_bdq()
3013 *list = qedf->bdq_pbl_dma; in qedf_alloc_bdq()
3021 static int qedf_alloc_global_queues(struct qedf_ctx *qedf) in qedf_alloc_global_queues() argument
3035 if (!qedf->num_queues) { in qedf_alloc_global_queues()
3036 QEDF_ERR(&(qedf->dbg_ctx), "No MSI-X vectors available!\n"); in qedf_alloc_global_queues()
3044 if (!qedf->p_cpuq) { in qedf_alloc_global_queues()
3046 QEDF_ERR(&qedf->dbg_ctx, "p_cpuq is NULL.\n"); in qedf_alloc_global_queues()
3050 qedf->global_queues = kzalloc((sizeof(struct global_queue *) in qedf_alloc_global_queues()
3051 * qedf->num_queues), GFP_KERNEL); in qedf_alloc_global_queues()
3052 if (!qedf->global_queues) { in qedf_alloc_global_queues()
3053 QEDF_ERR(&(qedf->dbg_ctx), "Unable to allocate global " in qedf_alloc_global_queues()
3057 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_alloc_global_queues()
3058 "qedf->global_queues=%p.\n", qedf->global_queues); in qedf_alloc_global_queues()
3061 status = qedf_alloc_bdq(qedf); in qedf_alloc_global_queues()
3063 QEDF_ERR(&qedf->dbg_ctx, "Unable to allocate bdq.\n"); in qedf_alloc_global_queues()
3068 for (i = 0; i < qedf->num_queues; i++) { in qedf_alloc_global_queues()
3069 qedf->global_queues[i] = kzalloc(sizeof(struct global_queue), in qedf_alloc_global_queues()
3071 if (!qedf->global_queues[i]) { in qedf_alloc_global_queues()
3072 QEDF_WARN(&(qedf->dbg_ctx), "Unable to allocate " in qedf_alloc_global_queues()
3078 qedf->global_queues[i]->cq_mem_size = in qedf_alloc_global_queues()
3080 qedf->global_queues[i]->cq_mem_size = in qedf_alloc_global_queues()
3081 ALIGN(qedf->global_queues[i]->cq_mem_size, QEDF_PAGE_SIZE); in qedf_alloc_global_queues()
3083 qedf->global_queues[i]->cq_pbl_size = in qedf_alloc_global_queues()
3084 (qedf->global_queues[i]->cq_mem_size / in qedf_alloc_global_queues()
3086 qedf->global_queues[i]->cq_pbl_size = in qedf_alloc_global_queues()
3087 ALIGN(qedf->global_queues[i]->cq_pbl_size, QEDF_PAGE_SIZE); in qedf_alloc_global_queues()
3089 qedf->global_queues[i]->cq = in qedf_alloc_global_queues()
3090 dma_alloc_coherent(&qedf->pdev->dev, in qedf_alloc_global_queues()
3091 qedf->global_queues[i]->cq_mem_size, in qedf_alloc_global_queues()
3092 &qedf->global_queues[i]->cq_dma, in qedf_alloc_global_queues()
3095 if (!qedf->global_queues[i]->cq) { in qedf_alloc_global_queues()
3096 QEDF_WARN(&(qedf->dbg_ctx), "Could not allocate cq.\n"); in qedf_alloc_global_queues()
3101 qedf->global_queues[i]->cq_pbl = in qedf_alloc_global_queues()
3102 dma_alloc_coherent(&qedf->pdev->dev, in qedf_alloc_global_queues()
3103 qedf->global_queues[i]->cq_pbl_size, in qedf_alloc_global_queues()
3104 &qedf->global_queues[i]->cq_pbl_dma, in qedf_alloc_global_queues()
3107 if (!qedf->global_queues[i]->cq_pbl) { in qedf_alloc_global_queues()
3108 QEDF_WARN(&(qedf->dbg_ctx), "Could not allocate cq PBL.\n"); in qedf_alloc_global_queues()
3114 num_pages = qedf->global_queues[i]->cq_mem_size / in qedf_alloc_global_queues()
3116 page = qedf->global_queues[i]->cq_dma; in qedf_alloc_global_queues()
3117 pbl = (u32 *)qedf->global_queues[i]->cq_pbl; in qedf_alloc_global_queues()
3127 qedf->global_queues[i]->cq_cons_idx = 0; in qedf_alloc_global_queues()
3130 list = (u32 *)qedf->p_cpuq; in qedf_alloc_global_queues()
3138 for (i = 0; i < qedf->num_queues; i++) { in qedf_alloc_global_queues()
3139 *list = U64_LO(qedf->global_queues[i]->cq_pbl_dma); in qedf_alloc_global_queues()
3141 *list = U64_HI(qedf->global_queues[i]->cq_pbl_dma); in qedf_alloc_global_queues()
3152 qedf_free_global_queues(qedf); in qedf_alloc_global_queues()
3156 static int qedf_set_fcoe_pf_param(struct qedf_ctx *qedf) in qedf_set_fcoe_pf_param() argument
3171 qedf->num_queues = MIN_NUM_CPUS_MSIX(qedf); in qedf_set_fcoe_pf_param()
3173 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, "Number of CQs is %d.\n", in qedf_set_fcoe_pf_param()
3174 qedf->num_queues); in qedf_set_fcoe_pf_param()
3176 qedf->p_cpuq = dma_alloc_coherent(&qedf->pdev->dev, in qedf_set_fcoe_pf_param()
3177 qedf->num_queues * sizeof(struct qedf_glbl_q_params), in qedf_set_fcoe_pf_param()
3178 &qedf->hw_p_cpuq, GFP_KERNEL); in qedf_set_fcoe_pf_param()
3180 if (!qedf->p_cpuq) { in qedf_set_fcoe_pf_param()
3181 QEDF_ERR(&(qedf->dbg_ctx), "dma_alloc_coherent failed.\n"); in qedf_set_fcoe_pf_param()
3185 rval = qedf_alloc_global_queues(qedf); in qedf_set_fcoe_pf_param()
3187 QEDF_ERR(&(qedf->dbg_ctx), "Global queue allocation " in qedf_set_fcoe_pf_param()
3202 memset(&(qedf->pf_params), 0, sizeof(qedf->pf_params)); in qedf_set_fcoe_pf_param()
3205 qedf->pf_params.fcoe_pf_params.num_cons = QEDF_MAX_SESSIONS; in qedf_set_fcoe_pf_param()
3206 qedf->pf_params.fcoe_pf_params.num_tasks = FCOE_PARAMS_NUM_TASKS; in qedf_set_fcoe_pf_param()
3207 qedf->pf_params.fcoe_pf_params.glbl_q_params_addr = in qedf_set_fcoe_pf_param()
3208 (u64)qedf->hw_p_cpuq; in qedf_set_fcoe_pf_param()
3209 qedf->pf_params.fcoe_pf_params.sq_num_pbl_pages = sq_num_pbl_pages; in qedf_set_fcoe_pf_param()
3211 qedf->pf_params.fcoe_pf_params.rq_buffer_log_size = 0; in qedf_set_fcoe_pf_param()
3213 qedf->pf_params.fcoe_pf_params.cq_num_entries = cq_num_entries; in qedf_set_fcoe_pf_param()
3214 qedf->pf_params.fcoe_pf_params.num_cqs = qedf->num_queues; in qedf_set_fcoe_pf_param()
3217 qedf->pf_params.fcoe_pf_params.log_page_size = ilog2(QEDF_PAGE_SIZE); in qedf_set_fcoe_pf_param()
3219 qedf->pf_params.fcoe_pf_params.mtu = 9000; in qedf_set_fcoe_pf_param()
3220 qedf->pf_params.fcoe_pf_params.gl_rq_pi = QEDF_FCOE_PARAMS_GL_RQ_PI; in qedf_set_fcoe_pf_param()
3221 qedf->pf_params.fcoe_pf_params.gl_cmd_pi = QEDF_FCOE_PARAMS_GL_CMD_PI; in qedf_set_fcoe_pf_param()
3224 qedf->pf_params.fcoe_pf_params.bdq_pbl_base_addr[0] = in qedf_set_fcoe_pf_param()
3225 qedf->bdq_pbl_list_dma; in qedf_set_fcoe_pf_param()
3226 qedf->pf_params.fcoe_pf_params.bdq_pbl_num_entries[0] = in qedf_set_fcoe_pf_param()
3227 qedf->bdq_pbl_list_num_entries; in qedf_set_fcoe_pf_param()
3228 qedf->pf_params.fcoe_pf_params.rq_buffer_size = QEDF_BDQ_BUF_SIZE; in qedf_set_fcoe_pf_param()
3230 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_set_fcoe_pf_param()
3232 qedf->bdq_pbl_list, in qedf_set_fcoe_pf_param()
3233 qedf->pf_params.fcoe_pf_params.bdq_pbl_base_addr[0], in qedf_set_fcoe_pf_param()
3234 qedf->pf_params.fcoe_pf_params.bdq_pbl_num_entries[0]); in qedf_set_fcoe_pf_param()
3236 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in qedf_set_fcoe_pf_param()
3238 qedf->pf_params.fcoe_pf_params.cq_num_entries); in qedf_set_fcoe_pf_param()
3244 static void qedf_free_fcoe_pf_param(struct qedf_ctx *qedf) in qedf_free_fcoe_pf_param() argument
3248 if (qedf->p_cpuq) { in qedf_free_fcoe_pf_param()
3249 size = qedf->num_queues * sizeof(struct qedf_glbl_q_params); in qedf_free_fcoe_pf_param()
3250 dma_free_coherent(&qedf->pdev->dev, size, qedf->p_cpuq, in qedf_free_fcoe_pf_param()
3251 qedf->hw_p_cpuq); in qedf_free_fcoe_pf_param()
3254 qedf_free_global_queues(qedf); in qedf_free_fcoe_pf_param()
3256 kfree(qedf->global_queues); in qedf_free_fcoe_pf_param()
3282 struct qedf_ctx *qedf = NULL; in __qedf_probe() local
3315 qedf = lport_priv(lport); in __qedf_probe()
3316 set_bit(QEDF_PROBING, &qedf->flags); in __qedf_probe()
3317 qedf->lport = lport; in __qedf_probe()
3318 qedf->ctlr.lp = lport; in __qedf_probe()
3319 qedf->pdev = pdev; in __qedf_probe()
3320 qedf->dbg_ctx.pdev = pdev; in __qedf_probe()
3321 qedf->dbg_ctx.host_no = lport->host->host_no; in __qedf_probe()
3322 spin_lock_init(&qedf->hba_lock); in __qedf_probe()
3323 INIT_LIST_HEAD(&qedf->fcports); in __qedf_probe()
3324 qedf->curr_conn_id = QEDF_MAX_SESSIONS - 1; in __qedf_probe()
3325 atomic_set(&qedf->num_offloads, 0); in __qedf_probe()
3326 qedf->stop_io_on_error = false; in __qedf_probe()
3327 pci_set_drvdata(pdev, qedf); in __qedf_probe()
3328 init_completion(&qedf->fipvlan_compl); in __qedf_probe()
3329 mutex_init(&qedf->stats_mutex); in __qedf_probe()
3330 mutex_init(&qedf->flush_mutex); in __qedf_probe()
3331 qedf->flogi_pending = 0; in __qedf_probe()
3333 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_INFO, in __qedf_probe()
3340 qedf = pci_get_drvdata(pdev); in __qedf_probe()
3341 set_bit(QEDF_PROBING, &qedf->flags); in __qedf_probe()
3342 lport = qedf->lport; in __qedf_probe()
3345 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, "Probe started.\n"); in __qedf_probe()
3350 qedf->io_mempool = mempool_create_slab_pool(QEDF_IO_WORK_MIN, in __qedf_probe()
3352 if (qedf->io_mempool == NULL) { in __qedf_probe()
3353 QEDF_ERR(&(qedf->dbg_ctx), "qedf->io_mempool is NULL.\n"); in __qedf_probe()
3356 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_INFO, "qedf->io_mempool=%p.\n", in __qedf_probe()
3357 qedf->io_mempool); in __qedf_probe()
3360 qedf->lport->host->host_no); in __qedf_probe()
3361 qedf->link_update_wq = create_workqueue(host_buf); in __qedf_probe()
3362 INIT_DELAYED_WORK(&qedf->link_update, qedf_handle_link_update); in __qedf_probe()
3363 INIT_DELAYED_WORK(&qedf->link_recovery, qedf_link_recovery); in __qedf_probe()
3364 INIT_DELAYED_WORK(&qedf->grcdump_work, qedf_wq_grcdump); in __qedf_probe()
3365 INIT_DELAYED_WORK(&qedf->stag_work, qedf_stag_change_work); in __qedf_probe()
3366 qedf->fipvlan_retries = qedf_fipvlan_retries; in __qedf_probe()
3373 qedf->prio = qedf_default_prio; in __qedf_probe()
3375 qedf->prio = QEDF_DEFAULT_PRIO; in __qedf_probe()
3386 qedf->cdev = qed_ops->common->probe(pdev, &qed_params); in __qedf_probe()
3387 if (!qedf->cdev) { in __qedf_probe()
3389 QEDF_ERR(&qedf->dbg_ctx, in __qedf_probe()
3394 QEDF_ERR(&qedf->dbg_ctx, "common probe failed.\n"); in __qedf_probe()
3400 rc = qed_ops->fill_dev_info(qedf->cdev, &qedf->dev_info); in __qedf_probe()
3402 QEDF_ERR(&(qedf->dbg_ctx), "Failed to dev info.\n"); in __qedf_probe()
3406 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, in __qedf_probe()
3408 qedf->dev_info.common.num_hwfns, in __qedf_probe()
3409 qed_ops->common->get_affin_hwfn_idx(qedf->cdev)); in __qedf_probe()
3419 rc = qedf_set_fcoe_pf_param(qedf); in __qedf_probe()
3421 QEDF_ERR(&(qedf->dbg_ctx), "Cannot set fcoe pf param.\n"); in __qedf_probe()
3424 qed_ops->common->update_pf_params(qedf->cdev, &qedf->pf_params); in __qedf_probe()
3427 rc = qed_ops->fill_dev_info(qedf->cdev, &qedf->dev_info); in __qedf_probe()
3429 QEDF_ERR(&qedf->dbg_ctx, "Failed to fill dev info.\n"); in __qedf_probe()
3434 qedf->bdq_primary_prod = qedf->dev_info.primary_dbq_rq_addr; in __qedf_probe()
3435 qedf->bdq_secondary_prod = qedf->dev_info.secondary_bdq_rq_addr; in __qedf_probe()
3436 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in __qedf_probe()
3437 "BDQ primary_prod=%p secondary_prod=%p.\n", qedf->bdq_primary_prod, in __qedf_probe()
3438 qedf->bdq_secondary_prod); in __qedf_probe()
3440 qed_ops->register_ops(qedf->cdev, &qedf_cb_ops, qedf); in __qedf_probe()
3442 rc = qedf_prepare_sb(qedf); in __qedf_probe()
3445 QEDF_ERR(&(qedf->dbg_ctx), "Cannot start slowpath.\n"); in __qedf_probe()
3456 rc = qed_ops->common->slowpath_start(qedf->cdev, &slowpath_params); in __qedf_probe()
3458 QEDF_ERR(&(qedf->dbg_ctx), "Cannot start slowpath.\n"); in __qedf_probe()
3466 qed_ops->common->update_pf_params(qedf->cdev, &qedf->pf_params); in __qedf_probe()
3469 rc = qedf_setup_int(qedf); in __qedf_probe()
3471 QEDF_ERR(&qedf->dbg_ctx, "Setup interrupts failed.\n"); in __qedf_probe()
3475 rc = qed_ops->start(qedf->cdev, &qedf->tasks); in __qedf_probe()
3477 QEDF_ERR(&(qedf->dbg_ctx), "Cannot start FCoE function.\n"); in __qedf_probe()
3480 task_start = qedf_get_task_mem(&qedf->tasks, 0); in __qedf_probe()
3481 task_end = qedf_get_task_mem(&qedf->tasks, MAX_TID_BLOCKS_FCOE - 1); in __qedf_probe()
3482 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, "Task context start=%p, " in __qedf_probe()
3484 qedf->tasks.size); in __qedf_probe()
3491 qedf->bdq_prod_idx = QEDF_BDQ_SIZE; in __qedf_probe()
3492 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in __qedf_probe()
3494 qedf->bdq_prod_idx); in __qedf_probe()
3495 writew(qedf->bdq_prod_idx, qedf->bdq_primary_prod); in __qedf_probe()
3496 readw(qedf->bdq_primary_prod); in __qedf_probe()
3497 writew(qedf->bdq_prod_idx, qedf->bdq_secondary_prod); in __qedf_probe()
3498 readw(qedf->bdq_secondary_prod); in __qedf_probe()
3500 qed_ops->common->set_power_state(qedf->cdev, PCI_D0); in __qedf_probe()
3505 ether_addr_copy(qedf->mac, qedf->dev_info.common.hw_mac); in __qedf_probe()
3506 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, "MAC address is %pM.\n", in __qedf_probe()
3507 qedf->mac); in __qedf_probe()
3516 if (qedf->dev_info.wwnn != 0 && qedf->dev_info.wwpn != 0) { in __qedf_probe()
3517 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in __qedf_probe()
3519 qedf->wwnn = qedf->dev_info.wwnn; in __qedf_probe()
3520 qedf->wwpn = qedf->dev_info.wwpn; in __qedf_probe()
3522 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in __qedf_probe()
3524 qedf->wwnn = fcoe_wwn_from_mac(qedf->mac, 1, 0); in __qedf_probe()
3525 qedf->wwpn = fcoe_wwn_from_mac(qedf->mac, 2, 0); in __qedf_probe()
3527 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, "WWNN=%016llx " in __qedf_probe()
3528 "WWPN=%016llx.\n", qedf->wwnn, qedf->wwpn); in __qedf_probe()
3531 qed_ops->common->set_name(qedf->cdev, host_buf); in __qedf_probe()
3534 qedf->cmd_mgr = qedf_cmd_mgr_alloc(qedf); in __qedf_probe()
3535 if (!qedf->cmd_mgr) { in __qedf_probe()
3536 QEDF_ERR(&(qedf->dbg_ctx), "Failed to allocate cmd mgr.\n"); in __qedf_probe()
3548 QEDF_WARN(&qedf->dbg_ctx, in __qedf_probe()
3556 ether_addr_copy(params.ll2_mac_address, qedf->mac); in __qedf_probe()
3560 qedf->ll2_recv_wq = in __qedf_probe()
3562 if (!qedf->ll2_recv_wq) { in __qedf_probe()
3563 QEDF_ERR(&(qedf->dbg_ctx), "Failed to LL2 workqueue.\n"); in __qedf_probe()
3569 qedf_dbg_host_init(&(qedf->dbg_ctx), qedf_debugfs_ops, in __qedf_probe()
3574 qed_ops->ll2->register_cb_ops(qedf->cdev, &qedf_ll2_cb_ops, qedf); in __qedf_probe()
3575 rc = qed_ops->ll2->start(qedf->cdev, &params); in __qedf_probe()
3577 QEDF_ERR(&(qedf->dbg_ctx), "Could not start Light L2.\n"); in __qedf_probe()
3580 set_bit(QEDF_LL2_STARTED, &qedf->flags); in __qedf_probe()
3583 qedf->vlan_id = 0; in __qedf_probe()
3591 qedf_fcoe_ctlr_setup(qedf); in __qedf_probe()
3594 rc = qedf_lport_setup(qedf); in __qedf_probe()
3596 QEDF_ERR(&(qedf->dbg_ctx), in __qedf_probe()
3602 sprintf(host_buf, "qedf_%u_timer", qedf->lport->host->host_no); in __qedf_probe()
3603 qedf->timer_work_queue = in __qedf_probe()
3605 if (!qedf->timer_work_queue) { in __qedf_probe()
3606 QEDF_ERR(&(qedf->dbg_ctx), "Failed to start timer " in __qedf_probe()
3615 qedf->lport->host->host_no); in __qedf_probe()
3616 qedf->dpc_wq = create_workqueue(host_buf); in __qedf_probe()
3618 INIT_DELAYED_WORK(&qedf->recovery_work, qedf_recovery_handler); in __qedf_probe()
3625 qedf->grcdump_size = in __qedf_probe()
3626 qed_ops->common->dbg_all_data_size(qedf->cdev); in __qedf_probe()
3627 if (qedf->grcdump_size) { in __qedf_probe()
3628 rc = qedf_alloc_grc_dump_buf(&qedf->grcdump, in __qedf_probe()
3629 qedf->grcdump_size); in __qedf_probe()
3631 QEDF_ERR(&(qedf->dbg_ctx), in __qedf_probe()
3633 qedf->grcdump = NULL; in __qedf_probe()
3636 QEDF_INFO(&(qedf->dbg_ctx), QEDF_LOG_DISC, in __qedf_probe()
3638 qedf->grcdump, qedf->grcdump_size); in __qedf_probe()
3640 qedf_create_sysfs_ctx_attr(qedf); in __qedf_probe()
3643 spin_lock_init(&qedf->io_trace_lock); in __qedf_probe()
3644 qedf->io_trace_idx = 0; in __qedf_probe()
3647 init_completion(&qedf->flogi_compl); in __qedf_probe()
3649 status = qed_ops->common->update_drv_state(qedf->cdev, true); in __qedf_probe()
3651 QEDF_ERR(&(qedf->dbg_ctx), in __qedf_probe()
3656 status = qed_ops->common->set_link(qedf->cdev, &link_params); in __qedf_probe()
3658 QEDF_WARN(&(qedf->dbg_ctx), "set_link failed.\n"); in __qedf_probe()
3662 fcoe_ctlr_link_up(&qedf->ctlr); in __qedf_probe()
3666 QEDF_INFO(&qedf->dbg_ctx, QEDF_LOG_DISC, "Probe done.\n"); in __qedf_probe()
3668 clear_bit(QEDF_PROBING, &qedf->flags); in __qedf_probe()
3674 if (qedf->ll2_recv_wq) in __qedf_probe()
3675 destroy_workqueue(qedf->ll2_recv_wq); in __qedf_probe()
3676 fc_remove_host(qedf->lport->host); in __qedf_probe()
3677 scsi_remove_host(qedf->lport->host); in __qedf_probe()
3679 qedf_dbg_host_exit(&(qedf->dbg_ctx)); in __qedf_probe()
3682 qedf_cmd_mgr_free(qedf->cmd_mgr); in __qedf_probe()
3684 qed_ops->stop(qedf->cdev); in __qedf_probe()
3686 qedf_free_fcoe_pf_param(qedf); in __qedf_probe()
3687 qedf_sync_free_irqs(qedf); in __qedf_probe()
3689 qed_ops->common->slowpath_stop(qedf->cdev); in __qedf_probe()
3691 qed_ops->common->remove(qedf->cdev); in __qedf_probe()
3705 struct qedf_ctx *qedf; in __qedf_remove() local
3713 qedf = pci_get_drvdata(pdev); in __qedf_remove()
3719 if (test_bit(QEDF_UNLOADING, &qedf->flags)) { in __qedf_remove()
3720 QEDF_ERR(&qedf->dbg_ctx, "Already removing PCI function.\n"); in __qedf_remove()
3725 set_bit(QEDF_UNLOADING, &qedf->flags); in __qedf_remove()
3729 fcoe_ctlr_link_down(&qedf->ctlr); in __qedf_remove()
3731 fc_fabric_logoff(qedf->lport); in __qedf_remove()
3733 if (qedf_wait_for_upload(qedf) == false) in __qedf_remove()
3734 QEDF_ERR(&qedf->dbg_ctx, "Could not upload all sessions.\n"); in __qedf_remove()
3737 qedf_dbg_host_exit(&(qedf->dbg_ctx)); in __qedf_remove()
3741 cancel_delayed_work_sync(&qedf->link_update); in __qedf_remove()
3742 destroy_workqueue(qedf->link_update_wq); in __qedf_remove()
3743 qedf->link_update_wq = NULL; in __qedf_remove()
3745 if (qedf->timer_work_queue) in __qedf_remove()
3746 destroy_workqueue(qedf->timer_work_queue); in __qedf_remove()
3749 clear_bit(QEDF_LL2_STARTED, &qedf->flags); in __qedf_remove()
3750 qed_ops->ll2->stop(qedf->cdev); in __qedf_remove()
3751 if (qedf->ll2_recv_wq) in __qedf_remove()
3752 destroy_workqueue(qedf->ll2_recv_wq); in __qedf_remove()
3755 qedf_sync_free_irqs(qedf); in __qedf_remove()
3756 qedf_destroy_sb(qedf); in __qedf_remove()
3763 qedf_free_grc_dump_buf(&qedf->grcdump); in __qedf_remove()
3764 qedf_remove_sysfs_ctx_attr(qedf); in __qedf_remove()
3767 fcoe_ctlr_destroy(&qedf->ctlr); in __qedf_remove()
3768 fc_lport_destroy(qedf->lport); in __qedf_remove()
3769 fc_remove_host(qedf->lport->host); in __qedf_remove()
3770 scsi_remove_host(qedf->lport->host); in __qedf_remove()
3773 qedf_cmd_mgr_free(qedf->cmd_mgr); in __qedf_remove()
3776 fc_exch_mgr_free(qedf->lport); in __qedf_remove()
3777 fc_lport_free_stats(qedf->lport); in __qedf_remove()
3780 qedf_wait_for_vport_destroy(qedf); in __qedf_remove()
3787 qed_ops->stop(qedf->cdev); in __qedf_remove()
3790 if (qedf->dpc_wq) { in __qedf_remove()
3792 destroy_workqueue(qedf->dpc_wq); in __qedf_remove()
3793 qedf->dpc_wq = NULL; in __qedf_remove()
3798 qedf_free_fcoe_pf_param(qedf); in __qedf_remove()
3800 qed_ops->common->set_power_state(qedf->cdev, PCI_D0); in __qedf_remove()
3804 rc = qed_ops->common->update_drv_state(qedf->cdev, false); in __qedf_remove()
3806 QEDF_ERR(&(qedf->dbg_ctx), in __qedf_remove()
3809 qed_ops->common->slowpath_stop(qedf->cdev); in __qedf_remove()
3810 qed_ops->common->remove(qedf->cdev); in __qedf_remove()
3812 mempool_destroy(qedf->io_mempool); in __qedf_remove()
3816 scsi_host_put(qedf->lport->host); in __qedf_remove()
3830 struct qedf_ctx *qedf = in qedf_wq_grcdump() local
3833 QEDF_ERR(&(qedf->dbg_ctx), "Collecting GRC dump.\n"); in qedf_wq_grcdump()
3834 qedf_capture_grc_dump(qedf); in qedf_wq_grcdump()
3839 struct qedf_ctx *qedf = dev; in qedf_schedule_hw_err_handler() local
3841 QEDF_ERR(&(qedf->dbg_ctx), in qedf_schedule_hw_err_handler()
3845 if (test_bit(QEDF_IN_RECOVERY, &qedf->flags)) { in qedf_schedule_hw_err_handler()
3846 QEDF_ERR(&(qedf->dbg_ctx), in qedf_schedule_hw_err_handler()
3853 schedule_delayed_work(&qedf->board_disable_work, 0); in qedf_schedule_hw_err_handler()
3860 qed_ops->common->attn_clr_enable(qedf->cdev, true); in qedf_schedule_hw_err_handler()
3864 qed_ops->common->attn_clr_enable(qedf->cdev, true); in qedf_schedule_hw_err_handler()
3867 qed_ops->common->recovery_process(qedf->cdev); in qedf_schedule_hw_err_handler()
3880 struct qedf_ctx *qedf = dev; in qedf_get_protocol_tlv_data() local
3887 if (!qedf) { in qedf_get_protocol_tlv_data()
3892 if (test_bit(QEDF_PROBING, &qedf->flags)) { in qedf_get_protocol_tlv_data()
3893 QEDF_ERR(&qedf->dbg_ctx, "Function is still probing.\n"); in qedf_get_protocol_tlv_data()
3897 lport = qedf->lport; in qedf_get_protocol_tlv_data()
3920 if (qedf->ctlr.sel_fcf) { in qedf_get_protocol_tlv_data()
3922 u64_to_wwn(qedf->ctlr.sel_fcf->switch_name, fcoe->switch_name); in qedf_get_protocol_tlv_data()
3959 fcoe->tx_lun_rst = qedf->lun_resets; in qedf_get_protocol_tlv_data()
3962 fcoe->abort_task_sets = qedf->packet_aborts; in qedf_get_protocol_tlv_data()
3965 fcoe->scsi_busy = qedf->busy; in qedf_get_protocol_tlv_data()
3968 fcoe->scsi_tsk_full = qedf->task_set_fulls; in qedf_get_protocol_tlv_data()
3974 struct qedf_ctx *qedf = in qedf_stag_change_work() local
3977 if (!qedf) { in qedf_stag_change_work()
3981 QEDF_ERR(&qedf->dbg_ctx, "Performing software context reset.\n"); in qedf_stag_change_work()
3982 qedf_ctx_soft_reset(qedf->lport); in qedf_stag_change_work()
3995 struct qedf_ctx *qedf = dev; in qedf_schedule_recovery_handler() local
3997 QEDF_ERR(&qedf->dbg_ctx, "Recovery handler scheduled.\n"); in qedf_schedule_recovery_handler()
3998 schedule_delayed_work(&qedf->recovery_work, 0); in qedf_schedule_recovery_handler()
4003 struct qedf_ctx *qedf = in qedf_recovery_handler() local
4006 if (test_and_set_bit(QEDF_IN_RECOVERY, &qedf->flags)) in qedf_recovery_handler()
4013 qed_ops->common->recovery_prolog(qedf->cdev); in qedf_recovery_handler()
4015 QEDF_ERR(&qedf->dbg_ctx, "Recovery work start.\n"); in qedf_recovery_handler()
4016 __qedf_remove(qedf->pdev, QEDF_MODE_RECOVERY); in qedf_recovery_handler()
4022 atomic_set(&qedf->link_state, QEDF_LINK_DOWN); in qedf_recovery_handler()
4023 atomic_set(&qedf->dcbx, QEDF_DCBX_PENDING); in qedf_recovery_handler()
4024 __qedf_probe(qedf->pdev, QEDF_MODE_RECOVERY); in qedf_recovery_handler()
4025 clear_bit(QEDF_IN_RECOVERY, &qedf->flags); in qedf_recovery_handler()
4026 QEDF_ERR(&qedf->dbg_ctx, "Recovery work complete.\n"); in qedf_recovery_handler()
4032 struct qedf_ctx *qedf; in qedf_get_generic_tlv_data() local
4039 qedf = (struct qedf_ctx *)dev; in qedf_get_generic_tlv_data()
4042 ether_addr_copy(data->mac[0], qedf->mac); in qedf_get_generic_tlv_data()