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()
204 struct cnic_local *cp = dev->cnic_priv; in cnic_ctx_tbl_wr() local
205 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_ctx_tbl_wr()
217 struct cnic_local *cp = dev->cnic_priv; in cnic_ring_ctl() local
218 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_ring_ctl()
234 struct cnic_local *cp = dev->cnic_priv; in cnic_reg_wr_ind() local
235 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_reg_wr_ind()
247 struct cnic_local *cp = dev->cnic_priv; in cnic_reg_rd_ind() local
248 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_reg_rd_ind()
260 struct cnic_local *cp = dev->cnic_priv; in cnic_ulp_ctl() local
261 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_ulp_ctl()
285 struct cnic_local *cp = dev->cnic_priv; in cnic_spq_completion() local
286 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_spq_completion()
294 static int cnic_get_l5_cid(struct cnic_local *cp, u32 cid, u32 *l5_cid) in cnic_get_l5_cid() argument
298 if (!cp->ctx_tbl) in cnic_get_l5_cid()
301 for (i = 0; i < cp->max_cid_space; i++) { in cnic_get_l5_cid()
302 if (cp->ctx_tbl[i].cid == cid) { in cnic_get_l5_cid()
310 static int cnic_send_nlmsg(struct cnic_local *cp, u32 type, in cnic_send_nlmsg() argument
318 struct cnic_uio_dev *udev = cp->udev; in cnic_send_nlmsg()
347 ulp_ops = rcu_dereference(cp->ulp_ops[CNIC_ULP_ISCSI]); in cnic_send_nlmsg()
350 cp->ulp_handle[CNIC_ULP_ISCSI], in cnic_send_nlmsg()
371 struct cnic_local *cp; in cnic_iscsi_nl_msg_recv() local
380 cp = dev->cnic_priv; in cnic_iscsi_nl_msg_recv()
385 if (!rcu_access_pointer(cp->ulp_ops[CNIC_ULP_L4])) { in cnic_iscsi_nl_msg_recv()
389 csk = &cp->csk_tbl[l5_cid]; in cnic_iscsi_nl_msg_recv()
409 cnic_cm_upcall(cp, csk, in cnic_iscsi_nl_msg_recv()
483 struct cnic_local *cp = dev->cnic_priv; in cnic_register_driver() local
485 clear_bit(ULP_F_INIT, &cp->ulp_flags[ulp_type]); in cnic_register_driver()
496 struct cnic_local *cp = dev->cnic_priv; in cnic_register_driver() local
498 if (!test_and_set_bit(ULP_F_INIT, &cp->ulp_flags[ulp_type])) in cnic_register_driver()
525 struct cnic_local *cp = dev->cnic_priv; in cnic_unregister_driver() local
527 if (rcu_access_pointer(cp->ulp_ops[ulp_type])) { in cnic_unregister_driver()
561 struct cnic_local *cp = dev->cnic_priv; in cnic_register_device() local
575 if (rcu_access_pointer(cp->ulp_ops[ulp_type])) { in cnic_register_device()
582 clear_bit(ULP_F_START, &cp->ulp_flags[ulp_type]); in cnic_register_device()
583 cp->ulp_handle[ulp_type] = ulp_ctx; in cnic_register_device()
585 rcu_assign_pointer(cp->ulp_ops[ulp_type], ulp_ops); in cnic_register_device()
589 if (!test_and_set_bit(ULP_F_START, &cp->ulp_flags[ulp_type])) in cnic_register_device()
590 ulp_ops->cnic_start(cp->ulp_handle[ulp_type]); in cnic_register_device()
603 struct cnic_local *cp = dev->cnic_priv; in cnic_unregister_device() local
612 cnic_send_nlmsg(cp, ISCSI_KEVENT_IF_DOWN, NULL); in cnic_unregister_device()
615 if (rcu_access_pointer(cp->ulp_ops[ulp_type])) { in cnic_unregister_device()
616 RCU_INIT_POINTER(cp->ulp_ops[ulp_type], NULL); in cnic_unregister_device()
631 while (test_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[ulp_type]) && in cnic_unregister_device()
636 if (test_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[ulp_type])) in cnic_unregister_device()
777 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_dma() local
805 cp->setup_pgtbl(dev, dma); in cnic_alloc_dma()
816 struct cnic_local *cp = dev->cnic_priv; in cnic_free_context() local
819 for (i = 0; i < cp->ctx_blks; i++) { in cnic_free_context()
820 if (cp->ctx_arr[i].ctx) { in cnic_free_context()
821 dma_free_coherent(&dev->pcidev->dev, cp->ctx_blk_size, in cnic_free_context()
822 cp->ctx_arr[i].ctx, in cnic_free_context()
823 cp->ctx_arr[i].mapping); in cnic_free_context()
824 cp->ctx_arr[i].ctx = NULL; in cnic_free_context()
868 struct cnic_local *cp = dev->cnic_priv; in cnic_free_resc() local
869 struct cnic_uio_dev *udev = cp->udev; in cnic_free_resc()
873 cp->udev = NULL; in cnic_free_resc()
879 kfree(cp->ctx_arr); in cnic_free_resc()
880 cp->ctx_arr = NULL; in cnic_free_resc()
881 cp->ctx_blks = 0; in cnic_free_resc()
883 cnic_free_dma(dev, &cp->gbl_buf_info); in cnic_free_resc()
884 cnic_free_dma(dev, &cp->kwq_info); in cnic_free_resc()
885 cnic_free_dma(dev, &cp->kwq_16_data_info); in cnic_free_resc()
886 cnic_free_dma(dev, &cp->kcq2.dma); in cnic_free_resc()
887 cnic_free_dma(dev, &cp->kcq1.dma); in cnic_free_resc()
888 kfree(cp->iscsi_tbl); in cnic_free_resc()
889 cp->iscsi_tbl = NULL; in cnic_free_resc()
890 kfree(cp->ctx_tbl); in cnic_free_resc()
891 cp->ctx_tbl = NULL; in cnic_free_resc()
893 cnic_free_id_tbl(&cp->fcoe_cid_tbl); in cnic_free_resc()
894 cnic_free_id_tbl(&cp->cid_tbl); in cnic_free_resc()
899 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_context() local
901 if (BNX2_CHIP(cp) == BNX2_CHIP_5709) { in cnic_alloc_context()
904 cp->ctx_blk_size = CNIC_PAGE_SIZE; in cnic_alloc_context()
905 cp->cids_per_blk = CNIC_PAGE_SIZE / 128; in cnic_alloc_context()
906 arr_size = BNX2_MAX_CID / cp->cids_per_blk * in cnic_alloc_context()
908 cp->ctx_arr = kzalloc(arr_size, GFP_KERNEL); in cnic_alloc_context()
909 if (cp->ctx_arr == NULL) in cnic_alloc_context()
924 for (j = lo; j < hi; j += cp->cids_per_blk, k++) in cnic_alloc_context()
925 cp->ctx_arr[k].cid = j; in cnic_alloc_context()
928 cp->ctx_blks = k; in cnic_alloc_context()
929 if (cp->ctx_blks >= (BNX2_MAX_CID / cp->cids_per_blk)) { in cnic_alloc_context()
930 cp->ctx_blks = 0; in cnic_alloc_context()
934 for (i = 0; i < cp->ctx_blks; i++) { in cnic_alloc_context()
935 cp->ctx_arr[i].ctx = in cnic_alloc_context()
938 &cp->ctx_arr[i].mapping, in cnic_alloc_context()
940 if (cp->ctx_arr[i].ctx == NULL) in cnic_alloc_context()
1012 struct cnic_local *cp = udev->dev->cnic_priv; in __cnic_alloc_uio_rings() local
1024 udev->l2_buf_size = (cp->l2_rx_ring_size + 1) * cp->l2_single_buf_size; in __cnic_alloc_uio_rings()
1040 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_uio_rings() local
1050 cp->udev = udev; in cnic_alloc_uio_rings()
1071 cp->udev = udev; in cnic_alloc_uio_rings()
1082 struct cnic_local *cp = dev->cnic_priv; in cnic_init_uio() local
1083 struct cnic_uio_dev *udev = cp->udev; in cnic_init_uio()
1099 uinfo->mem[1].addr = (unsigned long) cp->status_blk.gen & in cnic_init_uio()
1101 if (cp->ethdev->drv_state & CNIC_DRV_STATE_USING_MSIX) in cnic_init_uio()
1110 uinfo->mem[1].addr = (unsigned long) cp->bnx2x_def_status_blk & in cnic_init_uio()
1112 uinfo->mem[1].size = sizeof(*cp->bnx2x_def_status_blk); in cnic_init_uio()
1148 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_bnx2_resc() local
1151 ret = cnic_alloc_dma(dev, &cp->kwq_info, KWQ_PAGE_CNT, 1); in cnic_alloc_bnx2_resc()
1154 cp->kwq = (struct kwqe **) cp->kwq_info.pg_arr; in cnic_alloc_bnx2_resc()
1156 ret = cnic_alloc_kcq(dev, &cp->kcq1, true); in cnic_alloc_bnx2_resc()
1181 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_bnx2x_context() local
1183 int ctx_blk_size = cp->ethdev->ctx_blk_size; in cnic_alloc_bnx2x_context()
1186 total_mem = BNX2X_CONTEXT_MEM_SIZE * cp->max_cid_space; in cnic_alloc_bnx2x_context()
1191 if (blks > cp->ethdev->ctx_tbl_len) in cnic_alloc_bnx2x_context()
1194 cp->ctx_arr = kcalloc(blks, sizeof(struct cnic_ctx), GFP_KERNEL); in cnic_alloc_bnx2x_context()
1195 if (cp->ctx_arr == NULL) in cnic_alloc_bnx2x_context()
1198 cp->ctx_blks = blks; in cnic_alloc_bnx2x_context()
1199 cp->ctx_blk_size = ctx_blk_size; in cnic_alloc_bnx2x_context()
1201 cp->ctx_align = 0; in cnic_alloc_bnx2x_context()
1203 cp->ctx_align = ctx_blk_size; in cnic_alloc_bnx2x_context()
1205 cp->cids_per_blk = ctx_blk_size / BNX2X_CONTEXT_MEM_SIZE; in cnic_alloc_bnx2x_context()
1208 cp->ctx_arr[i].ctx = in cnic_alloc_bnx2x_context()
1209 dma_alloc_coherent(&dev->pcidev->dev, cp->ctx_blk_size, in cnic_alloc_bnx2x_context()
1210 &cp->ctx_arr[i].mapping, in cnic_alloc_bnx2x_context()
1212 if (cp->ctx_arr[i].ctx == NULL) in cnic_alloc_bnx2x_context()
1215 if (cp->ctx_align && cp->ctx_blk_size == ctx_blk_size) { in cnic_alloc_bnx2x_context()
1216 if (cp->ctx_arr[i].mapping & (cp->ctx_align - 1)) { in cnic_alloc_bnx2x_context()
1218 cp->ctx_blk_size += cp->ctx_align; in cnic_alloc_bnx2x_context()
1229 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_bnx2x_resc() local
1231 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_alloc_bnx2x_resc()
1234 struct cnic_dma *kwq_16_dma = &cp->kwq_16_data_info; in cnic_alloc_bnx2x_resc()
1236 cp->max_cid_space = MAX_ISCSI_TBL_SZ; in cnic_alloc_bnx2x_resc()
1237 cp->iscsi_start_cid = start_cid; in cnic_alloc_bnx2x_resc()
1238 cp->fcoe_start_cid = start_cid + MAX_ISCSI_TBL_SZ; in cnic_alloc_bnx2x_resc()
1241 cp->max_cid_space += dev->max_fcoe_conn; in cnic_alloc_bnx2x_resc()
1242 cp->fcoe_init_cid = ethdev->fcoe_init_cid; in cnic_alloc_bnx2x_resc()
1243 if (!cp->fcoe_init_cid) in cnic_alloc_bnx2x_resc()
1244 cp->fcoe_init_cid = 0x10; in cnic_alloc_bnx2x_resc()
1247 cp->iscsi_tbl = kzalloc(sizeof(struct cnic_iscsi) * MAX_ISCSI_TBL_SZ, in cnic_alloc_bnx2x_resc()
1249 if (!cp->iscsi_tbl) in cnic_alloc_bnx2x_resc()
1252 cp->ctx_tbl = kzalloc(sizeof(struct cnic_context) * in cnic_alloc_bnx2x_resc()
1253 cp->max_cid_space, GFP_KERNEL); in cnic_alloc_bnx2x_resc()
1254 if (!cp->ctx_tbl) in cnic_alloc_bnx2x_resc()
1258 cp->ctx_tbl[i].proto.iscsi = &cp->iscsi_tbl[i]; in cnic_alloc_bnx2x_resc()
1259 cp->ctx_tbl[i].ulp_proto_id = CNIC_ULP_ISCSI; in cnic_alloc_bnx2x_resc()
1262 for (i = MAX_ISCSI_TBL_SZ; i < cp->max_cid_space; i++) in cnic_alloc_bnx2x_resc()
1263 cp->ctx_tbl[i].ulp_proto_id = CNIC_ULP_FCOE; in cnic_alloc_bnx2x_resc()
1265 pages = CNIC_PAGE_ALIGN(cp->max_cid_space * CNIC_KWQ16_DATA_SIZE) / in cnic_alloc_bnx2x_resc()
1273 for (i = 0, j = 0; i < cp->max_cid_space; i++) { in cnic_alloc_bnx2x_resc()
1276 cp->ctx_tbl[i].kwqe_data = kwq_16_dma->pg_arr[j] + off; in cnic_alloc_bnx2x_resc()
1277 cp->ctx_tbl[i].kwqe_data_mapping = kwq_16_dma->pg_map_arr[j] + in cnic_alloc_bnx2x_resc()
1284 ret = cnic_alloc_kcq(dev, &cp->kcq1, false); in cnic_alloc_bnx2x_resc()
1289 ret = cnic_alloc_kcq(dev, &cp->kcq2, true); in cnic_alloc_bnx2x_resc()
1295 ret = cnic_alloc_dma(dev, &cp->gbl_buf_info, pages, 0); in cnic_alloc_bnx2x_resc()
1303 if (cp->ethdev->drv_state & CNIC_DRV_STATE_NO_ISCSI) in cnic_alloc_bnx2x_resc()
1306 cp->bnx2x_def_status_blk = cp->ethdev->irq_arr[1].status_blk; in cnic_alloc_bnx2x_resc()
1308 cp->l2_rx_ring_size = 15; in cnic_alloc_bnx2x_resc()
1325 static inline u32 cnic_kwq_avail(struct cnic_local *cp) in cnic_kwq_avail() argument
1327 return cp->max_kwq_idx - in cnic_kwq_avail()
1328 ((cp->kwq_prod_idx - cp->kwq_con_idx) & cp->max_kwq_idx); in cnic_kwq_avail()
1334 struct cnic_local *cp = dev->cnic_priv; in cnic_submit_bnx2_kwqes() local
1341 spin_lock_bh(&cp->cnic_ulp_lock); in cnic_submit_bnx2_kwqes()
1342 if (num_wqes > cnic_kwq_avail(cp) && in cnic_submit_bnx2_kwqes()
1343 !test_bit(CNIC_LCL_FL_KWQ_INIT, &cp->cnic_local_flags)) { in cnic_submit_bnx2_kwqes()
1344 spin_unlock_bh(&cp->cnic_ulp_lock); in cnic_submit_bnx2_kwqes()
1348 clear_bit(CNIC_LCL_FL_KWQ_INIT, &cp->cnic_local_flags); in cnic_submit_bnx2_kwqes()
1350 prod = cp->kwq_prod_idx; in cnic_submit_bnx2_kwqes()
1353 prod_qe = &cp->kwq[KWQ_PG(sw_prod)][KWQ_IDX(sw_prod)]; in cnic_submit_bnx2_kwqes()
1358 cp->kwq_prod_idx = prod; in cnic_submit_bnx2_kwqes()
1360 CNIC_WR16(dev, cp->kwq_io_addr, cp->kwq_prod_idx); in cnic_submit_bnx2_kwqes()
1362 spin_unlock_bh(&cp->cnic_ulp_lock); in cnic_submit_bnx2_kwqes()
1366 static void *cnic_get_kwqe_16_data(struct cnic_local *cp, u32 l5_cid, in cnic_get_kwqe_16_data() argument
1369 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_get_kwqe_16_data()
1381 struct cnic_local *cp = dev->cnic_priv; in cnic_submit_kwqe_16() local
1403 spin_lock_bh(&cp->cnic_ulp_lock); in cnic_submit_kwqe_16()
1404 ret = cp->ethdev->drv_submit_kwqes_16(dev->netdev, kwq, 1); in cnic_submit_kwqe_16()
1405 spin_unlock_bh(&cp->cnic_ulp_lock); in cnic_submit_kwqe_16()
1416 struct cnic_local *cp = dev->cnic_priv; in cnic_reply_bnx2x_kcqes() local
1420 ulp_ops = rcu_dereference(cp->ulp_ops[ulp_type]); in cnic_reply_bnx2x_kcqes()
1422 ulp_ops->indicate_kcqes(cp->ulp_handle[ulp_type], in cnic_reply_bnx2x_kcqes()
1451 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_iscsi_init1() local
1457 cp->num_iscsi_tasks = req1->num_tasks_per_conn; in cnic_bnx2x_iscsi_init1()
1458 cp->num_ccells = req1->num_ccells_per_conn; in cnic_bnx2x_iscsi_init1()
1459 cp->task_array_size = BNX2X_ISCSI_TASK_CONTEXT_SIZE * in cnic_bnx2x_iscsi_init1()
1460 cp->num_iscsi_tasks; in cnic_bnx2x_iscsi_init1()
1461 cp->r2tq_size = cp->num_iscsi_tasks * BNX2X_ISCSI_MAX_PENDING_R2TS * in cnic_bnx2x_iscsi_init1()
1463 cp->hq_size = cp->num_ccells * BNX2X_ISCSI_HQ_BD_SIZE; in cnic_bnx2x_iscsi_init1()
1464 pages = CNIC_PAGE_ALIGN(cp->hq_size) / CNIC_PAGE_SIZE; in cnic_bnx2x_iscsi_init1()
1466 cp->num_cqs = req1->num_cqs; in cnic_bnx2x_iscsi_init1()
1498 cp->num_iscsi_tasks * BNX2X_ISCSI_MAX_PENDING_R2TS); in cnic_bnx2x_iscsi_init1()
1513 cp->num_iscsi_tasks * BNX2X_ISCSI_MAX_PENDING_R2TS); in cnic_bnx2x_iscsi_init1()
1579 struct cnic_local *cp = dev->cnic_priv; in cnic_free_bnx2x_conn_resc() local
1580 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_free_bnx2x_conn_resc()
1588 cnic_free_id(&cp->cid_tbl, ctx->cid); in cnic_free_bnx2x_conn_resc()
1590 cnic_free_id(&cp->fcoe_cid_tbl, ctx->cid); in cnic_free_bnx2x_conn_resc()
1600 struct cnic_local *cp = dev->cnic_priv; in cnic_alloc_bnx2x_conn_resc() local
1601 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_alloc_bnx2x_conn_resc()
1605 cid = cnic_alloc_new_id(&cp->fcoe_cid_tbl); in cnic_alloc_bnx2x_conn_resc()
1614 cid = cnic_alloc_new_id(&cp->cid_tbl); in cnic_alloc_bnx2x_conn_resc()
1621 pages = CNIC_PAGE_ALIGN(cp->task_array_size) / CNIC_PAGE_SIZE; in cnic_alloc_bnx2x_conn_resc()
1627 pages = CNIC_PAGE_ALIGN(cp->r2tq_size) / CNIC_PAGE_SIZE; in cnic_alloc_bnx2x_conn_resc()
1632 pages = CNIC_PAGE_ALIGN(cp->hq_size) / CNIC_PAGE_SIZE; in cnic_alloc_bnx2x_conn_resc()
1647 struct cnic_local *cp = dev->cnic_priv; in cnic_get_bnx2x_ctx() local
1648 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_get_bnx2x_ctx()
1649 int blk = (cid - ethdev->starting_cid) / cp->cids_per_blk; in cnic_get_bnx2x_ctx()
1650 int off = (cid - ethdev->starting_cid) % cp->cids_per_blk; in cnic_get_bnx2x_ctx()
1655 if (cp->ctx_align) { in cnic_get_bnx2x_ctx()
1656 unsigned long mask = cp->ctx_align - 1; in cnic_get_bnx2x_ctx()
1658 if (cp->ctx_arr[blk].mapping & mask) in cnic_get_bnx2x_ctx()
1659 align_off = cp->ctx_align - in cnic_get_bnx2x_ctx()
1660 (cp->ctx_arr[blk].mapping & mask); in cnic_get_bnx2x_ctx()
1662 ctx_map = cp->ctx_arr[blk].mapping + align_off + in cnic_get_bnx2x_ctx()
1664 ctx = cp->ctx_arr[blk].ctx + align_off + in cnic_get_bnx2x_ctx()
1677 struct cnic_local *cp = dev->cnic_priv; in cnic_setup_bnx2x_ctx() local
1684 struct cnic_context *ctx = &cp->ctx_tbl[req1->iscsi_conn_id]; in cnic_setup_bnx2x_ctx()
1796 for (i = 1, j = 1; i < cp->num_cqs; i++, j++) { in cnic_setup_bnx2x_ctx()
1819 ictx->ustorm_st_context.num_cqs = cp->num_cqs; in cnic_setup_bnx2x_ctx()
1843 ictx->cstorm_st_context.cq_proc_en_bit_map = (1 << cp->num_cqs) - 1; in cnic_setup_bnx2x_ctx()
1844 for (i = 0; i < cp->num_cqs; i++) { in cnic_setup_bnx2x_ctx()
1866 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_iscsi_ofld1() local
1896 ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_iscsi_ofld1()
1903 if (atomic_inc_return(&cp->iscsi_conn) > dev->max_iscsi_conn) { in cnic_bnx2x_iscsi_ofld1()
1904 atomic_dec(&cp->iscsi_conn); in cnic_bnx2x_iscsi_ofld1()
1909 atomic_dec(&cp->iscsi_conn); in cnic_bnx2x_iscsi_ofld1()
1916 atomic_dec(&cp->iscsi_conn); in cnic_bnx2x_iscsi_ofld1()
1921 kcqe.iscsi_conn_context_id = BNX2X_HW_CID(bp, cp->ctx_tbl[l5_cid].cid); in cnic_bnx2x_iscsi_ofld1()
1932 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_iscsi_update() local
1940 if (cnic_get_l5_cid(cp, cid, &l5_cid) != 0) in cnic_bnx2x_iscsi_update()
1943 data = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_iscsi_update()
1956 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_destroy_ramrod() local
1958 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_destroy_ramrod()
1982 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_iscsi_destroy() local
1986 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_iscsi_destroy()
2001 queue_delayed_work(cnic_wq, &cp->delete_task, delta); in cnic_bnx2x_iscsi_destroy()
2011 atomic_dec(&cp->iscsi_conn); in cnic_bnx2x_iscsi_destroy()
2111 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_connect() local
2120 struct cnic_sock *csk = &cp->csk_tbl[l5_cid]; in cnic_bnx2x_connect()
2121 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_connect()
2143 conn_buf = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_connect()
2249 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_stat() local
2255 cid = BNX2X_HW_CID(bp, cp->fcoe_init_cid); in cnic_bnx2x_fcoe_stat()
2257 fcoe_stat = cnic_get_kwqe_16_data(cp, BNX2X_FCOE_L5_CID_BASE, &l5_data); in cnic_bnx2x_fcoe_stat()
2273 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_init1() local
2302 fcoe_init = cnic_get_kwqe_16_data(cp, BNX2X_FCOE_L5_CID_BASE, &l5_data); in cnic_bnx2x_fcoe_init1()
2310 fcoe_init->eq_pbl_base.lo = cp->kcq2.dma.pgtbl_map & 0xffffffff; in cnic_bnx2x_fcoe_init1()
2311 fcoe_init->eq_pbl_base.hi = (u64) cp->kcq2.dma.pgtbl_map >> 32; in cnic_bnx2x_fcoe_init1()
2312 fcoe_init->eq_pbl_size = cp->kcq2.dma.num_pages; in cnic_bnx2x_fcoe_init1()
2314 fcoe_init->sb_num = cp->status_blk_num; in cnic_bnx2x_fcoe_init1()
2317 cp->kcq2.sw_prod_idx = 0; in cnic_bnx2x_fcoe_init1()
2319 cid = BNX2X_HW_CID(bp, cp->fcoe_init_cid); in cnic_bnx2x_fcoe_init1()
2331 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_ofld1() local
2362 ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_fcoe_ofld1()
2389 fcoe_offload = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_fcoe_ofld1()
2428 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_enable() local
2438 fcoe_enable = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_fcoe_enable()
2456 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_disable() local
2470 fcoe_disable = cnic_get_kwqe_16_data(cp, l5_cid, &l5_data); in cnic_bnx2x_fcoe_disable()
2487 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_destroy() local
2500 ctx = &cp->ctx_tbl[l5_cid]; in cnic_bnx2x_fcoe_destroy()
2517 queue_delayed_work(cnic_wq, &cp->delete_task, msecs_to_jiffies(2000)); in cnic_bnx2x_fcoe_destroy()
2530 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_delete_wait() local
2533 for (i = start_cid; i < cp->max_cid_space; i++) { in cnic_bnx2x_delete_wait()
2534 struct cnic_context *ctx = &cp->ctx_tbl[i]; in cnic_bnx2x_delete_wait()
2556 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_fcoe_fw_destroy() local
2564 cid = BNX2X_HW_CID(bp, cp->fcoe_init_cid); in cnic_bnx2x_fcoe_fw_destroy()
2574 struct cnic_local *cp = dev->cnic_priv; in cnic_bnx2x_kwqe_err() local
2617 cnic_get_l5_cid(cp, BNX2X_SW_CID(cid), &kcqe.kcqe_info0); in cnic_bnx2x_kwqe_err()
2636 cnic_get_l5_cid(cp, BNX2X_SW_CID(cid), &l4kcqe->conn_id); in cnic_bnx2x_kwqe_err()
2820 struct cnic_local *cp = dev->cnic_priv; in service_kcqes() local
2828 u32 kcqe_op_flag = cp->completed_kcq[i]->kcqe_op_flag; in service_kcqes()
2835 u32 next_op = cp->completed_kcq[i + j]->kcqe_op_flag; in service_kcqes()
2862 ulp_ops = rcu_dereference(cp->ulp_ops[ulp_type]); in service_kcqes()
2864 ulp_ops->indicate_kcqes(cp->ulp_handle[ulp_type], in service_kcqes()
2865 cp->completed_kcq + i, j); in service_kcqes()
2879 struct cnic_local *cp = dev->cnic_priv; in cnic_get_kcqes() local
2891 cp->completed_kcq[kcqe_cnt++] = kcqe; in cnic_get_kcqes()
2904 static int cnic_l2_completion(struct cnic_local *cp) in cnic_l2_completion() argument
2907 struct cnic_uio_dev *udev = cp->udev; in cnic_l2_completion()
2913 if (!test_bit(CNIC_F_BNX2X_CLASS, &cp->dev->flags)) in cnic_l2_completion()
2916 hw_cons = *cp->rx_cons_ptr; in cnic_l2_completion()
2920 sw_cons = cp->rx_cons; in cnic_l2_completion()
2938 static void cnic_chk_pkt_rings(struct cnic_local *cp) in cnic_chk_pkt_rings() argument
2943 if (!test_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags)) in cnic_chk_pkt_rings()
2946 rx_cons = *cp->rx_cons_ptr; in cnic_chk_pkt_rings()
2947 tx_cons = *cp->tx_cons_ptr; in cnic_chk_pkt_rings()
2948 if (cp->tx_cons != tx_cons || cp->rx_cons != rx_cons) { in cnic_chk_pkt_rings()
2949 if (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags)) in cnic_chk_pkt_rings()
2950 comp = cnic_l2_completion(cp); in cnic_chk_pkt_rings()
2952 cp->tx_cons = tx_cons; in cnic_chk_pkt_rings()
2953 cp->rx_cons = rx_cons; in cnic_chk_pkt_rings()
2955 if (cp->udev) in cnic_chk_pkt_rings()
2956 uio_event_notify(&cp->udev->cnic_uinfo); in cnic_chk_pkt_rings()
2959 clear_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags); in cnic_chk_pkt_rings()
2964 struct cnic_local *cp = dev->cnic_priv; in cnic_service_bnx2_queues() local
2965 u32 status_idx = (u16) *cp->kcq1.status_idx_ptr; in cnic_service_bnx2_queues()
2970 cp->kwq_con_idx = *cp->kwq_con_idx_ptr; in cnic_service_bnx2_queues()
2972 while ((kcqe_cnt = cnic_get_kcqes(dev, &cp->kcq1))) { in cnic_service_bnx2_queues()
2978 status_idx = (u16) *cp->kcq1.status_idx_ptr; in cnic_service_bnx2_queues()
2981 cp->kwq_con_idx = *cp->kwq_con_idx_ptr; in cnic_service_bnx2_queues()
2984 CNIC_WR16(dev, cp->kcq1.io_addr, cp->kcq1.sw_prod_idx); in cnic_service_bnx2_queues()
2986 cnic_chk_pkt_rings(cp); in cnic_service_bnx2_queues()
3007 struct cnic_local *cp = dev->cnic_priv; in cnic_service_bnx2_msix() local
3009 cp->last_status_idx = cnic_service_bnx2_queues(dev); in cnic_service_bnx2_msix()
3011 CNIC_WR(dev, BNX2_PCICFG_INT_ACK_CMD, cp->int_num | in cnic_service_bnx2_msix()
3012 BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | cp->last_status_idx); in cnic_service_bnx2_msix()
3017 struct cnic_local *cp = dev->cnic_priv; in cnic_doirq() local
3020 u16 prod = cp->kcq1.sw_prod_idx & MAX_KCQ_IDX; in cnic_doirq()
3022 prefetch(cp->status_blk.gen); in cnic_doirq()
3023 prefetch(&cp->kcq1.kcq[KCQ_PG(prod)][KCQ_IDX(prod)]); in cnic_doirq()
3025 tasklet_schedule(&cp->cnic_irq_task); in cnic_doirq()
3032 struct cnic_local *cp = dev->cnic_priv; in cnic_irq() local
3034 if (cp->ack_int) in cnic_irq()
3035 cp->ack_int(dev); in cnic_irq()
3078 struct cnic_local *cp = dev->cnic_priv; in cnic_ack_bnx2x_msix() local
3080 cnic_ack_bnx2x_int(dev, cp->bnx2x_igu_sb_id, CSTORM_ID, 0, in cnic_ack_bnx2x_msix()
3086 struct cnic_local *cp = dev->cnic_priv; in cnic_ack_bnx2x_e2_msix() local
3088 cnic_ack_igu_sb(dev, cp->bnx2x_igu_sb_id, IGU_SEG_ACCESS_DEF, 0, in cnic_ack_bnx2x_e2_msix()
3094 struct cnic_local *cp = dev->cnic_priv; in cnic_arm_bnx2x_msix() local
3096 cnic_ack_bnx2x_int(dev, cp->bnx2x_igu_sb_id, CSTORM_ID, idx, in cnic_arm_bnx2x_msix()
3102 struct cnic_local *cp = dev->cnic_priv; in cnic_arm_bnx2x_e2_msix() local
3104 cnic_ack_igu_sb(dev, cp->bnx2x_igu_sb_id, IGU_SEG_ACCESS_DEF, idx, in cnic_arm_bnx2x_e2_msix()
3132 struct cnic_local *cp = dev->cnic_priv; in cnic_service_bnx2x_bh() local
3140 status_idx = cnic_service_bnx2x_kcq(dev, &cp->kcq1); in cnic_service_bnx2x_bh()
3142 CNIC_WR16(dev, cp->kcq1.io_addr, in cnic_service_bnx2x_bh()
3143 cp->kcq1.sw_prod_idx + MAX_KCQ_IDX); in cnic_service_bnx2x_bh()
3146 cp->arm_int(dev, status_idx); in cnic_service_bnx2x_bh()
3150 new_status_idx = cnic_service_bnx2x_kcq(dev, &cp->kcq2); in cnic_service_bnx2x_bh()
3155 CNIC_WR16(dev, cp->kcq2.io_addr, cp->kcq2.sw_prod_idx + in cnic_service_bnx2x_bh()
3158 cnic_ack_igu_sb(dev, cp->bnx2x_igu_sb_id, IGU_SEG_ACCESS_DEF, in cnic_service_bnx2x_bh()
3168 struct cnic_local *cp = dev->cnic_priv; in cnic_service_bnx2x() local
3170 if (!(cp->ethdev->drv_state & CNIC_DRV_STATE_USING_MSIX)) in cnic_service_bnx2x()
3173 cnic_chk_pkt_rings(cp); in cnic_service_bnx2x()
3178 static void cnic_ulp_stop_one(struct cnic_local *cp, int if_type) in cnic_ulp_stop_one() argument
3183 cnic_send_nlmsg(cp, ISCSI_KEVENT_IF_DOWN, NULL); in cnic_ulp_stop_one()
3186 ulp_ops = rcu_dereference_protected(cp->ulp_ops[if_type], in cnic_ulp_stop_one()
3192 set_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_ulp_stop_one()
3195 if (test_and_clear_bit(ULP_F_START, &cp->ulp_flags[if_type])) in cnic_ulp_stop_one()
3196 ulp_ops->cnic_stop(cp->ulp_handle[if_type]); in cnic_ulp_stop_one()
3198 clear_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_ulp_stop_one()
3203 struct cnic_local *cp = dev->cnic_priv; in cnic_ulp_stop() local
3207 cnic_ulp_stop_one(cp, if_type); in cnic_ulp_stop()
3212 struct cnic_local *cp = dev->cnic_priv; in cnic_ulp_start() local
3219 ulp_ops = rcu_dereference_protected(cp->ulp_ops[if_type], in cnic_ulp_start()
3225 set_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_ulp_start()
3228 if (!test_and_set_bit(ULP_F_START, &cp->ulp_flags[if_type])) in cnic_ulp_start()
3229 ulp_ops->cnic_start(cp->ulp_handle[if_type]); in cnic_ulp_start()
3231 clear_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_ulp_start()
3237 struct cnic_local *cp = dev->cnic_priv; in cnic_copy_ulp_stats() local
3242 ulp_ops = rcu_dereference_protected(cp->ulp_ops[ulp_type], in cnic_copy_ulp_stats()
3245 rc = ulp_ops->cnic_get_stats(cp->ulp_handle[ulp_type]); in cnic_copy_ulp_stats()
3275 struct cnic_local *cp = dev->cnic_priv; in cnic_ctl() local
3276 set_bit(CNIC_LCL_FL_STOP_ISCSI, &cp->cnic_local_flags); in cnic_ctl()
3277 queue_delayed_work(cnic_wq, &cp->delete_task, 0); in cnic_ctl()
3284 struct cnic_local *cp = dev->cnic_priv; in cnic_ctl() local
3289 if (cnic_get_l5_cid(cp, cid, &l5_cid) == 0) { in cnic_ctl()
3290 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_ctl()
3322 struct cnic_local *cp = dev->cnic_priv; in cnic_ulp_init() local
3336 if (!test_and_set_bit(ULP_F_INIT, &cp->ulp_flags[i])) in cnic_ulp_init()
3346 struct cnic_local *cp = dev->cnic_priv; in cnic_ulp_exit() local
3360 if (test_and_clear_bit(ULP_F_INIT, &cp->ulp_flags[i])) in cnic_ulp_exit()
3576 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_create() local
3582 if (cp->ctx_tbl) { in cnic_cm_create()
3583 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_cm_create()
3589 csk1 = &cp->csk_tbl[l5_cid]; in cnic_cm_create()
3621 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_cleanup() local
3623 cnic_free_id(&cp->csk_port_tbl, be16_to_cpu(csk->src_port)); in cnic_cm_cleanup()
3743 struct cnic_local *cp = dev->cnic_priv; in cnic_resolve_addr() local
3745 return cnic_send_nlmsg(cp, ISCSI_KEVENT_PATH_REQ, csk); in cnic_resolve_addr()
3751 struct cnic_local *cp = dev->cnic_priv; in cnic_get_route() local
3799 if (cnic_alloc_id(&cp->csk_port_tbl, port_id)) in cnic_get_route()
3805 port_id = cnic_alloc_new_id(&cp->csk_port_tbl); in cnic_get_route()
3828 struct cnic_local *cp = csk->dev->cnic_priv; in cnic_cm_connect() local
3831 if (cp->ethdev->drv_state & CNIC_DRV_STATE_NO_ISCSI) in cnic_cm_connect()
3857 struct cnic_local *cp = csk->dev->cnic_priv; in cnic_cm_abort() local
3870 cp->close_conn(csk, opcode); in cnic_cm_abort()
3900 static void cnic_cm_upcall(struct cnic_local *cp, struct cnic_sock *csk, in cnic_cm_upcall() argument
3907 ulp_ops = rcu_dereference(cp->ulp_ops[ulp_type]); in cnic_cm_upcall()
3936 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_process_offld_pg() local
3939 struct cnic_sock *csk = &cp->csk_tbl[l5_cid]; in cnic_cm_process_offld_pg()
3952 cnic_cm_upcall(cp, csk, in cnic_cm_process_offld_pg()
3967 struct cnic_local *cp = dev->cnic_priv; in cnic_process_fcoe_term_conn() local
3970 struct cnic_context *ctx = &cp->ctx_tbl[l5_cid]; in cnic_process_fcoe_term_conn()
3979 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_process_kcqe() local
4001 csk = &cp->csk_tbl[l5_cid]; in cnic_cm_process_kcqe()
4013 cnic_cm_upcall(cp, csk, in cnic_cm_process_kcqe()
4026 cnic_cm_upcall(cp, csk, opcode); in cnic_cm_process_kcqe()
4049 cp->close_conn(csk, opcode); in cnic_cm_process_kcqe()
4057 cp->close_conn(csk, L4_KCQE_OPCODE_VALUE_RESET_COMP); in cnic_cm_process_kcqe()
4059 cnic_cm_upcall(cp, csk, opcode); in cnic_cm_process_kcqe()
4080 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_free_mem() local
4082 kfree(cp->csk_tbl); in cnic_cm_free_mem()
4083 cp->csk_tbl = NULL; in cnic_cm_free_mem()
4084 cnic_free_id_tbl(&cp->csk_port_tbl); in cnic_cm_free_mem()
4089 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_alloc_mem() local
4092 cp->csk_tbl = kzalloc(sizeof(struct cnic_sock) * MAX_CM_SK_TBL_SZ, in cnic_cm_alloc_mem()
4094 if (!cp->csk_tbl) in cnic_cm_alloc_mem()
4099 if (cnic_init_id_tbl(&cp->csk_port_tbl, CNIC_LOCAL_PORT_RANGE, in cnic_cm_alloc_mem()
4136 struct cnic_local *cp = dev->cnic_priv; in cnic_close_bnx2_conn() local
4139 cnic_cm_upcall(cp, csk, opcode); in cnic_close_bnx2_conn()
4146 cnic_cm_upcall(cp, csk, opcode); in cnic_close_bnx2_conn()
4165 struct cnic_local *cp = dev->cnic_priv; in cnic_close_bnx2x_conn() local
4166 struct cnic_context *ctx = &cp->ctx_tbl[csk->l5_cid]; in cnic_close_bnx2x_conn()
4199 cnic_cm_upcall(cp, csk, csk->state); in cnic_close_bnx2x_conn()
4205 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_stop_bnx2x_hw() local
4207 if (!cp->ctx_tbl) in cnic_cm_stop_bnx2x_hw()
4215 cancel_delayed_work(&cp->delete_task); in cnic_cm_stop_bnx2x_hw()
4218 if (atomic_read(&cp->iscsi_conn) != 0) in cnic_cm_stop_bnx2x_hw()
4220 atomic_read(&cp->iscsi_conn)); in cnic_cm_stop_bnx2x_hw()
4257 struct cnic_local *cp; in cnic_delete_task() local
4262 cp = container_of(work, struct cnic_local, delete_task.work); in cnic_delete_task()
4263 dev = cp->dev; in cnic_delete_task()
4265 if (test_and_clear_bit(CNIC_LCL_FL_STOP_ISCSI, &cp->cnic_local_flags)) { in cnic_delete_task()
4268 cnic_ulp_stop_one(cp, CNIC_ULP_ISCSI); in cnic_delete_task()
4271 cp->ethdev->drv_ctl(dev->netdev, &info); in cnic_delete_task()
4274 for (i = 0; i < cp->max_cid_space; i++) { in cnic_delete_task()
4275 struct cnic_context *ctx = &cp->ctx_tbl[i]; in cnic_delete_task()
4295 atomic_dec(&cp->iscsi_conn); in cnic_delete_task()
4302 queue_delayed_work(cnic_wq, &cp->delete_task, in cnic_delete_task()
4309 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_open() local
4316 err = cp->start_cm(dev); in cnic_cm_open()
4321 INIT_DELAYED_WORK(&cp->delete_task, cnic_delete_task); in cnic_cm_open()
4330 cp->ulp_handle[CNIC_ULP_L4] = dev; in cnic_cm_open()
4331 rcu_assign_pointer(cp->ulp_ops[CNIC_ULP_L4], &cm_ulp_ops); in cnic_cm_open()
4341 struct cnic_local *cp = dev->cnic_priv; in cnic_cm_shutdown() local
4344 if (!cp->csk_tbl) in cnic_cm_shutdown()
4348 struct cnic_sock *csk = &cp->csk_tbl[i]; in cnic_cm_shutdown()
4371 struct cnic_local *cp = dev->cnic_priv; in cnic_setup_5709_context() local
4375 if (BNX2_CHIP(cp) != BNX2_CHIP_5709) in cnic_setup_5709_context()
4378 for (i = 0; i < cp->ctx_blks; i++) { in cnic_setup_5709_context()
4380 u32 idx = cp->ctx_arr[i].cid / cp->cids_per_blk; in cnic_setup_5709_context()
4383 memset(cp->ctx_arr[i].ctx, 0, CNIC_PAGE_SIZE); in cnic_setup_5709_context()
4386 (cp->ctx_arr[i].mapping & 0xffffffff) | valid_bit); in cnic_setup_5709_context()
4388 (u64) cp->ctx_arr[i].mapping >> 32); in cnic_setup_5709_context()
4408 struct cnic_local *cp = dev->cnic_priv; in cnic_free_irq() local
4409 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_free_irq()
4412 cp->disable_int_sync(dev); in cnic_free_irq()
4413 tasklet_kill(&cp->cnic_irq_task); in cnic_free_irq()
4420 struct cnic_local *cp = dev->cnic_priv; in cnic_request_irq() local
4421 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_request_irq()
4426 tasklet_disable(&cp->cnic_irq_task); in cnic_request_irq()
4433 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2_irq() local
4434 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_init_bnx2_irq()
4438 int sblk_num = cp->status_blk_num; in cnic_init_bnx2_irq()
4448 cp->last_status_idx = cp->status_blk.bnx2->status_idx; in cnic_init_bnx2_irq()
4449 tasklet_init(&cp->cnic_irq_task, cnic_service_bnx2_msix, in cnic_init_bnx2_irq()
4455 while (cp->status_blk.bnx2->status_completion_producer_index && in cnic_init_bnx2_irq()
4463 if (cp->status_blk.bnx2->status_completion_producer_index) { in cnic_init_bnx2_irq()
4469 struct status_block *sblk = cp->status_blk.gen; in cnic_init_bnx2_irq()
4493 struct cnic_local *cp = dev->cnic_priv; in cnic_enable_bnx2_int() local
4494 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_enable_bnx2_int()
4499 CNIC_WR(dev, BNX2_PCICFG_INT_ACK_CMD, cp->int_num | in cnic_enable_bnx2_int()
4500 BNX2_PCICFG_INT_ACK_CMD_INDEX_VALID | cp->last_status_idx); in cnic_enable_bnx2_int()
4505 struct cnic_local *cp = dev->cnic_priv; in cnic_disable_bnx2_int_sync() local
4506 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_disable_bnx2_int_sync()
4511 CNIC_WR(dev, BNX2_PCICFG_INT_ACK_CMD, cp->int_num | in cnic_disable_bnx2_int_sync()
4519 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2_tx_ring() local
4520 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_init_bnx2_tx_ring()
4521 struct cnic_uio_dev *udev = cp->udev; in cnic_init_bnx2_tx_ring()
4527 struct status_block *s_blk = cp->status_blk.gen; in cnic_init_bnx2_tx_ring()
4529 sb_id = cp->status_blk_num; in cnic_init_bnx2_tx_ring()
4531 cp->tx_cons_ptr = &s_blk->status_tx_quick_consumer_index2; in cnic_init_bnx2_tx_ring()
4533 struct status_block_msix *sblk = cp->status_blk.bnx2; in cnic_init_bnx2_tx_ring()
4538 cp->tx_cons_ptr = &sblk->status_tx_quick_consumer_index; in cnic_init_bnx2_tx_ring()
4540 cp->tx_cons = *cp->tx_cons_ptr; in cnic_init_bnx2_tx_ring()
4543 if (BNX2_CHIP(cp) == BNX2_CHIP_5709) { in cnic_init_bnx2_tx_ring()
4586 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2_rx_ring() local
4587 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_init_bnx2_rx_ring()
4588 struct cnic_uio_dev *udev = cp->udev; in cnic_init_bnx2_rx_ring()
4592 struct status_block *s_blk = cp->status_blk.gen; in cnic_init_bnx2_rx_ring()
4595 sb_id = cp->status_blk_num; in cnic_init_bnx2_rx_ring()
4597 cp->rx_cons_ptr = &s_blk->status_rx_quick_consumer_index2; in cnic_init_bnx2_rx_ring()
4601 struct status_block_msix *sblk = cp->status_blk.bnx2; in cnic_init_bnx2_rx_ring()
4603 cp->rx_cons_ptr = &sblk->status_rx_quick_consumer_index; in cnic_init_bnx2_rx_ring()
4608 while (!(*cp->rx_cons_ptr != 0) && i < 10) { in cnic_init_bnx2_rx_ring()
4614 cp->rx_cons = *cp->rx_cons_ptr; in cnic_init_bnx2_rx_ring()
4630 int n = (i % cp->l2_rx_ring_size) + 1; in cnic_init_bnx2_rx_ring()
4632 buf_map = udev->l2_buf_map + (n * cp->l2_single_buf_size); in cnic_init_bnx2_rx_ring()
4633 rxbd->rx_bd_len = cp->l2_single_buf_size; in cnic_init_bnx2_rx_ring()
4664 struct cnic_local *cp = dev->cnic_priv; in cnic_set_bnx2_mac() local
4667 val = cp->func << 2; in cnic_set_bnx2_mac()
4669 cp->shmem_base = cnic_reg_rd_ind(dev, BNX2_SHM_HDR_ADDR_0 + val); in cnic_set_bnx2_mac()
4671 val = cnic_reg_rd_ind(dev, cp->shmem_base + in cnic_set_bnx2_mac()
4678 val = cnic_reg_rd_ind(dev, cp->shmem_base + in cnic_set_bnx2_mac()
4688 if (BNX2_CHIP(cp) != BNX2_CHIP_5709) in cnic_set_bnx2_mac()
4698 struct cnic_local *cp = dev->cnic_priv; in cnic_start_bnx2_hw() local
4699 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_start_bnx2_hw()
4700 struct status_block *sblk = cp->status_blk.gen; in cnic_start_bnx2_hw()
4727 cp->kwq_io_addr = MB_GET_CID_ADDR(KWQ_CID) + L5_KRNLQ_HOST_QIDX; in cnic_start_bnx2_hw()
4729 cp->max_kwq_idx = MAX_KWQ_IDX; in cnic_start_bnx2_hw()
4730 cp->kwq_prod_idx = 0; in cnic_start_bnx2_hw()
4731 cp->kwq_con_idx = 0; in cnic_start_bnx2_hw()
4732 set_bit(CNIC_LCL_FL_KWQ_INIT, &cp->cnic_local_flags); in cnic_start_bnx2_hw()
4734 if (BNX2_CHIP(cp) == BNX2_CHIP_5706 || BNX2_CHIP(cp) == BNX2_CHIP_5708) in cnic_start_bnx2_hw()
4735 cp->kwq_con_idx_ptr = &sblk->status_rx_quick_consumer_index15; in cnic_start_bnx2_hw()
4737 cp->kwq_con_idx_ptr = &sblk->status_cmd_consumer_index; in cnic_start_bnx2_hw()
4750 val = (u32) ((u64) cp->kwq_info.pgtbl_map >> 32); in cnic_start_bnx2_hw()
4753 val = (u32) cp->kwq_info.pgtbl_map; in cnic_start_bnx2_hw()
4757 cp->kcq1.io_addr = MB_GET_CID_ADDR(KCQ_CID) + L5_KRNLQ_HOST_QIDX; in cnic_start_bnx2_hw()
4759 cp->kcq1.sw_prod_idx = 0; in cnic_start_bnx2_hw()
4760 cp->kcq1.hw_prod_idx_ptr = in cnic_start_bnx2_hw()
4763 cp->kcq1.status_idx_ptr = &sblk->status_idx; in cnic_start_bnx2_hw()
4776 val = (u32) ((u64) cp->kcq1.dma.pgtbl_map >> 32); in cnic_start_bnx2_hw()
4779 val = (u32) cp->kcq1.dma.pgtbl_map; in cnic_start_bnx2_hw()
4782 cp->int_num = 0; in cnic_start_bnx2_hw()
4784 struct status_block_msix *msblk = cp->status_blk.bnx2; in cnic_start_bnx2_hw()
4785 u32 sb_id = cp->status_blk_num; in cnic_start_bnx2_hw()
4788 cp->kcq1.hw_prod_idx_ptr = in cnic_start_bnx2_hw()
4790 cp->kcq1.status_idx_ptr = &msblk->status_idx; in cnic_start_bnx2_hw()
4791 cp->kwq_con_idx_ptr = &msblk->status_cmd_consumer_index; in cnic_start_bnx2_hw()
4792 cp->int_num = sb_id << BNX2_PCICFG_INT_ACK_CMD_INT_NUM_SHIFT; in cnic_start_bnx2_hw()
4834 struct cnic_local *cp = dev->cnic_priv; in cnic_setup_bnx2x_context() local
4835 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_setup_bnx2x_context()
4839 for (i = 0; i < cp->ctx_blks; i++) { in cnic_setup_bnx2x_context()
4840 struct cnic_ctx *ctx = &cp->ctx_arr[i]; in cnic_setup_bnx2x_context()
4843 if (cp->ctx_align) { in cnic_setup_bnx2x_context()
4844 unsigned long mask = cp->ctx_align - 1; in cnic_setup_bnx2x_context()
4855 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2x_irq() local
4856 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_init_bnx2x_irq()
4859 tasklet_init(&cp->cnic_irq_task, cnic_service_bnx2x_bh, in cnic_init_bnx2x_irq()
4888 struct cnic_local *cp = dev->cnic_priv; in cnic_enable_bnx2x_int() local
4890 u8 sb_id = cp->status_blk_num; in cnic_enable_bnx2x_int()
4907 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2x_tx_ring() local
4909 struct cnic_uio_dev *udev = cp->udev; in cnic_init_bnx2x_tx_ring()
4912 struct host_sp_status_block *sb = cp->bnx2x_def_status_blk; in cnic_init_bnx2x_tx_ring()
4914 u32 cli = cp->ethdev->iscsi_l2_client_id; in cnic_init_bnx2x_tx_ring()
4966 cp->tx_cons_ptr = in cnic_init_bnx2x_tx_ring()
4973 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2x_rx_ring() local
4975 struct cnic_uio_dev *udev = cp->udev; in cnic_init_bnx2x_rx_ring()
4980 struct host_sp_status_block *sb = cp->bnx2x_def_status_blk; in cnic_init_bnx2x_rx_ring()
4982 u32 cli = cp->ethdev->iscsi_l2_client_id; in cnic_init_bnx2x_rx_ring()
4991 data->general.mtu = cpu_to_le16(cp->l2_single_buf_size - 14); in cnic_init_bnx2x_rx_ring()
4996 int n = (i % cp->l2_rx_ring_size) + 1; in cnic_init_bnx2x_rx_ring()
4998 buf_map = udev->l2_buf_map + (n * cp->l2_single_buf_size); in cnic_init_bnx2x_rx_ring()
5027 data->rx.max_bytes_on_bd = cpu_to_le16(cp->l2_single_buf_size); in cnic_init_bnx2x_rx_ring()
5033 cp->rx_cons_ptr = in cnic_init_bnx2x_rx_ring()
5035 cp->rx_cons = *cp->rx_cons_ptr; in cnic_init_bnx2x_rx_ring()
5040 struct cnic_local *cp = dev->cnic_priv; in cnic_init_bnx2x_kcq() local
5044 cp->kcq1.io_addr = BAR_CSTRORM_INTMEM + in cnic_init_bnx2x_kcq()
5046 cp->kcq1.sw_prod_idx = 0; in cnic_init_bnx2x_kcq()
5049 struct host_hc_status_block_e2 *sb = cp->status_blk.gen; in cnic_init_bnx2x_kcq()
5051 cp->kcq1.hw_prod_idx_ptr = in cnic_init_bnx2x_kcq()
5053 cp->kcq1.status_idx_ptr = in cnic_init_bnx2x_kcq()
5056 struct host_hc_status_block_e1x *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()
5065 struct host_hc_status_block_e2 *sb = cp->status_blk.gen; in cnic_init_bnx2x_kcq()
5067 cp->kcq2.io_addr = BAR_USTRORM_INTMEM + in cnic_init_bnx2x_kcq()
5069 cp->kcq2.sw_prod_idx = 0; in cnic_init_bnx2x_kcq()
5070 cp->kcq2.hw_prod_idx_ptr = in cnic_init_bnx2x_kcq()
5072 cp->kcq2.status_idx_ptr = in cnic_init_bnx2x_kcq()
5079 struct cnic_local *cp = dev->cnic_priv; in cnic_start_bnx2x_hw() local
5081 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_start_bnx2x_hw()
5086 cp->func = bp->pf_num; in cnic_start_bnx2x_hw()
5088 func = CNIC_FUNC(cp); in cnic_start_bnx2x_hw()
5091 ret = cnic_init_id_tbl(&cp->cid_tbl, MAX_ISCSI_TBL_SZ, in cnic_start_bnx2x_hw()
5092 cp->iscsi_start_cid, 0); in cnic_start_bnx2x_hw()
5098 ret = cnic_init_id_tbl(&cp->fcoe_cid_tbl, dev->max_fcoe_conn, in cnic_start_bnx2x_hw()
5099 cp->fcoe_start_cid, 0); in cnic_start_bnx2x_hw()
5105 cp->bnx2x_igu_sb_id = ethdev->irq_arr[0].status_blk_num2; in cnic_start_bnx2x_hw()
5110 CNIC_WR16(dev, cp->kcq1.io_addr, MAX_KCQ_IDX); in cnic_start_bnx2x_hw()
5115 cp->kcq1.dma.pg_map_arr[1] & 0xffffffff); in cnic_start_bnx2x_hw()
5118 (u64) cp->kcq1.dma.pg_map_arr[1] >> 32); in cnic_start_bnx2x_hw()
5121 cp->kcq1.dma.pg_map_arr[0] & 0xffffffff); in cnic_start_bnx2x_hw()
5124 (u64) cp->kcq1.dma.pg_map_arr[0] >> 32); in cnic_start_bnx2x_hw()
5128 CSTORM_ISCSI_EQ_SB_NUM_OFFSET(pfid, 0), cp->status_blk_num); in cnic_start_bnx2x_hw()
5135 cp->gbl_buf_info.pg_map_arr[0] & 0xffffffff); in cnic_start_bnx2x_hw()
5138 (u64) cp->gbl_buf_info.pg_map_arr[0] >> 32); in cnic_start_bnx2x_hw()
5155 struct cnic_local *cp = dev->cnic_priv; in cnic_init_rings() local
5157 struct cnic_uio_dev *udev = cp->udev; in cnic_init_rings()
5159 if (test_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags)) in cnic_init_rings()
5165 set_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags); in cnic_init_rings()
5167 u32 cli = cp->ethdev->iscsi_l2_client_id; in cnic_init_rings()
5168 u32 cid = cp->ethdev->iscsi_l2_cid; in cnic_init_rings()
5189 set_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags); in cnic_init_rings()
5202 set_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags); in cnic_init_rings()
5208 while (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags) && in cnic_init_rings()
5212 if (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags)) in cnic_init_rings()
5225 struct cnic_local *cp = dev->cnic_priv; in cnic_shutdown_rings() local
5226 struct cnic_uio_dev *udev = cp->udev; in cnic_shutdown_rings()
5229 if (!test_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags)) in cnic_shutdown_rings()
5235 u32 cli = cp->ethdev->iscsi_l2_client_id; in cnic_shutdown_rings()
5236 u32 cid = cp->ethdev->iscsi_l2_cid; in cnic_shutdown_rings()
5242 set_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags); in cnic_shutdown_rings()
5249 while (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags) && in cnic_shutdown_rings()
5253 if (test_bit(CNIC_LCL_FL_L2_WAIT, &cp->cnic_local_flags)) in cnic_shutdown_rings()
5263 clear_bit(CNIC_LCL_FL_RINGS_INITED, &cp->cnic_local_flags); in cnic_shutdown_rings()
5270 struct cnic_local *cp = dev->cnic_priv; in cnic_register_netdev() local
5271 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_register_netdev()
5280 err = ethdev->drv_register_cnic(dev->netdev, cp->cnic_ops, dev); in cnic_register_netdev()
5296 struct cnic_local *cp = dev->cnic_priv; in cnic_unregister_netdev() local
5297 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_unregister_netdev()
5307 struct cnic_local *cp = dev->cnic_priv; in cnic_start_hw() local
5308 struct cnic_eth_dev *ethdev = cp->ethdev; in cnic_start_hw()
5316 cp->func = PCI_FUNC(dev->pcidev->devfn); in cnic_start_hw()
5317 cp->status_blk.gen = ethdev->irq_arr[0].status_blk; in cnic_start_hw()
5318 cp->status_blk_num = ethdev->irq_arr[0].status_blk_num; in cnic_start_hw()
5320 err = cp->alloc_resc(dev); in cnic_start_hw()
5326 err = cp->start_hw(dev); in cnic_start_hw()
5336 cp->enable_int(dev); in cnic_start_hw()
5341 cp->free_resc(dev); in cnic_start_hw()
5365 struct cnic_local *cp = dev->cnic_priv; in cnic_stop_bnx2x_hw() local
5368 u32 sb_id = cp->status_blk_num; in cnic_stop_bnx2x_hw()
5388 *cp->kcq1.hw_prod_idx_ptr = 0; in cnic_stop_bnx2x_hw()
5391 CNIC_WR16(dev, cp->kcq1.io_addr, 0); in cnic_stop_bnx2x_hw()
5398 struct cnic_local *cp = dev->cnic_priv; in cnic_stop_hw() local
5404 while (cp->udev && cp->udev->uio_dev != -1 && i < 15) { in cnic_stop_hw()
5409 cp->stop_cm(dev); in cnic_stop_hw()
5410 cp->ethdev->drv_state &= ~CNIC_DRV_STATE_HANDLES_IRQ; in cnic_stop_hw()
5412 RCU_INIT_POINTER(cp->ulp_ops[CNIC_ULP_L4], NULL); in cnic_stop_hw()
5415 cp->stop_hw(dev); in cnic_stop_hw()
5440 struct cnic_local *cp; in cnic_alloc_dev() local
5455 cp = cdev->cnic_priv; in cnic_alloc_dev()
5456 cp->dev = cdev; in cnic_alloc_dev()
5457 cp->l2_single_buf_size = 0x400; in cnic_alloc_dev()
5458 cp->l2_rx_ring_size = 3; in cnic_alloc_dev()
5460 spin_lock_init(&cp->cnic_ulp_lock); in cnic_alloc_dev()
5471 struct cnic_local *cp; in init_bnx2_cnic() local
5502 cp = cdev->cnic_priv; in init_bnx2_cnic()
5503 cp->ethdev = ethdev; in init_bnx2_cnic()
5505 cp->chip_id = ethdev->chip_id; in init_bnx2_cnic()
5509 cp->cnic_ops = &cnic_bnx2_ops; in init_bnx2_cnic()
5510 cp->start_hw = cnic_start_bnx2_hw; in init_bnx2_cnic()
5511 cp->stop_hw = cnic_stop_bnx2_hw; in init_bnx2_cnic()
5512 cp->setup_pgtbl = cnic_setup_page_tbl; in init_bnx2_cnic()
5513 cp->alloc_resc = cnic_alloc_bnx2_resc; in init_bnx2_cnic()
5514 cp->free_resc = cnic_free_resc; in init_bnx2_cnic()
5515 cp->start_cm = cnic_cm_init_bnx2_hw; in init_bnx2_cnic()
5516 cp->stop_cm = cnic_cm_stop_bnx2_hw; in init_bnx2_cnic()
5517 cp->enable_int = cnic_enable_bnx2_int; in init_bnx2_cnic()
5518 cp->disable_int_sync = cnic_disable_bnx2_int_sync; in init_bnx2_cnic()
5519 cp->close_conn = cnic_close_bnx2_conn; in init_bnx2_cnic()
5531 struct cnic_local *cp; in init_bnx2x_cnic() local
5555 cp = cdev->cnic_priv; in init_bnx2x_cnic()
5556 cp->ethdev = ethdev; in init_bnx2x_cnic()
5558 cp->chip_id = ethdev->chip_id; in init_bnx2x_cnic()
5574 cp->cnic_ops = &cnic_bnx2x_ops; in init_bnx2x_cnic()
5575 cp->start_hw = cnic_start_bnx2x_hw; in init_bnx2x_cnic()
5576 cp->stop_hw = cnic_stop_bnx2x_hw; in init_bnx2x_cnic()
5577 cp->setup_pgtbl = cnic_setup_page_tbl_le; in init_bnx2x_cnic()
5578 cp->alloc_resc = cnic_alloc_bnx2x_resc; in init_bnx2x_cnic()
5579 cp->free_resc = cnic_free_resc; in init_bnx2x_cnic()
5580 cp->start_cm = cnic_cm_init_bnx2x_hw; in init_bnx2x_cnic()
5581 cp->stop_cm = cnic_cm_stop_bnx2x_hw; in init_bnx2x_cnic()
5582 cp->enable_int = cnic_enable_bnx2x_int; in init_bnx2x_cnic()
5583 cp->disable_int_sync = cnic_disable_bnx2x_int_sync; in init_bnx2x_cnic()
5585 cp->ack_int = cnic_ack_bnx2x_e2_msix; in init_bnx2x_cnic()
5586 cp->arm_int = cnic_arm_bnx2x_e2_msix; in init_bnx2x_cnic()
5588 cp->ack_int = cnic_ack_bnx2x_msix; in init_bnx2x_cnic()
5589 cp->arm_int = cnic_arm_bnx2x_msix; in init_bnx2x_cnic()
5591 cp->close_conn = cnic_close_bnx2x_conn; in init_bnx2x_cnic()
5617 static void cnic_rcv_netevent(struct cnic_local *cp, unsigned long event, in cnic_rcv_netevent() argument
5627 ulp_ops = rcu_dereference_protected(cp->ulp_ops[if_type], in cnic_rcv_netevent()
5634 ctx = cp->ulp_handle[if_type]; in cnic_rcv_netevent()
5636 set_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_rcv_netevent()
5641 clear_bit(ULP_F_CALL_PENDING, &cp->ulp_flags[if_type]); in cnic_rcv_netevent()
5664 struct cnic_local *cp = dev->cnic_priv; in cnic_netdev_event() local
5680 cnic_rcv_netevent(cp, event, 0); in cnic_netdev_event()