Lines Matching refs:trans

239 	struct qlcnic_bc_trans *trans;  in qlcnic_sriov_cleanup_list()  local
246 trans = list_first_entry(&t_list->wait_list, in qlcnic_sriov_cleanup_list()
248 list_del(&trans->list); in qlcnic_sriov_cleanup_list()
250 cmd.req.arg = (u32 *)trans->req_pay; in qlcnic_sriov_cleanup_list()
251 cmd.rsp.arg = (u32 *)trans->rsp_pay; in qlcnic_sriov_cleanup_list()
253 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_cleanup_list()
697 static inline int qlcnic_sriov_alloc_bc_trans(struct qlcnic_bc_trans **trans) in qlcnic_sriov_alloc_bc_trans() argument
699 *trans = kzalloc(sizeof(struct qlcnic_bc_trans), GFP_ATOMIC); in qlcnic_sriov_alloc_bc_trans()
700 if (!*trans) in qlcnic_sriov_alloc_bc_trans()
703 init_completion(&(*trans)->resp_cmpl); in qlcnic_sriov_alloc_bc_trans()
750 static int qlcnic_sriov_prepare_bc_hdr(struct qlcnic_bc_trans *trans, in qlcnic_sriov_prepare_bc_hdr() argument
762 trans->req_pay = (struct qlcnic_bc_payload *)cmd->req.arg; in qlcnic_sriov_prepare_bc_hdr()
763 trans->rsp_pay = (struct qlcnic_bc_payload *)cmd->rsp.arg; in qlcnic_sriov_prepare_bc_hdr()
765 trans->req_pay_size = (num_regs * 4); in qlcnic_sriov_prepare_bc_hdr()
767 trans->rsp_pay_size = (num_regs * 4); in qlcnic_sriov_prepare_bc_hdr()
769 remainder = (trans->req_pay_size) % (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
770 num_frags = (trans->req_pay_size) / (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
774 if (qlcnic_sriov_alloc_bc_msg(&trans->req_hdr, num_frags)) in qlcnic_sriov_prepare_bc_hdr()
776 remainder = (trans->rsp_pay_size) % (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
777 num_frags = (trans->rsp_pay_size) / (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
780 if (qlcnic_sriov_alloc_bc_msg(&trans->rsp_hdr, num_frags)) in qlcnic_sriov_prepare_bc_hdr()
783 hdr = trans->req_hdr; in qlcnic_sriov_prepare_bc_hdr()
785 cmd->req.arg = (u32 *)trans->req_pay; in qlcnic_sriov_prepare_bc_hdr()
786 cmd->rsp.arg = (u32 *)trans->rsp_pay; in qlcnic_sriov_prepare_bc_hdr()
789 remainder = (trans->rsp_pay_size) % (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
790 num_frags = (trans->rsp_pay_size) / (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
793 cmd->req.num = trans->req_pay_size / 4; in qlcnic_sriov_prepare_bc_hdr()
794 cmd->rsp.num = trans->rsp_pay_size / 4; in qlcnic_sriov_prepare_bc_hdr()
795 hdr = trans->rsp_hdr; in qlcnic_sriov_prepare_bc_hdr()
796 cmd->op_type = trans->req_hdr->op_type; in qlcnic_sriov_prepare_bc_hdr()
799 trans->trans_id = seq; in qlcnic_sriov_prepare_bc_hdr()
800 trans->cmd_id = cmd_op; in qlcnic_sriov_prepare_bc_hdr()
814 static void qlcnic_sriov_cleanup_transaction(struct qlcnic_bc_trans *trans) in qlcnic_sriov_cleanup_transaction() argument
816 if (!trans) in qlcnic_sriov_cleanup_transaction()
818 kfree(trans->req_hdr); in qlcnic_sriov_cleanup_transaction()
819 kfree(trans->rsp_hdr); in qlcnic_sriov_cleanup_transaction()
820 kfree(trans); in qlcnic_sriov_cleanup_transaction()
824 struct qlcnic_bc_trans *trans, u8 type) in qlcnic_sriov_clear_trans() argument
834 list_del(&trans->list); in qlcnic_sriov_clear_trans()
859 static inline void qlcnic_sriov_wait_for_resp(struct qlcnic_bc_trans *trans) in qlcnic_sriov_wait_for_resp() argument
861 struct completion *cmpl = &trans->resp_cmpl; in qlcnic_sriov_wait_for_resp()
864 trans->trans_state = QLC_END; in qlcnic_sriov_wait_for_resp()
866 trans->trans_state = QLC_ABORT; in qlcnic_sriov_wait_for_resp()
871 static void qlcnic_sriov_handle_multi_frags(struct qlcnic_bc_trans *trans, in qlcnic_sriov_handle_multi_frags() argument
875 trans->curr_rsp_frag++; in qlcnic_sriov_handle_multi_frags()
876 if (trans->curr_rsp_frag < trans->rsp_hdr->num_frags) in qlcnic_sriov_handle_multi_frags()
877 trans->trans_state = QLC_INIT; in qlcnic_sriov_handle_multi_frags()
879 trans->trans_state = QLC_END; in qlcnic_sriov_handle_multi_frags()
881 trans->curr_req_frag++; in qlcnic_sriov_handle_multi_frags()
882 if (trans->curr_req_frag < trans->req_hdr->num_frags) in qlcnic_sriov_handle_multi_frags()
883 trans->trans_state = QLC_INIT; in qlcnic_sriov_handle_multi_frags()
885 trans->trans_state = QLC_WAIT_FOR_RESP; in qlcnic_sriov_handle_multi_frags()
889 static void qlcnic_sriov_wait_for_channel_free(struct qlcnic_bc_trans *trans, in qlcnic_sriov_wait_for_channel_free() argument
892 struct qlcnic_vf_info *vf = trans->vf; in qlcnic_sriov_wait_for_channel_free()
896 trans->trans_state = QLC_ABORT; in qlcnic_sriov_wait_for_channel_free()
901 qlcnic_sriov_handle_multi_frags(trans, type); in qlcnic_sriov_wait_for_channel_free()
935 static int qlcnic_sriov_issue_bc_post(struct qlcnic_bc_trans *trans, u8 type) in qlcnic_sriov_issue_bc_post() argument
937 struct qlcnic_vf_info *vf = trans->vf; in qlcnic_sriov_issue_bc_post()
941 u8 pci_func = trans->func_id; in qlcnic_sriov_issue_bc_post()
947 hdr = (u32 *)(trans->req_hdr + trans->curr_req_frag); in qlcnic_sriov_issue_bc_post()
948 pay = (u32 *)(trans->req_pay + trans->curr_req_frag); in qlcnic_sriov_issue_bc_post()
949 pay_size = qlcnic_sriov_get_bc_paysize(trans->req_pay_size, in qlcnic_sriov_issue_bc_post()
950 trans->curr_req_frag); in qlcnic_sriov_issue_bc_post()
953 hdr = (u32 *)(trans->rsp_hdr + trans->curr_rsp_frag); in qlcnic_sriov_issue_bc_post()
954 pay = (u32 *)(trans->rsp_pay + trans->curr_rsp_frag); in qlcnic_sriov_issue_bc_post()
955 pay_size = qlcnic_sriov_get_bc_paysize(trans->rsp_pay_size, in qlcnic_sriov_issue_bc_post()
956 trans->curr_rsp_frag); in qlcnic_sriov_issue_bc_post()
965 static int __qlcnic_sriov_send_bc_msg(struct qlcnic_bc_trans *trans, in __qlcnic_sriov_send_bc_msg() argument
974 trans->trans_state = QLC_ABORT; in __qlcnic_sriov_send_bc_msg()
976 switch (trans->trans_state) { in __qlcnic_sriov_send_bc_msg()
978 trans->trans_state = QLC_WAIT_FOR_CHANNEL_FREE; in __qlcnic_sriov_send_bc_msg()
979 if (qlcnic_sriov_issue_bc_post(trans, type)) in __qlcnic_sriov_send_bc_msg()
980 trans->trans_state = QLC_ABORT; in __qlcnic_sriov_send_bc_msg()
983 qlcnic_sriov_wait_for_channel_free(trans, type); in __qlcnic_sriov_send_bc_msg()
986 qlcnic_sriov_wait_for_resp(trans); in __qlcnic_sriov_send_bc_msg()
1006 struct qlcnic_bc_trans *trans, int pci_func) in qlcnic_sriov_send_bc_cmd() argument
1015 trans->vf = vf; in qlcnic_sriov_send_bc_cmd()
1016 trans->func_id = pci_func; in qlcnic_sriov_send_bc_cmd()
1022 trans->cmd_id != QLCNIC_BC_CMD_CHANNEL_INIT) in qlcnic_sriov_send_bc_cmd()
1027 vf->send_cmd = trans; in qlcnic_sriov_send_bc_cmd()
1028 err = __qlcnic_sriov_send_bc_msg(trans, vf, QLC_BC_COMMAND); in qlcnic_sriov_send_bc_cmd()
1029 qlcnic_sriov_clear_trans(vf, trans, QLC_BC_COMMAND); in qlcnic_sriov_send_bc_cmd()
1035 struct qlcnic_bc_trans *trans, in __qlcnic_sriov_process_bc_cmd() argument
1040 qlcnic_sriov_pf_process_bc_cmd(adapter, trans, cmd); in __qlcnic_sriov_process_bc_cmd()
1052 struct qlcnic_bc_trans *trans = NULL; in qlcnic_sriov_process_bc_cmd() local
1064 trans = list_first_entry(&vf->rcv_act.wait_list, in qlcnic_sriov_process_bc_cmd()
1068 if (qlcnic_sriov_prepare_bc_hdr(trans, &cmd, trans->req_hdr->seq_id, in qlcnic_sriov_process_bc_cmd()
1072 __qlcnic_sriov_process_bc_cmd(adapter, trans, &cmd); in qlcnic_sriov_process_bc_cmd()
1073 trans->trans_state = QLC_INIT; in qlcnic_sriov_process_bc_cmd()
1074 __qlcnic_sriov_send_bc_msg(trans, vf, QLC_BC_RESPONSE); in qlcnic_sriov_process_bc_cmd()
1078 req = qlcnic_sriov_clear_trans(vf, trans, QLC_BC_RESPONSE); in qlcnic_sriov_process_bc_cmd()
1079 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_process_bc_cmd()
1088 struct qlcnic_bc_trans *trans; in qlcnic_sriov_handle_bc_resp() local
1094 trans = vf->send_cmd; in qlcnic_sriov_handle_bc_resp()
1096 if (trans == NULL) in qlcnic_sriov_handle_bc_resp()
1099 if (trans->trans_id != hdr->seq_id) in qlcnic_sriov_handle_bc_resp()
1102 pay_size = qlcnic_sriov_get_bc_paysize(trans->rsp_pay_size, in qlcnic_sriov_handle_bc_resp()
1103 trans->curr_rsp_frag); in qlcnic_sriov_handle_bc_resp()
1105 (u32 *)(trans->rsp_hdr + trans->curr_rsp_frag), in qlcnic_sriov_handle_bc_resp()
1106 (u32 *)(trans->rsp_pay + trans->curr_rsp_frag), in qlcnic_sriov_handle_bc_resp()
1108 if (++trans->curr_rsp_frag < trans->rsp_hdr->num_frags) in qlcnic_sriov_handle_bc_resp()
1111 complete(&trans->resp_cmpl); in qlcnic_sriov_handle_bc_resp()
1119 struct qlcnic_bc_trans *trans) in __qlcnic_sriov_add_act_list() argument
1124 list_add_tail(&trans->list, &t_list->wait_list); in __qlcnic_sriov_add_act_list()
1133 struct qlcnic_bc_trans *trans) in qlcnic_sriov_add_act_list() argument
1139 __qlcnic_sriov_add_act_list(sriov, vf, trans); in qlcnic_sriov_add_act_list()
1149 struct qlcnic_bc_trans *trans = NULL; in qlcnic_sriov_handle_pending_trans() local
1157 trans = list_entry(node, struct qlcnic_bc_trans, list); in qlcnic_sriov_handle_pending_trans()
1158 if (trans->trans_id == hdr->seq_id) { in qlcnic_sriov_handle_pending_trans()
1166 curr_frag = trans->curr_req_frag; in qlcnic_sriov_handle_pending_trans()
1167 pay_size = qlcnic_sriov_get_bc_paysize(trans->req_pay_size, in qlcnic_sriov_handle_pending_trans()
1170 (u32 *)(trans->req_hdr + curr_frag), in qlcnic_sriov_handle_pending_trans()
1171 (u32 *)(trans->req_pay + curr_frag), in qlcnic_sriov_handle_pending_trans()
1173 trans->curr_req_frag++; in qlcnic_sriov_handle_pending_trans()
1174 if (trans->curr_req_frag >= hdr->num_frags) { in qlcnic_sriov_handle_pending_trans()
1176 list_del(&trans->list); in qlcnic_sriov_handle_pending_trans()
1183 if (qlcnic_sriov_add_act_list(sriov, vf, trans)) in qlcnic_sriov_handle_pending_trans()
1184 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_handle_pending_trans()
1193 struct qlcnic_bc_trans *trans; in qlcnic_sriov_handle_bc_cmd() local
1215 if (qlcnic_sriov_alloc_bc_trans(&trans)) in qlcnic_sriov_handle_bc_cmd()
1224 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_handle_bc_cmd()
1229 if (qlcnic_sriov_prepare_bc_hdr(trans, &cmd, hdr->seq_id, in qlcnic_sriov_handle_bc_cmd()
1232 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_handle_bc_cmd()
1236 pay_size = qlcnic_sriov_get_bc_paysize(trans->req_pay_size, in qlcnic_sriov_handle_bc_cmd()
1237 trans->curr_req_frag); in qlcnic_sriov_handle_bc_cmd()
1239 (u32 *)(trans->req_hdr + trans->curr_req_frag), in qlcnic_sriov_handle_bc_cmd()
1240 (u32 *)(trans->req_pay + trans->curr_req_frag), in qlcnic_sriov_handle_bc_cmd()
1242 trans->func_id = vf->pci_func; in qlcnic_sriov_handle_bc_cmd()
1243 trans->vf = vf; in qlcnic_sriov_handle_bc_cmd()
1244 trans->trans_id = hdr->seq_id; in qlcnic_sriov_handle_bc_cmd()
1245 trans->curr_req_frag++; in qlcnic_sriov_handle_bc_cmd()
1247 if (qlcnic_sriov_soft_flr_check(adapter, trans, vf)) in qlcnic_sriov_handle_bc_cmd()
1250 if (trans->curr_req_frag == trans->req_hdr->num_frags) { in qlcnic_sriov_handle_bc_cmd()
1251 if (qlcnic_sriov_add_act_list(sriov, vf, trans)) { in qlcnic_sriov_handle_bc_cmd()
1253 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_handle_bc_cmd()
1257 list_add_tail(&trans->list, &vf->rcv_pend.wait_list); in qlcnic_sriov_handle_bc_cmd()
1352 struct qlcnic_bc_trans *trans) in qlcnic_sriov_retry_bc_cmd() argument
1360 clear_bit(QLC_BC_VF_CHANNEL, &trans->vf->state); in qlcnic_sriov_retry_bc_cmd()
1361 trans->trans_state = QLC_INIT; in qlcnic_sriov_retry_bc_cmd()
1377 struct qlcnic_bc_trans *trans; in __qlcnic_sriov_issue_cmd() local
1383 rsp = qlcnic_sriov_alloc_bc_trans(&trans); in __qlcnic_sriov_issue_cmd()
1387 rsp = qlcnic_sriov_prepare_bc_hdr(trans, cmd, seq, QLC_BC_COMMAND); in __qlcnic_sriov_issue_cmd()
1399 err = qlcnic_sriov_send_bc_cmd(adapter, trans, func); in __qlcnic_sriov_issue_cmd()
1408 if ((trans->req_hdr->cmd_op == QLCNIC_BC_CMD_CHANNEL_INIT) && in __qlcnic_sriov_issue_cmd()
1409 !qlcnic_sriov_retry_bc_cmd(adapter, trans)) in __qlcnic_sriov_issue_cmd()
1444 qlcnic_sriov_cleanup_transaction(trans); in __qlcnic_sriov_issue_cmd()