Lines Matching refs:cp
190 struct cnic_local *cp = dev->cnic_priv; in cnic_ctx_wr() local
191 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_ctx_wr()
205 struct cnic_local *cp = dev->cnic_priv; in cnic_ctx_tbl_wr() local
206 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_ctx_tbl_wr()
219 struct cnic_local *cp = dev->cnic_priv; in cnic_ring_ctl() local
220 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_ring_ctl()
237 struct cnic_local *cp = dev->cnic_priv; in cnic_reg_wr_ind() local
238 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_reg_wr_ind()
251 struct cnic_local *cp = dev->cnic_priv; in cnic_reg_rd_ind() local
252 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_reg_rd_ind()
265 struct cnic_local *cp = dev->cnic_priv; in cnic_ulp_ctl() local
266 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_ulp_ctl()
292 struct cnic_local *cp = dev->cnic_priv; in cnic_spq_completion() local
293 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_spq_completion()
302 static int cnic_get_l5_cid(struct cnic_local *cp, u32 cid, u32 *l5_cid) in cnic_get_l5_cid() argument
306 if (!cp->ctx_tbl) in cnic_get_l5_cid()
309 for (i = 0; i < cp->max_cid_space; i++) { in cnic_get_l5_cid()
310 if (cp->ctx_tbl[i].cid == cid) { in cnic_get_l5_cid()
318 static int cnic_send_nlmsg(struct cnic_local *cp, u32 type, in cnic_send_nlmsg() argument
326 struct cnic_uio_dev *udev = cp->udev; in cnic_send_nlmsg()
355 ulp_ops = rcu_dereference(cp->ulp_ops[CNIC_ULP_ISCSI]); in cnic_send_nlmsg()
358 cp->ulp_handle[CNIC_ULP_ISCSI], in cnic_send_nlmsg()
379 struct cnic_local *cp; in cnic_iscsi_nl_msg_recv() local
388 cp = dev->cnic_priv; in cnic_iscsi_nl_msg_recv()
393 if (!rcu_access_pointer(cp->ulp_ops[CNIC_ULP_L4])) { in cnic_iscsi_nl_msg_recv()
397 csk = &cp->csk_tbl[l5_cid]; in cnic_iscsi_nl_msg_recv()
417 cnic_cm_upcall(cp, csk, in cnic_iscsi_nl_msg_recv()
491 struct cnic_local *cp = dev->cnic_priv; in cnic_register_driver() local
493 clear_bit(ULP_F_INIT, &cp->ulp_flags[ulp_type]); in cnic_register_driver()
504 struct cnic_local *cp = dev->cnic_priv; in cnic_register_driver() local
506 if (!test_and_set_bit(ULP_F_INIT, &cp->ulp_flags[ulp_type])) in cnic_register_driver()
533 struct cnic_local *cp = dev->cnic_priv; in cnic_unregister_driver() local
535 if (rcu_access_pointer(cp->ulp_ops[ulp_type])) { in cnic_unregister_driver()
569 struct cnic_local *cp = dev->cnic_priv; in cnic_register_device() local
583 if (rcu_access_pointer(cp->ulp_ops[ulp_type])) { in cnic_register_device()
590 clear_bit(ULP_F_START, &cp->ulp_flags[ulp_type]); in cnic_register_device()
591 cp->ulp_handle[ulp_type] = ulp_ctx; in cnic_register_device()
593 rcu_assign_pointer(cp->ulp_ops[ulp_type], ulp_ops); in cnic_register_device()
597 if (!test_and_set_bit(ULP_F_START, &cp->ulp_flags[ulp_type])) in cnic_register_device()
598 ulp_ops->cnic_start(cp->ulp_handle[ulp_type]); in cnic_register_device()
611 struct cnic_local *cp = dev->cnic_priv; in cnic_unregister_device() local
620 cnic_send_nlmsg(cp, ISCSI_KEVENT_IF_DOWN, NULL); in cnic_unregister_device()
623 if (rcu_access_pointer(cp->ulp_ops[ulp_type])) { in cnic_unregister_device()
624 RCU_INIT_POINTER(cp->ulp_ops[ulp_type], NULL); in cnic_unregister_device()
639 while (test_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[ulp_type]) && in cnic_unregister_device()
644 if (test_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[ulp_type])) in cnic_unregister_device()
647 if (test_bit(ULP_F_INIT, &cp->ulp_flags[ulp_type])) in cnic_unregister_device()
788 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_dma() local
816 cp->setup_pgtbl(dev, dma); in cnic_alloc_dma()
827 struct cnic_local *cp = dev->cnic_priv; in cnic_free_context() local
830 for (i = 0; i < cp->ctx_blks; i++) { in cnic_free_context()
831 if (cp->ctx_arr[i].ctx) { in cnic_free_context()
832 dma_free_coherent(&dev->pcidev->dev, cp->ctx_blk_size, in cnic_free_context()
833 cp->ctx_arr[i].ctx, in cnic_free_context()
834 cp->ctx_arr[i].mapping); in cnic_free_context()
835 cp->ctx_arr[i].ctx = NULL; in cnic_free_context()
879 struct cnic_local *cp = dev->cnic_priv; in cnic_free_resc() local
880 struct cnic_uio_dev *udev = cp->udev; in cnic_free_resc()
884 cp->udev = NULL; in cnic_free_resc()
890 kfree(cp->ctx_arr); in cnic_free_resc()
891 cp->ctx_arr = NULL; in cnic_free_resc()
892 cp->ctx_blks = 0; in cnic_free_resc()
894 cnic_free_dma(dev, &cp->gbl_buf_info); in cnic_free_resc()
895 cnic_free_dma(dev, &cp->kwq_info); in cnic_free_resc()
896 cnic_free_dma(dev, &cp->kwq_16_data_info); in cnic_free_resc()
897 cnic_free_dma(dev, &cp->kcq2.dma); in cnic_free_resc()
898 cnic_free_dma(dev, &cp->kcq1.dma); in cnic_free_resc()
899 kfree(cp->iscsi_tbl); in cnic_free_resc()
900 cp->iscsi_tbl = NULL; in cnic_free_resc()
901 kfree(cp->ctx_tbl); in cnic_free_resc()
902 cp->ctx_tbl = NULL; in cnic_free_resc()
904 cnic_free_id_tbl(&cp->fcoe_cid_tbl); in cnic_free_resc()
905 cnic_free_id_tbl(&cp->cid_tbl); in cnic_free_resc()
910 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_context() local
912 if (BNX2_CHIP(cp) == BNX2_CHIP_5709) { in cnic_alloc_context()
915 cp->ctx_blk_size = CNIC_PAGE_SIZE; in cnic_alloc_context()
916 cp->cids_per_blk = CNIC_PAGE_SIZE / 128; in cnic_alloc_context()
917 arr_size = BNX2_MAX_CID / cp->cids_per_blk * in cnic_alloc_context()
919 cp->ctx_arr = kzalloc(arr_size, GFP_KERNEL); in cnic_alloc_context()
920 if (cp->ctx_arr == NULL) in cnic_alloc_context()
935 for (j = lo; j < hi; j += cp->cids_per_blk, k++) in cnic_alloc_context()
936 cp->ctx_arr[k].cid = j; in cnic_alloc_context()
939 cp->ctx_blks = k; in cnic_alloc_context()
940 if (cp->ctx_blks >= (BNX2_MAX_CID / cp->cids_per_blk)) { in cnic_alloc_context()
941 cp->ctx_blks = 0; in cnic_alloc_context()
945 for (i = 0; i < cp->ctx_blks; i++) { in cnic_alloc_context()
946 cp->ctx_arr[i].ctx = in cnic_alloc_context()
949 &cp->ctx_arr[i].mapping, in cnic_alloc_context()
951 if (cp->ctx_arr[i].ctx == NULL) in cnic_alloc_context()
1023 struct cnic_local *cp = udev->dev->cnic_priv; in __cnic_alloc_uio_rings() local
1035 udev->l2_buf_size = (cp->l2_rx_ring_size + 1) * cp->l2_single_buf_size; in __cnic_alloc_uio_rings()
1051 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_uio_rings() local
1061 cp->udev = udev; in cnic_alloc_uio_rings()
1082 cp->udev = udev; in cnic_alloc_uio_rings()
1093 struct cnic_local *cp = dev->cnic_priv; in cnic_init_uio() local
1094 struct cnic_uio_dev *udev = cp->udev; in cnic_init_uio()
1110 uinfo->mem[1].addr = (unsigned long) cp->status_blk.gen & in cnic_init_uio()
1112 if (cp->ethdev->drv_state & CNIC_DRV_STATE_USING_MSIX) in cnic_init_uio()
1121 uinfo->mem[1].addr = (unsigned long) cp->bnx2x_def_status_blk & in cnic_init_uio()
1123 uinfo->mem[1].size = sizeof(*cp->bnx2x_def_status_blk); in cnic_init_uio()
1159 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_bnx2_resc() local
1162 ret = cnic_alloc_dma(dev, &cp->kwq_info, KWQ_PAGE_CNT, 1); in cnic_alloc_bnx2_resc()
1165 cp->kwq = (struct kwqe **) cp->kwq_info.pg_arr; in cnic_alloc_bnx2_resc()
1167 ret = cnic_alloc_kcq(dev, &cp->kcq1, true); in cnic_alloc_bnx2_resc()
1192 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_bnx2x_context() local
1194 int ctx_blk_size = cp->ethdev->ctx_blk_size; in cnic_alloc_bnx2x_context()
1197 total_mem = BNX2X_CONTEXT_MEM_SIZE * cp->max_cid_space; in cnic_alloc_bnx2x_context()
1202 if (blks > cp->ethdev->ctx_tbl_len) in cnic_alloc_bnx2x_context()
1205 cp->ctx_arr = kcalloc(blks, sizeof(struct cnic_ctx), GFP_KERNEL); in cnic_alloc_bnx2x_context()
1206 if (cp->ctx_arr == NULL) in cnic_alloc_bnx2x_context()
1209 cp->ctx_blks = blks; in cnic_alloc_bnx2x_context()
1210 cp->ctx_blk_size = ctx_blk_size; in cnic_alloc_bnx2x_context()
1212 cp->ctx_align = 0; in cnic_alloc_bnx2x_context()
1214 cp->ctx_align = ctx_blk_size; in cnic_alloc_bnx2x_context()
1216 cp->cids_per_blk = ctx_blk_size / BNX2X_CONTEXT_MEM_SIZE; in cnic_alloc_bnx2x_context()
1219 cp->ctx_arr[i].ctx = in cnic_alloc_bnx2x_context()
1220 dma_alloc_coherent(&dev->pcidev->dev, cp->ctx_blk_size, in cnic_alloc_bnx2x_context()
1221 &cp->ctx_arr[i].mapping, in cnic_alloc_bnx2x_context()
1223 if (cp->ctx_arr[i].ctx == NULL) in cnic_alloc_bnx2x_context()
1226 if (cp->ctx_align && cp->ctx_blk_size == ctx_blk_size) { in cnic_alloc_bnx2x_context()
1227 if (cp->ctx_arr[i].mapping & (cp->ctx_align - 1)) { in cnic_alloc_bnx2x_context()
1229 cp->ctx_blk_size += cp->ctx_align; in cnic_alloc_bnx2x_context()
1240 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_bnx2x_resc() local
1242 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_alloc_bnx2x_resc()
1245 struct cnic_dma *kwq_16_dma = &cp->kwq_16_data_info; in cnic_alloc_bnx2x_resc()
1247 cp->max_cid_space = MAX_ISCSI_TBL_SZ; in cnic_alloc_bnx2x_resc()
1248 cp->iscsi_start_cid = start_cid; in cnic_alloc_bnx2x_resc()
1249 cp->fcoe_start_cid = start_cid + MAX_ISCSI_TBL_SZ; in cnic_alloc_bnx2x_resc()
1252 cp->max_cid_space += dev->max_fcoe_conn; in cnic_alloc_bnx2x_resc()
1253 cp->fcoe_init_cid = ethdev->fcoe_init_cid; in cnic_alloc_bnx2x_resc()
1254 if (!cp->fcoe_init_cid) in cnic_alloc_bnx2x_resc()
1255 cp->fcoe_init_cid = 0x10; in cnic_alloc_bnx2x_resc()
1258 cp->iscsi_tbl = kcalloc(MAX_ISCSI_TBL_SZ, sizeof(struct cnic_iscsi), in cnic_alloc_bnx2x_resc()
1260 if (!cp->iscsi_tbl) in cnic_alloc_bnx2x_resc()
1263 cp->ctx_tbl = kcalloc(cp->max_cid_space, sizeof(struct cnic_context), in cnic_alloc_bnx2x_resc()
1265 if (!cp->ctx_tbl) in cnic_alloc_bnx2x_resc()
1269 cp->ctx_tbl[i].proto.iscsi = &cp->iscsi_tbl[i]; in cnic_alloc_bnx2x_resc()
1270 cp->ctx_tbl[i].ulp_proto_id = CNIC_ULP_ISCSI; in cnic_alloc_bnx2x_resc()
1273 for (i = MAX_ISCSI_TBL_SZ; i < cp->max_cid_space; i++) in cnic_alloc_bnx2x_resc()
1274 cp->ctx_tbl[i].ulp_proto_id = CNIC_ULP_FCOE; in cnic_alloc_bnx2x_resc()
1276 pages = CNIC_PAGE_ALIGN(cp->max_cid_space * CNIC_KWQ16_DATA_SIZE) / in cnic_alloc_bnx2x_resc()
1284 for (i = 0, j = 0; i < cp->max_cid_space; i++) { in cnic_alloc_bnx2x_resc()
1287 cp->ctx_tbl[i].kwqe_data = kwq_16_dma->pg_arr[j] + off; in cnic_alloc_bnx2x_resc()
1288 cp->ctx_tbl[i].kwqe_data_mapping = kwq_16_dma->pg_map_arr[j] + in cnic_alloc_bnx2x_resc()
1295 ret = cnic_alloc_kcq(dev, &cp->kcq1, false); in cnic_alloc_bnx2x_resc()
1300 ret = cnic_alloc_kcq(dev, &cp->kcq2, true); in cnic_alloc_bnx2x_resc()
1306 ret = cnic_alloc_dma(dev, &cp->gbl_buf_info, pages, 0); in cnic_alloc_bnx2x_resc()
1314 if (cp->ethdev->drv_state & CNIC_DRV_STATE_NO_ISCSI) in cnic_alloc_bnx2x_resc()
1317 cp->bnx2x_def_status_blk = cp->ethdev->irq_arr[1].status_blk; in cnic_alloc_bnx2x_resc()
1319 cp->l2_rx_ring_size = 15; in cnic_alloc_bnx2x_resc()
1336 static inline u32 cnic_kwq_avail(struct cnic_local *cp) in cnic_kwq_avail() argument
1338 return cp->max_kwq_idx - in cnic_kwq_avail()
1339 ((cp->kwq_prod_idx - cp->kwq_con_idx) & cp->max_kwq_idx); in cnic_kwq_avail()
1345 struct cnic_local *cp = dev->cnic_priv; in cnic_submit_bnx2_kwqes() local
1352 spin_lock_bh(&cp->cnic_ulp_lock); in cnic_submit_bnx2_kwqes()
1353 if (num_wqes > cnic_kwq_avail(cp) && in cnic_submit_bnx2_kwqes()
1354 !test_bit(CNIC_LCL_FL_KWQ_INIT, &cp->cnic_local_flags)) { in cnic_submit_bnx2_kwqes()
1355 spin_unlock_bh(&cp->cnic_ulp_lock); in cnic_submit_bnx2_kwqes()
1359 clear_bit(CNIC_LCL_FL_KWQ_INIT, &cp->cnic_local_flags); in cnic_submit_bnx2_kwqes()
1361 prod = cp->kwq_prod_idx; in cnic_submit_bnx2_kwqes()
1364 prod_qe = &cp->kwq[KWQ_PG(sw_prod)][KWQ_IDX(sw_prod)]; in cnic_submit_bnx2_kwqes()
1369 cp->kwq_prod_idx = prod; in cnic_submit_bnx2_kwqes()
1371 CNIC_WR16(dev, cp->kwq_io_addr, cp->kwq_prod_idx); in cnic_submit_bnx2_kwqes()
1373 spin_unlock_bh(&cp->cnic_ulp_lock); in cnic_submit_bnx2_kwqes()
1377 static void *cnic_get_kwqe_16_data(struct cnic_local *cp, u32 l5_cid, in cnic_get_kwqe_16_data() argument
1380 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_get_kwqe_16_data()
1392 struct cnic_local *cp = dev->cnic_priv; in cnic_submit_kwqe_16() local
1414 spin_lock_bh(&cp->cnic_ulp_lock); in cnic_submit_kwqe_16()
1415 ret = cp->ethdev->drv_submit_kwqes_16(dev->netdev, kwq, 1); in cnic_submit_kwqe_16()
1416 spin_unlock_bh(&cp->cnic_ulp_lock); in cnic_submit_kwqe_16()
1427 struct cnic_local *cp = dev->cnic_priv; in cnic_reply_bnx2x_kcqes() local
1431 ulp_ops = rcu_dereference(cp->ulp_ops[ulp_type]); in cnic_reply_bnx2x_kcqes()
1433 ulp_ops->indicate_kcqes(cp->ulp_handle[ulp_type], in cnic_reply_bnx2x_kcqes()
1462 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_iscsi_init1() local
1468 cp->num_iscsi_tasks = req1->num_tasks_per_conn; in cnic_bnx2x_iscsi_init1()
1469 cp->num_ccells = req1->num_ccells_per_conn; in cnic_bnx2x_iscsi_init1()
1470 cp->task_array_size = BNX2X_ISCSI_TASK_CONTEXT_SIZE * in cnic_bnx2x_iscsi_init1()
1471 cp->num_iscsi_tasks; in cnic_bnx2x_iscsi_init1()
1472 cp->r2tq_size = cp->num_iscsi_tasks * BNX2X_ISCSI_MAX_PENDING_R2TS * in cnic_bnx2x_iscsi_init1()
1474 cp->hq_size = cp->num_ccells * BNX2X_ISCSI_HQ_BD_SIZE; in cnic_bnx2x_iscsi_init1()
1475 pages = CNIC_PAGE_ALIGN(cp->hq_size) / CNIC_PAGE_SIZE; in cnic_bnx2x_iscsi_init1()
1477 cp->num_cqs = req1->num_cqs; in cnic_bnx2x_iscsi_init1()
1509 cp->num_iscsi_tasks * BNX2X_ISCSI_MAX_PENDING_R2TS); in cnic_bnx2x_iscsi_init1()
1524 cp->num_iscsi_tasks * BNX2X_ISCSI_MAX_PENDING_R2TS); in cnic_bnx2x_iscsi_init1()
1590 struct cnic_local *cp = dev->cnic_priv; in cnic_free_bnx2x_conn_resc() local
1591 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_free_bnx2x_conn_resc()
1599 cnic_free_id(&cp->cid_tbl, ctx->cid); in cnic_free_bnx2x_conn_resc()
1601 cnic_free_id(&cp->fcoe_cid_tbl, ctx->cid); in cnic_free_bnx2x_conn_resc()
1611 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_bnx2x_conn_resc() local
1612 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_alloc_bnx2x_conn_resc()
1616 cid = cnic_alloc_new_id(&cp->fcoe_cid_tbl); in cnic_alloc_bnx2x_conn_resc()
1625 cid = cnic_alloc_new_id(&cp->cid_tbl); in cnic_alloc_bnx2x_conn_resc()
1632 pages = CNIC_PAGE_ALIGN(cp->task_array_size) / CNIC_PAGE_SIZE; in cnic_alloc_bnx2x_conn_resc()
1638 pages = CNIC_PAGE_ALIGN(cp->r2tq_size) / CNIC_PAGE_SIZE; in cnic_alloc_bnx2x_conn_resc()
1643 pages = CNIC_PAGE_ALIGN(cp->hq_size) / CNIC_PAGE_SIZE; in cnic_alloc_bnx2x_conn_resc()
1658 struct cnic_local *cp = dev->cnic_priv; in cnic_get_bnx2x_ctx() local
1659 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_get_bnx2x_ctx()
1660 int blk = (cid - ethdev->starting_cid) / cp->cids_per_blk; in cnic_get_bnx2x_ctx()
1661 int off = (cid - ethdev->starting_cid) % cp->cids_per_blk; in cnic_get_bnx2x_ctx()
1666 if (cp->ctx_align) { in cnic_get_bnx2x_ctx()
1667 unsigned long mask = cp->ctx_align - 1; in cnic_get_bnx2x_ctx()
1669 if (cp->ctx_arr[blk].mapping & mask) in cnic_get_bnx2x_ctx()
1670 align_off = cp->ctx_align - in cnic_get_bnx2x_ctx()
1671 (cp->ctx_arr[blk].mapping & mask); in cnic_get_bnx2x_ctx()
1673 ctx_map = cp->ctx_arr[blk].mapping + align_off + in cnic_get_bnx2x_ctx()
1675 ctx = cp->ctx_arr[blk].ctx + align_off + in cnic_get_bnx2x_ctx()
1688 struct cnic_local *cp = dev->cnic_priv; in cnic_setup_bnx2x_ctx() local
1695 struct cnic_context *ctx = &cp->ctx_tbl[req1->iscsi_conn_id]; in cnic_setup_bnx2x_ctx()
1807 for (i = 1, j = 1; i < cp->num_cqs; i++, j++) { in cnic_setup_bnx2x_ctx()
1830 ictx->ustorm_st_context.num_cqs = cp->num_cqs; in cnic_setup_bnx2x_ctx()
1854 ictx->cstorm_st_context.cq_proc_en_bit_map = (1 << cp->num_cqs) - 1; in cnic_setup_bnx2x_ctx()
1855 for (i = 0; i < cp->num_cqs; i++) { in cnic_setup_bnx2x_ctx()
1877 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_iscsi_ofld1() local
1907 ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_iscsi_ofld1()
1914 if (atomic_inc_return(&cp->iscsi_conn) > dev->max_iscsi_conn) { in cnic_bnx2x_iscsi_ofld1()
1915 atomic_dec(&cp->iscsi_conn); in cnic_bnx2x_iscsi_ofld1()
1920 atomic_dec(&cp->iscsi_conn); in cnic_bnx2x_iscsi_ofld1()
1927 atomic_dec(&cp->iscsi_conn); in cnic_bnx2x_iscsi_ofld1()
1932 kcqe.iscsi_conn_context_id = BNX2X_HW_CID(bp, cp->ctx_tbl[l5_cid].cid); in cnic_bnx2x_iscsi_ofld1()
1943 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_iscsi_update() local
1951 if (cnic_get_l5_cid(cp, cid, &l5_cid) != 0) in cnic_bnx2x_iscsi_update()
1954 data = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_iscsi_update()
1967 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_destroy_ramrod() local
1969 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_destroy_ramrod()
1993 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_iscsi_destroy() local
1997 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_iscsi_destroy()
2012 queue_delayed_work(cnic_wq, &cp->delete_task, delta); in cnic_bnx2x_iscsi_destroy()
2022 atomic_dec(&cp->iscsi_conn); in cnic_bnx2x_iscsi_destroy()
2122 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_connect() local
2131 struct cnic_sock *csk = &cp->csk_tbl[l5_cid]; in cnic_bnx2x_connect()
2132 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_connect()
2154 conn_buf = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_connect()
2260 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_stat() local
2266 cid = BNX2X_HW_CID(bp, cp->fcoe_init_cid); in cnic_bnx2x_fcoe_stat()
2268 fcoe_stat = cnic_get_kwqe_16_data(cp, BNX2X_FCOE_L5_CID_BASE, &l5_data); in cnic_bnx2x_fcoe_stat()
2284 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_init1() local
2313 fcoe_init = cnic_get_kwqe_16_data(cp, BNX2X_FCOE_L5_CID_BASE, &l5_data); in cnic_bnx2x_fcoe_init1()
2321 fcoe_init->eq_pbl_base.lo = cp->kcq2.dma.pgtbl_map & 0xffffffff; in cnic_bnx2x_fcoe_init1()
2322 fcoe_init->eq_pbl_base.hi = (u64) cp->kcq2.dma.pgtbl_map >> 32; in cnic_bnx2x_fcoe_init1()
2323 fcoe_init->eq_pbl_size = cp->kcq2.dma.num_pages; in cnic_bnx2x_fcoe_init1()
2325 fcoe_init->sb_num = cp->status_blk_num; in cnic_bnx2x_fcoe_init1()
2328 cp->kcq2.sw_prod_idx = 0; in cnic_bnx2x_fcoe_init1()
2330 cid = BNX2X_HW_CID(bp, cp->fcoe_init_cid); in cnic_bnx2x_fcoe_init1()
2342 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_ofld1() local
2373 ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_fcoe_ofld1()
2400 fcoe_offload = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_fcoe_ofld1()
2439 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_enable() local
2449 fcoe_enable = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_fcoe_enable()
2467 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_disable() local
2481 fcoe_disable = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_fcoe_disable()
2498 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_destroy() local
2511 ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_fcoe_destroy()
2528 queue_delayed_work(cnic_wq, &cp->delete_task, msecs_to_jiffies(2000)); in cnic_bnx2x_fcoe_destroy()
2541 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_delete_wait() local
2544 for (i = start_cid; i < cp->max_cid_space; i++) { in cnic_bnx2x_delete_wait()
2545 struct cnic_context *ctx = &cp->ctx_tbl[i]; in cnic_bnx2x_delete_wait()
2566 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_fw_destroy() local
2573 cid = BNX2X_HW_CID(bp, cp->fcoe_init_cid); in cnic_bnx2x_fcoe_fw_destroy()
2583 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_kwqe_err() local
2626 cnic_get_l5_cid(cp, BNX2X_SW_CID(cid), &kcqe.kcqe_info0); in cnic_bnx2x_kwqe_err()
2645 cnic_get_l5_cid(cp, BNX2X_SW_CID(cid), &l4kcqe->conn_id); in cnic_bnx2x_kwqe_err()
2829 struct cnic_local *cp = dev->cnic_priv; in service_kcqes() local
2837 u32 kcqe_op_flag = cp->completed_kcq[i]->kcqe_op_flag; in service_kcqes()
2844 u32 next_op = cp->completed_kcq[i + j]->kcqe_op_flag; in service_kcqes()
2871 ulp_ops = rcu_dereference(cp->ulp_ops[ulp_type]); in service_kcqes()
2873 ulp_ops->indicate_kcqes(cp->ulp_handle[ulp_type], in service_kcqes()
2874 cp->completed_kcq + i, j); in service_kcqes()
2888 struct cnic_local *cp = dev->cnic_priv; in cnic_get_kcqes() local
2900 cp->completed_kcq[kcqe_cnt++] = kcqe; in cnic_get_kcqes()
2913 static int cnic_l2_completion(struct cnic_local *cp) in cnic_l2_completion() argument
2916 struct cnic_uio_dev *udev = cp->udev; in cnic_l2_completion()
2922 if (!test_bit(CNIC_F_BNX2X_CLASS, &cp->dev->flags)) in cnic_l2_completion()
2925 hw_cons = *cp->rx_cons_ptr; in cnic_l2_completion()
2929 sw_cons = cp->rx_cons; in cnic_l2_completion()
2947 static void cnic_chk_pkt_rings(struct cnic_local *cp) in cnic_chk_pkt_rings() argument
2952 if (!test_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags)) in cnic_chk_pkt_rings()
2955 rx_cons = *cp->rx_cons_ptr; in cnic_chk_pkt_rings()
2956 tx_cons = *cp->tx_cons_ptr; in cnic_chk_pkt_rings()
2957 if (cp->tx_cons != tx_cons || cp->rx_cons != rx_cons) { in cnic_chk_pkt_rings()
2958 if (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags)) in cnic_chk_pkt_rings()
2959 comp = cnic_l2_completion(cp); in cnic_chk_pkt_rings()
2961 cp->tx_cons = tx_cons; in cnic_chk_pkt_rings()
2962 cp->rx_cons = rx_cons; in cnic_chk_pkt_rings()
2964 if (cp->udev) in cnic_chk_pkt_rings()
2965 uio_event_notify(&cp->udev->cnic_uinfo); in cnic_chk_pkt_rings()
2968 clear_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags); in cnic_chk_pkt_rings()
2973 struct cnic_local *cp = dev->cnic_priv; in cnic_service_bnx2_queues() local
2974 u32 status_idx = (u16) *cp->kcq1.status_idx_ptr; in cnic_service_bnx2_queues()
2979 cp->kwq_con_idx = *cp->kwq_con_idx_ptr; in cnic_service_bnx2_queues()
2981 while ((kcqe_cnt = cnic_get_kcqes(dev, &cp->kcq1))) { in cnic_service_bnx2_queues()
2987 status_idx = (u16) *cp->kcq1.status_idx_ptr; in cnic_service_bnx2_queues()
2990 cp->kwq_con_idx = *cp->kwq_con_idx_ptr; in cnic_service_bnx2_queues()
2993 CNIC_WR16(dev, cp->kcq1.io_addr, cp->kcq1.sw_prod_idx); in cnic_service_bnx2_queues()
2995 cnic_chk_pkt_rings(cp); in cnic_service_bnx2_queues()
3016 struct cnic_local *cp = dev->cnic_priv; in cnic_service_bnx2_msix() local
3018 cp->last_status_idx = cnic_service_bnx2_queues(dev); in cnic_service_bnx2_msix()
3020 CNIC_WR(dev, BNX2_PCICFG_INT_ACK_CMD, cp->int_num | in cnic_service_bnx2_msix()
3021 BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | cp->last_status_idx); in cnic_service_bnx2_msix()
3026 struct cnic_local *cp = dev->cnic_priv; in cnic_doirq() local
3029 u16 prod = cp->kcq1.sw_prod_idx & MAX_KCQ_IDX; in cnic_doirq()
3031 prefetch(cp->status_blk.gen); in cnic_doirq()
3032 prefetch(&cp->kcq1.kcq[KCQ_PG(prod)][KCQ_IDX(prod)]); in cnic_doirq()
3034 tasklet_schedule(&cp->cnic_irq_task); in cnic_doirq()
3041 struct cnic_local *cp = dev->cnic_priv; in cnic_irq() local
3043 if (cp->ack_int) in cnic_irq()
3044 cp->ack_int(dev); in cnic_irq()
3087 struct cnic_local *cp = dev->cnic_priv; in cnic_ack_bnx2x_msix() local
3089 cnic_ack_bnx2x_int(dev, cp->bnx2x_igu_sb_id, CSTORM_ID, 0, in cnic_ack_bnx2x_msix()
3095 struct cnic_local *cp = dev->cnic_priv; in cnic_ack_bnx2x_e2_msix() local
3097 cnic_ack_igu_sb(dev, cp->bnx2x_igu_sb_id, IGU_SEG_ACCESS_DEF, 0, in cnic_ack_bnx2x_e2_msix()
3103 struct cnic_local *cp = dev->cnic_priv; in cnic_arm_bnx2x_msix() local
3105 cnic_ack_bnx2x_int(dev, cp->bnx2x_igu_sb_id, CSTORM_ID, idx, in cnic_arm_bnx2x_msix()
3111 struct cnic_local *cp = dev->cnic_priv; in cnic_arm_bnx2x_e2_msix() local
3113 cnic_ack_igu_sb(dev, cp->bnx2x_igu_sb_id, IGU_SEG_ACCESS_DEF, idx, in cnic_arm_bnx2x_e2_msix()
3141 struct cnic_local *cp = dev->cnic_priv; in cnic_service_bnx2x_bh() local
3149 status_idx = cnic_service_bnx2x_kcq(dev, &cp->kcq1); in cnic_service_bnx2x_bh()
3151 CNIC_WR16(dev, cp->kcq1.io_addr, in cnic_service_bnx2x_bh()
3152 cp->kcq1.sw_prod_idx + MAX_KCQ_IDX); in cnic_service_bnx2x_bh()
3155 cp->arm_int(dev, status_idx); in cnic_service_bnx2x_bh()
3159 new_status_idx = cnic_service_bnx2x_kcq(dev, &cp->kcq2); in cnic_service_bnx2x_bh()
3164 CNIC_WR16(dev, cp->kcq2.io_addr, cp->kcq2.sw_prod_idx + in cnic_service_bnx2x_bh()
3167 cnic_ack_igu_sb(dev, cp->bnx2x_igu_sb_id, IGU_SEG_ACCESS_DEF, in cnic_service_bnx2x_bh()
3177 struct cnic_local *cp = dev->cnic_priv; in cnic_service_bnx2x() local
3179 if (!(cp->ethdev->drv_state & CNIC_DRV_STATE_USING_MSIX)) in cnic_service_bnx2x()
3182 cnic_chk_pkt_rings(cp); in cnic_service_bnx2x()
3187 static void cnic_ulp_stop_one(struct cnic_local *cp, int if_type) in cnic_ulp_stop_one() argument
3192 cnic_send_nlmsg(cp, ISCSI_KEVENT_IF_DOWN, NULL); in cnic_ulp_stop_one()
3195 ulp_ops = rcu_dereference_protected(cp->ulp_ops[if_type], in cnic_ulp_stop_one()
3201 set_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_ulp_stop_one()
3204 if (test_and_clear_bit(ULP_F_START, &cp->ulp_flags[if_type])) in cnic_ulp_stop_one()
3205 ulp_ops->cnic_stop(cp->ulp_handle[if_type]); in cnic_ulp_stop_one()
3207 clear_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_ulp_stop_one()
3212 struct cnic_local *cp = dev->cnic_priv; in cnic_ulp_stop() local
3216 cnic_ulp_stop_one(cp, if_type); in cnic_ulp_stop()
3221 struct cnic_local *cp = dev->cnic_priv; in cnic_ulp_start() local
3228 ulp_ops = rcu_dereference_protected(cp->ulp_ops[if_type], in cnic_ulp_start()
3234 set_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_ulp_start()
3237 if (!test_and_set_bit(ULP_F_START, &cp->ulp_flags[if_type])) in cnic_ulp_start()
3238 ulp_ops->cnic_start(cp->ulp_handle[if_type]); in cnic_ulp_start()
3240 clear_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_ulp_start()
3246 struct cnic_local *cp = dev->cnic_priv; in cnic_copy_ulp_stats() local
3251 ulp_ops = rcu_dereference_protected(cp->ulp_ops[ulp_type], in cnic_copy_ulp_stats()
3254 rc = ulp_ops->cnic_get_stats(cp->ulp_handle[ulp_type]); in cnic_copy_ulp_stats()
3284 struct cnic_local *cp = dev->cnic_priv; in cnic_ctl() local
3285 set_bit(CNIC_LCL_FL_STOP_ISCSI, &cp->cnic_local_flags); in cnic_ctl()
3286 queue_delayed_work(cnic_wq, &cp->delete_task, 0); in cnic_ctl()
3293 struct cnic_local *cp = dev->cnic_priv; in cnic_ctl() local
3298 if (cnic_get_l5_cid(cp, cid, &l5_cid) == 0) { in cnic_ctl()
3299 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_ctl()
3331 struct cnic_local *cp = dev->cnic_priv; in cnic_ulp_init() local
3345 if (!test_and_set_bit(ULP_F_INIT, &cp->ulp_flags[i])) in cnic_ulp_init()
3355 struct cnic_local *cp = dev->cnic_priv; in cnic_ulp_exit() local
3369 if (test_and_clear_bit(ULP_F_INIT, &cp->ulp_flags[i])) in cnic_ulp_exit()
3585 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_create() local
3591 if (cp->ctx_tbl) { in cnic_cm_create()
3592 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_cm_create()
3598 csk1 = &cp->csk_tbl[l5_cid]; in cnic_cm_create()
3630 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_cleanup() local
3632 cnic_free_id(&cp->csk_port_tbl, be16_to_cpu(csk->src_port)); in cnic_cm_cleanup()
3752 struct cnic_local *cp = dev->cnic_priv; in cnic_resolve_addr() local
3754 return cnic_send_nlmsg(cp, ISCSI_KEVENT_PATH_REQ, csk); in cnic_resolve_addr()
3760 struct cnic_local *cp = dev->cnic_priv; in cnic_get_route() local
3808 if (cnic_alloc_id(&cp->csk_port_tbl, port_id)) in cnic_get_route()
3814 port_id = cnic_alloc_new_id(&cp->csk_port_tbl); in cnic_get_route()
3837 struct cnic_local *cp = csk->dev->cnic_priv; in cnic_cm_connect() local
3840 if (cp->ethdev->drv_state & CNIC_DRV_STATE_NO_ISCSI) in cnic_cm_connect()
3866 struct cnic_local *cp = csk->dev->cnic_priv; in cnic_cm_abort() local
3879 cp->close_conn(csk, opcode); in cnic_cm_abort()
3909 static void cnic_cm_upcall(struct cnic_local *cp, struct cnic_sock *csk, in cnic_cm_upcall() argument
3916 ulp_ops = rcu_dereference(cp->ulp_ops[ulp_type]); in cnic_cm_upcall()
3945 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_process_offld_pg() local
3948 struct cnic_sock *csk = &cp->csk_tbl[l5_cid]; in cnic_cm_process_offld_pg()
3961 cnic_cm_upcall(cp, csk, in cnic_cm_process_offld_pg()
3976 struct cnic_local *cp = dev->cnic_priv; in cnic_process_fcoe_term_conn() local
3979 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_process_fcoe_term_conn()
3988 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_process_kcqe() local
4010 csk = &cp->csk_tbl[l5_cid]; in cnic_cm_process_kcqe()
4022 cnic_cm_upcall(cp, csk, in cnic_cm_process_kcqe()
4035 cnic_cm_upcall(cp, csk, opcode); in cnic_cm_process_kcqe()
4057 cp->close_conn(csk, opcode); in cnic_cm_process_kcqe()
4065 cp->close_conn(csk, L4_KCQE_OPCODE_VALUE_RESET_COMP); in cnic_cm_process_kcqe()
4067 cnic_cm_upcall(cp, csk, opcode); in cnic_cm_process_kcqe()
4088 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_free_mem() local
4090 kvfree(cp->csk_tbl); in cnic_cm_free_mem()
4091 cp->csk_tbl = NULL; in cnic_cm_free_mem()
4092 cnic_free_id_tbl(&cp->csk_port_tbl); in cnic_cm_free_mem()
4097 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_alloc_mem() local
4101 cp->csk_tbl = kvcalloc(MAX_CM_SK_TBL_SZ, sizeof(struct cnic_sock), in cnic_cm_alloc_mem()
4103 if (!cp->csk_tbl) in cnic_cm_alloc_mem()
4107 atomic_set(&cp->csk_tbl[i].ref_count, 0); in cnic_cm_alloc_mem()
4111 if (cnic_init_id_tbl(&cp->csk_port_tbl, CNIC_LOCAL_PORT_RANGE, in cnic_cm_alloc_mem()
4148 struct cnic_local *cp = dev->cnic_priv; in cnic_close_bnx2_conn() local
4151 cnic_cm_upcall(cp, csk, opcode); in cnic_close_bnx2_conn()
4158 cnic_cm_upcall(cp, csk, opcode); in cnic_close_bnx2_conn()
4177 struct cnic_local *cp = dev->cnic_priv; in cnic_close_bnx2x_conn() local
4178 struct cnic_context *ctx = &cp->ctx_tbl[csk->l5_cid]; in cnic_close_bnx2x_conn()
4211 cnic_cm_upcall(cp, csk, csk->state); in cnic_close_bnx2x_conn()
4217 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_stop_bnx2x_hw() local
4219 if (!cp->ctx_tbl) in cnic_cm_stop_bnx2x_hw()
4227 cancel_delayed_work(&cp->delete_task); in cnic_cm_stop_bnx2x_hw()
4230 if (atomic_read(&cp->iscsi_conn) != 0) in cnic_cm_stop_bnx2x_hw()
4232 atomic_read(&cp->iscsi_conn)); in cnic_cm_stop_bnx2x_hw()
4269 struct cnic_local *cp; in cnic_delete_task() local
4274 cp = container_of(work, struct cnic_local, delete_task.work); in cnic_delete_task()
4275 dev = cp->dev; in cnic_delete_task()
4277 if (test_and_clear_bit(CNIC_LCL_FL_STOP_ISCSI, &cp->cnic_local_flags)) { in cnic_delete_task()
4280 cnic_ulp_stop_one(cp, CNIC_ULP_ISCSI); in cnic_delete_task()
4284 cp->ethdev->drv_ctl(dev->netdev, &info); in cnic_delete_task()
4287 for (i = 0; i < cp->max_cid_space; i++) { in cnic_delete_task()
4288 struct cnic_context *ctx = &cp->ctx_tbl[i]; in cnic_delete_task()
4308 atomic_dec(&cp->iscsi_conn); in cnic_delete_task()
4315 queue_delayed_work(cnic_wq, &cp->delete_task, in cnic_delete_task()
4322 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_open() local
4329 err = cp->start_cm(dev); in cnic_cm_open()
4334 INIT_DELAYED_WORK(&cp->delete_task, cnic_delete_task); in cnic_cm_open()
4343 cp->ulp_handle[CNIC_ULP_L4] = dev; in cnic_cm_open()
4344 rcu_assign_pointer(cp->ulp_ops[CNIC_ULP_L4], &cm_ulp_ops); in cnic_cm_open()
4354 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_shutdown() local
4357 if (!cp->csk_tbl) in cnic_cm_shutdown()
4361 struct cnic_sock *csk = &cp->csk_tbl[i]; in cnic_cm_shutdown()
4384 struct cnic_local *cp = dev->cnic_priv; in cnic_setup_5709_context() local
4388 if (BNX2_CHIP(cp) != BNX2_CHIP_5709) in cnic_setup_5709_context()
4391 for (i = 0; i < cp->ctx_blks; i++) { in cnic_setup_5709_context()
4393 u32 idx = cp->ctx_arr[i].cid / cp->cids_per_blk; in cnic_setup_5709_context()
4396 memset(cp->ctx_arr[i].ctx, 0, CNIC_PAGE_SIZE); in cnic_setup_5709_context()
4399 (cp->ctx_arr[i].mapping & 0xffffffff) | valid_bit); in cnic_setup_5709_context()
4401 (u64) cp->ctx_arr[i].mapping >> 32); in cnic_setup_5709_context()
4421 struct cnic_local *cp = dev->cnic_priv; in cnic_free_irq() local
4422 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_free_irq()
4425 cp->disable_int_sync(dev); in cnic_free_irq()
4426 tasklet_kill(&cp->cnic_irq_task); in cnic_free_irq()
4433 struct cnic_local *cp = dev->cnic_priv; in cnic_request_irq() local
4434 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_request_irq()
4439 tasklet_disable(&cp->cnic_irq_task); in cnic_request_irq()
4446 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2_irq() local
4447 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_init_bnx2_irq()
4451 int sblk_num = cp->status_blk_num; in cnic_init_bnx2_irq()
4461 cp->last_status_idx = cp->status_blk.bnx2->status_idx; in cnic_init_bnx2_irq()
4462 tasklet_init(&cp->cnic_irq_task, cnic_service_bnx2_msix, in cnic_init_bnx2_irq()
4468 while (cp->status_blk.bnx2->status_completion_producer_index && in cnic_init_bnx2_irq()
4476 if (cp->status_blk.bnx2->status_completion_producer_index) { in cnic_init_bnx2_irq()
4482 struct status_block *sblk = cp->status_blk.gen; in cnic_init_bnx2_irq()
4506 struct cnic_local *cp = dev->cnic_priv; in cnic_enable_bnx2_int() local
4507 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_enable_bnx2_int()
4512 CNIC_WR(dev, BNX2_PCICFG_INT_ACK_CMD, cp->int_num | in cnic_enable_bnx2_int()
4513 BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | cp->last_status_idx); in cnic_enable_bnx2_int()
4518 struct cnic_local *cp = dev->cnic_priv; in cnic_disable_bnx2_int_sync() local
4519 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_disable_bnx2_int_sync()
4524 CNIC_WR(dev, BNX2_PCICFG_INT_ACK_CMD, cp->int_num | in cnic_disable_bnx2_int_sync()
4532 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2_tx_ring() local
4533 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_init_bnx2_tx_ring()
4534 struct cnic_uio_dev *udev = cp->udev; in cnic_init_bnx2_tx_ring()
4540 struct status_block *s_blk = cp->status_blk.gen; in cnic_init_bnx2_tx_ring()
4542 sb_id = cp->status_blk_num; in cnic_init_bnx2_tx_ring()
4544 cp->tx_cons_ptr = &s_blk->status_tx_quick_consumer_index2; in cnic_init_bnx2_tx_ring()
4546 struct status_block_msix *sblk = cp->status_blk.bnx2; in cnic_init_bnx2_tx_ring()
4551 cp->tx_cons_ptr = &sblk->status_tx_quick_consumer_index; in cnic_init_bnx2_tx_ring()
4553 cp->tx_cons = *cp->tx_cons_ptr; in cnic_init_bnx2_tx_ring()
4556 if (BNX2_CHIP(cp) == BNX2_CHIP_5709) { in cnic_init_bnx2_tx_ring()
4599 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2_rx_ring() local
4600 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_init_bnx2_rx_ring()
4601 struct cnic_uio_dev *udev = cp->udev; in cnic_init_bnx2_rx_ring()
4605 struct status_block *s_blk = cp->status_blk.gen; in cnic_init_bnx2_rx_ring()
4608 sb_id = cp->status_blk_num; in cnic_init_bnx2_rx_ring()
4610 cp->rx_cons_ptr = &s_blk->status_rx_quick_consumer_index2; in cnic_init_bnx2_rx_ring()
4614 struct status_block_msix *sblk = cp->status_blk.bnx2; in cnic_init_bnx2_rx_ring()
4616 cp->rx_cons_ptr = &sblk->status_rx_quick_consumer_index; in cnic_init_bnx2_rx_ring()
4621 while (!(*cp->rx_cons_ptr != 0) && i < 10) { in cnic_init_bnx2_rx_ring()
4627 cp->rx_cons = *cp->rx_cons_ptr; in cnic_init_bnx2_rx_ring()
4643 int n = (i % cp->l2_rx_ring_size) + 1; in cnic_init_bnx2_rx_ring()
4645 buf_map = udev->l2_buf_map + (n * cp->l2_single_buf_size); in cnic_init_bnx2_rx_ring()
4646 rxbd->rx_bd_len = cp->l2_single_buf_size; in cnic_init_bnx2_rx_ring()
4677 struct cnic_local *cp = dev->cnic_priv; in cnic_set_bnx2_mac() local
4680 val = cp->func << 2; in cnic_set_bnx2_mac()
4682 cp->shmem_base = cnic_reg_rd_ind(dev, BNX2_SHM_HDR_ADDR_0 + val); in cnic_set_bnx2_mac()
4684 val = cnic_reg_rd_ind(dev, cp->shmem_base + in cnic_set_bnx2_mac()
4691 val = cnic_reg_rd_ind(dev, cp->shmem_base + in cnic_set_bnx2_mac()
4701 if (BNX2_CHIP(cp) != BNX2_CHIP_5709) in cnic_set_bnx2_mac()
4711 struct cnic_local *cp = dev->cnic_priv; in cnic_start_bnx2_hw() local
4712 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_start_bnx2_hw()
4713 struct status_block *sblk = cp->status_blk.gen; in cnic_start_bnx2_hw()
4740 cp->kwq_io_addr = MB_GET_CID_ADDR(KWQ_CID) + L5_KRNLQ_HOST_QIDX; in cnic_start_bnx2_hw()
4742 cp->max_kwq_idx = MAX_KWQ_IDX; in cnic_start_bnx2_hw()
4743 cp->kwq_prod_idx = 0; in cnic_start_bnx2_hw()
4744 cp->kwq_con_idx = 0; in cnic_start_bnx2_hw()
4745 set_bit(CNIC_LCL_FL_KWQ_INIT, &cp->cnic_local_flags); in cnic_start_bnx2_hw()
4747 if (BNX2_CHIP(cp) == BNX2_CHIP_5706 || BNX2_CHIP(cp) == BNX2_CHIP_5708) in cnic_start_bnx2_hw()
4748 cp->kwq_con_idx_ptr = &sblk->status_rx_quick_consumer_index15; in cnic_start_bnx2_hw()
4750 cp->kwq_con_idx_ptr = &sblk->status_cmd_consumer_index; in cnic_start_bnx2_hw()
4763 val = (u32) ((u64) cp->kwq_info.pgtbl_map >> 32); in cnic_start_bnx2_hw()
4766 val = (u32) cp->kwq_info.pgtbl_map; in cnic_start_bnx2_hw()
4770 cp->kcq1.io_addr = MB_GET_CID_ADDR(KCQ_CID) + L5_KRNLQ_HOST_QIDX; in cnic_start_bnx2_hw()
4772 cp->kcq1.sw_prod_idx = 0; in cnic_start_bnx2_hw()
4773 cp->kcq1.hw_prod_idx_ptr = in cnic_start_bnx2_hw()
4776 cp->kcq1.status_idx_ptr = &sblk->status_idx; in cnic_start_bnx2_hw()
4789 val = (u32) ((u64) cp->kcq1.dma.pgtbl_map >> 32); in cnic_start_bnx2_hw()
4792 val = (u32) cp->kcq1.dma.pgtbl_map; in cnic_start_bnx2_hw()
4795 cp->int_num = 0; in cnic_start_bnx2_hw()
4797 struct status_block_msix *msblk = cp->status_blk.bnx2; in cnic_start_bnx2_hw()
4798 u32 sb_id = cp->status_blk_num; in cnic_start_bnx2_hw()
4801 cp->kcq1.hw_prod_idx_ptr = in cnic_start_bnx2_hw()
4803 cp->kcq1.status_idx_ptr = &msblk->status_idx; in cnic_start_bnx2_hw()
4804 cp->kwq_con_idx_ptr = &msblk->status_cmd_consumer_index; in cnic_start_bnx2_hw()
4805 cp->int_num = sb_id << BNX2_PCICFG_INT_ACK_CMD_INT_NUM_SHIFT; in cnic_start_bnx2_hw()
4847 struct cnic_local *cp = dev->cnic_priv; in cnic_setup_bnx2x_context() local
4848 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_setup_bnx2x_context()
4852 for (i = 0; i < cp->ctx_blks; i++) { in cnic_setup_bnx2x_context()
4853 struct cnic_ctx *ctx = &cp->ctx_arr[i]; in cnic_setup_bnx2x_context()
4856 if (cp->ctx_align) { in cnic_setup_bnx2x_context()
4857 unsigned long mask = cp->ctx_align - 1; in cnic_setup_bnx2x_context()
4868 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2x_irq() local
4869 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_init_bnx2x_irq()
4872 tasklet_init(&cp->cnic_irq_task, cnic_service_bnx2x_bh, in cnic_init_bnx2x_irq()
4901 struct cnic_local *cp = dev->cnic_priv; in cnic_enable_bnx2x_int() local
4903 u8 sb_id = cp->status_blk_num; in cnic_enable_bnx2x_int()
4920 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2x_tx_ring() local
4922 struct cnic_uio_dev *udev = cp->udev; in cnic_init_bnx2x_tx_ring()
4925 struct host_sp_status_block *sb = cp->bnx2x_def_status_blk; in cnic_init_bnx2x_tx_ring()
4927 u32 cli = cp->ethdev->iscsi_l2_client_id; in cnic_init_bnx2x_tx_ring()
4979 cp->tx_cons_ptr = in cnic_init_bnx2x_tx_ring()
4986 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2x_rx_ring() local
4988 struct cnic_uio_dev *udev = cp->udev; in cnic_init_bnx2x_rx_ring()
4993 struct host_sp_status_block *sb = cp->bnx2x_def_status_blk; in cnic_init_bnx2x_rx_ring()
4995 u32 cli = cp->ethdev->iscsi_l2_client_id; in cnic_init_bnx2x_rx_ring()
5004 data->general.mtu = cpu_to_le16(cp->l2_single_buf_size - 14); in cnic_init_bnx2x_rx_ring()
5009 int n = (i % cp->l2_rx_ring_size) + 1; in cnic_init_bnx2x_rx_ring()
5011 buf_map = udev->l2_buf_map + (n * cp->l2_single_buf_size); in cnic_init_bnx2x_rx_ring()
5040 data->rx.max_bytes_on_bd = cpu_to_le16(cp->l2_single_buf_size); in cnic_init_bnx2x_rx_ring()
5046 cp->rx_cons_ptr = in cnic_init_bnx2x_rx_ring()
5048 cp->rx_cons = *cp->rx_cons_ptr; in cnic_init_bnx2x_rx_ring()
5053 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2x_kcq() local
5057 cp->kcq1.io_addr = BAR_CSTRORM_INTMEM + in cnic_init_bnx2x_kcq()
5059 cp->kcq1.sw_prod_idx = 0; in cnic_init_bnx2x_kcq()
5062 struct host_hc_status_block_e2 *sb = cp->status_blk.gen; in cnic_init_bnx2x_kcq()
5064 cp->kcq1.hw_prod_idx_ptr = in cnic_init_bnx2x_kcq()
5066 cp->kcq1.status_idx_ptr = in cnic_init_bnx2x_kcq()
5069 struct host_hc_status_block_e1x *sb = cp->status_blk.gen; in cnic_init_bnx2x_kcq()
5071 cp->kcq1.hw_prod_idx_ptr = in cnic_init_bnx2x_kcq()
5073 cp->kcq1.status_idx_ptr = in cnic_init_bnx2x_kcq()
5078 struct host_hc_status_block_e2 *sb = cp->status_blk.gen; in cnic_init_bnx2x_kcq()
5080 cp->kcq2.io_addr = BAR_USTRORM_INTMEM + in cnic_init_bnx2x_kcq()
5082 cp->kcq2.sw_prod_idx = 0; in cnic_init_bnx2x_kcq()
5083 cp->kcq2.hw_prod_idx_ptr = in cnic_init_bnx2x_kcq()
5085 cp->kcq2.status_idx_ptr = in cnic_init_bnx2x_kcq()
5092 struct cnic_local *cp = dev->cnic_priv; in cnic_start_bnx2x_hw() local
5094 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_start_bnx2x_hw()
5099 cp->func = bp->pf_num; in cnic_start_bnx2x_hw()
5103 ret = cnic_init_id_tbl(&cp->cid_tbl, MAX_ISCSI_TBL_SZ, in cnic_start_bnx2x_hw()
5104 cp->iscsi_start_cid, 0); in cnic_start_bnx2x_hw()
5110 ret = cnic_init_id_tbl(&cp->fcoe_cid_tbl, dev->max_fcoe_conn, in cnic_start_bnx2x_hw()
5111 cp->fcoe_start_cid, 0); in cnic_start_bnx2x_hw()
5117 cp->bnx2x_igu_sb_id = ethdev->irq_arr[0].status_blk_num2; in cnic_start_bnx2x_hw()
5122 CNIC_WR16(dev, cp->kcq1.io_addr, MAX_KCQ_IDX); in cnic_start_bnx2x_hw()
5127 cp->kcq1.dma.pg_map_arr[1] & 0xffffffff); in cnic_start_bnx2x_hw()
5130 (u64) cp->kcq1.dma.pg_map_arr[1] >> 32); in cnic_start_bnx2x_hw()
5133 cp->kcq1.dma.pg_map_arr[0] & 0xffffffff); in cnic_start_bnx2x_hw()
5136 (u64) cp->kcq1.dma.pg_map_arr[0] >> 32); in cnic_start_bnx2x_hw()
5140 CSTORM_ISCSI_EQ_SB_NUM_OFFSET(pfid, 0), cp->status_blk_num); in cnic_start_bnx2x_hw()
5147 cp->gbl_buf_info.pg_map_arr[0] & 0xffffffff); in cnic_start_bnx2x_hw()
5150 (u64) cp->gbl_buf_info.pg_map_arr[0] >> 32); in cnic_start_bnx2x_hw()
5167 struct cnic_local *cp = dev->cnic_priv; in cnic_init_rings() local
5169 struct cnic_uio_dev *udev = cp->udev; in cnic_init_rings()
5171 if (test_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags)) in cnic_init_rings()
5177 set_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags); in cnic_init_rings()
5179 u32 cli = cp->ethdev->iscsi_l2_client_id; in cnic_init_rings()
5180 u32 cid = cp->ethdev->iscsi_l2_cid; in cnic_init_rings()
5201 set_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags); in cnic_init_rings()
5214 set_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags); in cnic_init_rings()
5220 while (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags) && in cnic_init_rings()
5224 if (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags)) in cnic_init_rings()
5237 struct cnic_local *cp = dev->cnic_priv; in cnic_shutdown_rings() local
5238 struct cnic_uio_dev *udev = cp->udev; in cnic_shutdown_rings()
5241 if (!test_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags)) in cnic_shutdown_rings()
5247 u32 cli = cp->ethdev->iscsi_l2_client_id; in cnic_shutdown_rings()
5248 u32 cid = cp->ethdev->iscsi_l2_cid; in cnic_shutdown_rings()
5254 set_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags); in cnic_shutdown_rings()
5261 while (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags) && in cnic_shutdown_rings()
5265 if (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags)) in cnic_shutdown_rings()
5275 clear_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags); in cnic_shutdown_rings()
5282 struct cnic_local *cp = dev->cnic_priv; in cnic_register_netdev() local
5283 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_register_netdev()
5292 err = ethdev->drv_register_cnic(dev->netdev, cp->cnic_ops, dev); in cnic_register_netdev()
5308 struct cnic_local *cp = dev->cnic_priv; in cnic_unregister_netdev() local
5309 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_unregister_netdev()
5319 struct cnic_local *cp = dev->cnic_priv; in cnic_start_hw() local
5320 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_start_hw()
5328 cp->func = PCI_FUNC(dev->pcidev->devfn); in cnic_start_hw()
5329 cp->status_blk.gen = ethdev->irq_arr[0].status_blk; in cnic_start_hw()
5330 cp->status_blk_num = ethdev->irq_arr[0].status_blk_num; in cnic_start_hw()
5332 err = cp->alloc_resc(dev); in cnic_start_hw()
5338 err = cp->start_hw(dev); in cnic_start_hw()
5348 cp->enable_int(dev); in cnic_start_hw()
5354 cp->stop_hw(dev); in cnic_start_hw()
5356 cp->free_resc(dev); in cnic_start_hw()
5380 struct cnic_local *cp = dev->cnic_priv; in cnic_stop_bnx2x_hw() local
5383 u32 sb_id = cp->status_blk_num; in cnic_stop_bnx2x_hw()
5403 *cp->kcq1.hw_prod_idx_ptr = 0; in cnic_stop_bnx2x_hw()
5406 CNIC_WR16(dev, cp->kcq1.io_addr, 0); in cnic_stop_bnx2x_hw()
5413 struct cnic_local *cp = dev->cnic_priv; in cnic_stop_hw() local
5419 while (cp->udev && cp->udev->uio_dev != -1 && i < 15) { in cnic_stop_hw()
5424 cp->stop_cm(dev); in cnic_stop_hw()
5425 cp->ethdev->drv_state &= ~CNIC_DRV_STATE_HANDLES_IRQ; in cnic_stop_hw()
5427 RCU_INIT_POINTER(cp->ulp_ops[CNIC_ULP_L4], NULL); in cnic_stop_hw()
5430 cp->stop_hw(dev); in cnic_stop_hw()
5454 struct cnic_local *cp = dev->cnic_priv; in cnic_get_fc_npiv_tbl() local
5464 ret = cp->ethdev->drv_get_fc_npiv_tbl(dev->netdev, npiv_tbl); in cnic_get_fc_npiv_tbl()
5472 struct cnic_local *cp; in cnic_alloc_dev() local
5489 cp = cdev->cnic_priv; in cnic_alloc_dev()
5490 cp->dev = cdev; in cnic_alloc_dev()
5491 cp->l2_single_buf_size = 0x400; in cnic_alloc_dev()
5492 cp->l2_rx_ring_size = 3; in cnic_alloc_dev()
5494 spin_lock_init(&cp->cnic_ulp_lock); in cnic_alloc_dev()
5505 struct cnic_local *cp; in init_bnx2_cnic() local
5536 cp = cdev->cnic_priv; in init_bnx2_cnic()
5537 cp->ethdev = ethdev; in init_bnx2_cnic()
5539 cp->chip_id = ethdev->chip_id; in init_bnx2_cnic()
5543 cp->cnic_ops = &cnic_bnx2_ops; in init_bnx2_cnic()
5544 cp->start_hw = cnic_start_bnx2_hw; in init_bnx2_cnic()
5545 cp->stop_hw = cnic_stop_bnx2_hw; in init_bnx2_cnic()
5546 cp->setup_pgtbl = cnic_setup_page_tbl; in init_bnx2_cnic()
5547 cp->alloc_resc = cnic_alloc_bnx2_resc; in init_bnx2_cnic()
5548 cp->free_resc = cnic_free_resc; in init_bnx2_cnic()
5549 cp->start_cm = cnic_cm_init_bnx2_hw; in init_bnx2_cnic()
5550 cp->stop_cm = cnic_cm_stop_bnx2_hw; in init_bnx2_cnic()
5551 cp->enable_int = cnic_enable_bnx2_int; in init_bnx2_cnic()
5552 cp->disable_int_sync = cnic_disable_bnx2_int_sync; in init_bnx2_cnic()
5553 cp->close_conn = cnic_close_bnx2_conn; in init_bnx2_cnic()
5565 struct cnic_local *cp; in init_bnx2x_cnic() local
5589 cp = cdev->cnic_priv; in init_bnx2x_cnic()
5590 cp->ethdev = ethdev; in init_bnx2x_cnic()
5592 cp->chip_id = ethdev->chip_id; in init_bnx2x_cnic()
5608 cp->cnic_ops = &cnic_bnx2x_ops; in init_bnx2x_cnic()
5609 cp->start_hw = cnic_start_bnx2x_hw; in init_bnx2x_cnic()
5610 cp->stop_hw = cnic_stop_bnx2x_hw; in init_bnx2x_cnic()
5611 cp->setup_pgtbl = cnic_setup_page_tbl_le; in init_bnx2x_cnic()
5612 cp->alloc_resc = cnic_alloc_bnx2x_resc; in init_bnx2x_cnic()
5613 cp->free_resc = cnic_free_resc; in init_bnx2x_cnic()
5614 cp->start_cm = cnic_cm_init_bnx2x_hw; in init_bnx2x_cnic()
5615 cp->stop_cm = cnic_cm_stop_bnx2x_hw; in init_bnx2x_cnic()
5616 cp->enable_int = cnic_enable_bnx2x_int; in init_bnx2x_cnic()
5617 cp->disable_int_sync = cnic_disable_bnx2x_int_sync; in init_bnx2x_cnic()
5619 cp->ack_int = cnic_ack_bnx2x_e2_msix; in init_bnx2x_cnic()
5620 cp->arm_int = cnic_arm_bnx2x_e2_msix; in init_bnx2x_cnic()
5622 cp->ack_int = cnic_ack_bnx2x_msix; in init_bnx2x_cnic()
5623 cp->arm_int = cnic_arm_bnx2x_msix; in init_bnx2x_cnic()
5625 cp->close_conn = cnic_close_bnx2x_conn; in init_bnx2x_cnic()
5651 static void cnic_rcv_netevent(struct cnic_local *cp, unsigned long event, in cnic_rcv_netevent() argument
5661 ulp_ops = rcu_dereference_protected(cp->ulp_ops[if_type], in cnic_rcv_netevent()
5668 ctx = cp->ulp_handle[if_type]; in cnic_rcv_netevent()
5670 set_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_rcv_netevent()
5675 clear_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_rcv_netevent()
5698 struct cnic_local *cp = dev->cnic_priv; in cnic_netdev_event() local
5714 cnic_rcv_netevent(cp, event, 0); in cnic_netdev_event()