Lines Matching refs:hba

34 static int bnx2i_adapter_ready(struct bnx2i_hba *hba)  in bnx2i_adapter_ready()  argument
38 if (!hba || !test_bit(ADAPTER_STATE_UP, &hba->adapter_state) || in bnx2i_adapter_ready()
39 test_bit(ADAPTER_STATE_GOING_DOWN, &hba->adapter_state) || in bnx2i_adapter_ready()
40 test_bit(ADAPTER_STATE_LINK_DOWN, &hba->adapter_state)) in bnx2i_adapter_ready()
143 static int bnx2i_map_scsi_sg(struct bnx2i_hba *hba, struct bnx2i_cmd *cmd) in bnx2i_map_scsi_sg() argument
190 bd_count = bnx2i_map_scsi_sg(cmd->conn->hba, cmd); in bnx2i_iscsi_map_sg_list()
238 static int bnx2i_bind_conn_to_iscsi_cid(struct bnx2i_hba *hba, in bnx2i_bind_conn_to_iscsi_cid() argument
242 if (hba && hba->cid_que.conn_cid_tbl[iscsi_cid]) { in bnx2i_bind_conn_to_iscsi_cid()
248 hba->cid_que.conn_cid_tbl[iscsi_cid] = bnx2i_conn; in bnx2i_bind_conn_to_iscsi_cid()
258 struct bnx2i_conn *bnx2i_get_conn_from_id(struct bnx2i_hba *hba, in bnx2i_get_conn_from_id() argument
261 if (!hba->cid_que.conn_cid_tbl) { in bnx2i_get_conn_from_id()
265 } else if (iscsi_cid >= hba->max_active_conns) { in bnx2i_get_conn_from_id()
269 return hba->cid_que.conn_cid_tbl[iscsi_cid]; in bnx2i_get_conn_from_id()
277 static u32 bnx2i_alloc_iscsi_cid(struct bnx2i_hba *hba) in bnx2i_alloc_iscsi_cid() argument
281 if (!hba->cid_que.cid_free_cnt) in bnx2i_alloc_iscsi_cid()
284 idx = hba->cid_que.cid_q_cons_idx; in bnx2i_alloc_iscsi_cid()
285 hba->cid_que.cid_q_cons_idx++; in bnx2i_alloc_iscsi_cid()
286 if (hba->cid_que.cid_q_cons_idx == hba->cid_que.cid_q_max_idx) in bnx2i_alloc_iscsi_cid()
287 hba->cid_que.cid_q_cons_idx = 0; in bnx2i_alloc_iscsi_cid()
289 hba->cid_que.cid_free_cnt--; in bnx2i_alloc_iscsi_cid()
290 return hba->cid_que.cid_que[idx]; in bnx2i_alloc_iscsi_cid()
299 static void bnx2i_free_iscsi_cid(struct bnx2i_hba *hba, u16 iscsi_cid) in bnx2i_free_iscsi_cid() argument
306 hba->cid_que.cid_free_cnt++; in bnx2i_free_iscsi_cid()
308 idx = hba->cid_que.cid_q_prod_idx; in bnx2i_free_iscsi_cid()
309 hba->cid_que.cid_que[idx] = iscsi_cid; in bnx2i_free_iscsi_cid()
310 hba->cid_que.conn_cid_tbl[iscsi_cid] = NULL; in bnx2i_free_iscsi_cid()
311 hba->cid_que.cid_q_prod_idx++; in bnx2i_free_iscsi_cid()
312 if (hba->cid_que.cid_q_prod_idx == hba->cid_que.cid_q_max_idx) in bnx2i_free_iscsi_cid()
313 hba->cid_que.cid_q_prod_idx = 0; in bnx2i_free_iscsi_cid()
324 static int bnx2i_setup_free_cid_que(struct bnx2i_hba *hba) in bnx2i_setup_free_cid_que() argument
329 mem_size = hba->max_active_conns * sizeof(u32); in bnx2i_setup_free_cid_que()
332 hba->cid_que.cid_que_base = kmalloc(mem_size, GFP_KERNEL); in bnx2i_setup_free_cid_que()
333 if (!hba->cid_que.cid_que_base) in bnx2i_setup_free_cid_que()
336 mem_size = hba->max_active_conns * sizeof(struct bnx2i_conn *); in bnx2i_setup_free_cid_que()
338 hba->cid_que.conn_cid_tbl = kmalloc(mem_size, GFP_KERNEL); in bnx2i_setup_free_cid_que()
339 if (!hba->cid_que.conn_cid_tbl) { in bnx2i_setup_free_cid_que()
340 kfree(hba->cid_que.cid_que_base); in bnx2i_setup_free_cid_que()
341 hba->cid_que.cid_que_base = NULL; in bnx2i_setup_free_cid_que()
345 hba->cid_que.cid_que = (u32 *)hba->cid_que.cid_que_base; in bnx2i_setup_free_cid_que()
346 hba->cid_que.cid_q_prod_idx = 0; in bnx2i_setup_free_cid_que()
347 hba->cid_que.cid_q_cons_idx = 0; in bnx2i_setup_free_cid_que()
348 hba->cid_que.cid_q_max_idx = hba->max_active_conns; in bnx2i_setup_free_cid_que()
349 hba->cid_que.cid_free_cnt = hba->max_active_conns; in bnx2i_setup_free_cid_que()
351 for (i = 0; i < hba->max_active_conns; i++) { in bnx2i_setup_free_cid_que()
352 hba->cid_que.cid_que[i] = i; in bnx2i_setup_free_cid_que()
353 hba->cid_que.conn_cid_tbl[i] = NULL; in bnx2i_setup_free_cid_que()
363 static void bnx2i_release_free_cid_que(struct bnx2i_hba *hba) in bnx2i_release_free_cid_que() argument
365 kfree(hba->cid_que.cid_que_base); in bnx2i_release_free_cid_que()
366 hba->cid_que.cid_que_base = NULL; in bnx2i_release_free_cid_que()
368 kfree(hba->cid_que.conn_cid_tbl); in bnx2i_release_free_cid_que()
369 hba->cid_que.conn_cid_tbl = NULL; in bnx2i_release_free_cid_que()
381 static struct iscsi_endpoint *bnx2i_alloc_ep(struct bnx2i_hba *hba) in bnx2i_alloc_ep() argument
398 bnx2i_ep->hba = hba; in bnx2i_alloc_ep()
399 bnx2i_ep->hba_age = hba->age; in bnx2i_alloc_ep()
405 hba->ofld_conns_active++; in bnx2i_alloc_ep()
422 bnx2i_ep->hba->ofld_conns_active--; in bnx2i_free_ep()
425 bnx2i_free_iscsi_cid(bnx2i_ep->hba, bnx2i_ep->ep_iscsi_cid); in bnx2i_free_ep()
432 bnx2i_ep->hba = NULL; in bnx2i_free_ep()
444 static int bnx2i_alloc_bdt(struct bnx2i_hba *hba, struct iscsi_session *session, in bnx2i_alloc_bdt() argument
450 io->bd_tbl = dma_alloc_coherent(&hba->pcidev->dev, in bnx2i_alloc_bdt()
468 static void bnx2i_destroy_cmd_pool(struct bnx2i_hba *hba, in bnx2i_destroy_cmd_pool() argument
478 dma_free_coherent(&hba->pcidev->dev, in bnx2i_destroy_cmd_pool()
493 static int bnx2i_setup_cmd_pool(struct bnx2i_hba *hba, in bnx2i_setup_cmd_pool() argument
505 if (bnx2i_alloc_bdt(hba, session, cmd)) in bnx2i_setup_cmd_pool()
512 bnx2i_destroy_cmd_pool(hba, session); in bnx2i_setup_cmd_pool()
524 static int bnx2i_setup_mp_bdt(struct bnx2i_hba *hba) in bnx2i_setup_mp_bdt() argument
530 hba->mp_bd_tbl = dma_alloc_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE, in bnx2i_setup_mp_bdt()
531 &hba->mp_bd_dma, GFP_KERNEL); in bnx2i_setup_mp_bdt()
532 if (!hba->mp_bd_tbl) { in bnx2i_setup_mp_bdt()
538 hba->dummy_buffer = dma_alloc_coherent(&hba->pcidev->dev, in bnx2i_setup_mp_bdt()
540 &hba->dummy_buf_dma, GFP_KERNEL); in bnx2i_setup_mp_bdt()
541 if (!hba->dummy_buffer) { in bnx2i_setup_mp_bdt()
543 dma_free_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE, in bnx2i_setup_mp_bdt()
544 hba->mp_bd_tbl, hba->mp_bd_dma); in bnx2i_setup_mp_bdt()
545 hba->mp_bd_tbl = NULL; in bnx2i_setup_mp_bdt()
550 mp_bdt = (struct iscsi_bd *) hba->mp_bd_tbl; in bnx2i_setup_mp_bdt()
551 addr = (unsigned long) hba->dummy_buf_dma; in bnx2i_setup_mp_bdt()
568 static void bnx2i_free_mp_bdt(struct bnx2i_hba *hba) in bnx2i_free_mp_bdt() argument
570 if (hba->mp_bd_tbl) { in bnx2i_free_mp_bdt()
571 dma_free_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE, in bnx2i_free_mp_bdt()
572 hba->mp_bd_tbl, hba->mp_bd_dma); in bnx2i_free_mp_bdt()
573 hba->mp_bd_tbl = NULL; in bnx2i_free_mp_bdt()
575 if (hba->dummy_buffer) { in bnx2i_free_mp_bdt()
576 dma_free_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE, in bnx2i_free_mp_bdt()
577 hba->dummy_buffer, hba->dummy_buf_dma); in bnx2i_free_mp_bdt()
578 hba->dummy_buffer = NULL; in bnx2i_free_mp_bdt()
606 static int bnx2i_ep_destroy_list_add(struct bnx2i_hba *hba, in bnx2i_ep_destroy_list_add() argument
609 write_lock_bh(&hba->ep_rdwr_lock); in bnx2i_ep_destroy_list_add()
610 list_add_tail(&ep->link, &hba->ep_destroy_list); in bnx2i_ep_destroy_list_add()
611 write_unlock_bh(&hba->ep_rdwr_lock); in bnx2i_ep_destroy_list_add()
623 static int bnx2i_ep_destroy_list_del(struct bnx2i_hba *hba, in bnx2i_ep_destroy_list_del() argument
626 write_lock_bh(&hba->ep_rdwr_lock); in bnx2i_ep_destroy_list_del()
628 write_unlock_bh(&hba->ep_rdwr_lock); in bnx2i_ep_destroy_list_del()
640 static int bnx2i_ep_ofld_list_add(struct bnx2i_hba *hba, in bnx2i_ep_ofld_list_add() argument
643 write_lock_bh(&hba->ep_rdwr_lock); in bnx2i_ep_ofld_list_add()
644 list_add_tail(&ep->link, &hba->ep_ofld_list); in bnx2i_ep_ofld_list_add()
645 write_unlock_bh(&hba->ep_rdwr_lock); in bnx2i_ep_ofld_list_add()
656 static int bnx2i_ep_ofld_list_del(struct bnx2i_hba *hba, in bnx2i_ep_ofld_list_del() argument
659 write_lock_bh(&hba->ep_rdwr_lock); in bnx2i_ep_ofld_list_del()
661 write_unlock_bh(&hba->ep_rdwr_lock); in bnx2i_ep_ofld_list_del()
674 bnx2i_find_ep_in_ofld_list(struct bnx2i_hba *hba, u32 iscsi_cid) in bnx2i_find_ep_in_ofld_list() argument
680 read_lock_bh(&hba->ep_rdwr_lock); in bnx2i_find_ep_in_ofld_list()
681 list_for_each_safe(list, tmp, &hba->ep_ofld_list) { in bnx2i_find_ep_in_ofld_list()
688 read_unlock_bh(&hba->ep_rdwr_lock); in bnx2i_find_ep_in_ofld_list()
702 bnx2i_find_ep_in_destroy_list(struct bnx2i_hba *hba, u32 iscsi_cid) in bnx2i_find_ep_in_destroy_list() argument
708 read_lock_bh(&hba->ep_rdwr_lock); in bnx2i_find_ep_in_destroy_list()
709 list_for_each_safe(list, tmp, &hba->ep_destroy_list) { in bnx2i_find_ep_in_destroy_list()
716 read_unlock_bh(&hba->ep_rdwr_lock); in bnx2i_find_ep_in_destroy_list()
731 static void bnx2i_ep_active_list_add(struct bnx2i_hba *hba, in bnx2i_ep_active_list_add() argument
734 write_lock_bh(&hba->ep_rdwr_lock); in bnx2i_ep_active_list_add()
735 list_add_tail(&ep->link, &hba->ep_active_list); in bnx2i_ep_active_list_add()
736 write_unlock_bh(&hba->ep_rdwr_lock); in bnx2i_ep_active_list_add()
747 static void bnx2i_ep_active_list_del(struct bnx2i_hba *hba, in bnx2i_ep_active_list_del() argument
750 write_lock_bh(&hba->ep_rdwr_lock); in bnx2i_ep_active_list_del()
752 write_unlock_bh(&hba->ep_rdwr_lock); in bnx2i_ep_active_list_del()
765 static void bnx2i_setup_host_queue_size(struct bnx2i_hba *hba, in bnx2i_setup_host_queue_size() argument
768 if (test_bit(BNX2I_NX2_DEV_5708, &hba->cnic_dev_type)) in bnx2i_setup_host_queue_size()
770 else if (test_bit(BNX2I_NX2_DEV_5709, &hba->cnic_dev_type)) in bnx2i_setup_host_queue_size()
772 else if (test_bit(BNX2I_NX2_DEV_57710, &hba->cnic_dev_type)) in bnx2i_setup_host_queue_size()
789 struct bnx2i_hba *hba; in bnx2i_alloc_hba() local
791 shost = iscsi_host_alloc(&bnx2i_host_template, sizeof(*hba), 0); in bnx2i_alloc_hba()
801 hba = iscsi_host_priv(shost); in bnx2i_alloc_hba()
802 hba->shost = shost; in bnx2i_alloc_hba()
803 hba->netdev = cnic->netdev; in bnx2i_alloc_hba()
805 hba->pcidev = cnic->pcidev; in bnx2i_alloc_hba()
806 pci_dev_get(hba->pcidev); in bnx2i_alloc_hba()
807 hba->pci_did = hba->pcidev->device; in bnx2i_alloc_hba()
808 hba->pci_vid = hba->pcidev->vendor; in bnx2i_alloc_hba()
809 hba->pci_sdid = hba->pcidev->subsystem_device; in bnx2i_alloc_hba()
810 hba->pci_svid = hba->pcidev->subsystem_vendor; in bnx2i_alloc_hba()
811 hba->pci_func = PCI_FUNC(hba->pcidev->devfn); in bnx2i_alloc_hba()
812 hba->pci_devno = PCI_SLOT(hba->pcidev->devfn); in bnx2i_alloc_hba()
814 bnx2i_identify_device(hba, cnic); in bnx2i_alloc_hba()
815 bnx2i_setup_host_queue_size(hba, shost); in bnx2i_alloc_hba()
817 hba->reg_base = pci_resource_start(hba->pcidev, 0); in bnx2i_alloc_hba()
818 if (test_bit(BNX2I_NX2_DEV_5709, &hba->cnic_dev_type)) { in bnx2i_alloc_hba()
819 hba->regview = pci_iomap(hba->pcidev, 0, BNX2_MQ_CONFIG2); in bnx2i_alloc_hba()
820 if (!hba->regview) in bnx2i_alloc_hba()
822 } else if (test_bit(BNX2I_NX2_DEV_57710, &hba->cnic_dev_type)) { in bnx2i_alloc_hba()
823 hba->regview = pci_iomap(hba->pcidev, 0, 4096); in bnx2i_alloc_hba()
824 if (!hba->regview) in bnx2i_alloc_hba()
828 if (bnx2i_setup_mp_bdt(hba)) in bnx2i_alloc_hba()
831 INIT_LIST_HEAD(&hba->ep_ofld_list); in bnx2i_alloc_hba()
832 INIT_LIST_HEAD(&hba->ep_active_list); in bnx2i_alloc_hba()
833 INIT_LIST_HEAD(&hba->ep_destroy_list); in bnx2i_alloc_hba()
834 rwlock_init(&hba->ep_rdwr_lock); in bnx2i_alloc_hba()
836 hba->mtu_supported = BNX2I_MAX_MTU_SUPPORTED; in bnx2i_alloc_hba()
839 hba->max_active_conns = ISCSI_MAX_CONNS_PER_HBA; in bnx2i_alloc_hba()
841 if (bnx2i_setup_free_cid_que(hba)) in bnx2i_alloc_hba()
845 if (test_bit(BNX2I_NX2_DEV_57710, &hba->cnic_dev_type)) { in bnx2i_alloc_hba()
847 hba->max_sqes = sq_size; in bnx2i_alloc_hba()
849 hba->max_sqes = BNX2I_5770X_SQ_WQES_DEFAULT; in bnx2i_alloc_hba()
852 hba->max_sqes = sq_size; in bnx2i_alloc_hba()
854 hba->max_sqes = BNX2I_570X_SQ_WQES_DEFAULT; in bnx2i_alloc_hba()
857 hba->max_rqes = rq_size; in bnx2i_alloc_hba()
858 hba->max_cqes = hba->max_sqes + rq_size; in bnx2i_alloc_hba()
859 if (test_bit(BNX2I_NX2_DEV_57710, &hba->cnic_dev_type)) { in bnx2i_alloc_hba()
860 if (hba->max_cqes > BNX2I_5770X_CQ_WQES_MAX) in bnx2i_alloc_hba()
861 hba->max_cqes = BNX2I_5770X_CQ_WQES_MAX; in bnx2i_alloc_hba()
862 } else if (hba->max_cqes > BNX2I_570X_CQ_WQES_MAX) in bnx2i_alloc_hba()
863 hba->max_cqes = BNX2I_570X_CQ_WQES_MAX; in bnx2i_alloc_hba()
865 hba->num_ccell = hba->max_sqes / 2; in bnx2i_alloc_hba()
867 spin_lock_init(&hba->lock); in bnx2i_alloc_hba()
868 mutex_init(&hba->net_dev_lock); in bnx2i_alloc_hba()
869 init_waitqueue_head(&hba->eh_wait); in bnx2i_alloc_hba()
870 if (test_bit(BNX2I_NX2_DEV_57710, &hba->cnic_dev_type)) { in bnx2i_alloc_hba()
871 hba->hba_shutdown_tmo = 30 * HZ; in bnx2i_alloc_hba()
872 hba->conn_teardown_tmo = 20 * HZ; in bnx2i_alloc_hba()
873 hba->conn_ctx_destroy_tmo = 6 * HZ; in bnx2i_alloc_hba()
875 hba->hba_shutdown_tmo = 20 * HZ; in bnx2i_alloc_hba()
876 hba->conn_teardown_tmo = 10 * HZ; in bnx2i_alloc_hba()
877 hba->conn_ctx_destroy_tmo = 2 * HZ; in bnx2i_alloc_hba()
881 spin_lock_init(&hba->stat_lock); in bnx2i_alloc_hba()
883 memset(&hba->stats, 0, sizeof(struct iscsi_stats_info)); in bnx2i_alloc_hba()
885 if (iscsi_host_add(shost, &hba->pcidev->dev)) in bnx2i_alloc_hba()
887 return hba; in bnx2i_alloc_hba()
890 bnx2i_release_free_cid_que(hba); in bnx2i_alloc_hba()
892 bnx2i_free_mp_bdt(hba); in bnx2i_alloc_hba()
894 if (hba->regview) { in bnx2i_alloc_hba()
895 pci_iounmap(hba->pcidev, hba->regview); in bnx2i_alloc_hba()
896 hba->regview = NULL; in bnx2i_alloc_hba()
899 pci_dev_put(hba->pcidev); in bnx2i_alloc_hba()
910 void bnx2i_free_hba(struct bnx2i_hba *hba) in bnx2i_free_hba() argument
912 struct Scsi_Host *shost = hba->shost; in bnx2i_free_hba()
915 INIT_LIST_HEAD(&hba->ep_ofld_list); in bnx2i_free_hba()
916 INIT_LIST_HEAD(&hba->ep_active_list); in bnx2i_free_hba()
917 INIT_LIST_HEAD(&hba->ep_destroy_list); in bnx2i_free_hba()
918 pci_dev_put(hba->pcidev); in bnx2i_free_hba()
920 if (hba->regview) { in bnx2i_free_hba()
921 pci_iounmap(hba->pcidev, hba->regview); in bnx2i_free_hba()
922 hba->regview = NULL; in bnx2i_free_hba()
924 bnx2i_free_mp_bdt(hba); in bnx2i_free_hba()
925 bnx2i_release_free_cid_que(hba); in bnx2i_free_hba()
936 static void bnx2i_conn_free_login_resources(struct bnx2i_hba *hba, in bnx2i_conn_free_login_resources() argument
940 dma_free_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE, in bnx2i_conn_free_login_resources()
947 dma_free_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE, in bnx2i_conn_free_login_resources()
954 dma_free_coherent(&hba->pcidev->dev, in bnx2i_conn_free_login_resources()
962 dma_free_coherent(&hba->pcidev->dev, in bnx2i_conn_free_login_resources()
977 static int bnx2i_conn_alloc_login_resources(struct bnx2i_hba *hba, in bnx2i_conn_alloc_login_resources() argument
982 dma_alloc_coherent(&hba->pcidev->dev, in bnx2i_conn_alloc_login_resources()
993 dma_alloc_coherent(&hba->pcidev->dev, in bnx2i_conn_alloc_login_resources()
1004 dma_alloc_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE, in bnx2i_conn_alloc_login_resources()
1010 dma_alloc_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE, in bnx2i_conn_alloc_login_resources()
1019 dma_free_coherent(&hba->pcidev->dev, CNIC_PAGE_SIZE, in bnx2i_conn_alloc_login_resources()
1025 dma_free_coherent(&hba->pcidev->dev, ISCSI_DEF_MAX_RECV_SEG_LEN, in bnx2i_conn_alloc_login_resources()
1030 dma_free_coherent(&hba->pcidev->dev, ISCSI_DEF_MAX_RECV_SEG_LEN, in bnx2i_conn_alloc_login_resources()
1162 struct bnx2i_hba *hba = bnx2i_conn->hba; in bnx2i_cleanup_task() local
1173 bnx2i_send_cmd_cleanup_req(hba, task->dd_data); in bnx2i_cleanup_task()
1194 struct bnx2i_hba *hba = bnx2i_conn->hba; in bnx2i_mtask_xmit() local
1203 ADD_STATS_64(hba, tx_pdus, 1); in bnx2i_mtask_xmit()
1204 ADD_STATS_64(hba, tx_bytes, task->data_count); in bnx2i_mtask_xmit()
1228 struct bnx2i_hba *hba = iscsi_host_priv(shost); in bnx2i_task_xmit() local
1235 hba->max_sqes) in bnx2i_task_xmit()
1269 cmd->req.bd_list_addr_lo = (u32) hba->mp_bd_dma; in bnx2i_task_xmit()
1270 cmd->req.bd_list_addr_hi = (u32) ((u64) hba->mp_bd_dma >> 32); in bnx2i_task_xmit()
1293 struct bnx2i_hba *hba; in bnx2i_session_create() local
1302 shost = bnx2i_ep->hba->shost; in bnx2i_session_create()
1303 hba = iscsi_host_priv(shost); in bnx2i_session_create()
1304 if (bnx2i_adapter_ready(hba)) in bnx2i_session_create()
1311 if (cmds_max > hba->max_sqes) in bnx2i_session_create()
1312 cmds_max = hba->max_sqes; in bnx2i_session_create()
1322 if (bnx2i_setup_cmd_pool(hba, cls_session->dd_data)) in bnx2i_session_create()
1343 struct bnx2i_hba *hba = iscsi_host_priv(shost); in bnx2i_session_destroy() local
1345 bnx2i_destroy_cmd_pool(hba, session); in bnx2i_session_destroy()
1361 struct bnx2i_hba *hba = iscsi_host_priv(shost); in bnx2i_conn_create() local
1374 bnx2i_conn->hba = hba; in bnx2i_conn_create()
1382 if (bnx2i_conn_alloc_login_resources(hba, bnx2i_conn)) { in bnx2i_conn_create()
1414 struct bnx2i_hba *hba = iscsi_host_priv(shost); in bnx2i_conn_bind() local
1426 if (bnx2i_adapter_ready(hba)) in bnx2i_conn_bind()
1438 if (bnx2i_ep->hba != hba) { in bnx2i_conn_bind()
1443 bnx2i_ep, bnx2i_ep->hba->netdev->name); in bnx2i_conn_bind()
1446 hba->netdev->name); in bnx2i_conn_bind()
1454 ret_code = bnx2i_bind_conn_to_iscsi_cid(hba, bnx2i_conn, in bnx2i_conn_bind()
1460 if (test_bit(BNX2I_NX2_DEV_57710, &bnx2i_ep->hba->cnic_dev_type)) in bnx2i_conn_bind()
1480 struct bnx2i_hba *hba; in bnx2i_conn_destroy() local
1486 hba = iscsi_host_priv(shost); in bnx2i_conn_destroy()
1488 bnx2i_conn_free_login_resources(hba, bnx2i_conn); in bnx2i_conn_destroy()
1525 struct bnx2i_hba *hba = bnx2i_ep->hba; in bnx2i_ep_get_param() local
1528 if (!hba) in bnx2i_ep_get_param()
1533 mutex_lock(&hba->net_dev_lock); in bnx2i_ep_get_param()
1536 mutex_unlock(&hba->net_dev_lock); in bnx2i_ep_get_param()
1539 mutex_lock(&hba->net_dev_lock); in bnx2i_ep_get_param()
1542 mutex_unlock(&hba->net_dev_lock); in bnx2i_ep_get_param()
1560 struct bnx2i_hba *hba = iscsi_host_priv(shost); in bnx2i_host_get_param() local
1565 len = sysfs_format_mac(buf, hba->cnic->mac_addr, 6); in bnx2i_host_get_param()
1568 len = sprintf(buf, "%s\n", hba->netdev->name); in bnx2i_host_get_param()
1571 struct list_head *active_list = &hba->ep_active_list; in bnx2i_host_get_param()
1573 read_lock_bh(&hba->ep_rdwr_lock); in bnx2i_host_get_param()
1574 if (!list_empty(&hba->ep_active_list)) { in bnx2i_host_get_param()
1587 read_unlock_bh(&hba->ep_rdwr_lock); in bnx2i_host_get_param()
1667 struct bnx2i_hba *hba; in bnx2i_check_route() local
1670 hba = get_adapter_list_head(); in bnx2i_check_route()
1671 if (hba && hba->cnic) in bnx2i_check_route()
1672 cnic = hba->cnic->cm_select_dev(desti, CNIC_ULP_ISCSI); in bnx2i_check_route()
1678 hba = bnx2i_find_hba_for_cnic(cnic); in bnx2i_check_route()
1679 if (!hba) in bnx2i_check_route()
1682 if (bnx2i_adapter_ready(hba)) { in bnx2i_check_route()
1686 if (hba->netdev->mtu > hba->mtu_supported) { in bnx2i_check_route()
1688 hba->netdev->name, hba->netdev->mtu); in bnx2i_check_route()
1690 hba->mtu_supported); in bnx2i_check_route()
1693 return hba; in bnx2i_check_route()
1706 static int bnx2i_tear_down_conn(struct bnx2i_hba *hba, in bnx2i_tear_down_conn() argument
1709 if (test_bit(BNX2I_CNIC_REGISTERED, &hba->reg_with_cnic) && ep->cm_sk) in bnx2i_tear_down_conn()
1710 hba->cnic->cm_destroy(ep->cm_sk); in bnx2i_tear_down_conn()
1712 if (test_bit(BNX2I_NX2_DEV_57710, &hba->cnic_dev_type) && in bnx2i_tear_down_conn()
1728 hba->netdev->name); in bnx2i_tear_down_conn()
1733 ep->ofld_timer.expires = hba->conn_ctx_destroy_tmo + jiffies; in bnx2i_tear_down_conn()
1738 bnx2i_ep_destroy_list_add(hba, ep); in bnx2i_tear_down_conn()
1741 if (bnx2i_send_conn_destroy(hba, ep)) in bnx2i_tear_down_conn()
1751 bnx2i_ep_destroy_list_del(hba, ep); in bnx2i_tear_down_conn()
1781 struct bnx2i_hba *hba; in bnx2i_ep_connect() local
1789 hba = iscsi_host_priv(shost); in bnx2i_ep_connect()
1795 hba = bnx2i_check_route(dst_addr); in bnx2i_ep_connect()
1797 if (!hba) { in bnx2i_ep_connect()
1801 mutex_lock(&hba->net_dev_lock); in bnx2i_ep_connect()
1803 if (bnx2i_adapter_ready(hba) || !hba->cid_que.cid_free_cnt) { in bnx2i_ep_connect()
1807 cnic = hba->cnic; in bnx2i_ep_connect()
1808 ep = bnx2i_alloc_ep(hba); in bnx2i_ep_connect()
1816 iscsi_cid = bnx2i_alloc_iscsi_cid(hba); in bnx2i_ep_connect()
1819 "iscsi cid\n", hba->netdev->name); in bnx2i_ep_connect()
1824 bnx2i_ep->hba_age = hba->age; in bnx2i_ep_connect()
1826 rc = bnx2i_alloc_qp_resc(hba, bnx2i_ep); in bnx2i_ep_connect()
1829 "\n", hba->netdev->name); in bnx2i_ep_connect()
1836 bnx2i_ep_ofld_list_add(hba, bnx2i_ep); in bnx2i_ep_connect()
1844 if (bnx2i_send_conn_ofld_req(hba, bnx2i_ep)) { in bnx2i_ep_connect()
1847 hba->netdev->name, bnx2i_ep->ep_iscsi_cid); in bnx2i_ep_connect()
1852 "\n", hba->netdev->name); in bnx2i_ep_connect()
1853 bnx2i_ep_ofld_list_del(hba, bnx2i_ep); in bnx2i_ep_connect()
1865 bnx2i_ep_ofld_list_del(hba, bnx2i_ep); in bnx2i_ep_connect()
1870 hba->netdev->name, bnx2i_ep->ep_iscsi_cid); in bnx2i_ep_connect()
1902 if (!test_bit(BNX2I_CNIC_REGISTERED, &hba->reg_with_cnic)) { in bnx2i_ep_connect()
1910 bnx2i_ep_active_list_add(hba, bnx2i_ep); in bnx2i_ep_connect()
1915 mutex_unlock(&hba->net_dev_lock); in bnx2i_ep_connect()
1919 bnx2i_ep_active_list_del(hba, bnx2i_ep); in bnx2i_ep_connect()
1921 if (bnx2i_tear_down_conn(hba, bnx2i_ep)) { in bnx2i_ep_connect()
1922 mutex_unlock(&hba->net_dev_lock); in bnx2i_ep_connect()
1926 bnx2i_free_qp_resc(hba, bnx2i_ep); in bnx2i_ep_connect()
1930 mutex_unlock(&hba->net_dev_lock); in bnx2i_ep_connect()
1987 if (test_bit(BNX2I_NX2_DEV_57710, &bnx2i_ep->hba->cnic_dev_type)) in bnx2i_ep_tcp_conn_active()
2029 struct bnx2i_hba *hba = bnx2i_ep->hba; in bnx2i_hw_ep_disconnect() local
2037 if (!hba) in bnx2i_hw_ep_disconnect()
2040 cnic = hba->cnic; in bnx2i_hw_ep_disconnect()
2057 bnx2i_ep->ofld_timer.expires = hba->conn_teardown_tmo + jiffies; in bnx2i_hw_ep_disconnect()
2062 if (!test_bit(BNX2I_CNIC_REGISTERED, &hba->reg_with_cnic)) in bnx2i_hw_ep_disconnect()
2074 bnx2i_ep->hba->netdev->name); in bnx2i_hw_ep_disconnect()
2094 bnx2i_ep->hba->netdev->name, close, close_ret); in bnx2i_hw_ep_disconnect()
2106 bnx2i_ep_active_list_del(hba, bnx2i_ep); in bnx2i_hw_ep_disconnect()
2107 if (bnx2i_tear_down_conn(hba, bnx2i_ep)) in bnx2i_hw_ep_disconnect()
2126 struct bnx2i_hba *hba; in bnx2i_ep_disconnect() local
2143 hba = bnx2i_ep->hba; in bnx2i_ep_disconnect()
2145 mutex_lock(&hba->net_dev_lock); in bnx2i_ep_disconnect()
2153 if (!test_bit(ADAPTER_STATE_UP, &hba->adapter_state) || in bnx2i_ep_disconnect()
2154 (bnx2i_ep->hba_age != hba->age)) { in bnx2i_ep_disconnect()
2155 bnx2i_ep_active_list_del(hba, bnx2i_ep); in bnx2i_ep_disconnect()
2161 mutex_unlock(&hba->net_dev_lock); in bnx2i_ep_disconnect()
2165 bnx2i_free_qp_resc(hba, bnx2i_ep); in bnx2i_ep_disconnect()
2172 mutex_unlock(&hba->net_dev_lock); in bnx2i_ep_disconnect()
2174 wake_up_interruptible(&hba->eh_wait); in bnx2i_ep_disconnect()
2185 struct bnx2i_hba *hba = iscsi_host_priv(shost); in bnx2i_nl_set_path() local
2190 hba->cnic->iscsi_nl_msg_recv(hba->cnic, ISCSI_UEVENT_PATH_UPDATE, buf, in bnx2i_nl_set_path()