Lines Matching refs:vf

146 	struct qlcnic_vf_info *vf;  in qlcnic_sriov_init()  local
190 vf = &sriov->vf_info[i]; in qlcnic_sriov_init()
191 vf->adapter = adapter; in qlcnic_sriov_init()
192 vf->pci_func = qlcnic_sriov_virtid_fn(adapter, i); in qlcnic_sriov_init()
193 mutex_init(&vf->send_cmd_lock); in qlcnic_sriov_init()
194 spin_lock_init(&vf->vlan_list_lock); in qlcnic_sriov_init()
195 INIT_LIST_HEAD(&vf->rcv_act.wait_list); in qlcnic_sriov_init()
196 INIT_LIST_HEAD(&vf->rcv_pend.wait_list); in qlcnic_sriov_init()
197 spin_lock_init(&vf->rcv_act.lock); in qlcnic_sriov_init()
198 spin_lock_init(&vf->rcv_pend.lock); in qlcnic_sriov_init()
199 init_completion(&vf->ch_free_cmpl); in qlcnic_sriov_init()
201 INIT_WORK(&vf->trans_work, qlcnic_sriov_process_bc_cmd); in qlcnic_sriov_init()
265 struct qlcnic_vf_info *vf; in __qlcnic_sriov_cleanup() local
275 vf = &sriov->vf_info[i]; in __qlcnic_sriov_cleanup()
276 qlcnic_sriov_cleanup_list(&vf->rcv_pend); in __qlcnic_sriov_cleanup()
277 cancel_work_sync(&vf->trans_work); in __qlcnic_sriov_cleanup()
278 qlcnic_sriov_cleanup_list(&vf->rcv_act); in __qlcnic_sriov_cleanup()
826 static int qlcnic_sriov_clear_trans(struct qlcnic_vf_info *vf, in qlcnic_sriov_clear_trans() argument
834 t_list = &vf->rcv_act; in qlcnic_sriov_clear_trans()
843 while (test_and_set_bit(QLC_BC_VF_SEND, &vf->state)) in qlcnic_sriov_clear_trans()
845 vf->send_cmd = NULL; in qlcnic_sriov_clear_trans()
846 clear_bit(QLC_BC_VF_SEND, &vf->state); in qlcnic_sriov_clear_trans()
852 struct qlcnic_vf_info *vf, in qlcnic_sriov_schedule_bc_cmd() argument
855 if (test_bit(QLC_BC_VF_FLR, &vf->state) || in qlcnic_sriov_schedule_bc_cmd()
856 vf->adapter->need_fw_reset) in qlcnic_sriov_schedule_bc_cmd()
859 queue_work(sriov->bc.bc_trans_wq, &vf->trans_work); in qlcnic_sriov_schedule_bc_cmd()
895 struct qlcnic_vf_info *vf = trans->vf; in qlcnic_sriov_wait_for_channel_free() local
896 struct completion *cmpl = &vf->ch_free_cmpl; in qlcnic_sriov_wait_for_channel_free()
903 clear_bit(QLC_BC_VF_CHANNEL, &vf->state); in qlcnic_sriov_wait_for_channel_free()
922 static int __qlcnic_sriov_issue_bc_post(struct qlcnic_vf_info *vf) in __qlcnic_sriov_issue_bc_post() argument
928 if (!test_and_set_bit(QLC_BC_VF_CHANNEL, &vf->state)) { in __qlcnic_sriov_issue_bc_post()
940 struct qlcnic_vf_info *vf = trans->vf; in qlcnic_sriov_issue_bc_post() local
946 if (__qlcnic_sriov_issue_bc_post(vf)) in qlcnic_sriov_issue_bc_post()
963 ret = qlcnic_sriov_post_bc_msg(vf->adapter, hdr, pay, in qlcnic_sriov_issue_bc_post()
969 struct qlcnic_vf_info *vf, u8 type) in __qlcnic_sriov_send_bc_msg() argument
975 if (test_bit(QLC_BC_VF_FLR, &vf->state) || in __qlcnic_sriov_send_bc_msg()
976 vf->adapter->need_fw_reset) in __qlcnic_sriov_send_bc_msg()
998 clear_bit(QLC_BC_VF_CHANNEL, &vf->state); in __qlcnic_sriov_send_bc_msg()
1011 struct qlcnic_vf_info *vf; in qlcnic_sriov_send_bc_cmd() local
1017 vf = &adapter->ahw->sriov->vf_info[index]; in qlcnic_sriov_send_bc_cmd()
1018 trans->vf = vf; in qlcnic_sriov_send_bc_cmd()
1021 if (!test_bit(QLC_BC_VF_STATE, &vf->state)) { in qlcnic_sriov_send_bc_cmd()
1029 mutex_lock(&vf->send_cmd_lock); in qlcnic_sriov_send_bc_cmd()
1030 vf->send_cmd = trans; in qlcnic_sriov_send_bc_cmd()
1031 err = __qlcnic_sriov_send_bc_msg(trans, vf, QLC_BC_COMMAND); in qlcnic_sriov_send_bc_cmd()
1032 qlcnic_sriov_clear_trans(vf, trans, QLC_BC_COMMAND); in qlcnic_sriov_send_bc_cmd()
1033 mutex_unlock(&vf->send_cmd_lock); in qlcnic_sriov_send_bc_cmd()
1053 struct qlcnic_vf_info *vf = container_of(work, struct qlcnic_vf_info, in qlcnic_sriov_process_bc_cmd() local
1056 struct qlcnic_adapter *adapter = vf->adapter; in qlcnic_sriov_process_bc_cmd()
1063 if (test_bit(QLC_BC_VF_FLR, &vf->state)) in qlcnic_sriov_process_bc_cmd()
1067 trans = list_first_entry(&vf->rcv_act.wait_list, in qlcnic_sriov_process_bc_cmd()
1069 adapter = vf->adapter; in qlcnic_sriov_process_bc_cmd()
1077 __qlcnic_sriov_send_bc_msg(trans, vf, QLC_BC_RESPONSE); in qlcnic_sriov_process_bc_cmd()
1081 req = qlcnic_sriov_clear_trans(vf, trans, QLC_BC_RESPONSE); in qlcnic_sriov_process_bc_cmd()
1084 qlcnic_sriov_schedule_bc_cmd(adapter->ahw->sriov, vf, in qlcnic_sriov_process_bc_cmd()
1089 struct qlcnic_vf_info *vf) in qlcnic_sriov_handle_bc_resp() argument
1094 if (test_and_set_bit(QLC_BC_VF_SEND, &vf->state)) in qlcnic_sriov_handle_bc_resp()
1097 trans = vf->send_cmd; in qlcnic_sriov_handle_bc_resp()
1107 qlcnic_sriov_pull_bc_msg(vf->adapter, in qlcnic_sriov_handle_bc_resp()
1117 clear_bit(QLC_BC_VF_SEND, &vf->state); in qlcnic_sriov_handle_bc_resp()
1121 struct qlcnic_vf_info *vf, in __qlcnic_sriov_add_act_list() argument
1124 struct qlcnic_trans_list *t_list = &vf->rcv_act; in __qlcnic_sriov_add_act_list()
1129 qlcnic_sriov_schedule_bc_cmd(sriov, vf, in __qlcnic_sriov_add_act_list()
1135 struct qlcnic_vf_info *vf, in qlcnic_sriov_add_act_list() argument
1138 struct qlcnic_trans_list *t_list = &vf->rcv_act; in qlcnic_sriov_add_act_list()
1142 __qlcnic_sriov_add_act_list(sriov, vf, trans); in qlcnic_sriov_add_act_list()
1149 struct qlcnic_vf_info *vf, in qlcnic_sriov_handle_pending_trans() argument
1157 spin_lock(&vf->rcv_pend.lock); in qlcnic_sriov_handle_pending_trans()
1158 if (vf->rcv_pend.count > 0) { in qlcnic_sriov_handle_pending_trans()
1159 list_for_each(node, &vf->rcv_pend.wait_list) { in qlcnic_sriov_handle_pending_trans()
1172 qlcnic_sriov_pull_bc_msg(vf->adapter, in qlcnic_sriov_handle_pending_trans()
1178 vf->rcv_pend.count--; in qlcnic_sriov_handle_pending_trans()
1183 spin_unlock(&vf->rcv_pend.lock); in qlcnic_sriov_handle_pending_trans()
1186 if (qlcnic_sriov_add_act_list(sriov, vf, trans)) in qlcnic_sriov_handle_pending_trans()
1194 struct qlcnic_vf_info *vf) in qlcnic_sriov_handle_bc_cmd() argument
1197 struct qlcnic_adapter *adapter = vf->adapter; in qlcnic_sriov_handle_bc_cmd()
1206 if (!test_bit(QLC_BC_VF_STATE, &vf->state) && in qlcnic_sriov_handle_bc_cmd()
1212 qlcnic_sriov_handle_pending_trans(sriov, vf, hdr); in qlcnic_sriov_handle_bc_cmd()
1241 qlcnic_sriov_pull_bc_msg(vf->adapter, in qlcnic_sriov_handle_bc_cmd()
1245 trans->func_id = vf->pci_func; in qlcnic_sriov_handle_bc_cmd()
1246 trans->vf = vf; in qlcnic_sriov_handle_bc_cmd()
1250 if (qlcnic_sriov_soft_flr_check(adapter, trans, vf)) in qlcnic_sriov_handle_bc_cmd()
1254 if (qlcnic_sriov_add_act_list(sriov, vf, trans)) { in qlcnic_sriov_handle_bc_cmd()
1259 spin_lock(&vf->rcv_pend.lock); in qlcnic_sriov_handle_bc_cmd()
1260 list_add_tail(&trans->list, &vf->rcv_pend.wait_list); in qlcnic_sriov_handle_bc_cmd()
1261 vf->rcv_pend.count++; in qlcnic_sriov_handle_bc_cmd()
1262 spin_unlock(&vf->rcv_pend.lock); in qlcnic_sriov_handle_bc_cmd()
1267 struct qlcnic_vf_info *vf) in qlcnic_sriov_handle_msg_event() argument
1274 ptr[i - 2] = readl(QLCNIC_MBX_FW(vf->adapter->ahw, i)); in qlcnic_sriov_handle_msg_event()
1279 qlcnic_sriov_handle_bc_cmd(sriov, &hdr, vf); in qlcnic_sriov_handle_msg_event()
1282 qlcnic_sriov_handle_bc_resp(&hdr, vf); in qlcnic_sriov_handle_msg_event()
1288 struct qlcnic_vf_info *vf) in qlcnic_sriov_handle_flr_event() argument
1290 struct qlcnic_adapter *adapter = vf->adapter; in qlcnic_sriov_handle_flr_event()
1293 qlcnic_sriov_pf_handle_flr(sriov, vf); in qlcnic_sriov_handle_flr_event()
1301 struct qlcnic_vf_info *vf; in qlcnic_sriov_handle_bc_event() local
1313 vf = &sriov->vf_info[index]; in qlcnic_sriov_handle_bc_event()
1314 vf->pci_func = pci_func; in qlcnic_sriov_handle_bc_event()
1317 complete(&vf->ch_free_cmpl); in qlcnic_sriov_handle_bc_event()
1320 qlcnic_sriov_handle_flr_event(sriov, vf); in qlcnic_sriov_handle_bc_event()
1325 qlcnic_sriov_handle_msg_event(sriov, vf); in qlcnic_sriov_handle_bc_event()
1363 clear_bit(QLC_BC_VF_CHANNEL, &trans->vf->state); in qlcnic_sriov_retry_bc_cmd()
1471 struct qlcnic_vf_info *vf = &adapter->ahw->sriov->vf_info[0]; in qlcnic_sriov_channel_cfg_cmd() local
1490 set_bit(QLC_BC_VF_STATE, &vf->state); in qlcnic_sriov_channel_cfg_cmd()
1492 clear_bit(QLC_BC_VF_STATE, &vf->state); in qlcnic_sriov_channel_cfg_cmd()
1504 struct qlcnic_vf_info *vf; in qlcnic_vf_add_mc_list() local
1508 vf = &adapter->ahw->sriov->vf_info[0]; in qlcnic_vf_add_mc_list()
1510 if (!qlcnic_sriov_check_any_vlan(vf)) { in qlcnic_vf_add_mc_list()
1513 spin_lock(&vf->vlan_list_lock); in qlcnic_vf_add_mc_list()
1515 vlan_id = vf->sriov_vlans[i]; in qlcnic_vf_add_mc_list()
1520 spin_unlock(&vf->vlan_list_lock); in qlcnic_vf_add_mc_list()
1952 struct qlcnic_vf_info *vf, u16 vlan_id) in qlcnic_sriov_check_vlan_id() argument
1956 if (!vf->sriov_vlans) in qlcnic_sriov_check_vlan_id()
1959 spin_lock_bh(&vf->vlan_list_lock); in qlcnic_sriov_check_vlan_id()
1962 if (vf->sriov_vlans[i] == vlan_id) { in qlcnic_sriov_check_vlan_id()
1968 spin_unlock_bh(&vf->vlan_list_lock); in qlcnic_sriov_check_vlan_id()
1973 struct qlcnic_vf_info *vf) in qlcnic_sriov_validate_num_vlans() argument
1977 spin_lock_bh(&vf->vlan_list_lock); in qlcnic_sriov_validate_num_vlans()
1979 if (vf->num_vlan >= sriov->num_allowed_vlans) in qlcnic_sriov_validate_num_vlans()
1982 spin_unlock_bh(&vf->vlan_list_lock); in qlcnic_sriov_validate_num_vlans()
1990 struct qlcnic_vf_info *vf; in qlcnic_sriov_validate_vlan_cfg() local
1995 vf = &adapter->ahw->sriov->vf_info[0]; in qlcnic_sriov_validate_vlan_cfg()
1996 vlan_exist = qlcnic_sriov_check_any_vlan(vf); in qlcnic_sriov_validate_vlan_cfg()
2004 if (qlcnic_sriov_validate_num_vlans(sriov, vf)) in qlcnic_sriov_validate_vlan_cfg()
2017 if (!vlan_exist || qlcnic_sriov_check_vlan_id(sriov, vf, vid)) in qlcnic_sriov_validate_vlan_cfg()
2024 static void qlcnic_sriov_vlan_operation(struct qlcnic_vf_info *vf, u16 vlan_id, in qlcnic_sriov_vlan_operation() argument
2027 struct qlcnic_adapter *adapter = vf->adapter; in qlcnic_sriov_vlan_operation()
2032 if (!vf->sriov_vlans) in qlcnic_sriov_vlan_operation()
2035 spin_lock_bh(&vf->vlan_list_lock); in qlcnic_sriov_vlan_operation()
2039 qlcnic_sriov_add_vlan_id(sriov, vf, vlan_id); in qlcnic_sriov_vlan_operation()
2042 qlcnic_sriov_del_vlan_id(sriov, vf, vlan_id); in qlcnic_sriov_vlan_operation()
2048 spin_unlock_bh(&vf->vlan_list_lock); in qlcnic_sriov_vlan_operation()
2057 struct qlcnic_vf_info *vf; in qlcnic_sriov_cfg_vf_guest_vlan() local
2065 vf = &adapter->ahw->sriov->vf_info[0]; in qlcnic_sriov_cfg_vf_guest_vlan()
2088 qlcnic_sriov_vlan_operation(vf, vid, QLC_VLAN_ADD); in qlcnic_sriov_cfg_vf_guest_vlan()
2090 qlcnic_sriov_vlan_operation(vf, vid, QLC_VLAN_DELETE); in qlcnic_sriov_cfg_vf_guest_vlan()
2165 struct qlcnic_vf_info *vf; in qlcnic_sriov_alloc_vlans() local
2169 vf = &sriov->vf_info[i]; in qlcnic_sriov_alloc_vlans()
2170 vf->sriov_vlans = kcalloc(sriov->num_allowed_vlans, in qlcnic_sriov_alloc_vlans()
2171 sizeof(*vf->sriov_vlans), GFP_KERNEL); in qlcnic_sriov_alloc_vlans()
2172 if (!vf->sriov_vlans) { in qlcnic_sriov_alloc_vlans()
2184 struct qlcnic_vf_info *vf; in qlcnic_sriov_free_vlans() local
2188 vf = &sriov->vf_info[i]; in qlcnic_sriov_free_vlans()
2189 kfree(vf->sriov_vlans); in qlcnic_sriov_free_vlans()
2190 vf->sriov_vlans = NULL; in qlcnic_sriov_free_vlans()
2195 struct qlcnic_vf_info *vf, u16 vlan_id) in qlcnic_sriov_add_vlan_id() argument
2200 if (!vf->sriov_vlans[i]) { in qlcnic_sriov_add_vlan_id()
2201 vf->sriov_vlans[i] = vlan_id; in qlcnic_sriov_add_vlan_id()
2202 vf->num_vlan++; in qlcnic_sriov_add_vlan_id()
2209 struct qlcnic_vf_info *vf, u16 vlan_id) in qlcnic_sriov_del_vlan_id() argument
2214 if (vf->sriov_vlans[i] == vlan_id) { in qlcnic_sriov_del_vlan_id()
2215 vf->sriov_vlans[i] = 0; in qlcnic_sriov_del_vlan_id()
2216 vf->num_vlan--; in qlcnic_sriov_del_vlan_id()
2222 bool qlcnic_sriov_check_any_vlan(struct qlcnic_vf_info *vf) in qlcnic_sriov_check_any_vlan() argument
2226 spin_lock_bh(&vf->vlan_list_lock); in qlcnic_sriov_check_any_vlan()
2228 if (vf->num_vlan) in qlcnic_sriov_check_any_vlan()
2231 spin_unlock_bh(&vf->vlan_list_lock); in qlcnic_sriov_check_any_vlan()