Lines Matching full: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
1034 udev->l2_buf_size = (cp->l2_rx_ring_size + 1) * cp->l2_single_buf_size; in __cnic_alloc_uio_rings()
1049 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_uio_rings() local
1059 cp->udev = udev; in cnic_alloc_uio_rings()
1080 cp->udev = udev; in cnic_alloc_uio_rings()
1091 struct cnic_local *cp = dev->cnic_priv; in cnic_init_uio() local
1092 struct cnic_uio_dev *udev = cp->udev; in cnic_init_uio()
1108 uinfo->mem[1].addr = (unsigned long) cp->status_blk.gen & in cnic_init_uio()
1110 if (cp->ethdev->drv_state & CNIC_DRV_STATE_USING_MSIX) in cnic_init_uio()
1119 uinfo->mem[1].addr = (unsigned long) cp->bnx2x_def_status_blk & in cnic_init_uio()
1121 uinfo->mem[1].size = sizeof(*cp->bnx2x_def_status_blk); in cnic_init_uio()
1157 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_bnx2_resc() local
1160 ret = cnic_alloc_dma(dev, &cp->kwq_info, KWQ_PAGE_CNT, 1); in cnic_alloc_bnx2_resc()
1163 cp->kwq = (struct kwqe **) cp->kwq_info.pg_arr; in cnic_alloc_bnx2_resc()
1165 ret = cnic_alloc_kcq(dev, &cp->kcq1, true); in cnic_alloc_bnx2_resc()
1190 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_bnx2x_context() local
1192 int ctx_blk_size = cp->ethdev->ctx_blk_size; in cnic_alloc_bnx2x_context()
1195 total_mem = BNX2X_CONTEXT_MEM_SIZE * cp->max_cid_space; in cnic_alloc_bnx2x_context()
1200 if (blks > cp->ethdev->ctx_tbl_len) in cnic_alloc_bnx2x_context()
1203 cp->ctx_arr = kcalloc(blks, sizeof(struct cnic_ctx), GFP_KERNEL); in cnic_alloc_bnx2x_context()
1204 if (cp->ctx_arr == NULL) in cnic_alloc_bnx2x_context()
1207 cp->ctx_blks = blks; in cnic_alloc_bnx2x_context()
1208 cp->ctx_blk_size = ctx_blk_size; in cnic_alloc_bnx2x_context()
1210 cp->ctx_align = 0; in cnic_alloc_bnx2x_context()
1212 cp->ctx_align = ctx_blk_size; in cnic_alloc_bnx2x_context()
1214 cp->cids_per_blk = ctx_blk_size / BNX2X_CONTEXT_MEM_SIZE; in cnic_alloc_bnx2x_context()
1217 cp->ctx_arr[i].ctx = in cnic_alloc_bnx2x_context()
1218 dma_alloc_coherent(&dev->pcidev->dev, cp->ctx_blk_size, in cnic_alloc_bnx2x_context()
1219 &cp->ctx_arr[i].mapping, in cnic_alloc_bnx2x_context()
1221 if (cp->ctx_arr[i].ctx == NULL) in cnic_alloc_bnx2x_context()
1224 if (cp->ctx_align && cp->ctx_blk_size == ctx_blk_size) { in cnic_alloc_bnx2x_context()
1225 if (cp->ctx_arr[i].mapping & (cp->ctx_align - 1)) { in cnic_alloc_bnx2x_context()
1227 cp->ctx_blk_size += cp->ctx_align; in cnic_alloc_bnx2x_context()
1238 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_bnx2x_resc() local
1240 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_alloc_bnx2x_resc()
1243 struct cnic_dma *kwq_16_dma = &cp->kwq_16_data_info; in cnic_alloc_bnx2x_resc()
1245 cp->max_cid_space = MAX_ISCSI_TBL_SZ; in cnic_alloc_bnx2x_resc()
1246 cp->iscsi_start_cid = start_cid; in cnic_alloc_bnx2x_resc()
1247 cp->fcoe_start_cid = start_cid + MAX_ISCSI_TBL_SZ; in cnic_alloc_bnx2x_resc()
1250 cp->max_cid_space += dev->max_fcoe_conn; in cnic_alloc_bnx2x_resc()
1251 cp->fcoe_init_cid = ethdev->fcoe_init_cid; in cnic_alloc_bnx2x_resc()
1252 if (!cp->fcoe_init_cid) in cnic_alloc_bnx2x_resc()
1253 cp->fcoe_init_cid = 0x10; in cnic_alloc_bnx2x_resc()
1256 cp->iscsi_tbl = kcalloc(MAX_ISCSI_TBL_SZ, sizeof(struct cnic_iscsi), in cnic_alloc_bnx2x_resc()
1258 if (!cp->iscsi_tbl) in cnic_alloc_bnx2x_resc()
1261 cp->ctx_tbl = kcalloc(cp->max_cid_space, sizeof(struct cnic_context), in cnic_alloc_bnx2x_resc()
1263 if (!cp->ctx_tbl) in cnic_alloc_bnx2x_resc()
1267 cp->ctx_tbl[i].proto.iscsi = &cp->iscsi_tbl[i]; in cnic_alloc_bnx2x_resc()
1268 cp->ctx_tbl[i].ulp_proto_id = CNIC_ULP_ISCSI; in cnic_alloc_bnx2x_resc()
1271 for (i = MAX_ISCSI_TBL_SZ; i < cp->max_cid_space; i++) in cnic_alloc_bnx2x_resc()
1272 cp->ctx_tbl[i].ulp_proto_id = CNIC_ULP_FCOE; in cnic_alloc_bnx2x_resc()
1274 pages = CNIC_PAGE_ALIGN(cp->max_cid_space * CNIC_KWQ16_DATA_SIZE) / in cnic_alloc_bnx2x_resc()
1282 for (i = 0, j = 0; i < cp->max_cid_space; i++) { in cnic_alloc_bnx2x_resc()
1285 cp->ctx_tbl[i].kwqe_data = kwq_16_dma->pg_arr[j] + off; in cnic_alloc_bnx2x_resc()
1286 cp->ctx_tbl[i].kwqe_data_mapping = kwq_16_dma->pg_map_arr[j] + in cnic_alloc_bnx2x_resc()
1293 ret = cnic_alloc_kcq(dev, &cp->kcq1, false); in cnic_alloc_bnx2x_resc()
1298 ret = cnic_alloc_kcq(dev, &cp->kcq2, true); in cnic_alloc_bnx2x_resc()
1304 ret = cnic_alloc_dma(dev, &cp->gbl_buf_info, pages, 0); in cnic_alloc_bnx2x_resc()
1312 if (cp->ethdev->drv_state & CNIC_DRV_STATE_NO_ISCSI) in cnic_alloc_bnx2x_resc()
1315 cp->bnx2x_def_status_blk = cp->ethdev->irq_arr[1].status_blk; in cnic_alloc_bnx2x_resc()
1317 cp->l2_rx_ring_size = 15; in cnic_alloc_bnx2x_resc()
1334 static inline u32 cnic_kwq_avail(struct cnic_local *cp) in cnic_kwq_avail() argument
1336 return cp->max_kwq_idx - in cnic_kwq_avail()
1337 ((cp->kwq_prod_idx - cp->kwq_con_idx) & cp->max_kwq_idx); in cnic_kwq_avail()
1343 struct cnic_local *cp = dev->cnic_priv; in cnic_submit_bnx2_kwqes() local
1350 spin_lock_bh(&cp->cnic_ulp_lock); in cnic_submit_bnx2_kwqes()
1351 if (num_wqes > cnic_kwq_avail(cp) && in cnic_submit_bnx2_kwqes()
1352 !test_bit(CNIC_LCL_FL_KWQ_INIT, &cp->cnic_local_flags)) { in cnic_submit_bnx2_kwqes()
1353 spin_unlock_bh(&cp->cnic_ulp_lock); in cnic_submit_bnx2_kwqes()
1357 clear_bit(CNIC_LCL_FL_KWQ_INIT, &cp->cnic_local_flags); in cnic_submit_bnx2_kwqes()
1359 prod = cp->kwq_prod_idx; in cnic_submit_bnx2_kwqes()
1362 prod_qe = &cp->kwq[KWQ_PG(sw_prod)][KWQ_IDX(sw_prod)]; in cnic_submit_bnx2_kwqes()
1367 cp->kwq_prod_idx = prod; in cnic_submit_bnx2_kwqes()
1369 CNIC_WR16(dev, cp->kwq_io_addr, cp->kwq_prod_idx); in cnic_submit_bnx2_kwqes()
1371 spin_unlock_bh(&cp->cnic_ulp_lock); in cnic_submit_bnx2_kwqes()
1375 static void *cnic_get_kwqe_16_data(struct cnic_local *cp, u32 l5_cid, in cnic_get_kwqe_16_data() argument
1378 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_get_kwqe_16_data()
1390 struct cnic_local *cp = dev->cnic_priv; in cnic_submit_kwqe_16() local
1412 spin_lock_bh(&cp->cnic_ulp_lock); in cnic_submit_kwqe_16()
1413 ret = cp->ethdev->drv_submit_kwqes_16(dev->netdev, kwq, 1); in cnic_submit_kwqe_16()
1414 spin_unlock_bh(&cp->cnic_ulp_lock); in cnic_submit_kwqe_16()
1425 struct cnic_local *cp = dev->cnic_priv; in cnic_reply_bnx2x_kcqes() local
1429 ulp_ops = rcu_dereference(cp->ulp_ops[ulp_type]); in cnic_reply_bnx2x_kcqes()
1431 ulp_ops->indicate_kcqes(cp->ulp_handle[ulp_type], in cnic_reply_bnx2x_kcqes()
1460 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_iscsi_init1() local
1466 cp->num_iscsi_tasks = req1->num_tasks_per_conn; in cnic_bnx2x_iscsi_init1()
1467 cp->num_ccells = req1->num_ccells_per_conn; in cnic_bnx2x_iscsi_init1()
1468 cp->task_array_size = BNX2X_ISCSI_TASK_CONTEXT_SIZE * in cnic_bnx2x_iscsi_init1()
1469 cp->num_iscsi_tasks; in cnic_bnx2x_iscsi_init1()
1470 cp->r2tq_size = cp->num_iscsi_tasks * BNX2X_ISCSI_MAX_PENDING_R2TS * in cnic_bnx2x_iscsi_init1()
1472 cp->hq_size = cp->num_ccells * BNX2X_ISCSI_HQ_BD_SIZE; in cnic_bnx2x_iscsi_init1()
1473 pages = CNIC_PAGE_ALIGN(cp->hq_size) / CNIC_PAGE_SIZE; in cnic_bnx2x_iscsi_init1()
1475 cp->num_cqs = req1->num_cqs; in cnic_bnx2x_iscsi_init1()
1507 cp->num_iscsi_tasks * BNX2X_ISCSI_MAX_PENDING_R2TS); in cnic_bnx2x_iscsi_init1()
1522 cp->num_iscsi_tasks * BNX2X_ISCSI_MAX_PENDING_R2TS); in cnic_bnx2x_iscsi_init1()
1588 struct cnic_local *cp = dev->cnic_priv; in cnic_free_bnx2x_conn_resc() local
1589 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_free_bnx2x_conn_resc()
1597 cnic_free_id(&cp->cid_tbl, ctx->cid); in cnic_free_bnx2x_conn_resc()
1599 cnic_free_id(&cp->fcoe_cid_tbl, ctx->cid); in cnic_free_bnx2x_conn_resc()
1609 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_bnx2x_conn_resc() local
1610 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_alloc_bnx2x_conn_resc()
1614 cid = cnic_alloc_new_id(&cp->fcoe_cid_tbl); in cnic_alloc_bnx2x_conn_resc()
1623 cid = cnic_alloc_new_id(&cp->cid_tbl); in cnic_alloc_bnx2x_conn_resc()
1630 pages = CNIC_PAGE_ALIGN(cp->task_array_size) / CNIC_PAGE_SIZE; in cnic_alloc_bnx2x_conn_resc()
1636 pages = CNIC_PAGE_ALIGN(cp->r2tq_size) / CNIC_PAGE_SIZE; in cnic_alloc_bnx2x_conn_resc()
1641 pages = CNIC_PAGE_ALIGN(cp->hq_size) / CNIC_PAGE_SIZE; in cnic_alloc_bnx2x_conn_resc()
1656 struct cnic_local *cp = dev->cnic_priv; in cnic_get_bnx2x_ctx() local
1657 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_get_bnx2x_ctx()
1658 int blk = (cid - ethdev->starting_cid) / cp->cids_per_blk; in cnic_get_bnx2x_ctx()
1659 int off = (cid - ethdev->starting_cid) % cp->cids_per_blk; in cnic_get_bnx2x_ctx()
1664 if (cp->ctx_align) { in cnic_get_bnx2x_ctx()
1665 unsigned long mask = cp->ctx_align - 1; in cnic_get_bnx2x_ctx()
1667 if (cp->ctx_arr[blk].mapping & mask) in cnic_get_bnx2x_ctx()
1668 align_off = cp->ctx_align - in cnic_get_bnx2x_ctx()
1669 (cp->ctx_arr[blk].mapping & mask); in cnic_get_bnx2x_ctx()
1671 ctx_map = cp->ctx_arr[blk].mapping + align_off + in cnic_get_bnx2x_ctx()
1673 ctx = cp->ctx_arr[blk].ctx + align_off + in cnic_get_bnx2x_ctx()
1686 struct cnic_local *cp = dev->cnic_priv; in cnic_setup_bnx2x_ctx() local
1693 struct cnic_context *ctx = &cp->ctx_tbl[req1->iscsi_conn_id]; in cnic_setup_bnx2x_ctx()
1805 for (i = 1, j = 1; i < cp->num_cqs; i++, j++) { in cnic_setup_bnx2x_ctx()
1828 ictx->ustorm_st_context.num_cqs = cp->num_cqs; in cnic_setup_bnx2x_ctx()
1852 ictx->cstorm_st_context.cq_proc_en_bit_map = (1 << cp->num_cqs) - 1; in cnic_setup_bnx2x_ctx()
1853 for (i = 0; i < cp->num_cqs; i++) { in cnic_setup_bnx2x_ctx()
1875 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_iscsi_ofld1() local
1905 ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_iscsi_ofld1()
1912 if (atomic_inc_return(&cp->iscsi_conn) > dev->max_iscsi_conn) { in cnic_bnx2x_iscsi_ofld1()
1913 atomic_dec(&cp->iscsi_conn); in cnic_bnx2x_iscsi_ofld1()
1918 atomic_dec(&cp->iscsi_conn); in cnic_bnx2x_iscsi_ofld1()
1924 atomic_dec(&cp->iscsi_conn); in cnic_bnx2x_iscsi_ofld1()
1929 kcqe.iscsi_conn_context_id = BNX2X_HW_CID(bp, cp->ctx_tbl[l5_cid].cid); in cnic_bnx2x_iscsi_ofld1()
1940 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_iscsi_update() local
1948 if (cnic_get_l5_cid(cp, cid, &l5_cid) != 0) in cnic_bnx2x_iscsi_update()
1951 data = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_iscsi_update()
1964 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_destroy_ramrod() local
1966 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_destroy_ramrod()
1990 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_iscsi_destroy() local
1994 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_iscsi_destroy()
2009 queue_delayed_work(cnic_wq, &cp->delete_task, delta); in cnic_bnx2x_iscsi_destroy()
2019 atomic_dec(&cp->iscsi_conn); in cnic_bnx2x_iscsi_destroy()
2119 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_connect() local
2128 struct cnic_sock *csk = &cp->csk_tbl[l5_cid]; in cnic_bnx2x_connect()
2129 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_connect()
2151 conn_buf = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_connect()
2257 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_stat() local
2263 cid = BNX2X_HW_CID(bp, cp->fcoe_init_cid); in cnic_bnx2x_fcoe_stat()
2265 fcoe_stat = cnic_get_kwqe_16_data(cp, BNX2X_FCOE_L5_CID_BASE, &l5_data); in cnic_bnx2x_fcoe_stat()
2281 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_init1() local
2310 fcoe_init = cnic_get_kwqe_16_data(cp, BNX2X_FCOE_L5_CID_BASE, &l5_data); in cnic_bnx2x_fcoe_init1()
2318 fcoe_init->eq_pbl_base.lo = cp->kcq2.dma.pgtbl_map & 0xffffffff; in cnic_bnx2x_fcoe_init1()
2319 fcoe_init->eq_pbl_base.hi = (u64) cp->kcq2.dma.pgtbl_map >> 32; in cnic_bnx2x_fcoe_init1()
2320 fcoe_init->eq_pbl_size = cp->kcq2.dma.num_pages; in cnic_bnx2x_fcoe_init1()
2322 fcoe_init->sb_num = cp->status_blk_num; in cnic_bnx2x_fcoe_init1()
2325 cp->kcq2.sw_prod_idx = 0; in cnic_bnx2x_fcoe_init1()
2327 cid = BNX2X_HW_CID(bp, cp->fcoe_init_cid); in cnic_bnx2x_fcoe_init1()
2339 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_ofld1() local
2370 ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_fcoe_ofld1()
2397 fcoe_offload = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_fcoe_ofld1()
2436 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_enable() local
2446 fcoe_enable = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_fcoe_enable()
2464 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_disable() local
2478 fcoe_disable = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_fcoe_disable()
2495 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_destroy() local
2508 ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_fcoe_destroy()
2525 queue_delayed_work(cnic_wq, &cp->delete_task, msecs_to_jiffies(2000)); in cnic_bnx2x_fcoe_destroy()
2538 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_delete_wait() local
2541 for (i = start_cid; i < cp->max_cid_space; i++) { in cnic_bnx2x_delete_wait()
2542 struct cnic_context *ctx = &cp->ctx_tbl[i]; in cnic_bnx2x_delete_wait()
2563 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_fw_destroy() local
2570 cid = BNX2X_HW_CID(bp, cp->fcoe_init_cid); in cnic_bnx2x_fcoe_fw_destroy()
2580 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_kwqe_err() local
2623 cnic_get_l5_cid(cp, BNX2X_SW_CID(cid), &kcqe.kcqe_info0); in cnic_bnx2x_kwqe_err()
2642 cnic_get_l5_cid(cp, BNX2X_SW_CID(cid), &l4kcqe->conn_id); in cnic_bnx2x_kwqe_err()
2826 struct cnic_local *cp = dev->cnic_priv; in service_kcqes() local
2834 u32 kcqe_op_flag = cp->completed_kcq[i]->kcqe_op_flag; in service_kcqes()
2841 u32 next_op = cp->completed_kcq[i + j]->kcqe_op_flag; in service_kcqes()
2868 ulp_ops = rcu_dereference(cp->ulp_ops[ulp_type]); in service_kcqes()
2870 ulp_ops->indicate_kcqes(cp->ulp_handle[ulp_type], in service_kcqes()
2871 cp->completed_kcq + i, j); in service_kcqes()
2885 struct cnic_local *cp = dev->cnic_priv; in cnic_get_kcqes() local
2897 cp->completed_kcq[kcqe_cnt++] = kcqe; in cnic_get_kcqes()
2910 static int cnic_l2_completion(struct cnic_local *cp) in cnic_l2_completion() argument
2913 struct cnic_uio_dev *udev = cp->udev; in cnic_l2_completion()
2919 if (!test_bit(CNIC_F_BNX2X_CLASS, &cp->dev->flags)) in cnic_l2_completion()
2922 hw_cons = *cp->rx_cons_ptr; in cnic_l2_completion()
2926 sw_cons = cp->rx_cons; in cnic_l2_completion()
2944 static void cnic_chk_pkt_rings(struct cnic_local *cp) in cnic_chk_pkt_rings() argument
2949 if (!test_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags)) in cnic_chk_pkt_rings()
2952 rx_cons = *cp->rx_cons_ptr; in cnic_chk_pkt_rings()
2953 tx_cons = *cp->tx_cons_ptr; in cnic_chk_pkt_rings()
2954 if (cp->tx_cons != tx_cons || cp->rx_cons != rx_cons) { in cnic_chk_pkt_rings()
2955 if (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags)) in cnic_chk_pkt_rings()
2956 comp = cnic_l2_completion(cp); in cnic_chk_pkt_rings()
2958 cp->tx_cons = tx_cons; in cnic_chk_pkt_rings()
2959 cp->rx_cons = rx_cons; in cnic_chk_pkt_rings()
2961 if (cp->udev) in cnic_chk_pkt_rings()
2962 uio_event_notify(&cp->udev->cnic_uinfo); in cnic_chk_pkt_rings()
2965 clear_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags); in cnic_chk_pkt_rings()
2970 struct cnic_local *cp = dev->cnic_priv; in cnic_service_bnx2_queues() local
2971 u32 status_idx = (u16) *cp->kcq1.status_idx_ptr; in cnic_service_bnx2_queues()
2976 cp->kwq_con_idx = *cp->kwq_con_idx_ptr; in cnic_service_bnx2_queues()
2978 while ((kcqe_cnt = cnic_get_kcqes(dev, &cp->kcq1))) { in cnic_service_bnx2_queues()
2984 status_idx = (u16) *cp->kcq1.status_idx_ptr; in cnic_service_bnx2_queues()
2987 cp->kwq_con_idx = *cp->kwq_con_idx_ptr; in cnic_service_bnx2_queues()
2990 CNIC_WR16(dev, cp->kcq1.io_addr, cp->kcq1.sw_prod_idx); in cnic_service_bnx2_queues()
2992 cnic_chk_pkt_rings(cp); in cnic_service_bnx2_queues()
3012 struct cnic_local *cp = from_tasklet(cp, t, cnic_irq_task); in cnic_service_bnx2_msix() local
3013 struct cnic_dev *dev = cp->dev; in cnic_service_bnx2_msix()
3015 cp->last_status_idx = cnic_service_bnx2_queues(dev); in cnic_service_bnx2_msix()
3017 CNIC_WR(dev, BNX2_PCICFG_INT_ACK_CMD, cp->int_num | in cnic_service_bnx2_msix()
3018 BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | cp->last_status_idx); in cnic_service_bnx2_msix()
3023 struct cnic_local *cp = dev->cnic_priv; in cnic_doirq() local
3026 u16 prod = cp->kcq1.sw_prod_idx & MAX_KCQ_IDX; in cnic_doirq()
3028 prefetch(cp->status_blk.gen); in cnic_doirq()
3029 prefetch(&cp->kcq1.kcq[KCQ_PG(prod)][KCQ_IDX(prod)]); in cnic_doirq()
3031 tasklet_schedule(&cp->cnic_irq_task); in cnic_doirq()
3038 struct cnic_local *cp = dev->cnic_priv; in cnic_irq() local
3040 if (cp->ack_int) in cnic_irq()
3041 cp->ack_int(dev); in cnic_irq()
3084 struct cnic_local *cp = dev->cnic_priv; in cnic_ack_bnx2x_msix() local
3086 cnic_ack_bnx2x_int(dev, cp->bnx2x_igu_sb_id, CSTORM_ID, 0, in cnic_ack_bnx2x_msix()
3092 struct cnic_local *cp = dev->cnic_priv; in cnic_ack_bnx2x_e2_msix() local
3094 cnic_ack_igu_sb(dev, cp->bnx2x_igu_sb_id, IGU_SEG_ACCESS_DEF, 0, in cnic_ack_bnx2x_e2_msix()
3100 struct cnic_local *cp = dev->cnic_priv; in cnic_arm_bnx2x_msix() local
3102 cnic_ack_bnx2x_int(dev, cp->bnx2x_igu_sb_id, CSTORM_ID, idx, in cnic_arm_bnx2x_msix()
3108 struct cnic_local *cp = dev->cnic_priv; in cnic_arm_bnx2x_e2_msix() local
3110 cnic_ack_igu_sb(dev, cp->bnx2x_igu_sb_id, IGU_SEG_ACCESS_DEF, idx, in cnic_arm_bnx2x_e2_msix()
3137 struct cnic_local *cp = from_tasklet(cp, t, cnic_irq_task); in cnic_service_bnx2x_bh() local
3138 struct cnic_dev *dev = cp->dev; in cnic_service_bnx2x_bh()
3146 status_idx = cnic_service_bnx2x_kcq(dev, &cp->kcq1); in cnic_service_bnx2x_bh()
3148 CNIC_WR16(dev, cp->kcq1.io_addr, in cnic_service_bnx2x_bh()
3149 cp->kcq1.sw_prod_idx + MAX_KCQ_IDX); in cnic_service_bnx2x_bh()
3152 cp->arm_int(dev, status_idx); in cnic_service_bnx2x_bh()
3156 new_status_idx = cnic_service_bnx2x_kcq(dev, &cp->kcq2); in cnic_service_bnx2x_bh()
3161 CNIC_WR16(dev, cp->kcq2.io_addr, cp->kcq2.sw_prod_idx + in cnic_service_bnx2x_bh()
3164 cnic_ack_igu_sb(dev, cp->bnx2x_igu_sb_id, IGU_SEG_ACCESS_DEF, in cnic_service_bnx2x_bh()
3174 struct cnic_local *cp = dev->cnic_priv; in cnic_service_bnx2x() local
3176 if (!(cp->ethdev->drv_state & CNIC_DRV_STATE_USING_MSIX)) in cnic_service_bnx2x()
3179 cnic_chk_pkt_rings(cp); in cnic_service_bnx2x()
3184 static void cnic_ulp_stop_one(struct cnic_local *cp, int if_type) in cnic_ulp_stop_one() argument
3189 cnic_send_nlmsg(cp, ISCSI_KEVENT_IF_DOWN, NULL); in cnic_ulp_stop_one()
3192 ulp_ops = rcu_dereference_protected(cp->ulp_ops[if_type], in cnic_ulp_stop_one()
3198 set_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_ulp_stop_one()
3201 if (test_and_clear_bit(ULP_F_START, &cp->ulp_flags[if_type])) in cnic_ulp_stop_one()
3202 ulp_ops->cnic_stop(cp->ulp_handle[if_type]); in cnic_ulp_stop_one()
3204 clear_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_ulp_stop_one()
3209 struct cnic_local *cp = dev->cnic_priv; in cnic_ulp_stop() local
3213 cnic_ulp_stop_one(cp, if_type); in cnic_ulp_stop()
3218 struct cnic_local *cp = dev->cnic_priv; in cnic_ulp_start() local
3225 ulp_ops = rcu_dereference_protected(cp->ulp_ops[if_type], in cnic_ulp_start()
3231 set_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_ulp_start()
3234 if (!test_and_set_bit(ULP_F_START, &cp->ulp_flags[if_type])) in cnic_ulp_start()
3235 ulp_ops->cnic_start(cp->ulp_handle[if_type]); in cnic_ulp_start()
3237 clear_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_ulp_start()
3243 struct cnic_local *cp = dev->cnic_priv; in cnic_copy_ulp_stats() local
3248 ulp_ops = rcu_dereference_protected(cp->ulp_ops[ulp_type], in cnic_copy_ulp_stats()
3251 rc = ulp_ops->cnic_get_stats(cp->ulp_handle[ulp_type]); in cnic_copy_ulp_stats()
3281 struct cnic_local *cp = dev->cnic_priv; in cnic_ctl() local
3282 set_bit(CNIC_LCL_FL_STOP_ISCSI, &cp->cnic_local_flags); in cnic_ctl()
3283 queue_delayed_work(cnic_wq, &cp->delete_task, 0); in cnic_ctl()
3290 struct cnic_local *cp = dev->cnic_priv; in cnic_ctl() local
3295 if (cnic_get_l5_cid(cp, cid, &l5_cid) == 0) { in cnic_ctl()
3296 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_ctl()
3328 struct cnic_local *cp = dev->cnic_priv; in cnic_ulp_init() local
3342 if (!test_and_set_bit(ULP_F_INIT, &cp->ulp_flags[i])) in cnic_ulp_init()
3352 struct cnic_local *cp = dev->cnic_priv; in cnic_ulp_exit() local
3366 if (test_and_clear_bit(ULP_F_INIT, &cp->ulp_flags[i])) in cnic_ulp_exit()
3582 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_create() local
3588 if (cp->ctx_tbl) { in cnic_cm_create()
3589 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_cm_create()
3595 csk1 = &cp->csk_tbl[l5_cid]; in cnic_cm_create()
3627 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_cleanup() local
3629 cnic_free_id(&cp->csk_port_tbl, be16_to_cpu(csk->src_port)); in cnic_cm_cleanup()
3749 struct cnic_local *cp = dev->cnic_priv; in cnic_resolve_addr() local
3751 return cnic_send_nlmsg(cp, ISCSI_KEVENT_PATH_REQ, csk); in cnic_resolve_addr()
3757 struct cnic_local *cp = dev->cnic_priv; in cnic_get_route() local
3805 if (cnic_alloc_id(&cp->csk_port_tbl, port_id)) in cnic_get_route()
3811 port_id = cnic_alloc_new_id(&cp->csk_port_tbl); in cnic_get_route()
3834 struct cnic_local *cp = csk->dev->cnic_priv; in cnic_cm_connect() local
3837 if (cp->ethdev->drv_state & CNIC_DRV_STATE_NO_ISCSI) in cnic_cm_connect()
3863 struct cnic_local *cp = csk->dev->cnic_priv; in cnic_cm_abort() local
3876 cp->close_conn(csk, opcode); in cnic_cm_abort()
3906 static void cnic_cm_upcall(struct cnic_local *cp, struct cnic_sock *csk, in cnic_cm_upcall() argument
3913 ulp_ops = rcu_dereference(cp->ulp_ops[ulp_type]); in cnic_cm_upcall()
3942 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_process_offld_pg() local
3945 struct cnic_sock *csk = &cp->csk_tbl[l5_cid]; in cnic_cm_process_offld_pg()
3958 cnic_cm_upcall(cp, csk, in cnic_cm_process_offld_pg()
3973 struct cnic_local *cp = dev->cnic_priv; in cnic_process_fcoe_term_conn() local
3976 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_process_fcoe_term_conn()
3985 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_process_kcqe() local
4007 csk = &cp->csk_tbl[l5_cid]; in cnic_cm_process_kcqe()
4019 cnic_cm_upcall(cp, csk, in cnic_cm_process_kcqe()
4032 cnic_cm_upcall(cp, csk, opcode); in cnic_cm_process_kcqe()
4054 cp->close_conn(csk, opcode); in cnic_cm_process_kcqe()
4062 cp->close_conn(csk, L4_KCQE_OPCODE_VALUE_RESET_COMP); in cnic_cm_process_kcqe()
4064 cnic_cm_upcall(cp, csk, opcode); in cnic_cm_process_kcqe()
4085 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_free_mem() local
4087 kvfree(cp->csk_tbl); in cnic_cm_free_mem()
4088 cp->csk_tbl = NULL; in cnic_cm_free_mem()
4089 cnic_free_id_tbl(&cp->csk_port_tbl); in cnic_cm_free_mem()
4094 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_alloc_mem() local
4098 cp->csk_tbl = kvcalloc(MAX_CM_SK_TBL_SZ, sizeof(struct cnic_sock), in cnic_cm_alloc_mem()
4100 if (!cp->csk_tbl) in cnic_cm_alloc_mem()
4104 atomic_set(&cp->csk_tbl[i].ref_count, 0); in cnic_cm_alloc_mem()
4107 if (cnic_init_id_tbl(&cp->csk_port_tbl, CNIC_LOCAL_PORT_RANGE, in cnic_cm_alloc_mem()
4144 struct cnic_local *cp = dev->cnic_priv; in cnic_close_bnx2_conn() local
4147 cnic_cm_upcall(cp, csk, opcode); in cnic_close_bnx2_conn()
4154 cnic_cm_upcall(cp, csk, opcode); in cnic_close_bnx2_conn()
4173 struct cnic_local *cp = dev->cnic_priv; in cnic_close_bnx2x_conn() local
4174 struct cnic_context *ctx = &cp->ctx_tbl[csk->l5_cid]; in cnic_close_bnx2x_conn()
4207 cnic_cm_upcall(cp, csk, csk->state); in cnic_close_bnx2x_conn()
4213 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_stop_bnx2x_hw() local
4215 if (!cp->ctx_tbl) in cnic_cm_stop_bnx2x_hw()
4223 cancel_delayed_work(&cp->delete_task); in cnic_cm_stop_bnx2x_hw()
4226 if (atomic_read(&cp->iscsi_conn) != 0) in cnic_cm_stop_bnx2x_hw()
4228 atomic_read(&cp->iscsi_conn)); in cnic_cm_stop_bnx2x_hw()
4265 struct cnic_local *cp; in cnic_delete_task() local
4270 cp = container_of(work, struct cnic_local, delete_task.work); in cnic_delete_task()
4271 dev = cp->dev; in cnic_delete_task()
4273 if (test_and_clear_bit(CNIC_LCL_FL_STOP_ISCSI, &cp->cnic_local_flags)) { in cnic_delete_task()
4276 cnic_ulp_stop_one(cp, CNIC_ULP_ISCSI); in cnic_delete_task()
4280 cp->ethdev->drv_ctl(dev->netdev, &info); in cnic_delete_task()
4283 for (i = 0; i < cp->max_cid_space; i++) { in cnic_delete_task()
4284 struct cnic_context *ctx = &cp->ctx_tbl[i]; in cnic_delete_task()
4304 atomic_dec(&cp->iscsi_conn); in cnic_delete_task()
4311 queue_delayed_work(cnic_wq, &cp->delete_task, in cnic_delete_task()
4318 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_open() local
4325 err = cp->start_cm(dev); in cnic_cm_open()
4330 INIT_DELAYED_WORK(&cp->delete_task, cnic_delete_task); in cnic_cm_open()
4339 cp->ulp_handle[CNIC_ULP_L4] = dev; in cnic_cm_open()
4340 rcu_assign_pointer(cp->ulp_ops[CNIC_ULP_L4], &cm_ulp_ops); in cnic_cm_open()
4350 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_shutdown() local
4353 if (!cp->csk_tbl) in cnic_cm_shutdown()
4357 struct cnic_sock *csk = &cp->csk_tbl[i]; in cnic_cm_shutdown()
4380 struct cnic_local *cp = dev->cnic_priv; in cnic_setup_5709_context() local
4384 if (BNX2_CHIP(cp) != BNX2_CHIP_5709) in cnic_setup_5709_context()
4387 for (i = 0; i < cp->ctx_blks; i++) { in cnic_setup_5709_context()
4389 u32 idx = cp->ctx_arr[i].cid / cp->cids_per_blk; in cnic_setup_5709_context()
4392 memset(cp->ctx_arr[i].ctx, 0, CNIC_PAGE_SIZE); in cnic_setup_5709_context()
4395 (cp->ctx_arr[i].mapping & 0xffffffff) | valid_bit); in cnic_setup_5709_context()
4397 (u64) cp->ctx_arr[i].mapping >> 32); in cnic_setup_5709_context()
4417 struct cnic_local *cp = dev->cnic_priv; in cnic_free_irq() local
4418 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_free_irq()
4421 cp->disable_int_sync(dev); in cnic_free_irq()
4422 tasklet_kill(&cp->cnic_irq_task); in cnic_free_irq()
4429 struct cnic_local *cp = dev->cnic_priv; in cnic_request_irq() local
4430 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_request_irq()
4435 tasklet_disable(&cp->cnic_irq_task); in cnic_request_irq()
4442 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2_irq() local
4443 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_init_bnx2_irq()
4447 int sblk_num = cp->status_blk_num; in cnic_init_bnx2_irq()
4457 cp->last_status_idx = cp->status_blk.bnx2->status_idx; in cnic_init_bnx2_irq()
4458 tasklet_setup(&cp->cnic_irq_task, cnic_service_bnx2_msix); in cnic_init_bnx2_irq()
4463 while (cp->status_blk.bnx2->status_completion_producer_index && in cnic_init_bnx2_irq()
4471 if (cp->status_blk.bnx2->status_completion_producer_index) { in cnic_init_bnx2_irq()
4477 struct status_block *sblk = cp->status_blk.gen; in cnic_init_bnx2_irq()
4501 struct cnic_local *cp = dev->cnic_priv; in cnic_enable_bnx2_int() local
4502 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_enable_bnx2_int()
4507 CNIC_WR(dev, BNX2_PCICFG_INT_ACK_CMD, cp->int_num | in cnic_enable_bnx2_int()
4508 BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | cp->last_status_idx); in cnic_enable_bnx2_int()
4513 struct cnic_local *cp = dev->cnic_priv; in cnic_disable_bnx2_int_sync() local
4514 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_disable_bnx2_int_sync()
4519 CNIC_WR(dev, BNX2_PCICFG_INT_ACK_CMD, cp->int_num | in cnic_disable_bnx2_int_sync()
4527 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2_tx_ring() local
4528 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_init_bnx2_tx_ring()
4529 struct cnic_uio_dev *udev = cp->udev; in cnic_init_bnx2_tx_ring()
4535 struct status_block *s_blk = cp->status_blk.gen; in cnic_init_bnx2_tx_ring()
4537 sb_id = cp->status_blk_num; in cnic_init_bnx2_tx_ring()
4539 cp->tx_cons_ptr = &s_blk->status_tx_quick_consumer_index2; in cnic_init_bnx2_tx_ring()
4541 struct status_block_msix *sblk = cp->status_blk.bnx2; in cnic_init_bnx2_tx_ring()
4546 cp->tx_cons_ptr = &sblk->status_tx_quick_consumer_index; in cnic_init_bnx2_tx_ring()
4548 cp->tx_cons = *cp->tx_cons_ptr; in cnic_init_bnx2_tx_ring()
4551 if (BNX2_CHIP(cp) == BNX2_CHIP_5709) { in cnic_init_bnx2_tx_ring()
4594 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2_rx_ring() local
4595 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_init_bnx2_rx_ring()
4596 struct cnic_uio_dev *udev = cp->udev; in cnic_init_bnx2_rx_ring()
4600 struct status_block *s_blk = cp->status_blk.gen; in cnic_init_bnx2_rx_ring()
4603 sb_id = cp->status_blk_num; in cnic_init_bnx2_rx_ring()
4605 cp->rx_cons_ptr = &s_blk->status_rx_quick_consumer_index2; in cnic_init_bnx2_rx_ring()
4609 struct status_block_msix *sblk = cp->status_blk.bnx2; in cnic_init_bnx2_rx_ring()
4611 cp->rx_cons_ptr = &sblk->status_rx_quick_consumer_index; in cnic_init_bnx2_rx_ring()
4616 while (!(*cp->rx_cons_ptr != 0) && i < 10) { in cnic_init_bnx2_rx_ring()
4622 cp->rx_cons = *cp->rx_cons_ptr; in cnic_init_bnx2_rx_ring()
4638 int n = (i % cp->l2_rx_ring_size) + 1; in cnic_init_bnx2_rx_ring()
4640 buf_map = udev->l2_buf_map + (n * cp->l2_single_buf_size); in cnic_init_bnx2_rx_ring()
4641 rxbd->rx_bd_len = cp->l2_single_buf_size; in cnic_init_bnx2_rx_ring()
4672 struct cnic_local *cp = dev->cnic_priv; in cnic_set_bnx2_mac() local
4675 val = cp->func << 2; in cnic_set_bnx2_mac()
4677 cp->shmem_base = cnic_reg_rd_ind(dev, BNX2_SHM_HDR_ADDR_0 + val); in cnic_set_bnx2_mac()
4679 val = cnic_reg_rd_ind(dev, cp->shmem_base + in cnic_set_bnx2_mac()
4686 val = cnic_reg_rd_ind(dev, cp->shmem_base + in cnic_set_bnx2_mac()
4696 if (BNX2_CHIP(cp) != BNX2_CHIP_5709) in cnic_set_bnx2_mac()
4706 struct cnic_local *cp = dev->cnic_priv; in cnic_start_bnx2_hw() local
4707 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_start_bnx2_hw()
4708 struct status_block *sblk = cp->status_blk.gen; in cnic_start_bnx2_hw()
4735 cp->kwq_io_addr = MB_GET_CID_ADDR(KWQ_CID) + L5_KRNLQ_HOST_QIDX; in cnic_start_bnx2_hw()
4737 cp->max_kwq_idx = MAX_KWQ_IDX; in cnic_start_bnx2_hw()
4738 cp->kwq_prod_idx = 0; in cnic_start_bnx2_hw()
4739 cp->kwq_con_idx = 0; in cnic_start_bnx2_hw()
4740 set_bit(CNIC_LCL_FL_KWQ_INIT, &cp->cnic_local_flags); in cnic_start_bnx2_hw()
4742 if (BNX2_CHIP(cp) == BNX2_CHIP_5706 || BNX2_CHIP(cp) == BNX2_CHIP_5708) in cnic_start_bnx2_hw()
4743 cp->kwq_con_idx_ptr = &sblk->status_rx_quick_consumer_index15; in cnic_start_bnx2_hw()
4745 cp->kwq_con_idx_ptr = &sblk->status_cmd_consumer_index; in cnic_start_bnx2_hw()
4758 val = (u32) ((u64) cp->kwq_info.pgtbl_map >> 32); in cnic_start_bnx2_hw()
4761 val = (u32) cp->kwq_info.pgtbl_map; in cnic_start_bnx2_hw()
4765 cp->kcq1.io_addr = MB_GET_CID_ADDR(KCQ_CID) + L5_KRNLQ_HOST_QIDX; in cnic_start_bnx2_hw()
4767 cp->kcq1.sw_prod_idx = 0; in cnic_start_bnx2_hw()
4768 cp->kcq1.hw_prod_idx_ptr = in cnic_start_bnx2_hw()
4771 cp->kcq1.status_idx_ptr = &sblk->status_idx; in cnic_start_bnx2_hw()
4784 val = (u32) ((u64) cp->kcq1.dma.pgtbl_map >> 32); in cnic_start_bnx2_hw()
4787 val = (u32) cp->kcq1.dma.pgtbl_map; in cnic_start_bnx2_hw()
4790 cp->int_num = 0; in cnic_start_bnx2_hw()
4792 struct status_block_msix *msblk = cp->status_blk.bnx2; in cnic_start_bnx2_hw()
4793 u32 sb_id = cp->status_blk_num; in cnic_start_bnx2_hw()
4796 cp->kcq1.hw_prod_idx_ptr = in cnic_start_bnx2_hw()
4798 cp->kcq1.status_idx_ptr = &msblk->status_idx; in cnic_start_bnx2_hw()
4799 cp->kwq_con_idx_ptr = &msblk->status_cmd_consumer_index; in cnic_start_bnx2_hw()
4800 cp->int_num = sb_id << BNX2_PCICFG_INT_ACK_CMD_INT_NUM_SHIFT; in cnic_start_bnx2_hw()
4818 /* Set the CP and COM doorbells. These two processors polls the in cnic_start_bnx2_hw()
4842 struct cnic_local *cp = dev->cnic_priv; in cnic_setup_bnx2x_context() local
4843 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_setup_bnx2x_context()
4847 for (i = 0; i < cp->ctx_blks; i++) { in cnic_setup_bnx2x_context()
4848 struct cnic_ctx *ctx = &cp->ctx_arr[i]; in cnic_setup_bnx2x_context()
4851 if (cp->ctx_align) { in cnic_setup_bnx2x_context()
4852 unsigned long mask = cp->ctx_align - 1; in cnic_setup_bnx2x_context()
4863 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2x_irq() local
4864 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_init_bnx2x_irq()
4867 tasklet_setup(&cp->cnic_irq_task, cnic_service_bnx2x_bh); in cnic_init_bnx2x_irq()
4895 struct cnic_local *cp = dev->cnic_priv; in cnic_enable_bnx2x_int() local
4897 u8 sb_id = cp->status_blk_num; in cnic_enable_bnx2x_int()
4914 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2x_tx_ring() local
4916 struct cnic_uio_dev *udev = cp->udev; in cnic_init_bnx2x_tx_ring()
4919 struct host_sp_status_block *sb = cp->bnx2x_def_status_blk; in cnic_init_bnx2x_tx_ring()
4921 u32 cli = cp->ethdev->iscsi_l2_client_id; in cnic_init_bnx2x_tx_ring()
4973 cp->tx_cons_ptr = in cnic_init_bnx2x_tx_ring()
4980 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2x_rx_ring() local
4982 struct cnic_uio_dev *udev = cp->udev; in cnic_init_bnx2x_rx_ring()
4987 struct host_sp_status_block *sb = cp->bnx2x_def_status_blk; in cnic_init_bnx2x_rx_ring()
4989 u32 cli = cp->ethdev->iscsi_l2_client_id; in cnic_init_bnx2x_rx_ring()
4998 data->general.mtu = cpu_to_le16(cp->l2_single_buf_size - 14); in cnic_init_bnx2x_rx_ring()
5003 int n = (i % cp->l2_rx_ring_size) + 1; in cnic_init_bnx2x_rx_ring()
5005 buf_map = udev->l2_buf_map + (n * cp->l2_single_buf_size); in cnic_init_bnx2x_rx_ring()
5034 data->rx.max_bytes_on_bd = cpu_to_le16(cp->l2_single_buf_size); in cnic_init_bnx2x_rx_ring()
5040 cp->rx_cons_ptr = in cnic_init_bnx2x_rx_ring()
5042 cp->rx_cons = *cp->rx_cons_ptr; in cnic_init_bnx2x_rx_ring()
5047 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2x_kcq() local
5051 cp->kcq1.io_addr = BAR_CSTRORM_INTMEM + in cnic_init_bnx2x_kcq()
5053 cp->kcq1.sw_prod_idx = 0; in cnic_init_bnx2x_kcq()
5056 struct host_hc_status_block_e2 *sb = cp->status_blk.gen; in cnic_init_bnx2x_kcq()
5058 cp->kcq1.hw_prod_idx_ptr = in cnic_init_bnx2x_kcq()
5060 cp->kcq1.status_idx_ptr = in cnic_init_bnx2x_kcq()
5063 struct host_hc_status_block_e1x *sb = cp->status_blk.gen; in cnic_init_bnx2x_kcq()
5065 cp->kcq1.hw_prod_idx_ptr = in cnic_init_bnx2x_kcq()
5067 cp->kcq1.status_idx_ptr = in cnic_init_bnx2x_kcq()
5072 struct host_hc_status_block_e2 *sb = cp->status_blk.gen; in cnic_init_bnx2x_kcq()
5074 cp->kcq2.io_addr = BAR_USTRORM_INTMEM + in cnic_init_bnx2x_kcq()
5076 cp->kcq2.sw_prod_idx = 0; in cnic_init_bnx2x_kcq()
5077 cp->kcq2.hw_prod_idx_ptr = in cnic_init_bnx2x_kcq()
5079 cp->kcq2.status_idx_ptr = in cnic_init_bnx2x_kcq()
5086 struct cnic_local *cp = dev->cnic_priv; in cnic_start_bnx2x_hw() local
5088 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_start_bnx2x_hw()
5093 cp->func = bp->pf_num; in cnic_start_bnx2x_hw()
5097 ret = cnic_init_id_tbl(&cp->cid_tbl, MAX_ISCSI_TBL_SZ, in cnic_start_bnx2x_hw()
5098 cp->iscsi_start_cid, 0); in cnic_start_bnx2x_hw()
5104 ret = cnic_init_id_tbl(&cp->fcoe_cid_tbl, dev->max_fcoe_conn, in cnic_start_bnx2x_hw()
5105 cp->fcoe_start_cid, 0); in cnic_start_bnx2x_hw()
5111 cp->bnx2x_igu_sb_id = ethdev->irq_arr[0].status_blk_num2; in cnic_start_bnx2x_hw()
5116 CNIC_WR16(dev, cp->kcq1.io_addr, MAX_KCQ_IDX); in cnic_start_bnx2x_hw()
5121 cp->kcq1.dma.pg_map_arr[1] & 0xffffffff); in cnic_start_bnx2x_hw()
5124 (u64) cp->kcq1.dma.pg_map_arr[1] >> 32); in cnic_start_bnx2x_hw()
5127 cp->kcq1.dma.pg_map_arr[0] & 0xffffffff); in cnic_start_bnx2x_hw()
5130 (u64) cp->kcq1.dma.pg_map_arr[0] >> 32); in cnic_start_bnx2x_hw()
5134 CSTORM_ISCSI_EQ_SB_NUM_OFFSET(pfid, 0), cp->status_blk_num); in cnic_start_bnx2x_hw()
5141 cp->gbl_buf_info.pg_map_arr[0] & 0xffffffff); in cnic_start_bnx2x_hw()
5144 (u64) cp->gbl_buf_info.pg_map_arr[0] >> 32); in cnic_start_bnx2x_hw()
5161 struct cnic_local *cp = dev->cnic_priv; in cnic_init_rings() local
5163 struct cnic_uio_dev *udev = cp->udev; in cnic_init_rings()
5165 if (test_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags)) in cnic_init_rings()
5171 set_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags); in cnic_init_rings()
5173 u32 cli = cp->ethdev->iscsi_l2_client_id; in cnic_init_rings()
5174 u32 cid = cp->ethdev->iscsi_l2_cid; in cnic_init_rings()
5195 set_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags); in cnic_init_rings()
5210 set_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags); in cnic_init_rings()
5216 while (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags) && in cnic_init_rings()
5220 if (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags)) in cnic_init_rings()
5233 struct cnic_local *cp = dev->cnic_priv; in cnic_shutdown_rings() local
5234 struct cnic_uio_dev *udev = cp->udev; in cnic_shutdown_rings()
5237 if (!test_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags)) in cnic_shutdown_rings()
5243 u32 cli = cp->ethdev->iscsi_l2_client_id; in cnic_shutdown_rings()
5244 u32 cid = cp->ethdev->iscsi_l2_cid; in cnic_shutdown_rings()
5250 set_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags); in cnic_shutdown_rings()
5257 while (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags) && in cnic_shutdown_rings()
5261 if (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags)) in cnic_shutdown_rings()
5271 clear_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags); in cnic_shutdown_rings()
5278 struct cnic_local *cp = dev->cnic_priv; in cnic_register_netdev() local
5279 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_register_netdev()
5288 err = ethdev->drv_register_cnic(dev->netdev, cp->cnic_ops, dev); in cnic_register_netdev()
5304 struct cnic_local *cp = dev->cnic_priv; in cnic_unregister_netdev() local
5305 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_unregister_netdev()
5315 struct cnic_local *cp = dev->cnic_priv; in cnic_start_hw() local
5316 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_start_hw()
5324 cp->func = PCI_FUNC(dev->pcidev->devfn); in cnic_start_hw()
5325 cp->status_blk.gen = ethdev->irq_arr[0].status_blk; in cnic_start_hw()
5326 cp->status_blk_num = ethdev->irq_arr[0].status_blk_num; in cnic_start_hw()
5328 err = cp->alloc_resc(dev); in cnic_start_hw()
5334 err = cp->start_hw(dev); in cnic_start_hw()
5344 cp->enable_int(dev); in cnic_start_hw()
5350 cp->stop_hw(dev); in cnic_start_hw()
5352 cp->free_resc(dev); in cnic_start_hw()
5376 struct cnic_local *cp = dev->cnic_priv; in cnic_stop_bnx2x_hw() local
5379 u32 sb_id = cp->status_blk_num; in cnic_stop_bnx2x_hw()
5399 *cp->kcq1.hw_prod_idx_ptr = 0; in cnic_stop_bnx2x_hw()
5402 CNIC_WR16(dev, cp->kcq1.io_addr, 0); in cnic_stop_bnx2x_hw()
5409 struct cnic_local *cp = dev->cnic_priv; in cnic_stop_hw() local
5415 while (cp->udev && cp->udev->uio_dev != -1 && i < 15) { in cnic_stop_hw()
5420 cp->stop_cm(dev); in cnic_stop_hw()
5421 cp->ethdev->drv_state &= ~CNIC_DRV_STATE_HANDLES_IRQ; in cnic_stop_hw()
5423 RCU_INIT_POINTER(cp->ulp_ops[CNIC_ULP_L4], NULL); in cnic_stop_hw()
5426 cp->stop_hw(dev); in cnic_stop_hw()
5450 struct cnic_local *cp = dev->cnic_priv; in cnic_get_fc_npiv_tbl() local
5460 ret = cp->ethdev->drv_get_fc_npiv_tbl(dev->netdev, npiv_tbl); in cnic_get_fc_npiv_tbl()
5468 struct cnic_local *cp; in cnic_alloc_dev() local
5485 cp = cdev->cnic_priv; in cnic_alloc_dev()
5486 cp->dev = cdev; in cnic_alloc_dev()
5487 cp->l2_single_buf_size = 0x400; in cnic_alloc_dev()
5488 cp->l2_rx_ring_size = 3; in cnic_alloc_dev()
5490 spin_lock_init(&cp->cnic_ulp_lock); in cnic_alloc_dev()
5501 struct cnic_local *cp; in init_bnx2_cnic() local
5532 cp = cdev->cnic_priv; in init_bnx2_cnic()
5533 cp->ethdev = ethdev; in init_bnx2_cnic()
5535 cp->chip_id = ethdev->chip_id; in init_bnx2_cnic()
5539 cp->cnic_ops = &cnic_bnx2_ops; in init_bnx2_cnic()
5540 cp->start_hw = cnic_start_bnx2_hw; in init_bnx2_cnic()
5541 cp->stop_hw = cnic_stop_bnx2_hw; in init_bnx2_cnic()
5542 cp->setup_pgtbl = cnic_setup_page_tbl; in init_bnx2_cnic()
5543 cp->alloc_resc = cnic_alloc_bnx2_resc; in init_bnx2_cnic()
5544 cp->free_resc = cnic_free_resc; in init_bnx2_cnic()
5545 cp->start_cm = cnic_cm_init_bnx2_hw; in init_bnx2_cnic()
5546 cp->stop_cm = cnic_cm_stop_bnx2_hw; in init_bnx2_cnic()
5547 cp->enable_int = cnic_enable_bnx2_int; in init_bnx2_cnic()
5548 cp->disable_int_sync = cnic_disable_bnx2_int_sync; in init_bnx2_cnic()
5549 cp->close_conn = cnic_close_bnx2_conn; in init_bnx2_cnic()
5561 struct cnic_local *cp; in init_bnx2x_cnic() local
5585 cp = cdev->cnic_priv; in init_bnx2x_cnic()
5586 cp->ethdev = ethdev; in init_bnx2x_cnic()
5588 cp->chip_id = ethdev->chip_id; in init_bnx2x_cnic()
5604 cp->cnic_ops = &cnic_bnx2x_ops; in init_bnx2x_cnic()
5605 cp->start_hw = cnic_start_bnx2x_hw; in init_bnx2x_cnic()
5606 cp->stop_hw = cnic_stop_bnx2x_hw; in init_bnx2x_cnic()
5607 cp->setup_pgtbl = cnic_setup_page_tbl_le; in init_bnx2x_cnic()
5608 cp->alloc_resc = cnic_alloc_bnx2x_resc; in init_bnx2x_cnic()
5609 cp->free_resc = cnic_free_resc; in init_bnx2x_cnic()
5610 cp->start_cm = cnic_cm_init_bnx2x_hw; in init_bnx2x_cnic()
5611 cp->stop_cm = cnic_cm_stop_bnx2x_hw; in init_bnx2x_cnic()
5612 cp->enable_int = cnic_enable_bnx2x_int; in init_bnx2x_cnic()
5613 cp->disable_int_sync = cnic_disable_bnx2x_int_sync; in init_bnx2x_cnic()
5615 cp->ack_int = cnic_ack_bnx2x_e2_msix; in init_bnx2x_cnic()
5616 cp->arm_int = cnic_arm_bnx2x_e2_msix; in init_bnx2x_cnic()
5618 cp->ack_int = cnic_ack_bnx2x_msix; in init_bnx2x_cnic()
5619 cp->arm_int = cnic_arm_bnx2x_msix; in init_bnx2x_cnic()
5621 cp->close_conn = cnic_close_bnx2x_conn; in init_bnx2x_cnic()
5647 static void cnic_rcv_netevent(struct cnic_local *cp, unsigned long event, in cnic_rcv_netevent() argument
5657 ulp_ops = rcu_dereference_protected(cp->ulp_ops[if_type], in cnic_rcv_netevent()
5664 ctx = cp->ulp_handle[if_type]; in cnic_rcv_netevent()
5666 set_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_rcv_netevent()
5671 clear_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_rcv_netevent()
5694 struct cnic_local *cp = dev->cnic_priv; in cnic_netdev_event() local
5710 cnic_rcv_netevent(cp, event, 0); in cnic_netdev_event()