Lines Matching refs:trans
232 struct qlcnic_bc_trans *trans; in qlcnic_sriov_cleanup_list() local
239 trans = list_first_entry(&t_list->wait_list, in qlcnic_sriov_cleanup_list()
241 list_del(&trans->list); in qlcnic_sriov_cleanup_list()
243 cmd.req.arg = (u32 *)trans->req_pay; in qlcnic_sriov_cleanup_list()
244 cmd.rsp.arg = (u32 *)trans->rsp_pay; in qlcnic_sriov_cleanup_list()
246 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_cleanup_list()
688 static inline int qlcnic_sriov_alloc_bc_trans(struct qlcnic_bc_trans **trans) in qlcnic_sriov_alloc_bc_trans() argument
690 *trans = kzalloc(sizeof(struct qlcnic_bc_trans), GFP_ATOMIC); in qlcnic_sriov_alloc_bc_trans()
691 if (!*trans) in qlcnic_sriov_alloc_bc_trans()
694 init_completion(&(*trans)->resp_cmpl); in qlcnic_sriov_alloc_bc_trans()
741 static int qlcnic_sriov_prepare_bc_hdr(struct qlcnic_bc_trans *trans, in qlcnic_sriov_prepare_bc_hdr() argument
753 trans->req_pay = (struct qlcnic_bc_payload *)cmd->req.arg; in qlcnic_sriov_prepare_bc_hdr()
754 trans->rsp_pay = (struct qlcnic_bc_payload *)cmd->rsp.arg; in qlcnic_sriov_prepare_bc_hdr()
756 trans->req_pay_size = (num_regs * 4); in qlcnic_sriov_prepare_bc_hdr()
758 trans->rsp_pay_size = (num_regs * 4); in qlcnic_sriov_prepare_bc_hdr()
760 remainder = (trans->req_pay_size) % (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
761 num_frags = (trans->req_pay_size) / (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
765 if (qlcnic_sriov_alloc_bc_msg(&trans->req_hdr, num_frags)) in qlcnic_sriov_prepare_bc_hdr()
767 remainder = (trans->rsp_pay_size) % (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
768 num_frags = (trans->rsp_pay_size) / (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
771 if (qlcnic_sriov_alloc_bc_msg(&trans->rsp_hdr, num_frags)) in qlcnic_sriov_prepare_bc_hdr()
774 hdr = trans->req_hdr; in qlcnic_sriov_prepare_bc_hdr()
776 cmd->req.arg = (u32 *)trans->req_pay; in qlcnic_sriov_prepare_bc_hdr()
777 cmd->rsp.arg = (u32 *)trans->rsp_pay; in qlcnic_sriov_prepare_bc_hdr()
780 remainder = (trans->rsp_pay_size) % (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
781 num_frags = (trans->rsp_pay_size) / (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
784 cmd->req.num = trans->req_pay_size / 4; in qlcnic_sriov_prepare_bc_hdr()
785 cmd->rsp.num = trans->rsp_pay_size / 4; in qlcnic_sriov_prepare_bc_hdr()
786 hdr = trans->rsp_hdr; in qlcnic_sriov_prepare_bc_hdr()
787 cmd->op_type = trans->req_hdr->op_type; in qlcnic_sriov_prepare_bc_hdr()
790 trans->trans_id = seq; in qlcnic_sriov_prepare_bc_hdr()
791 trans->cmd_id = cmd_op; in qlcnic_sriov_prepare_bc_hdr()
805 static void qlcnic_sriov_cleanup_transaction(struct qlcnic_bc_trans *trans) in qlcnic_sriov_cleanup_transaction() argument
807 if (!trans) in qlcnic_sriov_cleanup_transaction()
809 kfree(trans->req_hdr); in qlcnic_sriov_cleanup_transaction()
810 kfree(trans->rsp_hdr); in qlcnic_sriov_cleanup_transaction()
811 kfree(trans); in qlcnic_sriov_cleanup_transaction()
815 struct qlcnic_bc_trans *trans, u8 type) in qlcnic_sriov_clear_trans() argument
825 list_del(&trans->list); in qlcnic_sriov_clear_trans()
850 static inline void qlcnic_sriov_wait_for_resp(struct qlcnic_bc_trans *trans) in qlcnic_sriov_wait_for_resp() argument
852 struct completion *cmpl = &trans->resp_cmpl; in qlcnic_sriov_wait_for_resp()
855 trans->trans_state = QLC_END; in qlcnic_sriov_wait_for_resp()
857 trans->trans_state = QLC_ABORT; in qlcnic_sriov_wait_for_resp()
862 static void qlcnic_sriov_handle_multi_frags(struct qlcnic_bc_trans *trans, in qlcnic_sriov_handle_multi_frags() argument
866 trans->curr_rsp_frag++; in qlcnic_sriov_handle_multi_frags()
867 if (trans->curr_rsp_frag < trans->rsp_hdr->num_frags) in qlcnic_sriov_handle_multi_frags()
868 trans->trans_state = QLC_INIT; in qlcnic_sriov_handle_multi_frags()
870 trans->trans_state = QLC_END; in qlcnic_sriov_handle_multi_frags()
872 trans->curr_req_frag++; in qlcnic_sriov_handle_multi_frags()
873 if (trans->curr_req_frag < trans->req_hdr->num_frags) in qlcnic_sriov_handle_multi_frags()
874 trans->trans_state = QLC_INIT; in qlcnic_sriov_handle_multi_frags()
876 trans->trans_state = QLC_WAIT_FOR_RESP; in qlcnic_sriov_handle_multi_frags()
880 static void qlcnic_sriov_wait_for_channel_free(struct qlcnic_bc_trans *trans, in qlcnic_sriov_wait_for_channel_free() argument
883 struct qlcnic_vf_info *vf = trans->vf; in qlcnic_sriov_wait_for_channel_free()
887 trans->trans_state = QLC_ABORT; in qlcnic_sriov_wait_for_channel_free()
892 qlcnic_sriov_handle_multi_frags(trans, type); in qlcnic_sriov_wait_for_channel_free()
928 static int qlcnic_sriov_issue_bc_post(struct qlcnic_bc_trans *trans, u8 type) in qlcnic_sriov_issue_bc_post() argument
930 struct qlcnic_vf_info *vf = trans->vf; in qlcnic_sriov_issue_bc_post()
934 u8 pci_func = trans->func_id; in qlcnic_sriov_issue_bc_post()
940 hdr = (u32 *)(trans->req_hdr + trans->curr_req_frag); in qlcnic_sriov_issue_bc_post()
941 pay = (u32 *)(trans->req_pay + trans->curr_req_frag); in qlcnic_sriov_issue_bc_post()
943 pay_size = qlcnic_sriov_get_bc_paysize(trans->req_pay_size, in qlcnic_sriov_issue_bc_post()
944 trans->curr_req_frag); in qlcnic_sriov_issue_bc_post()
947 hdr = (u32 *)(trans->rsp_hdr + trans->curr_rsp_frag); in qlcnic_sriov_issue_bc_post()
948 pay = (u32 *)(trans->rsp_pay + trans->curr_rsp_frag); in qlcnic_sriov_issue_bc_post()
950 pay_size = qlcnic_sriov_get_bc_paysize(trans->rsp_pay_size, in qlcnic_sriov_issue_bc_post()
951 trans->curr_rsp_frag); in qlcnic_sriov_issue_bc_post()
960 static int __qlcnic_sriov_send_bc_msg(struct qlcnic_bc_trans *trans, in __qlcnic_sriov_send_bc_msg() argument
969 trans->trans_state = QLC_ABORT; in __qlcnic_sriov_send_bc_msg()
971 switch (trans->trans_state) { in __qlcnic_sriov_send_bc_msg()
973 trans->trans_state = QLC_WAIT_FOR_CHANNEL_FREE; in __qlcnic_sriov_send_bc_msg()
974 if (qlcnic_sriov_issue_bc_post(trans, type)) in __qlcnic_sriov_send_bc_msg()
975 trans->trans_state = QLC_ABORT; in __qlcnic_sriov_send_bc_msg()
978 qlcnic_sriov_wait_for_channel_free(trans, type); in __qlcnic_sriov_send_bc_msg()
981 qlcnic_sriov_wait_for_resp(trans); in __qlcnic_sriov_send_bc_msg()
1001 struct qlcnic_bc_trans *trans, int pci_func) in qlcnic_sriov_send_bc_cmd() argument
1010 trans->vf = vf; in qlcnic_sriov_send_bc_cmd()
1011 trans->func_id = pci_func; in qlcnic_sriov_send_bc_cmd()
1017 trans->cmd_id != QLCNIC_BC_CMD_CHANNEL_INIT) in qlcnic_sriov_send_bc_cmd()
1022 vf->send_cmd = trans; in qlcnic_sriov_send_bc_cmd()
1023 err = __qlcnic_sriov_send_bc_msg(trans, vf, QLC_BC_COMMAND); in qlcnic_sriov_send_bc_cmd()
1024 qlcnic_sriov_clear_trans(vf, trans, QLC_BC_COMMAND); in qlcnic_sriov_send_bc_cmd()
1030 struct qlcnic_bc_trans *trans, in __qlcnic_sriov_process_bc_cmd() argument
1035 qlcnic_sriov_pf_process_bc_cmd(adapter, trans, cmd); in __qlcnic_sriov_process_bc_cmd()
1047 struct qlcnic_bc_trans *trans = NULL; in qlcnic_sriov_process_bc_cmd() local
1059 trans = list_first_entry(&vf->rcv_act.wait_list, in qlcnic_sriov_process_bc_cmd()
1063 if (qlcnic_sriov_prepare_bc_hdr(trans, &cmd, trans->req_hdr->seq_id, in qlcnic_sriov_process_bc_cmd()
1067 __qlcnic_sriov_process_bc_cmd(adapter, trans, &cmd); in qlcnic_sriov_process_bc_cmd()
1068 trans->trans_state = QLC_INIT; in qlcnic_sriov_process_bc_cmd()
1069 __qlcnic_sriov_send_bc_msg(trans, vf, QLC_BC_RESPONSE); in qlcnic_sriov_process_bc_cmd()
1073 req = qlcnic_sriov_clear_trans(vf, trans, QLC_BC_RESPONSE); in qlcnic_sriov_process_bc_cmd()
1074 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_process_bc_cmd()
1083 struct qlcnic_bc_trans *trans; in qlcnic_sriov_handle_bc_resp() local
1089 trans = vf->send_cmd; in qlcnic_sriov_handle_bc_resp()
1091 if (trans == NULL) in qlcnic_sriov_handle_bc_resp()
1094 if (trans->trans_id != hdr->seq_id) in qlcnic_sriov_handle_bc_resp()
1097 pay_size = qlcnic_sriov_get_bc_paysize(trans->rsp_pay_size, in qlcnic_sriov_handle_bc_resp()
1098 trans->curr_rsp_frag); in qlcnic_sriov_handle_bc_resp()
1100 (u32 *)(trans->rsp_hdr + trans->curr_rsp_frag), in qlcnic_sriov_handle_bc_resp()
1101 (u32 *)(trans->rsp_pay + trans->curr_rsp_frag), in qlcnic_sriov_handle_bc_resp()
1103 if (++trans->curr_rsp_frag < trans->rsp_hdr->num_frags) in qlcnic_sriov_handle_bc_resp()
1106 complete(&trans->resp_cmpl); in qlcnic_sriov_handle_bc_resp()
1114 struct qlcnic_bc_trans *trans) in __qlcnic_sriov_add_act_list() argument
1119 list_add_tail(&trans->list, &t_list->wait_list); in __qlcnic_sriov_add_act_list()
1128 struct qlcnic_bc_trans *trans) in qlcnic_sriov_add_act_list() argument
1134 __qlcnic_sriov_add_act_list(sriov, vf, trans); in qlcnic_sriov_add_act_list()
1144 struct qlcnic_bc_trans *trans = NULL; in qlcnic_sriov_handle_pending_trans() local
1152 trans = list_entry(node, struct qlcnic_bc_trans, list); in qlcnic_sriov_handle_pending_trans()
1153 if (trans->trans_id == hdr->seq_id) { in qlcnic_sriov_handle_pending_trans()
1161 curr_frag = trans->curr_req_frag; in qlcnic_sriov_handle_pending_trans()
1162 pay_size = qlcnic_sriov_get_bc_paysize(trans->req_pay_size, in qlcnic_sriov_handle_pending_trans()
1165 (u32 *)(trans->req_hdr + curr_frag), in qlcnic_sriov_handle_pending_trans()
1166 (u32 *)(trans->req_pay + curr_frag), in qlcnic_sriov_handle_pending_trans()
1168 trans->curr_req_frag++; in qlcnic_sriov_handle_pending_trans()
1169 if (trans->curr_req_frag >= hdr->num_frags) { in qlcnic_sriov_handle_pending_trans()
1171 list_del(&trans->list); in qlcnic_sriov_handle_pending_trans()
1178 if (qlcnic_sriov_add_act_list(sriov, vf, trans)) in qlcnic_sriov_handle_pending_trans()
1179 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_handle_pending_trans()
1188 struct qlcnic_bc_trans *trans; in qlcnic_sriov_handle_bc_cmd() local
1210 if (qlcnic_sriov_alloc_bc_trans(&trans)) in qlcnic_sriov_handle_bc_cmd()
1219 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_handle_bc_cmd()
1224 if (qlcnic_sriov_prepare_bc_hdr(trans, &cmd, hdr->seq_id, in qlcnic_sriov_handle_bc_cmd()
1227 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_handle_bc_cmd()
1231 pay_size = qlcnic_sriov_get_bc_paysize(trans->req_pay_size, in qlcnic_sriov_handle_bc_cmd()
1232 trans->curr_req_frag); in qlcnic_sriov_handle_bc_cmd()
1234 (u32 *)(trans->req_hdr + trans->curr_req_frag), in qlcnic_sriov_handle_bc_cmd()
1235 (u32 *)(trans->req_pay + trans->curr_req_frag), in qlcnic_sriov_handle_bc_cmd()
1237 trans->func_id = vf->pci_func; in qlcnic_sriov_handle_bc_cmd()
1238 trans->vf = vf; in qlcnic_sriov_handle_bc_cmd()
1239 trans->trans_id = hdr->seq_id; in qlcnic_sriov_handle_bc_cmd()
1240 trans->curr_req_frag++; in qlcnic_sriov_handle_bc_cmd()
1242 if (qlcnic_sriov_soft_flr_check(adapter, trans, vf)) in qlcnic_sriov_handle_bc_cmd()
1245 if (trans->curr_req_frag == trans->req_hdr->num_frags) { in qlcnic_sriov_handle_bc_cmd()
1246 if (qlcnic_sriov_add_act_list(sriov, vf, trans)) { in qlcnic_sriov_handle_bc_cmd()
1248 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_handle_bc_cmd()
1252 list_add_tail(&trans->list, &vf->rcv_pend.wait_list); in qlcnic_sriov_handle_bc_cmd()
1347 struct qlcnic_bc_trans *trans) in qlcnic_sriov_retry_bc_cmd() argument
1355 clear_bit(QLC_BC_VF_CHANNEL, &trans->vf->state); in qlcnic_sriov_retry_bc_cmd()
1356 trans->trans_state = QLC_INIT; in qlcnic_sriov_retry_bc_cmd()
1372 struct qlcnic_bc_trans *trans; in __qlcnic_sriov_issue_cmd() local
1378 rsp = qlcnic_sriov_alloc_bc_trans(&trans); in __qlcnic_sriov_issue_cmd()
1382 rsp = qlcnic_sriov_prepare_bc_hdr(trans, cmd, seq, QLC_BC_COMMAND); in __qlcnic_sriov_issue_cmd()
1394 err = qlcnic_sriov_send_bc_cmd(adapter, trans, func); in __qlcnic_sriov_issue_cmd()
1403 if ((trans->req_hdr->cmd_op == QLCNIC_BC_CMD_CHANNEL_INIT) && in __qlcnic_sriov_issue_cmd()
1404 !qlcnic_sriov_retry_bc_cmd(adapter, trans)) in __qlcnic_sriov_issue_cmd()
1439 qlcnic_sriov_cleanup_transaction(trans); in __qlcnic_sriov_issue_cmd()