Lines Matching refs:trans

231 	struct qlcnic_bc_trans *trans;  in qlcnic_sriov_cleanup_list()  local
238 trans = list_first_entry(&t_list->wait_list, in qlcnic_sriov_cleanup_list()
240 list_del(&trans->list); in qlcnic_sriov_cleanup_list()
242 cmd.req.arg = (u32 *)trans->req_pay; in qlcnic_sriov_cleanup_list()
243 cmd.rsp.arg = (u32 *)trans->rsp_pay; in qlcnic_sriov_cleanup_list()
245 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_cleanup_list()
687 static inline int qlcnic_sriov_alloc_bc_trans(struct qlcnic_bc_trans **trans) in qlcnic_sriov_alloc_bc_trans() argument
689 *trans = kzalloc(sizeof(struct qlcnic_bc_trans), GFP_ATOMIC); in qlcnic_sriov_alloc_bc_trans()
690 if (!*trans) in qlcnic_sriov_alloc_bc_trans()
693 init_completion(&(*trans)->resp_cmpl); in qlcnic_sriov_alloc_bc_trans()
742 static int qlcnic_sriov_prepare_bc_hdr(struct qlcnic_bc_trans *trans, in qlcnic_sriov_prepare_bc_hdr() argument
754 trans->req_pay = (struct qlcnic_bc_payload *)cmd->req.arg; in qlcnic_sriov_prepare_bc_hdr()
755 trans->rsp_pay = (struct qlcnic_bc_payload *)cmd->rsp.arg; in qlcnic_sriov_prepare_bc_hdr()
757 trans->req_pay_size = (num_regs * 4); in qlcnic_sriov_prepare_bc_hdr()
759 trans->rsp_pay_size = (num_regs * 4); in qlcnic_sriov_prepare_bc_hdr()
761 remainder = (trans->req_pay_size) % (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
762 num_frags = (trans->req_pay_size) / (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
766 if (qlcnic_sriov_alloc_bc_msg(&trans->req_hdr, num_frags)) in qlcnic_sriov_prepare_bc_hdr()
768 remainder = (trans->rsp_pay_size) % (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
769 num_frags = (trans->rsp_pay_size) / (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
772 if (qlcnic_sriov_alloc_bc_msg(&trans->rsp_hdr, num_frags)) in qlcnic_sriov_prepare_bc_hdr()
775 hdr = trans->req_hdr; in qlcnic_sriov_prepare_bc_hdr()
777 cmd->req.arg = (u32 *)trans->req_pay; in qlcnic_sriov_prepare_bc_hdr()
778 cmd->rsp.arg = (u32 *)trans->rsp_pay; in qlcnic_sriov_prepare_bc_hdr()
781 remainder = (trans->rsp_pay_size) % (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
782 num_frags = (trans->rsp_pay_size) / (bc_pay_sz); in qlcnic_sriov_prepare_bc_hdr()
785 cmd->req.num = trans->req_pay_size / 4; in qlcnic_sriov_prepare_bc_hdr()
786 cmd->rsp.num = trans->rsp_pay_size / 4; in qlcnic_sriov_prepare_bc_hdr()
787 hdr = trans->rsp_hdr; in qlcnic_sriov_prepare_bc_hdr()
788 cmd->op_type = trans->req_hdr->op_type; in qlcnic_sriov_prepare_bc_hdr()
791 trans->trans_id = seq; in qlcnic_sriov_prepare_bc_hdr()
792 trans->cmd_id = cmd_op; in qlcnic_sriov_prepare_bc_hdr()
806 static void qlcnic_sriov_cleanup_transaction(struct qlcnic_bc_trans *trans) in qlcnic_sriov_cleanup_transaction() argument
808 if (!trans) in qlcnic_sriov_cleanup_transaction()
810 kfree(trans->req_hdr); in qlcnic_sriov_cleanup_transaction()
811 kfree(trans->rsp_hdr); in qlcnic_sriov_cleanup_transaction()
812 kfree(trans); in qlcnic_sriov_cleanup_transaction()
816 struct qlcnic_bc_trans *trans, u8 type) in qlcnic_sriov_clear_trans() argument
826 list_del(&trans->list); in qlcnic_sriov_clear_trans()
851 static inline void qlcnic_sriov_wait_for_resp(struct qlcnic_bc_trans *trans) in qlcnic_sriov_wait_for_resp() argument
853 struct completion *cmpl = &trans->resp_cmpl; in qlcnic_sriov_wait_for_resp()
856 trans->trans_state = QLC_END; in qlcnic_sriov_wait_for_resp()
858 trans->trans_state = QLC_ABORT; in qlcnic_sriov_wait_for_resp()
863 static void qlcnic_sriov_handle_multi_frags(struct qlcnic_bc_trans *trans, in qlcnic_sriov_handle_multi_frags() argument
867 trans->curr_rsp_frag++; in qlcnic_sriov_handle_multi_frags()
868 if (trans->curr_rsp_frag < trans->rsp_hdr->num_frags) in qlcnic_sriov_handle_multi_frags()
869 trans->trans_state = QLC_INIT; in qlcnic_sriov_handle_multi_frags()
871 trans->trans_state = QLC_END; in qlcnic_sriov_handle_multi_frags()
873 trans->curr_req_frag++; in qlcnic_sriov_handle_multi_frags()
874 if (trans->curr_req_frag < trans->req_hdr->num_frags) in qlcnic_sriov_handle_multi_frags()
875 trans->trans_state = QLC_INIT; in qlcnic_sriov_handle_multi_frags()
877 trans->trans_state = QLC_WAIT_FOR_RESP; in qlcnic_sriov_handle_multi_frags()
881 static void qlcnic_sriov_wait_for_channel_free(struct qlcnic_bc_trans *trans, in qlcnic_sriov_wait_for_channel_free() argument
884 struct qlcnic_vf_info *vf = trans->vf; in qlcnic_sriov_wait_for_channel_free()
888 trans->trans_state = QLC_ABORT; in qlcnic_sriov_wait_for_channel_free()
893 qlcnic_sriov_handle_multi_frags(trans, type); in qlcnic_sriov_wait_for_channel_free()
929 static int qlcnic_sriov_issue_bc_post(struct qlcnic_bc_trans *trans, u8 type) in qlcnic_sriov_issue_bc_post() argument
931 struct qlcnic_vf_info *vf = trans->vf; in qlcnic_sriov_issue_bc_post()
935 u8 pci_func = trans->func_id; in qlcnic_sriov_issue_bc_post()
941 hdr = (u32 *)(trans->req_hdr + trans->curr_req_frag); in qlcnic_sriov_issue_bc_post()
942 pay = (u32 *)(trans->req_pay + trans->curr_req_frag); in qlcnic_sriov_issue_bc_post()
944 pay_size = qlcnic_sriov_get_bc_paysize(trans->req_pay_size, in qlcnic_sriov_issue_bc_post()
945 trans->curr_req_frag); in qlcnic_sriov_issue_bc_post()
948 hdr = (u32 *)(trans->rsp_hdr + trans->curr_rsp_frag); in qlcnic_sriov_issue_bc_post()
949 pay = (u32 *)(trans->rsp_pay + trans->curr_rsp_frag); in qlcnic_sriov_issue_bc_post()
951 pay_size = qlcnic_sriov_get_bc_paysize(trans->rsp_pay_size, in qlcnic_sriov_issue_bc_post()
952 trans->curr_rsp_frag); in qlcnic_sriov_issue_bc_post()
961 static int __qlcnic_sriov_send_bc_msg(struct qlcnic_bc_trans *trans, in __qlcnic_sriov_send_bc_msg() argument
970 trans->trans_state = QLC_ABORT; in __qlcnic_sriov_send_bc_msg()
972 switch (trans->trans_state) { in __qlcnic_sriov_send_bc_msg()
974 trans->trans_state = QLC_WAIT_FOR_CHANNEL_FREE; in __qlcnic_sriov_send_bc_msg()
975 if (qlcnic_sriov_issue_bc_post(trans, type)) in __qlcnic_sriov_send_bc_msg()
976 trans->trans_state = QLC_ABORT; in __qlcnic_sriov_send_bc_msg()
979 qlcnic_sriov_wait_for_channel_free(trans, type); in __qlcnic_sriov_send_bc_msg()
982 qlcnic_sriov_wait_for_resp(trans); in __qlcnic_sriov_send_bc_msg()
1002 struct qlcnic_bc_trans *trans, int pci_func) in qlcnic_sriov_send_bc_cmd() argument
1011 trans->vf = vf; in qlcnic_sriov_send_bc_cmd()
1012 trans->func_id = pci_func; in qlcnic_sriov_send_bc_cmd()
1018 trans->cmd_id != QLCNIC_BC_CMD_CHANNEL_INIT) in qlcnic_sriov_send_bc_cmd()
1023 vf->send_cmd = trans; in qlcnic_sriov_send_bc_cmd()
1024 err = __qlcnic_sriov_send_bc_msg(trans, vf, QLC_BC_COMMAND); in qlcnic_sriov_send_bc_cmd()
1025 qlcnic_sriov_clear_trans(vf, trans, QLC_BC_COMMAND); in qlcnic_sriov_send_bc_cmd()
1031 struct qlcnic_bc_trans *trans, in __qlcnic_sriov_process_bc_cmd() argument
1036 qlcnic_sriov_pf_process_bc_cmd(adapter, trans, cmd); in __qlcnic_sriov_process_bc_cmd()
1048 struct qlcnic_bc_trans *trans = NULL; in qlcnic_sriov_process_bc_cmd() local
1060 trans = list_first_entry(&vf->rcv_act.wait_list, in qlcnic_sriov_process_bc_cmd()
1064 if (qlcnic_sriov_prepare_bc_hdr(trans, &cmd, trans->req_hdr->seq_id, in qlcnic_sriov_process_bc_cmd()
1068 __qlcnic_sriov_process_bc_cmd(adapter, trans, &cmd); in qlcnic_sriov_process_bc_cmd()
1069 trans->trans_state = QLC_INIT; in qlcnic_sriov_process_bc_cmd()
1070 __qlcnic_sriov_send_bc_msg(trans, vf, QLC_BC_RESPONSE); in qlcnic_sriov_process_bc_cmd()
1074 req = qlcnic_sriov_clear_trans(vf, trans, QLC_BC_RESPONSE); in qlcnic_sriov_process_bc_cmd()
1075 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_process_bc_cmd()
1084 struct qlcnic_bc_trans *trans; in qlcnic_sriov_handle_bc_resp() local
1090 trans = vf->send_cmd; in qlcnic_sriov_handle_bc_resp()
1092 if (trans == NULL) in qlcnic_sriov_handle_bc_resp()
1095 if (trans->trans_id != hdr->seq_id) in qlcnic_sriov_handle_bc_resp()
1098 pay_size = qlcnic_sriov_get_bc_paysize(trans->rsp_pay_size, in qlcnic_sriov_handle_bc_resp()
1099 trans->curr_rsp_frag); in qlcnic_sriov_handle_bc_resp()
1101 (u32 *)(trans->rsp_hdr + trans->curr_rsp_frag), in qlcnic_sriov_handle_bc_resp()
1102 (u32 *)(trans->rsp_pay + trans->curr_rsp_frag), in qlcnic_sriov_handle_bc_resp()
1104 if (++trans->curr_rsp_frag < trans->rsp_hdr->num_frags) in qlcnic_sriov_handle_bc_resp()
1107 complete(&trans->resp_cmpl); in qlcnic_sriov_handle_bc_resp()
1115 struct qlcnic_bc_trans *trans) in __qlcnic_sriov_add_act_list() argument
1120 list_add_tail(&trans->list, &t_list->wait_list); in __qlcnic_sriov_add_act_list()
1129 struct qlcnic_bc_trans *trans) in qlcnic_sriov_add_act_list() argument
1135 __qlcnic_sriov_add_act_list(sriov, vf, trans); in qlcnic_sriov_add_act_list()
1145 struct qlcnic_bc_trans *trans = NULL; in qlcnic_sriov_handle_pending_trans() local
1153 trans = list_entry(node, struct qlcnic_bc_trans, list); in qlcnic_sriov_handle_pending_trans()
1154 if (trans->trans_id == hdr->seq_id) { in qlcnic_sriov_handle_pending_trans()
1162 curr_frag = trans->curr_req_frag; in qlcnic_sriov_handle_pending_trans()
1163 pay_size = qlcnic_sriov_get_bc_paysize(trans->req_pay_size, in qlcnic_sriov_handle_pending_trans()
1166 (u32 *)(trans->req_hdr + curr_frag), in qlcnic_sriov_handle_pending_trans()
1167 (u32 *)(trans->req_pay + curr_frag), in qlcnic_sriov_handle_pending_trans()
1169 trans->curr_req_frag++; in qlcnic_sriov_handle_pending_trans()
1170 if (trans->curr_req_frag >= hdr->num_frags) { in qlcnic_sriov_handle_pending_trans()
1172 list_del(&trans->list); in qlcnic_sriov_handle_pending_trans()
1179 if (qlcnic_sriov_add_act_list(sriov, vf, trans)) in qlcnic_sriov_handle_pending_trans()
1180 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_handle_pending_trans()
1189 struct qlcnic_bc_trans *trans; in qlcnic_sriov_handle_bc_cmd() local
1211 if (qlcnic_sriov_alloc_bc_trans(&trans)) in qlcnic_sriov_handle_bc_cmd()
1220 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_handle_bc_cmd()
1225 if (qlcnic_sriov_prepare_bc_hdr(trans, &cmd, hdr->seq_id, in qlcnic_sriov_handle_bc_cmd()
1228 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_handle_bc_cmd()
1232 pay_size = qlcnic_sriov_get_bc_paysize(trans->req_pay_size, in qlcnic_sriov_handle_bc_cmd()
1233 trans->curr_req_frag); in qlcnic_sriov_handle_bc_cmd()
1235 (u32 *)(trans->req_hdr + trans->curr_req_frag), in qlcnic_sriov_handle_bc_cmd()
1236 (u32 *)(trans->req_pay + trans->curr_req_frag), in qlcnic_sriov_handle_bc_cmd()
1238 trans->func_id = vf->pci_func; in qlcnic_sriov_handle_bc_cmd()
1239 trans->vf = vf; in qlcnic_sriov_handle_bc_cmd()
1240 trans->trans_id = hdr->seq_id; in qlcnic_sriov_handle_bc_cmd()
1241 trans->curr_req_frag++; in qlcnic_sriov_handle_bc_cmd()
1243 if (qlcnic_sriov_soft_flr_check(adapter, trans, vf)) in qlcnic_sriov_handle_bc_cmd()
1246 if (trans->curr_req_frag == trans->req_hdr->num_frags) { in qlcnic_sriov_handle_bc_cmd()
1247 if (qlcnic_sriov_add_act_list(sriov, vf, trans)) { in qlcnic_sriov_handle_bc_cmd()
1249 qlcnic_sriov_cleanup_transaction(trans); in qlcnic_sriov_handle_bc_cmd()
1253 list_add_tail(&trans->list, &vf->rcv_pend.wait_list); in qlcnic_sriov_handle_bc_cmd()
1348 struct qlcnic_bc_trans *trans) in qlcnic_sriov_retry_bc_cmd() argument
1356 clear_bit(QLC_BC_VF_CHANNEL, &trans->vf->state); in qlcnic_sriov_retry_bc_cmd()
1357 trans->trans_state = QLC_INIT; in qlcnic_sriov_retry_bc_cmd()
1373 struct qlcnic_bc_trans *trans; in __qlcnic_sriov_issue_cmd() local
1379 rsp = qlcnic_sriov_alloc_bc_trans(&trans); in __qlcnic_sriov_issue_cmd()
1383 rsp = qlcnic_sriov_prepare_bc_hdr(trans, cmd, seq, QLC_BC_COMMAND); in __qlcnic_sriov_issue_cmd()
1395 err = qlcnic_sriov_send_bc_cmd(adapter, trans, func); in __qlcnic_sriov_issue_cmd()
1404 if ((trans->req_hdr->cmd_op == QLCNIC_BC_CMD_CHANNEL_INIT) && in __qlcnic_sriov_issue_cmd()
1405 !qlcnic_sriov_retry_bc_cmd(adapter, trans)) in __qlcnic_sriov_issue_cmd()
1440 qlcnic_sriov_cleanup_transaction(trans); in __qlcnic_sriov_issue_cmd()