Lines Matching refs:qedi
63 static int qedi_alloc_global_queues(struct qedi_ctx *qedi);
64 static void qedi_free_global_queues(struct qedi_ctx *qedi);
65 static struct qedi_cmd *qedi_get_cmd_from_tid(struct qedi_ctx *qedi, u32 tid);
67 static void qedi_ll2_free_skbs(struct qedi_ctx *qedi);
68 static struct nvm_iscsi_block *qedi_get_nvram_block(struct qedi_ctx *qedi);
76 struct qedi_ctx *qedi; in qedi_iscsi_event_cb() local
86 qedi = (struct qedi_ctx *)context; in qedi_iscsi_event_cb()
87 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in qedi_iscsi_event_cb()
91 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in qedi_iscsi_event_cb()
96 qedi_ep = qedi->ep_tbl[data->icid]; in qedi_iscsi_event_cb()
99 QEDI_WARN(&qedi->dbg_ctx, in qedi_iscsi_event_cb()
130 QEDI_ERR(&qedi->dbg_ctx, "Recv Unknown Event %u\n", in qedi_iscsi_event_cb()
140 struct qedi_ctx *qedi = udev->qedi; in qedi_uio_open() local
151 set_bit(UIO_DEV_OPENED, &qedi->flags); in qedi_uio_open()
160 struct qedi_ctx *qedi = udev->qedi; in qedi_uio_close() local
163 clear_bit(UIO_DEV_OPENED, &qedi->flags); in qedi_uio_close()
164 qedi_ll2_free_skbs(qedi); in qedi_uio_close()
207 struct qedi_ctx *qedi = NULL; in qedi_reset_uio_rings() local
210 qedi = udev->qedi; in qedi_reset_uio_rings()
213 spin_lock_bh(&qedi->ll2_lock); in qedi_reset_uio_rings()
221 spin_unlock_bh(&qedi->ll2_lock); in qedi_reset_uio_rings()
262 static int qedi_alloc_uio_rings(struct qedi_ctx *qedi) in qedi_alloc_uio_rings() argument
268 if (udev->pdev == qedi->pdev) { in qedi_alloc_uio_rings()
269 udev->qedi = qedi; in qedi_alloc_uio_rings()
271 udev->qedi = NULL; in qedi_alloc_uio_rings()
274 qedi->udev = udev; in qedi_alloc_uio_rings()
285 udev->qedi = qedi; in qedi_alloc_uio_rings()
286 udev->pdev = qedi->pdev; in qedi_alloc_uio_rings()
295 qedi->udev = udev; in qedi_alloc_uio_rings()
307 static int qedi_init_uio(struct qedi_ctx *qedi) in qedi_init_uio() argument
309 struct qedi_uio_dev *udev = qedi->udev; in qedi_init_uio()
343 QEDI_ERR(&qedi->dbg_ctx, in qedi_init_uio()
352 static int qedi_alloc_and_init_sb(struct qedi_ctx *qedi, in qedi_alloc_and_init_sb() argument
359 sb_virt = dma_alloc_coherent(&qedi->pdev->dev, in qedi_alloc_and_init_sb()
363 QEDI_ERR(&qedi->dbg_ctx, in qedi_alloc_and_init_sb()
369 ret = qedi_ops->common->sb_init(qedi->cdev, sb_info, sb_virt, sb_phys, in qedi_alloc_and_init_sb()
372 dma_free_coherent(&qedi->pdev->dev, sizeof(*sb_virt), sb_virt, sb_phys); in qedi_alloc_and_init_sb()
373 QEDI_ERR(&qedi->dbg_ctx, in qedi_alloc_and_init_sb()
382 static void qedi_free_sb(struct qedi_ctx *qedi) in qedi_free_sb() argument
387 for (id = 0; id < MIN_NUM_CPUS_MSIX(qedi); id++) { in qedi_free_sb()
388 sb_info = &qedi->sb_array[id]; in qedi_free_sb()
390 dma_free_coherent(&qedi->pdev->dev, in qedi_free_sb()
397 static void qedi_free_fp(struct qedi_ctx *qedi) in qedi_free_fp() argument
399 kfree(qedi->fp_array); in qedi_free_fp()
400 kfree(qedi->sb_array); in qedi_free_fp()
403 static void qedi_destroy_fp(struct qedi_ctx *qedi) in qedi_destroy_fp() argument
405 qedi_free_sb(qedi); in qedi_destroy_fp()
406 qedi_free_fp(qedi); in qedi_destroy_fp()
409 static int qedi_alloc_fp(struct qedi_ctx *qedi) in qedi_alloc_fp() argument
413 qedi->fp_array = kcalloc(MIN_NUM_CPUS_MSIX(qedi), in qedi_alloc_fp()
415 if (!qedi->fp_array) { in qedi_alloc_fp()
416 QEDI_ERR(&qedi->dbg_ctx, in qedi_alloc_fp()
421 qedi->sb_array = kcalloc(MIN_NUM_CPUS_MSIX(qedi), in qedi_alloc_fp()
423 if (!qedi->sb_array) { in qedi_alloc_fp()
424 QEDI_ERR(&qedi->dbg_ctx, in qedi_alloc_fp()
433 qedi_free_fp(qedi); in qedi_alloc_fp()
437 static void qedi_int_fp(struct qedi_ctx *qedi) in qedi_int_fp() argument
442 memset(qedi->fp_array, 0, MIN_NUM_CPUS_MSIX(qedi) * in qedi_int_fp()
443 sizeof(*qedi->fp_array)); in qedi_int_fp()
444 memset(qedi->sb_array, 0, MIN_NUM_CPUS_MSIX(qedi) * in qedi_int_fp()
445 sizeof(*qedi->sb_array)); in qedi_int_fp()
447 for (id = 0; id < MIN_NUM_CPUS_MSIX(qedi); id++) { in qedi_int_fp()
448 fp = &qedi->fp_array[id]; in qedi_int_fp()
449 fp->sb_info = &qedi->sb_array[id]; in qedi_int_fp()
451 fp->qedi = qedi; in qedi_int_fp()
461 static int qedi_prepare_fp(struct qedi_ctx *qedi) in qedi_prepare_fp() argument
466 ret = qedi_alloc_fp(qedi); in qedi_prepare_fp()
470 qedi_int_fp(qedi); in qedi_prepare_fp()
472 for (id = 0; id < MIN_NUM_CPUS_MSIX(qedi); id++) { in qedi_prepare_fp()
473 fp = &qedi->fp_array[id]; in qedi_prepare_fp()
474 ret = qedi_alloc_and_init_sb(qedi, fp->sb_info, fp->sb_id); in qedi_prepare_fp()
476 QEDI_ERR(&qedi->dbg_ctx, in qedi_prepare_fp()
486 qedi_free_sb(qedi); in qedi_prepare_fp()
487 qedi_free_fp(qedi); in qedi_prepare_fp()
492 static int qedi_setup_cid_que(struct qedi_ctx *qedi) in qedi_setup_cid_que() argument
496 qedi->cid_que.cid_que_base = kmalloc_array(qedi->max_active_conns, in qedi_setup_cid_que()
498 if (!qedi->cid_que.cid_que_base) in qedi_setup_cid_que()
501 qedi->cid_que.conn_cid_tbl = kmalloc_array(qedi->max_active_conns, in qedi_setup_cid_que()
504 if (!qedi->cid_que.conn_cid_tbl) { in qedi_setup_cid_que()
505 kfree(qedi->cid_que.cid_que_base); in qedi_setup_cid_que()
506 qedi->cid_que.cid_que_base = NULL; in qedi_setup_cid_que()
510 qedi->cid_que.cid_que = (u32 *)qedi->cid_que.cid_que_base; in qedi_setup_cid_que()
511 qedi->cid_que.cid_q_prod_idx = 0; in qedi_setup_cid_que()
512 qedi->cid_que.cid_q_cons_idx = 0; in qedi_setup_cid_que()
513 qedi->cid_que.cid_q_max_idx = qedi->max_active_conns; in qedi_setup_cid_que()
514 qedi->cid_que.cid_free_cnt = qedi->max_active_conns; in qedi_setup_cid_que()
516 for (i = 0; i < qedi->max_active_conns; i++) { in qedi_setup_cid_que()
517 qedi->cid_que.cid_que[i] = i; in qedi_setup_cid_que()
518 qedi->cid_que.conn_cid_tbl[i] = NULL; in qedi_setup_cid_que()
524 static void qedi_release_cid_que(struct qedi_ctx *qedi) in qedi_release_cid_que() argument
526 kfree(qedi->cid_que.cid_que_base); in qedi_release_cid_que()
527 qedi->cid_que.cid_que_base = NULL; in qedi_release_cid_que()
529 kfree(qedi->cid_que.conn_cid_tbl); in qedi_release_cid_que()
530 qedi->cid_que.conn_cid_tbl = NULL; in qedi_release_cid_que()
608 static void qedi_cm_free_mem(struct qedi_ctx *qedi) in qedi_cm_free_mem() argument
610 kfree(qedi->ep_tbl); in qedi_cm_free_mem()
611 qedi->ep_tbl = NULL; in qedi_cm_free_mem()
612 qedi_free_id_tbl(&qedi->lcl_port_tbl); in qedi_cm_free_mem()
615 static int qedi_cm_alloc_mem(struct qedi_ctx *qedi) in qedi_cm_alloc_mem() argument
619 qedi->ep_tbl = kzalloc((qedi->max_active_conns * in qedi_cm_alloc_mem()
621 if (!qedi->ep_tbl) in qedi_cm_alloc_mem()
624 if (qedi_init_id_tbl(&qedi->lcl_port_tbl, QEDI_LOCAL_PORT_RANGE, in qedi_cm_alloc_mem()
626 qedi_cm_free_mem(qedi); in qedi_cm_alloc_mem()
636 struct qedi_ctx *qedi = NULL; in qedi_host_alloc() local
651 qedi = iscsi_host_priv(shost); in qedi_host_alloc()
652 memset(qedi, 0, sizeof(*qedi)); in qedi_host_alloc()
653 qedi->shost = shost; in qedi_host_alloc()
654 qedi->dbg_ctx.host_no = shost->host_no; in qedi_host_alloc()
655 qedi->pdev = pdev; in qedi_host_alloc()
656 qedi->dbg_ctx.pdev = pdev; in qedi_host_alloc()
657 qedi->max_active_conns = ISCSI_MAX_SESS_PER_HBA; in qedi_host_alloc()
658 qedi->max_sqes = QEDI_SQ_SIZE; in qedi_host_alloc()
660 shost->nr_hw_queues = MIN_NUM_CPUS_MSIX(qedi); in qedi_host_alloc()
662 pci_set_drvdata(pdev, qedi); in qedi_host_alloc()
665 return qedi; in qedi_host_alloc()
670 struct qedi_ctx *qedi = (struct qedi_ctx *)cookie; in qedi_ll2_rx() local
674 if (!qedi) { in qedi_ll2_rx()
679 if (!test_bit(UIO_DEV_OPENED, &qedi->flags)) { in qedi_ll2_rx()
680 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_UIO, in qedi_ll2_rx()
698 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_LL2, in qedi_ll2_rx()
705 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_LL2, in qedi_ll2_rx()
711 QEDI_WARN(&qedi->dbg_ctx, in qedi_ll2_rx()
726 spin_lock_bh(&qedi->ll2_lock); in qedi_ll2_rx()
727 list_add_tail(&work->list, &qedi->ll2_skb_list); in qedi_ll2_rx()
728 spin_unlock_bh(&qedi->ll2_lock); in qedi_ll2_rx()
730 wake_up_process(qedi->ll2_recv_thread); in qedi_ll2_rx()
736 static int qedi_ll2_process_skb(struct qedi_ctx *qedi, struct sk_buff *skb, in qedi_ll2_process_skb() argument
748 if (!qedi) { in qedi_ll2_process_skb()
753 udev = qedi->udev; in qedi_ll2_process_skb()
775 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_LL2, in qedi_ll2_process_skb()
779 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_LL2, in qedi_ll2_process_skb()
791 static void qedi_ll2_free_skbs(struct qedi_ctx *qedi) in qedi_ll2_free_skbs() argument
795 spin_lock_bh(&qedi->ll2_lock); in qedi_ll2_free_skbs()
796 list_for_each_entry_safe(work, work_tmp, &qedi->ll2_skb_list, list) { in qedi_ll2_free_skbs()
801 spin_unlock_bh(&qedi->ll2_lock); in qedi_ll2_free_skbs()
806 struct qedi_ctx *qedi = (struct qedi_ctx *)arg; in qedi_ll2_recv_thread() local
812 spin_lock_bh(&qedi->ll2_lock); in qedi_ll2_recv_thread()
813 list_for_each_entry_safe(work, work_tmp, &qedi->ll2_skb_list, in qedi_ll2_recv_thread()
816 qedi_ll2_process_skb(qedi, work->skb, work->vlan_id); in qedi_ll2_recv_thread()
821 spin_unlock_bh(&qedi->ll2_lock); in qedi_ll2_recv_thread()
829 static int qedi_set_iscsi_pf_param(struct qedi_ctx *qedi) in qedi_set_iscsi_pf_param() argument
838 qedi->num_queues = MIN_NUM_CPUS_MSIX(qedi); in qedi_set_iscsi_pf_param()
840 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in qedi_set_iscsi_pf_param()
841 "Number of CQ count is %d\n", qedi->num_queues); in qedi_set_iscsi_pf_param()
843 memset(&qedi->pf_params.iscsi_pf_params, 0, in qedi_set_iscsi_pf_param()
844 sizeof(qedi->pf_params.iscsi_pf_params)); in qedi_set_iscsi_pf_param()
846 qedi->p_cpuq = dma_alloc_coherent(&qedi->pdev->dev, in qedi_set_iscsi_pf_param()
847 qedi->num_queues * sizeof(struct qedi_glbl_q_params), in qedi_set_iscsi_pf_param()
848 &qedi->hw_p_cpuq, GFP_KERNEL); in qedi_set_iscsi_pf_param()
849 if (!qedi->p_cpuq) { in qedi_set_iscsi_pf_param()
850 QEDI_ERR(&qedi->dbg_ctx, "dma_alloc_coherent fail\n"); in qedi_set_iscsi_pf_param()
855 rval = qedi_alloc_global_queues(qedi); in qedi_set_iscsi_pf_param()
857 QEDI_ERR(&qedi->dbg_ctx, "Global queue allocation failed.\n"); in qedi_set_iscsi_pf_param()
862 qedi->pf_params.iscsi_pf_params.num_cons = QEDI_MAX_ISCSI_CONNS_PER_HBA; in qedi_set_iscsi_pf_param()
863 qedi->pf_params.iscsi_pf_params.num_tasks = QEDI_MAX_ISCSI_TASK; in qedi_set_iscsi_pf_param()
864 qedi->pf_params.iscsi_pf_params.half_way_close_timeout = 10; in qedi_set_iscsi_pf_param()
865 qedi->pf_params.iscsi_pf_params.num_sq_pages_in_ring = num_sq_pages; in qedi_set_iscsi_pf_param()
866 qedi->pf_params.iscsi_pf_params.num_r2tq_pages_in_ring = num_sq_pages; in qedi_set_iscsi_pf_param()
867 qedi->pf_params.iscsi_pf_params.num_uhq_pages_in_ring = num_sq_pages; in qedi_set_iscsi_pf_param()
868 qedi->pf_params.iscsi_pf_params.num_queues = qedi->num_queues; in qedi_set_iscsi_pf_param()
869 qedi->pf_params.iscsi_pf_params.debug_mode = qedi_fw_debug; in qedi_set_iscsi_pf_param()
870 qedi->pf_params.iscsi_pf_params.two_msl_timer = QED_TWO_MSL_TIMER_DFLT; in qedi_set_iscsi_pf_param()
871 qedi->pf_params.iscsi_pf_params.tx_sws_timer = QED_TX_SWS_TIMER_DFLT; in qedi_set_iscsi_pf_param()
872 qedi->pf_params.iscsi_pf_params.max_fin_rt = 2; in qedi_set_iscsi_pf_param()
878 qedi->pf_params.iscsi_pf_params.log_page_size = log_page_size; in qedi_set_iscsi_pf_param()
880 qedi->pf_params.iscsi_pf_params.glbl_q_params_addr = in qedi_set_iscsi_pf_param()
881 (u64)qedi->hw_p_cpuq; in qedi_set_iscsi_pf_param()
887 qedi->pf_params.iscsi_pf_params.rqe_log_size = 8; in qedi_set_iscsi_pf_param()
889 qedi->pf_params.iscsi_pf_params.bdq_pbl_base_addr[BDQ_ID_RQ] = in qedi_set_iscsi_pf_param()
890 qedi->bdq_pbl_list_dma; in qedi_set_iscsi_pf_param()
891 qedi->pf_params.iscsi_pf_params.bdq_pbl_num_entries[BDQ_ID_RQ] = in qedi_set_iscsi_pf_param()
892 qedi->bdq_pbl_list_num_entries; in qedi_set_iscsi_pf_param()
893 qedi->pf_params.iscsi_pf_params.rq_buffer_size = QEDI_BDQ_BUF_SIZE; in qedi_set_iscsi_pf_param()
896 qedi->pf_params.iscsi_pf_params.cq_num_entries = 2048; in qedi_set_iscsi_pf_param()
898 qedi->pf_params.iscsi_pf_params.gl_rq_pi = QEDI_PROTO_CQ_PROD_IDX; in qedi_set_iscsi_pf_param()
899 qedi->pf_params.iscsi_pf_params.gl_cmd_pi = 1; in qedi_set_iscsi_pf_param()
906 static void qedi_free_iscsi_pf_param(struct qedi_ctx *qedi) in qedi_free_iscsi_pf_param() argument
910 if (qedi->p_cpuq) { in qedi_free_iscsi_pf_param()
911 size = qedi->num_queues * sizeof(struct qedi_glbl_q_params); in qedi_free_iscsi_pf_param()
912 dma_free_coherent(&qedi->pdev->dev, size, qedi->p_cpuq, in qedi_free_iscsi_pf_param()
913 qedi->hw_p_cpuq); in qedi_free_iscsi_pf_param()
916 qedi_free_global_queues(qedi); in qedi_free_iscsi_pf_param()
918 kfree(qedi->global_queues); in qedi_free_iscsi_pf_param()
942 static int qedi_find_boot_info(struct qedi_ctx *qedi, in qedi_find_boot_info() argument
976 for (i = 0; i < qedi->max_active_conns; i++) { in qedi_find_boot_info()
977 qedi_conn = qedi_get_conn_from_id(qedi, i); in qedi_find_boot_info()
1044 struct qedi_ctx *qedi; in qedi_get_generic_tlv_data() local
1051 qedi = (struct qedi_ctx *)dev; in qedi_get_generic_tlv_data()
1054 ether_addr_copy(data->mac[0], qedi->mac); in qedi_get_generic_tlv_data()
1066 struct qedi_ctx *qedi = dev; in qedi_get_protocol_tlv_data() local
1071 QEDI_ERR(&qedi->dbg_ctx, in qedi_get_protocol_tlv_data()
1076 mutex_lock(&qedi->stats_lock); in qedi_get_protocol_tlv_data()
1078 qedi_ops->get_stats(qedi->cdev, fw_iscsi_stats); in qedi_get_protocol_tlv_data()
1079 mutex_unlock(&qedi->stats_lock); in qedi_get_protocol_tlv_data()
1090 iscsi->frame_size = qedi->ll2_mtu; in qedi_get_protocol_tlv_data()
1091 block = qedi_get_nvram_block(qedi); in qedi_get_protocol_tlv_data()
1111 rval = qedi_find_boot_info(qedi, iscsi, block); in qedi_get_protocol_tlv_data()
1113 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in qedi_get_protocol_tlv_data()
1125 struct qedi_ctx *qedi = (struct qedi_ctx *)dev; in qedi_schedule_hw_err_handler() local
1129 qedi->qedi_err_flags = qedi_flags_override; in qedi_schedule_hw_err_handler()
1131 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in qedi_schedule_hw_err_handler()
1133 err_type, qedi->qedi_err_flags); in qedi_schedule_hw_err_handler()
1137 schedule_delayed_work(&qedi->board_disable_work, 0); in qedi_schedule_hw_err_handler()
1145 if (test_bit(QEDI_ERR_ATTN_CLR_EN, &qedi->qedi_err_flags)) in qedi_schedule_hw_err_handler()
1146 qedi_ops->common->attn_clr_enable(qedi->cdev, true); in qedi_schedule_hw_err_handler()
1149 test_bit(QEDI_ERR_IS_RECOVERABLE, &qedi->qedi_err_flags)) in qedi_schedule_hw_err_handler()
1150 qedi_ops->common->recovery_process(qedi->cdev); in qedi_schedule_hw_err_handler()
1160 struct qedi_ctx *qedi = dev; in qedi_schedule_recovery_handler() local
1162 QEDI_ERR(&qedi->dbg_ctx, "Recovery handler scheduled.\n"); in qedi_schedule_recovery_handler()
1164 if (test_and_set_bit(QEDI_IN_RECOVERY, &qedi->flags)) in qedi_schedule_recovery_handler()
1167 atomic_set(&qedi->link_state, QEDI_LINK_DOWN); in qedi_schedule_recovery_handler()
1169 schedule_delayed_work(&qedi->recovery_work, 0); in qedi_schedule_recovery_handler()
1178 qedi_start_conn_recovery(qedi_conn->qedi, qedi_conn); in qedi_set_conn_recovery()
1183 struct qedi_ctx *qedi = (struct qedi_ctx *)dev; in qedi_link_update() local
1186 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, "Link Up event.\n"); in qedi_link_update()
1187 atomic_set(&qedi->link_state, QEDI_LINK_UP); in qedi_link_update()
1189 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in qedi_link_update()
1191 atomic_set(&qedi->link_state, QEDI_LINK_DOWN); in qedi_link_update()
1192 iscsi_host_for_each_session(qedi->shost, qedi_set_conn_recovery); in qedi_link_update()
1206 static int qedi_queue_cqe(struct qedi_ctx *qedi, union iscsi_cqe *cqe, in qedi_queue_cqe() argument
1216 q_conn = qedi->cid_que.conn_cid_tbl[iscsi_cid]; in qedi_queue_cqe()
1218 QEDI_WARN(&qedi->dbg_ctx, in qedi_queue_cqe()
1227 qedi_cmd = qedi_get_cmd_from_tid(qedi, cqe->cqe_solicited.itid); in qedi_queue_cqe()
1233 qedi_cmd->cqe_work.qedi = qedi; in qedi_queue_cqe()
1248 qedi_work->qedi = qedi; in qedi_queue_cqe()
1256 QEDI_ERR(&qedi->dbg_ctx, "FW Error cqe.\n"); in qedi_queue_cqe()
1263 struct qedi_ctx *qedi = fp->qedi; in qedi_process_completions() local
1280 que = qedi->global_queues[fp->sb_id]; in qedi_process_completions()
1281 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_IO, in qedi_process_completions()
1285 qedi->intr_cpu = fp->sb_id; in qedi_process_completions()
1296 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_IO, in qedi_process_completions()
1300 ret = qedi_queue_cqe(qedi, cqe, fp->sb_id, p); in qedi_process_completions()
1302 QEDI_WARN(&qedi->dbg_ctx, in qedi_process_completions()
1318 struct qedi_ctx *qedi = fp->qedi; in qedi_fp_has_work() local
1330 que = qedi->global_queues[fp->sb_id]; in qedi_fp_has_work()
1343 struct qedi_ctx *qedi = fp->qedi; in qedi_msix_handler() local
1351 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_DISC, in qedi_msix_handler()
1373 struct qedi_ctx *qedi = (struct qedi_ctx *)cookie; in qedi_simd_int_handler() local
1375 QEDI_WARN(&qedi->dbg_ctx, "qedi=%p.\n", qedi); in qedi_simd_int_handler()
1379 static void qedi_sync_free_irqs(struct qedi_ctx *qedi) in qedi_sync_free_irqs() argument
1384 if (qedi->int_info.msix_cnt) { in qedi_sync_free_irqs()
1385 for (i = 0; i < qedi->int_info.used_cnt; i++) { in qedi_sync_free_irqs()
1386 idx = i * qedi->dev_info.common.num_hwfns + in qedi_sync_free_irqs()
1387 qedi_ops->common->get_affin_hwfn_idx(qedi->cdev); in qedi_sync_free_irqs()
1389 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in qedi_sync_free_irqs()
1392 synchronize_irq(qedi->int_info.msix[idx].vector); in qedi_sync_free_irqs()
1393 irq_set_affinity_hint(qedi->int_info.msix[idx].vector, in qedi_sync_free_irqs()
1395 free_irq(qedi->int_info.msix[idx].vector, in qedi_sync_free_irqs()
1396 &qedi->fp_array[i]); in qedi_sync_free_irqs()
1399 qedi_ops->common->simd_handler_clean(qedi->cdev, in qedi_sync_free_irqs()
1403 qedi->int_info.used_cnt = 0; in qedi_sync_free_irqs()
1404 qedi_ops->common->set_fp_int(qedi->cdev, 0); in qedi_sync_free_irqs()
1407 static int qedi_request_msix_irq(struct qedi_ctx *qedi) in qedi_request_msix_irq() argument
1413 for (i = 0; i < qedi->msix_count; i++) { in qedi_request_msix_irq()
1414 idx = i * qedi->dev_info.common.num_hwfns + in qedi_request_msix_irq()
1415 qedi_ops->common->get_affin_hwfn_idx(qedi->cdev); in qedi_request_msix_irq()
1417 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in qedi_request_msix_irq()
1419 qedi->dev_info.common.num_hwfns, in qedi_request_msix_irq()
1420 qedi_ops->common->get_affin_hwfn_idx(qedi->cdev)); in qedi_request_msix_irq()
1422 rc = request_irq(qedi->int_info.msix[idx].vector, in qedi_request_msix_irq()
1424 &qedi->fp_array[i]); in qedi_request_msix_irq()
1426 QEDI_WARN(&qedi->dbg_ctx, "request_irq failed.\n"); in qedi_request_msix_irq()
1427 qedi_sync_free_irqs(qedi); in qedi_request_msix_irq()
1430 qedi->int_info.used_cnt++; in qedi_request_msix_irq()
1431 rc = irq_set_affinity_hint(qedi->int_info.msix[idx].vector, in qedi_request_msix_irq()
1439 static int qedi_setup_int(struct qedi_ctx *qedi) in qedi_setup_int() argument
1443 rc = qedi_ops->common->set_fp_int(qedi->cdev, qedi->num_queues); in qedi_setup_int()
1447 qedi->msix_count = rc; in qedi_setup_int()
1449 rc = qedi_ops->common->get_fp_int(qedi->cdev, &qedi->int_info); in qedi_setup_int()
1453 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_DISC, in qedi_setup_int()
1455 qedi->int_info.msix_cnt, num_online_cpus()); in qedi_setup_int()
1457 if (qedi->int_info.msix_cnt) { in qedi_setup_int()
1458 rc = qedi_request_msix_irq(qedi); in qedi_setup_int()
1461 qedi_ops->common->simd_handler_config(qedi->cdev, &qedi, in qedi_setup_int()
1464 qedi->int_info.used_cnt = 1; in qedi_setup_int()
1471 static void qedi_free_nvm_iscsi_cfg(struct qedi_ctx *qedi) in qedi_free_nvm_iscsi_cfg() argument
1473 if (qedi->iscsi_image) in qedi_free_nvm_iscsi_cfg()
1474 dma_free_coherent(&qedi->pdev->dev, in qedi_free_nvm_iscsi_cfg()
1476 qedi->iscsi_image, qedi->nvm_buf_dma); in qedi_free_nvm_iscsi_cfg()
1479 static int qedi_alloc_nvm_iscsi_cfg(struct qedi_ctx *qedi) in qedi_alloc_nvm_iscsi_cfg() argument
1481 qedi->iscsi_image = dma_alloc_coherent(&qedi->pdev->dev, in qedi_alloc_nvm_iscsi_cfg()
1483 &qedi->nvm_buf_dma, GFP_KERNEL); in qedi_alloc_nvm_iscsi_cfg()
1484 if (!qedi->iscsi_image) { in qedi_alloc_nvm_iscsi_cfg()
1485 QEDI_ERR(&qedi->dbg_ctx, "Could not allocate NVM BUF.\n"); in qedi_alloc_nvm_iscsi_cfg()
1488 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in qedi_alloc_nvm_iscsi_cfg()
1489 "NVM BUF addr=0x%p dma=0x%llx.\n", qedi->iscsi_image, in qedi_alloc_nvm_iscsi_cfg()
1490 qedi->nvm_buf_dma); in qedi_alloc_nvm_iscsi_cfg()
1495 static void qedi_free_bdq(struct qedi_ctx *qedi) in qedi_free_bdq() argument
1499 if (qedi->bdq_pbl_list) in qedi_free_bdq()
1500 dma_free_coherent(&qedi->pdev->dev, QEDI_PAGE_SIZE, in qedi_free_bdq()
1501 qedi->bdq_pbl_list, qedi->bdq_pbl_list_dma); in qedi_free_bdq()
1503 if (qedi->bdq_pbl) in qedi_free_bdq()
1504 dma_free_coherent(&qedi->pdev->dev, qedi->bdq_pbl_mem_size, in qedi_free_bdq()
1505 qedi->bdq_pbl, qedi->bdq_pbl_dma); in qedi_free_bdq()
1508 if (qedi->bdq[i].buf_addr) { in qedi_free_bdq()
1509 dma_free_coherent(&qedi->pdev->dev, QEDI_BDQ_BUF_SIZE, in qedi_free_bdq()
1510 qedi->bdq[i].buf_addr, in qedi_free_bdq()
1511 qedi->bdq[i].buf_dma); in qedi_free_bdq()
1516 static void qedi_free_global_queues(struct qedi_ctx *qedi) in qedi_free_global_queues() argument
1519 struct global_queue **gl = qedi->global_queues; in qedi_free_global_queues()
1521 for (i = 0; i < qedi->num_queues; i++) { in qedi_free_global_queues()
1526 dma_free_coherent(&qedi->pdev->dev, gl[i]->cq_mem_size, in qedi_free_global_queues()
1529 dma_free_coherent(&qedi->pdev->dev, gl[i]->cq_pbl_size, in qedi_free_global_queues()
1534 qedi_free_bdq(qedi); in qedi_free_global_queues()
1535 qedi_free_nvm_iscsi_cfg(qedi); in qedi_free_global_queues()
1538 static int qedi_alloc_bdq(struct qedi_ctx *qedi) in qedi_alloc_bdq() argument
1546 qedi->bdq[i].buf_addr = in qedi_alloc_bdq()
1547 dma_alloc_coherent(&qedi->pdev->dev, in qedi_alloc_bdq()
1549 &qedi->bdq[i].buf_dma, in qedi_alloc_bdq()
1551 if (!qedi->bdq[i].buf_addr) { in qedi_alloc_bdq()
1552 QEDI_ERR(&qedi->dbg_ctx, in qedi_alloc_bdq()
1559 qedi->bdq_pbl_mem_size = QEDI_BDQ_NUM * sizeof(struct scsi_bd); in qedi_alloc_bdq()
1560 qedi->bdq_pbl_mem_size = ALIGN(qedi->bdq_pbl_mem_size, QEDI_PAGE_SIZE); in qedi_alloc_bdq()
1561 qedi->rq_num_entries = qedi->bdq_pbl_mem_size / sizeof(struct scsi_bd); in qedi_alloc_bdq()
1563 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_CONN, "rq_num_entries = %d.\n", in qedi_alloc_bdq()
1564 qedi->rq_num_entries); in qedi_alloc_bdq()
1566 qedi->bdq_pbl = dma_alloc_coherent(&qedi->pdev->dev, in qedi_alloc_bdq()
1567 qedi->bdq_pbl_mem_size, in qedi_alloc_bdq()
1568 &qedi->bdq_pbl_dma, GFP_KERNEL); in qedi_alloc_bdq()
1569 if (!qedi->bdq_pbl) { in qedi_alloc_bdq()
1570 QEDI_ERR(&qedi->dbg_ctx, "Could not allocate BDQ PBL.\n"); in qedi_alloc_bdq()
1578 pbl = (struct scsi_bd *)qedi->bdq_pbl; in qedi_alloc_bdq()
1581 cpu_to_le32(QEDI_U64_HI(qedi->bdq[i].buf_dma)); in qedi_alloc_bdq()
1583 cpu_to_le32(QEDI_U64_LO(qedi->bdq[i].buf_dma)); in qedi_alloc_bdq()
1584 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_CONN, in qedi_alloc_bdq()
1595 qedi->bdq_pbl_list = dma_alloc_coherent(&qedi->pdev->dev, in qedi_alloc_bdq()
1597 &qedi->bdq_pbl_list_dma, in qedi_alloc_bdq()
1599 if (!qedi->bdq_pbl_list) { in qedi_alloc_bdq()
1600 QEDI_ERR(&qedi->dbg_ctx, in qedi_alloc_bdq()
1609 qedi->bdq_pbl_list_num_entries = qedi->bdq_pbl_mem_size / in qedi_alloc_bdq()
1611 list = (u64 *)qedi->bdq_pbl_list; in qedi_alloc_bdq()
1612 for (i = 0; i < qedi->bdq_pbl_list_num_entries; i++) { in qedi_alloc_bdq()
1613 *list = qedi->bdq_pbl_dma; in qedi_alloc_bdq()
1620 static int qedi_alloc_global_queues(struct qedi_ctx *qedi) in qedi_alloc_global_queues() argument
1633 if (!qedi->num_queues) { in qedi_alloc_global_queues()
1634 QEDI_ERR(&qedi->dbg_ctx, "No MSI-X vectors available!\n"); in qedi_alloc_global_queues()
1641 if (!qedi->p_cpuq) { in qedi_alloc_global_queues()
1646 qedi->global_queues = kzalloc((sizeof(struct global_queue *) * in qedi_alloc_global_queues()
1647 qedi->num_queues), GFP_KERNEL); in qedi_alloc_global_queues()
1648 if (!qedi->global_queues) { in qedi_alloc_global_queues()
1649 QEDI_ERR(&qedi->dbg_ctx, in qedi_alloc_global_queues()
1653 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_DISC, in qedi_alloc_global_queues()
1654 "qedi->global_queues=%p.\n", qedi->global_queues); in qedi_alloc_global_queues()
1657 status = qedi_alloc_bdq(qedi); in qedi_alloc_global_queues()
1662 status = qedi_alloc_nvm_iscsi_cfg(qedi); in qedi_alloc_global_queues()
1669 for (i = 0; i < qedi->num_queues; i++) { in qedi_alloc_global_queues()
1670 qedi->global_queues[i] = in qedi_alloc_global_queues()
1671 kzalloc(sizeof(*qedi->global_queues[0]), in qedi_alloc_global_queues()
1673 if (!qedi->global_queues[i]) { in qedi_alloc_global_queues()
1674 QEDI_ERR(&qedi->dbg_ctx, in qedi_alloc_global_queues()
1680 qedi->global_queues[i]->cq_mem_size = in qedi_alloc_global_queues()
1682 qedi->global_queues[i]->cq_mem_size = in qedi_alloc_global_queues()
1683 (qedi->global_queues[i]->cq_mem_size + in qedi_alloc_global_queues()
1686 qedi->global_queues[i]->cq_pbl_size = in qedi_alloc_global_queues()
1687 (qedi->global_queues[i]->cq_mem_size / in qedi_alloc_global_queues()
1689 qedi->global_queues[i]->cq_pbl_size = in qedi_alloc_global_queues()
1690 (qedi->global_queues[i]->cq_pbl_size + in qedi_alloc_global_queues()
1693 qedi->global_queues[i]->cq = dma_alloc_coherent(&qedi->pdev->dev, in qedi_alloc_global_queues()
1694 qedi->global_queues[i]->cq_mem_size, in qedi_alloc_global_queues()
1695 &qedi->global_queues[i]->cq_dma, in qedi_alloc_global_queues()
1698 if (!qedi->global_queues[i]->cq) { in qedi_alloc_global_queues()
1699 QEDI_WARN(&qedi->dbg_ctx, in qedi_alloc_global_queues()
1704 qedi->global_queues[i]->cq_pbl = dma_alloc_coherent(&qedi->pdev->dev, in qedi_alloc_global_queues()
1705 qedi->global_queues[i]->cq_pbl_size, in qedi_alloc_global_queues()
1706 &qedi->global_queues[i]->cq_pbl_dma, in qedi_alloc_global_queues()
1709 if (!qedi->global_queues[i]->cq_pbl) { in qedi_alloc_global_queues()
1710 QEDI_WARN(&qedi->dbg_ctx, in qedi_alloc_global_queues()
1717 num_pages = qedi->global_queues[i]->cq_mem_size / in qedi_alloc_global_queues()
1719 page = qedi->global_queues[i]->cq_dma; in qedi_alloc_global_queues()
1720 pbl = (u32 *)qedi->global_queues[i]->cq_pbl; in qedi_alloc_global_queues()
1731 list = (u32 *)qedi->p_cpuq; in qedi_alloc_global_queues()
1739 for (i = 0; i < qedi->num_queues; i++) { in qedi_alloc_global_queues()
1740 *list = (u32)qedi->global_queues[i]->cq_pbl_dma; in qedi_alloc_global_queues()
1742 *list = (u32)((u64)qedi->global_queues[i]->cq_pbl_dma >> 32); in qedi_alloc_global_queues()
1754 qedi_free_global_queues(qedi); in qedi_alloc_global_queues()
1758 int qedi_alloc_sq(struct qedi_ctx *qedi, struct qedi_endpoint *ep) in qedi_alloc_sq() argument
1775 ep->sq = dma_alloc_coherent(&qedi->pdev->dev, ep->sq_mem_size, in qedi_alloc_sq()
1778 QEDI_WARN(&qedi->dbg_ctx, in qedi_alloc_sq()
1783 ep->sq_pbl = dma_alloc_coherent(&qedi->pdev->dev, ep->sq_pbl_size, in qedi_alloc_sq()
1786 QEDI_WARN(&qedi->dbg_ctx, in qedi_alloc_sq()
1808 dma_free_coherent(&qedi->pdev->dev, ep->sq_mem_size, ep->sq, in qedi_alloc_sq()
1814 void qedi_free_sq(struct qedi_ctx *qedi, struct qedi_endpoint *ep) in qedi_free_sq() argument
1817 dma_free_coherent(&qedi->pdev->dev, ep->sq_pbl_size, ep->sq_pbl, in qedi_free_sq()
1820 dma_free_coherent(&qedi->pdev->dev, ep->sq_mem_size, ep->sq, in qedi_free_sq()
1824 int qedi_get_task_idx(struct qedi_ctx *qedi) in qedi_get_task_idx() argument
1829 tmp_idx = find_first_zero_bit(qedi->task_idx_map, in qedi_get_task_idx()
1833 QEDI_ERR(&qedi->dbg_ctx, "FW task context pool is full.\n"); in qedi_get_task_idx()
1838 if (test_and_set_bit(tmp_idx, qedi->task_idx_map)) in qedi_get_task_idx()
1845 void qedi_clear_task_idx(struct qedi_ctx *qedi, int idx) in qedi_clear_task_idx() argument
1847 if (!test_and_clear_bit(idx, qedi->task_idx_map)) in qedi_clear_task_idx()
1848 QEDI_ERR(&qedi->dbg_ctx, in qedi_clear_task_idx()
1852 void qedi_update_itt_map(struct qedi_ctx *qedi, u32 tid, u32 proto_itt, in qedi_update_itt_map() argument
1855 qedi->itt_map[tid].itt = proto_itt; in qedi_update_itt_map()
1856 qedi->itt_map[tid].p_cmd = cmd; in qedi_update_itt_map()
1858 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_CONN, in qedi_update_itt_map()
1860 qedi->itt_map[tid].itt); in qedi_update_itt_map()
1863 void qedi_get_task_tid(struct qedi_ctx *qedi, u32 itt, s16 *tid) in qedi_get_task_tid() argument
1868 if (qedi->itt_map[i].itt == itt) { in qedi_get_task_tid()
1870 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_CONN, in qedi_get_task_tid()
1880 void qedi_get_proto_itt(struct qedi_ctx *qedi, u32 tid, u32 *proto_itt) in qedi_get_proto_itt() argument
1882 *proto_itt = qedi->itt_map[tid].itt; in qedi_get_proto_itt()
1883 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_CONN, in qedi_get_proto_itt()
1888 struct qedi_cmd *qedi_get_cmd_from_tid(struct qedi_ctx *qedi, u32 tid) in qedi_get_cmd_from_tid() argument
1895 cmd = qedi->itt_map[tid].p_cmd; in qedi_get_cmd_from_tid()
1899 qedi->itt_map[tid].p_cmd = NULL; in qedi_get_cmd_from_tid()
1904 static int qedi_alloc_itt(struct qedi_ctx *qedi) in qedi_alloc_itt() argument
1906 qedi->itt_map = kcalloc(MAX_ISCSI_TASK_ENTRIES, in qedi_alloc_itt()
1908 if (!qedi->itt_map) { in qedi_alloc_itt()
1909 QEDI_ERR(&qedi->dbg_ctx, in qedi_alloc_itt()
1916 static void qedi_free_itt(struct qedi_ctx *qedi) in qedi_free_itt() argument
1918 kfree(qedi->itt_map); in qedi_free_itt()
1998 void qedi_reset_host_mtu(struct qedi_ctx *qedi, u16 mtu) in qedi_reset_host_mtu() argument
2002 qedi_recover_all_conns(qedi); in qedi_reset_host_mtu()
2004 qedi_ops->ll2->stop(qedi->cdev); in qedi_reset_host_mtu()
2005 qedi_ll2_free_skbs(qedi); in qedi_reset_host_mtu()
2007 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, "old MTU %u, new MTU %u\n", in qedi_reset_host_mtu()
2008 qedi->ll2_mtu, mtu); in qedi_reset_host_mtu()
2010 qedi->ll2_mtu = mtu; in qedi_reset_host_mtu()
2011 params.mtu = qedi->ll2_mtu + IPV6_HDR_LEN + TCP_HDR_LEN; in qedi_reset_host_mtu()
2014 ether_addr_copy(params.ll2_mac_address, qedi->dev_info.common.hw_mac); in qedi_reset_host_mtu()
2015 qedi_ops->ll2->start(qedi->cdev, ¶ms); in qedi_reset_host_mtu()
2023 qedi_get_nvram_block(struct qedi_ctx *qedi) in qedi_get_nvram_block() argument
2030 pf = qedi->dev_info.common.abs_pf_id; in qedi_get_nvram_block()
2031 block = &qedi->iscsi_image->iscsi_cfg.block[0]; in qedi_get_nvram_block()
2046 struct qedi_ctx *qedi = data; in qedi_show_boot_eth_info() local
2053 block = qedi_get_nvram_block(qedi); in qedi_show_boot_eth_info()
2096 rc = sysfs_format_mac(buf, qedi->mac, ETH_ALEN); in qedi_show_boot_eth_info()
2139 struct qedi_ctx *qedi = data; in qedi_show_boot_ini_info() local
2144 block = qedi_get_nvram_block(qedi); in qedi_show_boot_ini_info()
2178 qedi_show_boot_tgt_info(struct qedi_ctx *qedi, int type, in qedi_show_boot_tgt_info() argument
2187 block = qedi_get_nvram_block(qedi); in qedi_show_boot_tgt_info()
2191 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_EVT, in qedi_show_boot_tgt_info()
2199 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_EVT, in qedi_show_boot_tgt_info()
2273 struct qedi_ctx *qedi = data; in qedi_show_boot_tgt_pri_info() local
2275 return qedi_show_boot_tgt_info(qedi, type, buf, QEDI_NVM_TGT_PRI); in qedi_show_boot_tgt_pri_info()
2280 struct qedi_ctx *qedi = data; in qedi_show_boot_tgt_sec_info() local
2282 return qedi_show_boot_tgt_info(qedi, type, buf, QEDI_NVM_TGT_SEC); in qedi_show_boot_tgt_sec_info()
2311 struct qedi_ctx *qedi = data; in qedi_boot_release() local
2313 scsi_host_put(qedi->shost); in qedi_boot_release()
2316 static int qedi_get_boot_info(struct qedi_ctx *qedi) in qedi_get_boot_info() argument
2320 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in qedi_get_boot_info()
2322 ret = qedi_ops->common->nvm_get_image(qedi->cdev, in qedi_get_boot_info()
2324 (char *)qedi->iscsi_image, in qedi_get_boot_info()
2327 QEDI_ERR(&qedi->dbg_ctx, in qedi_get_boot_info()
2333 static int qedi_setup_boot_info(struct qedi_ctx *qedi) in qedi_setup_boot_info() argument
2337 if (qedi_get_boot_info(qedi)) in qedi_setup_boot_info()
2340 qedi->boot_kset = iscsi_boot_create_host_kset(qedi->shost->host_no); in qedi_setup_boot_info()
2341 if (!qedi->boot_kset) in qedi_setup_boot_info()
2344 if (!scsi_host_get(qedi->shost)) in qedi_setup_boot_info()
2347 boot_kobj = iscsi_boot_create_target(qedi->boot_kset, 0, qedi, in qedi_setup_boot_info()
2354 if (!scsi_host_get(qedi->shost)) in qedi_setup_boot_info()
2357 boot_kobj = iscsi_boot_create_target(qedi->boot_kset, 1, qedi, in qedi_setup_boot_info()
2364 if (!scsi_host_get(qedi->shost)) in qedi_setup_boot_info()
2367 boot_kobj = iscsi_boot_create_initiator(qedi->boot_kset, 0, qedi, in qedi_setup_boot_info()
2374 if (!scsi_host_get(qedi->shost)) in qedi_setup_boot_info()
2377 boot_kobj = iscsi_boot_create_ethernet(qedi->boot_kset, 0, qedi, in qedi_setup_boot_info()
2387 scsi_host_put(qedi->shost); in qedi_setup_boot_info()
2389 iscsi_boot_destroy_kset(qedi->boot_kset); in qedi_setup_boot_info()
2396 struct qedi_ctx *qedi = pci_get_drvdata(pdev); in qedi_io_error_detected() local
2398 QEDI_ERR(&qedi->dbg_ctx, "%s: PCI error detected [%d]\n", in qedi_io_error_detected()
2401 if (test_and_set_bit(QEDI_IN_RECOVERY, &qedi->flags)) { in qedi_io_error_detected()
2402 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in qedi_io_error_detected()
2407 qedi_ops->common->recovery_process(qedi->cdev); in qedi_io_error_detected()
2414 struct qedi_ctx *qedi = pci_get_drvdata(pdev); in __qedi_remove() local
2419 iscsi_host_remove(qedi->shost, false); in __qedi_remove()
2421 iscsi_host_remove(qedi->shost, true); in __qedi_remove()
2424 if (qedi->tmf_thread) { in __qedi_remove()
2425 destroy_workqueue(qedi->tmf_thread); in __qedi_remove()
2426 qedi->tmf_thread = NULL; in __qedi_remove()
2429 if (qedi->offload_thread) { in __qedi_remove()
2430 destroy_workqueue(qedi->offload_thread); in __qedi_remove()
2431 qedi->offload_thread = NULL; in __qedi_remove()
2436 qedi_dbg_host_exit(&qedi->dbg_ctx); in __qedi_remove()
2438 if (!test_bit(QEDI_IN_OFFLINE, &qedi->flags)) in __qedi_remove()
2439 qedi_ops->common->set_power_state(qedi->cdev, PCI_D0); in __qedi_remove()
2441 qedi_sync_free_irqs(qedi); in __qedi_remove()
2443 if (!test_bit(QEDI_IN_OFFLINE, &qedi->flags)) { in __qedi_remove()
2445 rval = qedi_ops->stop(qedi->cdev); in __qedi_remove()
2451 qedi_ops->ll2->stop(qedi->cdev); in __qedi_remove()
2454 cancel_delayed_work_sync(&qedi->recovery_work); in __qedi_remove()
2455 cancel_delayed_work_sync(&qedi->board_disable_work); in __qedi_remove()
2457 qedi_free_iscsi_pf_param(qedi); in __qedi_remove()
2459 rval = qedi_ops->common->update_drv_state(qedi->cdev, false); in __qedi_remove()
2461 QEDI_ERR(&qedi->dbg_ctx, "Failed to send drv state to MFW\n"); in __qedi_remove()
2463 if (!test_bit(QEDI_IN_OFFLINE, &qedi->flags)) { in __qedi_remove()
2464 qedi_ops->common->slowpath_stop(qedi->cdev); in __qedi_remove()
2465 qedi_ops->common->remove(qedi->cdev); in __qedi_remove()
2468 qedi_destroy_fp(qedi); in __qedi_remove()
2471 qedi_release_cid_que(qedi); in __qedi_remove()
2472 qedi_cm_free_mem(qedi); in __qedi_remove()
2473 qedi_free_uio(qedi->udev); in __qedi_remove()
2474 qedi_free_itt(qedi); in __qedi_remove()
2476 if (qedi->ll2_recv_thread) { in __qedi_remove()
2477 kthread_stop(qedi->ll2_recv_thread); in __qedi_remove()
2478 qedi->ll2_recv_thread = NULL; in __qedi_remove()
2480 qedi_ll2_free_skbs(qedi); in __qedi_remove()
2482 if (qedi->boot_kset) in __qedi_remove()
2483 iscsi_boot_destroy_kset(qedi->boot_kset); in __qedi_remove()
2485 iscsi_host_free(qedi->shost); in __qedi_remove()
2491 struct qedi_ctx *qedi = in qedi_board_disable_work() local
2495 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in qedi_board_disable_work()
2498 if (test_and_set_bit(QEDI_IN_SHUTDOWN, &qedi->flags)) in qedi_board_disable_work()
2501 __qedi_remove(qedi->pdev, QEDI_MODE_NORMAL); in qedi_board_disable_work()
2506 struct qedi_ctx *qedi = pci_get_drvdata(pdev); in qedi_shutdown() local
2508 QEDI_ERR(&qedi->dbg_ctx, "%s: Shutdown qedi\n", __func__); in qedi_shutdown()
2509 if (test_and_set_bit(QEDI_IN_SHUTDOWN, &qedi->flags)) in qedi_shutdown()
2516 struct qedi_ctx *qedi; in qedi_suspend() local
2523 qedi = pci_get_drvdata(pdev); in qedi_suspend()
2525 QEDI_ERR(&qedi->dbg_ctx, "%s: Device does not support suspend operation\n", __func__); in qedi_suspend()
2532 struct qedi_ctx *qedi; in __qedi_probe() local
2545 qedi = qedi_host_alloc(pdev); in __qedi_probe()
2546 if (!qedi) { in __qedi_probe()
2551 qedi = pci_get_drvdata(pdev); in __qedi_probe()
2563 qedi->cdev = qedi_ops->common->probe(pdev, &qed_params); in __qedi_probe()
2564 if (!qedi->cdev) { in __qedi_probe()
2566 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in __qedi_probe()
2573 QEDI_ERR(&qedi->dbg_ctx, "Cannot initialize hardware\n"); in __qedi_probe()
2577 set_bit(QEDI_ERR_ATTN_CLR_EN, &qedi->qedi_err_flags); in __qedi_probe()
2578 set_bit(QEDI_ERR_IS_RECOVERABLE, &qedi->qedi_err_flags); in __qedi_probe()
2579 atomic_set(&qedi->link_state, QEDI_LINK_DOWN); in __qedi_probe()
2581 rc = qedi_ops->fill_dev_info(qedi->cdev, &qedi->dev_info); in __qedi_probe()
2585 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in __qedi_probe()
2587 qedi->dev_info.common.num_hwfns, in __qedi_probe()
2588 qedi_ops->common->get_affin_hwfn_idx(qedi->cdev)); in __qedi_probe()
2590 rc = qedi_set_iscsi_pf_param(qedi); in __qedi_probe()
2593 QEDI_ERR(&qedi->dbg_ctx, in __qedi_probe()
2598 qedi_ops->common->update_pf_params(qedi->cdev, &qedi->pf_params); in __qedi_probe()
2600 rc = qedi_prepare_fp(qedi); in __qedi_probe()
2602 QEDI_ERR(&qedi->dbg_ctx, "Cannot start slowpath.\n"); in __qedi_probe()
2614 rc = qedi_ops->common->slowpath_start(qedi->cdev, &sp_params); in __qedi_probe()
2616 QEDI_ERR(&qedi->dbg_ctx, "Cannot start slowpath\n"); in __qedi_probe()
2623 qedi_ops->common->update_pf_params(qedi->cdev, &qedi->pf_params); in __qedi_probe()
2625 rc = qedi_setup_int(qedi); in __qedi_probe()
2629 qedi_ops->common->set_power_state(qedi->cdev, PCI_D0); in __qedi_probe()
2632 rc = qedi_ops->fill_dev_info(qedi->cdev, &qedi->dev_info); in __qedi_probe()
2637 qedi->bdq_primary_prod = qedi->dev_info.primary_dbq_rq_addr; in __qedi_probe()
2638 qedi->bdq_secondary_prod = qedi->dev_info.secondary_bdq_rq_addr; in __qedi_probe()
2639 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_DISC, in __qedi_probe()
2641 qedi->bdq_primary_prod, in __qedi_probe()
2642 qedi->bdq_secondary_prod); in __qedi_probe()
2649 qedi->bdq_prod_idx = QEDI_BDQ_NUM; in __qedi_probe()
2650 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_DISC, in __qedi_probe()
2652 qedi->bdq_prod_idx); in __qedi_probe()
2653 writew(qedi->bdq_prod_idx, qedi->bdq_primary_prod); in __qedi_probe()
2654 readw(qedi->bdq_primary_prod); in __qedi_probe()
2655 writew(qedi->bdq_prod_idx, qedi->bdq_secondary_prod); in __qedi_probe()
2656 readw(qedi->bdq_secondary_prod); in __qedi_probe()
2658 ether_addr_copy(qedi->mac, qedi->dev_info.common.hw_mac); in __qedi_probe()
2659 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_DISC, "MAC address is %pM.\n", in __qedi_probe()
2660 qedi->mac); in __qedi_probe()
2662 snprintf(host_buf, sizeof(host_buf), "host_%d", qedi->shost->host_no); in __qedi_probe()
2663 qedi_ops->common->set_name(qedi->cdev, host_buf); in __qedi_probe()
2665 qedi_ops->register_ops(qedi->cdev, &qedi_cb_ops, qedi); in __qedi_probe()
2669 qedi->ll2_mtu = DEF_PATH_MTU; in __qedi_probe()
2672 ether_addr_copy(params.ll2_mac_address, qedi->dev_info.common.hw_mac); in __qedi_probe()
2676 INIT_LIST_HEAD(&qedi->ll2_skb_list); in __qedi_probe()
2677 spin_lock_init(&qedi->ll2_lock); in __qedi_probe()
2679 spin_lock_init(&qedi->hba_lock); in __qedi_probe()
2680 spin_lock_init(&qedi->task_idx_lock); in __qedi_probe()
2681 mutex_init(&qedi->stats_lock); in __qedi_probe()
2683 qedi_ops->ll2->register_cb_ops(qedi->cdev, &qedi_ll2_cb_ops, qedi); in __qedi_probe()
2684 qedi_ops->ll2->start(qedi->cdev, ¶ms); in __qedi_probe()
2687 qedi->ll2_recv_thread = kthread_run(qedi_ll2_recv_thread, in __qedi_probe()
2688 (void *)qedi, in __qedi_probe()
2692 rc = qedi_ops->start(qedi->cdev, &qedi->tasks, in __qedi_probe()
2693 qedi, qedi_iscsi_event_cb); in __qedi_probe()
2696 QEDI_ERR(&qedi->dbg_ctx, "Cannot start iSCSI function\n"); in __qedi_probe()
2700 task_start = qedi_get_task_mem(&qedi->tasks, 0); in __qedi_probe()
2701 task_end = qedi_get_task_mem(&qedi->tasks, MAX_TID_BLOCKS_ISCSI - 1); in __qedi_probe()
2702 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_DISC, in __qedi_probe()
2704 task_start, task_end, qedi->tasks.size); in __qedi_probe()
2708 rc = qedi_ops->common->set_link(qedi->cdev, &link_params); in __qedi_probe()
2710 QEDI_WARN(&qedi->dbg_ctx, "Link set up failed.\n"); in __qedi_probe()
2711 atomic_set(&qedi->link_state, QEDI_LINK_DOWN); in __qedi_probe()
2715 qedi_dbg_host_init(&qedi->dbg_ctx, qedi_debugfs_ops, in __qedi_probe()
2718 QEDI_INFO(&qedi->dbg_ctx, QEDI_LOG_INFO, in __qedi_probe()
2724 if (iscsi_host_add(qedi->shost, &pdev->dev)) { in __qedi_probe()
2725 QEDI_ERR(&qedi->dbg_ctx, in __qedi_probe()
2732 rc = qedi_alloc_uio_rings(qedi); in __qedi_probe()
2734 QEDI_ERR(&qedi->dbg_ctx, in __qedi_probe()
2739 rc = qedi_init_uio(qedi); in __qedi_probe()
2741 QEDI_ERR(&qedi->dbg_ctx, in __qedi_probe()
2747 rc = qedi_setup_cid_que(qedi); in __qedi_probe()
2749 QEDI_ERR(&qedi->dbg_ctx, in __qedi_probe()
2754 rc = qedi_cm_alloc_mem(qedi); in __qedi_probe()
2756 QEDI_ERR(&qedi->dbg_ctx, in __qedi_probe()
2761 rc = qedi_alloc_itt(qedi); in __qedi_probe()
2763 QEDI_ERR(&qedi->dbg_ctx, in __qedi_probe()
2768 sprintf(host_buf, "host_%d", qedi->shost->host_no); in __qedi_probe()
2769 qedi->tmf_thread = in __qedi_probe()
2771 if (!qedi->tmf_thread) { in __qedi_probe()
2772 QEDI_ERR(&qedi->dbg_ctx, in __qedi_probe()
2778 qedi->offload_thread = alloc_workqueue("qedi_ofld%d", in __qedi_probe()
2780 1, qedi->shost->host_no); in __qedi_probe()
2781 if (!qedi->offload_thread) { in __qedi_probe()
2782 QEDI_ERR(&qedi->dbg_ctx, in __qedi_probe()
2788 INIT_DELAYED_WORK(&qedi->recovery_work, qedi_recovery_handler); in __qedi_probe()
2789 INIT_DELAYED_WORK(&qedi->board_disable_work, in __qedi_probe()
2793 set_bit(QEDI_RESERVE_TASK_ID, qedi->task_idx_map); in __qedi_probe()
2794 atomic_set(&qedi->num_offloads, 0); in __qedi_probe()
2796 if (qedi_setup_boot_info(qedi)) in __qedi_probe()
2797 QEDI_ERR(&qedi->dbg_ctx, in __qedi_probe()
2800 rc = qedi_ops->common->update_drv_state(qedi->cdev, true); in __qedi_probe()
2802 QEDI_ERR(&qedi->dbg_ctx, in __qedi_probe()
2810 destroy_workqueue(qedi->tmf_thread); in __qedi_probe()
2812 qedi_release_cid_que(qedi); in __qedi_probe()
2814 qedi_free_uio(qedi->udev); in __qedi_probe()
2817 qedi_dbg_host_exit(&qedi->dbg_ctx); in __qedi_probe()
2819 iscsi_host_remove(qedi->shost, false); in __qedi_probe()
2821 qedi_ops->stop(qedi->cdev); in __qedi_probe()
2823 qedi_ops->common->slowpath_stop(qedi->cdev); in __qedi_probe()
2825 qedi_ops->common->remove(qedi->cdev); in __qedi_probe()
2827 qedi_free_iscsi_pf_param(qedi); in __qedi_probe()
2829 iscsi_host_free(qedi->shost); in __qedi_probe()
2845 struct qedi_ctx *qedi = in qedi_recovery_handler() local
2848 iscsi_host_for_each_session(qedi->shost, qedi_mark_conn_recovery); in qedi_recovery_handler()
2853 qedi_ops->common->recovery_prolog(qedi->cdev); in qedi_recovery_handler()
2855 __qedi_remove(qedi->pdev, QEDI_MODE_RECOVERY); in qedi_recovery_handler()
2856 __qedi_probe(qedi->pdev, QEDI_MODE_RECOVERY); in qedi_recovery_handler()
2857 clear_bit(QEDI_IN_RECOVERY, &qedi->flags); in qedi_recovery_handler()