Lines Matching refs:csk

152 static inline void csk_hold(struct cnic_sock *csk)  in csk_hold()  argument
154 atomic_inc(&csk->ref_count); in csk_hold()
157 static inline void csk_put(struct cnic_sock *csk) in csk_put() argument
159 atomic_dec(&csk->ref_count); in csk_put()
285 static int cnic_in_use(struct cnic_sock *csk) in cnic_in_use() argument
287 return test_bit(SK_F_INUSE, &csk->flags); in cnic_in_use()
319 struct cnic_sock *csk) in cnic_send_nlmsg() argument
332 if (csk) { in cnic_send_nlmsg()
338 path_req.handle = (u64) csk->l5_cid; in cnic_send_nlmsg()
339 if (test_bit(SK_F_IPV6, &csk->flags)) { in cnic_send_nlmsg()
340 memcpy(&path_req.dst.v6_addr, &csk->dst_ip[0], in cnic_send_nlmsg()
344 memcpy(&path_req.dst.v4_addr, &csk->dst_ip[0], in cnic_send_nlmsg()
348 path_req.vlan_id = csk->vlan_id; in cnic_send_nlmsg()
349 path_req.pmtu = csk->mtu; in cnic_send_nlmsg()
381 struct cnic_sock *csk; in cnic_iscsi_nl_msg_recv() local
397 csk = &cp->csk_tbl[l5_cid]; in cnic_iscsi_nl_msg_recv()
398 csk_hold(csk); in cnic_iscsi_nl_msg_recv()
399 if (cnic_in_use(csk) && in cnic_iscsi_nl_msg_recv()
400 test_bit(SK_F_CONNECT_START, &csk->flags)) { in cnic_iscsi_nl_msg_recv()
402 csk->vlan_id = path_resp->vlan_id; in cnic_iscsi_nl_msg_recv()
404 memcpy(csk->ha, path_resp->mac_addr, ETH_ALEN); in cnic_iscsi_nl_msg_recv()
405 if (test_bit(SK_F_IPV6, &csk->flags)) in cnic_iscsi_nl_msg_recv()
406 memcpy(&csk->src_ip[0], &path_resp->src.v6_addr, in cnic_iscsi_nl_msg_recv()
409 memcpy(&csk->src_ip[0], &path_resp->src.v4_addr, in cnic_iscsi_nl_msg_recv()
412 if (is_valid_ether_addr(csk->ha)) { in cnic_iscsi_nl_msg_recv()
413 cnic_cm_set_pg(csk); in cnic_iscsi_nl_msg_recv()
414 } else if (!test_bit(SK_F_OFFLD_SCHED, &csk->flags) && in cnic_iscsi_nl_msg_recv()
415 !test_bit(SK_F_OFFLD_COMPLETE, &csk->flags)) { in cnic_iscsi_nl_msg_recv()
417 cnic_cm_upcall(cp, csk, in cnic_iscsi_nl_msg_recv()
419 clear_bit(SK_F_CONNECT_START, &csk->flags); in cnic_iscsi_nl_msg_recv()
422 csk_put(csk); in cnic_iscsi_nl_msg_recv()
430 static int cnic_offld_prep(struct cnic_sock *csk) in cnic_offld_prep() argument
432 if (test_and_set_bit(SK_F_OFFLD_SCHED, &csk->flags)) in cnic_offld_prep()
435 if (!test_bit(SK_F_CONNECT_START, &csk->flags)) { in cnic_offld_prep()
436 clear_bit(SK_F_OFFLD_SCHED, &csk->flags); in cnic_offld_prep()
443 static int cnic_close_prep(struct cnic_sock *csk) in cnic_close_prep() argument
445 clear_bit(SK_F_CONNECT_START, &csk->flags); in cnic_close_prep()
448 if (test_and_clear_bit(SK_F_OFFLD_COMPLETE, &csk->flags)) { in cnic_close_prep()
449 while (test_and_set_bit(SK_F_OFFLD_SCHED, &csk->flags)) in cnic_close_prep()
457 static int cnic_abort_prep(struct cnic_sock *csk) in cnic_abort_prep() argument
459 clear_bit(SK_F_CONNECT_START, &csk->flags); in cnic_abort_prep()
462 while (test_and_set_bit(SK_F_OFFLD_SCHED, &csk->flags)) in cnic_abort_prep()
465 if (test_and_clear_bit(SK_F_OFFLD_COMPLETE, &csk->flags)) { in cnic_abort_prep()
466 csk->state = L4_KCQE_OPCODE_VALUE_RESET_COMP; in cnic_abort_prep()
2131 struct cnic_sock *csk = &cp->csk_tbl[l5_cid]; in cnic_bnx2x_connect() local
2161 conn_addr->remote_addr_0 = csk->ha[0]; in cnic_bnx2x_connect()
2162 conn_addr->remote_addr_1 = csk->ha[1]; in cnic_bnx2x_connect()
2163 conn_addr->remote_addr_2 = csk->ha[2]; in cnic_bnx2x_connect()
2164 conn_addr->remote_addr_3 = csk->ha[3]; in cnic_bnx2x_connect()
2165 conn_addr->remote_addr_4 = csk->ha[4]; in cnic_bnx2x_connect()
2166 conn_addr->remote_addr_5 = csk->ha[5]; in cnic_bnx2x_connect()
2192 XSTORM_ISCSI_LOCAL_VLAN_OFFSET(bp->pfid), csk->vlan_id); in cnic_bnx2x_connect()
3378 static int cnic_cm_offload_pg(struct cnic_sock *csk) in cnic_cm_offload_pg() argument
3380 struct cnic_dev *dev = csk->dev; in cnic_cm_offload_pg()
3384 l4kwqe = (struct l4_kwq_offload_pg *) &csk->kwqe1; in cnic_cm_offload_pg()
3393 l4kwqe->da0 = csk->ha[0]; in cnic_cm_offload_pg()
3394 l4kwqe->da1 = csk->ha[1]; in cnic_cm_offload_pg()
3395 l4kwqe->da2 = csk->ha[2]; in cnic_cm_offload_pg()
3396 l4kwqe->da3 = csk->ha[3]; in cnic_cm_offload_pg()
3397 l4kwqe->da4 = csk->ha[4]; in cnic_cm_offload_pg()
3398 l4kwqe->da5 = csk->ha[5]; in cnic_cm_offload_pg()
3409 l4kwqe->host_opaque = csk->l5_cid; in cnic_cm_offload_pg()
3411 if (csk->vlan_id) { in cnic_cm_offload_pg()
3413 l4kwqe->vlan_tag = csk->vlan_id; in cnic_cm_offload_pg()
3420 static int cnic_cm_update_pg(struct cnic_sock *csk) in cnic_cm_update_pg() argument
3422 struct cnic_dev *dev = csk->dev; in cnic_cm_update_pg()
3426 l4kwqe = (struct l4_kwq_update_pg *) &csk->kwqe1; in cnic_cm_update_pg()
3433 l4kwqe->pg_cid = csk->pg_cid; in cnic_cm_update_pg()
3435 l4kwqe->da0 = csk->ha[0]; in cnic_cm_update_pg()
3436 l4kwqe->da1 = csk->ha[1]; in cnic_cm_update_pg()
3437 l4kwqe->da2 = csk->ha[2]; in cnic_cm_update_pg()
3438 l4kwqe->da3 = csk->ha[3]; in cnic_cm_update_pg()
3439 l4kwqe->da4 = csk->ha[4]; in cnic_cm_update_pg()
3440 l4kwqe->da5 = csk->ha[5]; in cnic_cm_update_pg()
3442 l4kwqe->pg_host_opaque = csk->l5_cid; in cnic_cm_update_pg()
3448 static int cnic_cm_upload_pg(struct cnic_sock *csk) in cnic_cm_upload_pg() argument
3450 struct cnic_dev *dev = csk->dev; in cnic_cm_upload_pg()
3454 l4kwqe = (struct l4_kwq_upload *) &csk->kwqe1; in cnic_cm_upload_pg()
3461 l4kwqe->cid = csk->pg_cid; in cnic_cm_upload_pg()
3466 static int cnic_cm_conn_req(struct cnic_sock *csk) in cnic_cm_conn_req() argument
3468 struct cnic_dev *dev = csk->dev; in cnic_cm_conn_req()
3476 l4kwqe1 = (struct l4_kwq_connect_req1 *) &csk->kwqe1; in cnic_cm_conn_req()
3477 l4kwqe2 = (struct l4_kwq_connect_req2 *) &csk->kwqe2; in cnic_cm_conn_req()
3478 l4kwqe3 = (struct l4_kwq_connect_req3 *) &csk->kwqe3; in cnic_cm_conn_req()
3486 l4kwqe3->ka_timeout = csk->ka_timeout; in cnic_cm_conn_req()
3487 l4kwqe3->ka_interval = csk->ka_interval; in cnic_cm_conn_req()
3488 l4kwqe3->ka_max_probe_count = csk->ka_max_probe_count; in cnic_cm_conn_req()
3489 l4kwqe3->tos = csk->tos; in cnic_cm_conn_req()
3490 l4kwqe3->ttl = csk->ttl; in cnic_cm_conn_req()
3491 l4kwqe3->snd_seq_scale = csk->snd_seq_scale; in cnic_cm_conn_req()
3492 l4kwqe3->pmtu = csk->mtu; in cnic_cm_conn_req()
3493 l4kwqe3->rcv_buf = csk->rcv_buf; in cnic_cm_conn_req()
3494 l4kwqe3->snd_buf = csk->snd_buf; in cnic_cm_conn_req()
3495 l4kwqe3->seed = csk->seed; in cnic_cm_conn_req()
3498 if (test_bit(SK_F_IPV6, &csk->flags)) { in cnic_cm_conn_req()
3508 l4kwqe2->src_ip_v6_2 = be32_to_cpu(csk->src_ip[1]); in cnic_cm_conn_req()
3509 l4kwqe2->src_ip_v6_3 = be32_to_cpu(csk->src_ip[2]); in cnic_cm_conn_req()
3510 l4kwqe2->src_ip_v6_4 = be32_to_cpu(csk->src_ip[3]); in cnic_cm_conn_req()
3511 l4kwqe2->dst_ip_v6_2 = be32_to_cpu(csk->dst_ip[1]); in cnic_cm_conn_req()
3512 l4kwqe2->dst_ip_v6_3 = be32_to_cpu(csk->dst_ip[2]); in cnic_cm_conn_req()
3513 l4kwqe2->dst_ip_v6_4 = be32_to_cpu(csk->dst_ip[3]); in cnic_cm_conn_req()
3526 l4kwqe1->cid = csk->cid; in cnic_cm_conn_req()
3527 l4kwqe1->pg_cid = csk->pg_cid; in cnic_cm_conn_req()
3528 l4kwqe1->src_ip = be32_to_cpu(csk->src_ip[0]); in cnic_cm_conn_req()
3529 l4kwqe1->dst_ip = be32_to_cpu(csk->dst_ip[0]); in cnic_cm_conn_req()
3530 l4kwqe1->src_port = be16_to_cpu(csk->src_port); in cnic_cm_conn_req()
3531 l4kwqe1->dst_port = be16_to_cpu(csk->dst_port); in cnic_cm_conn_req()
3532 if (csk->tcp_flags & SK_TCP_NO_DELAY_ACK) in cnic_cm_conn_req()
3534 if (csk->tcp_flags & SK_TCP_KEEP_ALIVE) in cnic_cm_conn_req()
3536 if (csk->tcp_flags & SK_TCP_NAGLE) in cnic_cm_conn_req()
3538 if (csk->tcp_flags & SK_TCP_TIMESTAMP) in cnic_cm_conn_req()
3540 if (csk->tcp_flags & SK_TCP_SACK) in cnic_cm_conn_req()
3542 if (csk->tcp_flags & SK_TCP_SEG_SCALING) in cnic_cm_conn_req()
3550 static int cnic_cm_close_req(struct cnic_sock *csk) in cnic_cm_close_req() argument
3552 struct cnic_dev *dev = csk->dev; in cnic_cm_close_req()
3556 l4kwqe = (struct l4_kwq_close_req *) &csk->kwqe2; in cnic_cm_close_req()
3562 l4kwqe->cid = csk->cid; in cnic_cm_close_req()
3567 static int cnic_cm_abort_req(struct cnic_sock *csk) in cnic_cm_abort_req() argument
3569 struct cnic_dev *dev = csk->dev; in cnic_cm_abort_req()
3573 l4kwqe = (struct l4_kwq_reset_req *) &csk->kwqe2; in cnic_cm_abort_req()
3579 l4kwqe->cid = csk->cid; in cnic_cm_abort_req()
3585 u32 l5_cid, struct cnic_sock **csk, void *context) in cnic_cm_create() argument
3624 *csk = csk1; in cnic_cm_create()
3628 static void cnic_cm_cleanup(struct cnic_sock *csk) in cnic_cm_cleanup() argument
3630 if (csk->src_port) { in cnic_cm_cleanup()
3631 struct cnic_dev *dev = csk->dev; in cnic_cm_cleanup()
3634 cnic_free_id(&cp->csk_port_tbl, be16_to_cpu(csk->src_port)); in cnic_cm_cleanup()
3635 csk->src_port = 0; in cnic_cm_cleanup()
3639 static void cnic_close_conn(struct cnic_sock *csk) in cnic_close_conn() argument
3641 if (test_bit(SK_F_PG_OFFLD_COMPLETE, &csk->flags)) { in cnic_close_conn()
3642 cnic_cm_upload_pg(csk); in cnic_close_conn()
3643 clear_bit(SK_F_PG_OFFLD_COMPLETE, &csk->flags); in cnic_close_conn()
3645 cnic_cm_cleanup(csk); in cnic_close_conn()
3648 static int cnic_cm_destroy(struct cnic_sock *csk) in cnic_cm_destroy() argument
3650 if (!cnic_in_use(csk)) in cnic_cm_destroy()
3653 csk_hold(csk); in cnic_cm_destroy()
3654 clear_bit(SK_F_INUSE, &csk->flags); in cnic_cm_destroy()
3656 while (atomic_read(&csk->ref_count) != 1) in cnic_cm_destroy()
3658 cnic_cm_cleanup(csk); in cnic_cm_destroy()
3660 csk->flags = 0; in cnic_cm_destroy()
3661 csk_put(csk); in cnic_cm_destroy()
3751 static int cnic_resolve_addr(struct cnic_sock *csk, struct cnic_sockaddr *saddr) in cnic_resolve_addr() argument
3753 struct cnic_dev *dev = csk->dev; in cnic_resolve_addr()
3756 return cnic_send_nlmsg(cp, ISCSI_KEVENT_PATH_REQ, csk); in cnic_resolve_addr()
3759 static int cnic_get_route(struct cnic_sock *csk, struct cnic_sockaddr *saddr) in cnic_get_route() argument
3761 struct cnic_dev *dev = csk->dev; in cnic_get_route()
3778 clear_bit(SK_F_IPV6, &csk->flags); in cnic_get_route()
3781 set_bit(SK_F_IPV6, &csk->flags); in cnic_get_route()
3784 memcpy(&csk->dst_ip[0], &saddr->remote.v6.sin6_addr, in cnic_get_route()
3786 csk->dst_port = saddr->remote.v6.sin6_port; in cnic_get_route()
3792 csk->dst_ip[0] = saddr->remote.v4.sin_addr.s_addr; in cnic_get_route()
3793 csk->dst_port = saddr->remote.v4.sin_port; in cnic_get_route()
3797 csk->vlan_id = 0; in cnic_get_route()
3798 csk->mtu = dev->netdev->mtu; in cnic_get_route()
3802 csk->vlan_id = vlan; in cnic_get_route()
3803 csk->mtu = dst_mtu(dst); in cnic_get_route()
3823 csk->src_port = local_port; in cnic_get_route()
3830 static void cnic_init_csk_state(struct cnic_sock *csk) in cnic_init_csk_state() argument
3832 csk->state = 0; in cnic_init_csk_state()
3833 clear_bit(SK_F_OFFLD_SCHED, &csk->flags); in cnic_init_csk_state()
3834 clear_bit(SK_F_CLOSING, &csk->flags); in cnic_init_csk_state()
3837 static int cnic_cm_connect(struct cnic_sock *csk, struct cnic_sockaddr *saddr) in cnic_cm_connect() argument
3839 struct cnic_local *cp = csk->dev->cnic_priv; in cnic_cm_connect()
3845 if (!cnic_in_use(csk)) in cnic_cm_connect()
3848 if (test_and_set_bit(SK_F_CONNECT_START, &csk->flags)) in cnic_cm_connect()
3851 cnic_init_csk_state(csk); in cnic_cm_connect()
3853 err = cnic_get_route(csk, saddr); in cnic_cm_connect()
3857 err = cnic_resolve_addr(csk, saddr); in cnic_cm_connect()
3862 clear_bit(SK_F_CONNECT_START, &csk->flags); in cnic_cm_connect()
3866 static int cnic_cm_abort(struct cnic_sock *csk) in cnic_cm_abort() argument
3868 struct cnic_local *cp = csk->dev->cnic_priv; in cnic_cm_abort()
3871 if (!cnic_in_use(csk)) in cnic_cm_abort()
3874 if (cnic_abort_prep(csk)) in cnic_cm_abort()
3875 return cnic_cm_abort_req(csk); in cnic_cm_abort()
3881 cp->close_conn(csk, opcode); in cnic_cm_abort()
3882 if (csk->state != opcode) { in cnic_cm_abort()
3884 while (test_bit(SK_F_PG_OFFLD_COMPLETE, &csk->flags)) in cnic_cm_abort()
3893 static int cnic_cm_close(struct cnic_sock *csk) in cnic_cm_close() argument
3895 if (!cnic_in_use(csk)) in cnic_cm_close()
3898 if (cnic_close_prep(csk)) { in cnic_cm_close()
3899 csk->state = L4_KCQE_OPCODE_VALUE_CLOSE_COMP; in cnic_cm_close()
3900 return cnic_cm_close_req(csk); in cnic_cm_close()
3903 while (test_bit(SK_F_PG_OFFLD_COMPLETE, &csk->flags)) in cnic_cm_close()
3911 static void cnic_cm_upcall(struct cnic_local *cp, struct cnic_sock *csk, in cnic_cm_upcall() argument
3915 int ulp_type = csk->ulp_type; in cnic_cm_upcall()
3921 ulp_ops->cm_connect_complete(csk); in cnic_cm_upcall()
3923 ulp_ops->cm_close_complete(csk); in cnic_cm_upcall()
3925 ulp_ops->cm_remote_abort(csk); in cnic_cm_upcall()
3927 ulp_ops->cm_abort_complete(csk); in cnic_cm_upcall()
3929 ulp_ops->cm_remote_close(csk); in cnic_cm_upcall()
3934 static int cnic_cm_set_pg(struct cnic_sock *csk) in cnic_cm_set_pg() argument
3936 if (cnic_offld_prep(csk)) { in cnic_cm_set_pg()
3937 if (test_bit(SK_F_PG_OFFLD_COMPLETE, &csk->flags)) in cnic_cm_set_pg()
3938 cnic_cm_update_pg(csk); in cnic_cm_set_pg()
3940 cnic_cm_offload_pg(csk); in cnic_cm_set_pg()
3950 struct cnic_sock *csk = &cp->csk_tbl[l5_cid]; in cnic_cm_process_offld_pg() local
3952 csk_hold(csk); in cnic_cm_process_offld_pg()
3953 if (!cnic_in_use(csk)) in cnic_cm_process_offld_pg()
3957 clear_bit(SK_F_OFFLD_SCHED, &csk->flags); in cnic_cm_process_offld_pg()
3962 clear_bit(SK_F_OFFLD_SCHED, &csk->flags); in cnic_cm_process_offld_pg()
3963 cnic_cm_upcall(cp, csk, in cnic_cm_process_offld_pg()
3968 csk->pg_cid = kcqe->pg_cid; in cnic_cm_process_offld_pg()
3969 set_bit(SK_F_PG_OFFLD_COMPLETE, &csk->flags); in cnic_cm_process_offld_pg()
3970 cnic_cm_conn_req(csk); in cnic_cm_process_offld_pg()
3973 csk_put(csk); in cnic_cm_process_offld_pg()
3994 struct cnic_sock *csk; in cnic_cm_process_kcqe() local
4012 csk = &cp->csk_tbl[l5_cid]; in cnic_cm_process_kcqe()
4013 csk_hold(csk); in cnic_cm_process_kcqe()
4015 if (!cnic_in_use(csk)) { in cnic_cm_process_kcqe()
4016 csk_put(csk); in cnic_cm_process_kcqe()
4023 clear_bit(SK_F_OFFLD_SCHED, &csk->flags); in cnic_cm_process_kcqe()
4024 cnic_cm_upcall(cp, csk, in cnic_cm_process_kcqe()
4030 set_bit(SK_F_OFFLD_COMPLETE, &csk->flags); in cnic_cm_process_kcqe()
4033 set_bit(SK_F_HW_ERR, &csk->flags); in cnic_cm_process_kcqe()
4036 clear_bit(SK_F_OFFLD_SCHED, &csk->flags); in cnic_cm_process_kcqe()
4037 cnic_cm_upcall(cp, csk, opcode); in cnic_cm_process_kcqe()
4058 set_bit(SK_F_HW_ERR, &csk->flags); in cnic_cm_process_kcqe()
4060 cp->close_conn(csk, opcode); in cnic_cm_process_kcqe()
4066 !test_bit(SK_F_OFFLD_COMPLETE, &csk->flags) && in cnic_cm_process_kcqe()
4067 csk->state == L4_KCQE_OPCODE_VALUE_CLOSE_COMP) in cnic_cm_process_kcqe()
4068 cp->close_conn(csk, L4_KCQE_OPCODE_VALUE_RESET_COMP); in cnic_cm_process_kcqe()
4070 cnic_cm_upcall(cp, csk, opcode); in cnic_cm_process_kcqe()
4073 csk_put(csk); in cnic_cm_process_kcqe()
4118 static int cnic_ready_to_close(struct cnic_sock *csk, u32 opcode) in cnic_ready_to_close() argument
4120 if (test_and_clear_bit(SK_F_OFFLD_COMPLETE, &csk->flags)) { in cnic_ready_to_close()
4123 csk->state = opcode; in cnic_ready_to_close()
4132 if (opcode == csk->state || csk->state == 0 || in cnic_ready_to_close()
4133 csk->state == L4_KCQE_OPCODE_VALUE_CLOSE_COMP || in cnic_ready_to_close()
4134 csk->state == L4_KCQE_OPCODE_VALUE_RESET_COMP) { in cnic_ready_to_close()
4135 if (!test_and_set_bit(SK_F_CLOSING, &csk->flags)) { in cnic_ready_to_close()
4136 if (csk->state == 0) in cnic_ready_to_close()
4137 csk->state = opcode; in cnic_ready_to_close()
4144 static void cnic_close_bnx2_conn(struct cnic_sock *csk, u32 opcode) in cnic_close_bnx2_conn() argument
4146 struct cnic_dev *dev = csk->dev; in cnic_close_bnx2_conn()
4150 cnic_cm_upcall(cp, csk, opcode); in cnic_close_bnx2_conn()
4154 clear_bit(SK_F_CONNECT_START, &csk->flags); in cnic_close_bnx2_conn()
4155 cnic_close_conn(csk); in cnic_close_bnx2_conn()
4156 csk->state = opcode; in cnic_close_bnx2_conn()
4157 cnic_cm_upcall(cp, csk, opcode); in cnic_close_bnx2_conn()
4173 static void cnic_close_bnx2x_conn(struct cnic_sock *csk, u32 opcode) in cnic_close_bnx2x_conn() argument
4175 struct cnic_dev *dev = csk->dev; in cnic_close_bnx2x_conn()
4177 struct cnic_context *ctx = &cp->ctx_tbl[csk->l5_cid]; in cnic_close_bnx2x_conn()
4186 if (cnic_ready_to_close(csk, opcode)) { in cnic_close_bnx2x_conn()
4187 if (test_bit(SK_F_HW_ERR, &csk->flags)) in cnic_close_bnx2x_conn()
4189 else if (test_bit(SK_F_PG_OFFLD_COMPLETE, &csk->flags)) in cnic_close_bnx2x_conn()
4205 cnic_submit_kwqe_16(dev, cmd, csk->cid, ISCSI_CONNECTION_TYPE, in cnic_close_bnx2x_conn()
4209 cnic_close_conn(csk); in cnic_close_bnx2x_conn()
4210 cnic_cm_upcall(cp, csk, csk->state); in cnic_close_bnx2x_conn()
4360 struct cnic_sock *csk = &cp->csk_tbl[i]; in cnic_cm_shutdown() local
4362 clear_bit(SK_F_INUSE, &csk->flags); in cnic_cm_shutdown()
4363 cnic_cm_cleanup(csk); in cnic_cm_shutdown()