Lines Matching refs:vf

30 			    struct bnx2x_virtf **vf,
78 static void bnx2x_vf_igu_ack_sb(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_vf_igu_ack_sb() argument
86 u32 func_encode = vf->abs_vfid; in bnx2x_vf_igu_ack_sb()
112 struct bnx2x_virtf *vf, in bnx2x_validate_vf_sp_objs() argument
115 if (!bnx2x_leading_vfq(vf, sp_initialized)) { in bnx2x_validate_vf_sp_objs()
126 void bnx2x_vfop_qctor_dump_tx(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_vfop_qctor_dump_tx() argument
133 vf->abs_vfid, in bnx2x_vfop_qctor_dump_tx()
142 void bnx2x_vfop_qctor_dump_rx(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_vfop_qctor_dump_rx() argument
151 vf->abs_vfid, in bnx2x_vfop_qctor_dump_rx()
167 struct bnx2x_virtf *vf, in bnx2x_vfop_qctor_prep() argument
185 init_p->rx.fw_sb_id = vf_igu_sb(vf, q->sb_idx); in bnx2x_vfop_qctor_prep()
186 init_p->tx.fw_sb_id = vf_igu_sb(vf, q->sb_idx); in bnx2x_vfop_qctor_prep()
194 setup_p->gen_params.spcl_id = vf->sp_cl_id; in bnx2x_vfop_qctor_prep()
195 setup_p->gen_params.stat_id = vfq_stat_id(vf, q); in bnx2x_vfop_qctor_prep()
196 setup_p->gen_params.fp_hsi = vf->fp_hsi; in bnx2x_vfop_qctor_prep()
210 if (vf->spoofchk) in bnx2x_vfop_qctor_prep()
219 rxq_p->cl_qzone_id = vfq_qzone_id(vf, q); in bnx2x_vfop_qctor_prep()
220 rxq_p->fw_sb_id = vf_igu_sb(vf, q->sb_idx); in bnx2x_vfop_qctor_prep()
221 rxq_p->rss_engine_id = FW_VF_HANDLE(vf->abs_vfid); in bnx2x_vfop_qctor_prep()
229 setup_p->txq_params.tss_leading_cl_id = vf->leading_rss; in bnx2x_vfop_qctor_prep()
230 setup_p->txq_params.fw_sb_id = vf_igu_sb(vf, q->sb_idx); in bnx2x_vfop_qctor_prep()
235 struct bnx2x_virtf *vf, int qid, in bnx2x_vf_queue_create() argument
241 DP(BNX2X_MSG_IOV, "vf[%d:%d]\n", vf->abs_vfid, qid); in bnx2x_vf_queue_create()
245 q_params->q_obj = &bnx2x_vfq(vf, qid, sp_obj); in bnx2x_vf_queue_create()
268 bnx2x_vf_igu_ack_sb(bp, vf, vf_igu_sb(vf, bnx2x_vfq(vf, qid, sb_idx)), in bnx2x_vf_queue_create()
274 static int bnx2x_vf_queue_destroy(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_vf_queue_destroy() argument
283 DP(BNX2X_MSG_IOV, "vf[%d]\n", vf->abs_vfid); in bnx2x_vf_queue_destroy()
287 q_params.q_obj = &bnx2x_vfq(vf, qid, sp_obj); in bnx2x_vf_queue_destroy()
307 if (bnx2x_vfq(vf, qid, cxt)) { in bnx2x_vf_queue_destroy()
308 bnx2x_vfq(vf, qid, cxt)->ustorm_ag_context.cdu_usage = 0; in bnx2x_vf_queue_destroy()
309 bnx2x_vfq(vf, qid, cxt)->xstorm_ag_context.cdu_reserved = 0; in bnx2x_vf_queue_destroy()
318 struct bnx2x_virtf *vf = bnx2x_vf_by_abs_fid(bp, abs_vfid); in bnx2x_vf_set_igu_info() local
319 if (vf) { in bnx2x_vf_set_igu_info()
325 if (!vf_sb_count(vf)) in bnx2x_vf_set_igu_info()
326 vf->igu_base_id = igu_sb_id; in bnx2x_vf_set_igu_info()
328 ++vf_sb_count(vf); in bnx2x_vf_set_igu_info()
329 ++vf->sb_count; in bnx2x_vf_set_igu_info()
334 static int bnx2x_vf_vlan_mac_clear(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_vf_vlan_mac_clear() argument
340 DP(BNX2X_MSG_IOV, "vf[%d] - deleting all %s\n", vf->abs_vfid, in bnx2x_vf_vlan_mac_clear()
348 ramrod.vlan_mac_obj = &bnx2x_vfq(vf, qid, vlan_mac_obj); in bnx2x_vf_vlan_mac_clear()
351 ramrod.vlan_mac_obj = &bnx2x_vfq(vf, qid, mac_obj); in bnx2x_vf_vlan_mac_clear()
353 ramrod.vlan_mac_obj = &bnx2x_vfq(vf, qid, vlan_obj); in bnx2x_vf_vlan_mac_clear()
379 struct bnx2x_virtf *vf, int qid, in bnx2x_vf_mac_vlan_config() argument
387 vf->abs_vfid, filter->add ? "Adding" : "Deleting", in bnx2x_vf_mac_vlan_config()
394 ramrod.vlan_mac_obj = &bnx2x_vfq(vf, qid, vlan_mac_obj); in bnx2x_vf_mac_vlan_config()
399 ramrod.vlan_mac_obj = &bnx2x_vfq(vf, qid, vlan_obj); in bnx2x_vf_mac_vlan_config()
403 ramrod.vlan_mac_obj = &bnx2x_vfq(vf, qid, mac_obj); in bnx2x_vf_mac_vlan_config()
434 int bnx2x_vf_mac_vlan_config_list(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_vf_mac_vlan_config_list() argument
440 DP(BNX2X_MSG_IOV, "vf[%d]\n", vf->abs_vfid); in bnx2x_vf_mac_vlan_config_list()
442 if (!bnx2x_validate_vf_sp_objs(bp, vf, true)) in bnx2x_vf_mac_vlan_config_list()
447 rc = bnx2x_vf_mac_vlan_config(bp, vf, qid, in bnx2x_vf_mac_vlan_config_list()
461 bnx2x_vf_mac_vlan_config(bp, vf, qid, in bnx2x_vf_mac_vlan_config_list()
473 int bnx2x_vf_queue_setup(struct bnx2x *bp, struct bnx2x_virtf *vf, int qid, in bnx2x_vf_queue_setup() argument
478 DP(BNX2X_MSG_IOV, "vf[%d:%d]\n", vf->abs_vfid, qid); in bnx2x_vf_queue_setup()
480 rc = bnx2x_vf_queue_create(bp, vf, qid, qctor); in bnx2x_vf_queue_setup()
489 BNX2X_ERR("QSETUP[%d:%d] error: rc %d\n", vf->abs_vfid, qid, rc); in bnx2x_vf_queue_setup()
493 static int bnx2x_vf_queue_flr(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_vf_queue_flr() argument
498 DP(BNX2X_MSG_IOV, "vf[%d:%d]\n", vf->abs_vfid, qid); in bnx2x_vf_queue_flr()
502 bnx2x_validate_vf_sp_objs(bp, vf, false)) { in bnx2x_vf_queue_flr()
503 rc = bnx2x_vf_vlan_mac_clear(bp, vf, qid, true, in bnx2x_vf_queue_flr()
507 rc = bnx2x_vf_vlan_mac_clear(bp, vf, qid, true, in bnx2x_vf_queue_flr()
511 rc = bnx2x_vf_vlan_mac_clear(bp, vf, qid, true, in bnx2x_vf_queue_flr()
518 if (bnx2x_vfq(vf, qid, sp_obj).state != BNX2X_Q_STATE_RESET) { in bnx2x_vf_queue_flr()
522 qstate.q_obj = &bnx2x_vfq(vf, qid, sp_obj); in bnx2x_vf_queue_flr()
533 BNX2X_ERR("vf[%d:%d] error: rc %d\n", vf->abs_vfid, qid, rc); in bnx2x_vf_queue_flr()
537 int bnx2x_vf_mcast(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_vf_mcast() argument
544 DP(BNX2X_MSG_IOV, "vf[%d]\n", vf->abs_vfid); in bnx2x_vf_mcast()
548 mcast.mcast_obj = &vf->mcast_obj; in bnx2x_vf_mcast()
589 struct bnx2x_virtf *vf, in bnx2x_vf_prep_rx_mode() argument
592 struct bnx2x_vf_queue *vfq = vfq_get(vf, qid); in bnx2x_vf_prep_rx_mode()
596 ramrod->cl_id = vfq_cl_id(vf, vfq); in bnx2x_vf_prep_rx_mode()
598 ramrod->func_id = FW_VF_HANDLE(vf->abs_vfid); in bnx2x_vf_prep_rx_mode()
601 ramrod->pstate = &vf->filter_state; in bnx2x_vf_prep_rx_mode()
604 set_bit(BNX2X_FILTER_RX_MODE_PENDING, &vf->filter_state); in bnx2x_vf_prep_rx_mode()
608 ramrod->rdata = bnx2x_vf_sp(bp, vf, rx_mode_rdata.e2); in bnx2x_vf_prep_rx_mode()
609 ramrod->rdata_mapping = bnx2x_vf_sp_map(bp, vf, rx_mode_rdata.e2); in bnx2x_vf_prep_rx_mode()
612 int bnx2x_vf_rxmode(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_vf_rxmode() argument
617 DP(BNX2X_MSG_IOV, "vf[%d]\n", vf->abs_vfid); in bnx2x_vf_rxmode()
619 bnx2x_vf_prep_rx_mode(bp, qid, &ramrod, vf, accept_flags); in bnx2x_vf_rxmode()
621 vfq_get(vf, qid)->accept_flags = ramrod.rx_accept_flags; in bnx2x_vf_rxmode()
625 int bnx2x_vf_queue_teardown(struct bnx2x *bp, struct bnx2x_virtf *vf, int qid) in bnx2x_vf_queue_teardown() argument
629 DP(BNX2X_MSG_IOV, "vf[%d:%d]\n", vf->abs_vfid, qid); in bnx2x_vf_queue_teardown()
633 rc = bnx2x_vf_rxmode(bp, vf, qid, 0); in bnx2x_vf_queue_teardown()
638 if (bnx2x_validate_vf_sp_objs(bp, vf, true)) { in bnx2x_vf_queue_teardown()
639 rc = bnx2x_vf_vlan_mac_clear(bp, vf, qid, in bnx2x_vf_queue_teardown()
644 rc = bnx2x_vf_vlan_mac_clear(bp, vf, qid, in bnx2x_vf_queue_teardown()
649 rc = bnx2x_vf_vlan_mac_clear(bp, vf, qid, in bnx2x_vf_queue_teardown()
654 rc = bnx2x_vf_mcast(bp, vf, NULL, 0, false); in bnx2x_vf_queue_teardown()
661 rc = bnx2x_vf_queue_destroy(bp, vf, qid); in bnx2x_vf_queue_teardown()
667 vf->abs_vfid, qid, rc); in bnx2x_vf_queue_teardown()
715 static void bnx2x_vf_igu_reset(struct bnx2x *bp, struct bnx2x_virtf *vf) in bnx2x_vf_igu_reset() argument
721 bnx2x_pretend_func(bp, HW_VF_HANDLE(bp, vf->abs_vfid)); in bnx2x_vf_igu_reset()
738 vf->abs_vfid, val); in bnx2x_vf_igu_reset()
743 for (i = 0; i < vf_sb_count(vf); i++) { in bnx2x_vf_igu_reset()
744 u8 igu_sb_id = vf_igu_sb(vf, i); in bnx2x_vf_igu_reset()
750 bnx2x_igu_clear_sb_gen(bp, vf->abs_vfid, igu_sb_id, in bnx2x_vf_igu_reset()
754 bnx2x_vf_igu_ack_sb(bp, vf, igu_sb_id, USTORM_ID, 0, in bnx2x_vf_igu_reset()
785 static void bnx2x_vf_enable_traffic(struct bnx2x *bp, struct bnx2x_virtf *vf) in bnx2x_vf_enable_traffic() argument
788 bnx2x_vf_igu_reset(bp, vf); in bnx2x_vf_enable_traffic()
791 bnx2x_pretend_func(bp, HW_VF_HANDLE(bp, vf->abs_vfid)); in bnx2x_vf_enable_traffic()
798 struct bnx2x_virtf *vf = bnx2x_vf_by_abs_fid(bp, abs_vfid); in bnx2x_vf_is_pcie_pending() local
802 if (!vf) in bnx2x_vf_is_pcie_pending()
805 dev = pci_get_domain_bus_and_slot(vf->domain, vf->bus, vf->devfn); in bnx2x_vf_is_pcie_pending()
827 bnx2x_iov_static_resc(struct bnx2x *bp, struct bnx2x_virtf *vf) in bnx2x_iov_static_resc() argument
829 struct vf_pf_resc_request *resc = &vf->alloc_resc; in bnx2x_iov_static_resc()
842 resc->num_sbs = vf->sb_count; in bnx2x_iov_static_resc()
846 static void bnx2x_vf_free_resc(struct bnx2x *bp, struct bnx2x_virtf *vf) in bnx2x_vf_free_resc() argument
849 bnx2x_iov_static_resc(bp, vf); in bnx2x_vf_free_resc()
850 vf->state = VF_FREE; in bnx2x_vf_free_resc()
853 static void bnx2x_vf_flr_clnup_hw(struct bnx2x *bp, struct bnx2x_virtf *vf) in bnx2x_vf_flr_clnup_hw() argument
858 bnx2x_pretend_func(bp, HW_VF_HANDLE(bp, vf->abs_vfid)); in bnx2x_vf_flr_clnup_hw()
865 if (bnx2x_send_final_clnup(bp, (u8)FW_VF_HANDLE(vf->abs_vfid), in bnx2x_vf_flr_clnup_hw()
867 BNX2X_ERR("VF[%d] Final cleanup timed-out\n", vf->abs_vfid); in bnx2x_vf_flr_clnup_hw()
873 static void bnx2x_vf_flr(struct bnx2x *bp, struct bnx2x_virtf *vf) in bnx2x_vf_flr() argument
877 DP(BNX2X_MSG_IOV, "vf[%d]\n", vf->abs_vfid); in bnx2x_vf_flr()
882 for (i = 0; i < vf_rxq_count(vf); i++) { in bnx2x_vf_flr()
883 rc = bnx2x_vf_queue_flr(bp, vf, i); in bnx2x_vf_flr()
889 bnx2x_vf_mcast(bp, vf, NULL, 0, true); in bnx2x_vf_flr()
892 bnx2x_vf_flr_clnup_hw(bp, vf); in bnx2x_vf_flr()
895 bnx2x_vf_free_resc(bp, vf); in bnx2x_vf_flr()
897 vf->malicious = false; in bnx2x_vf_flr()
900 bnx2x_vf_enable_mbx(bp, vf->abs_vfid); in bnx2x_vf_flr()
904 vf->abs_vfid, i, rc); in bnx2x_vf_flr()
909 struct bnx2x_virtf *vf; in bnx2x_vf_flr_clnup() local
921 vf = BP_VF(bp, i); in bnx2x_vf_flr_clnup()
924 bnx2x_lock_vf_pf_channel(bp, vf, CHANNEL_TLV_FLR); in bnx2x_vf_flr_clnup()
927 bnx2x_vf_flr(bp, vf); in bnx2x_vf_flr_clnup()
930 vf->flr_clnup_stage = false; in bnx2x_vf_flr_clnup()
931 bnx2x_unlock_vf_pf_channel(bp, vf, CHANNEL_TLV_FLR); in bnx2x_vf_flr_clnup()
969 struct bnx2x_virtf *vf = BP_VF(bp, i); in bnx2x_vf_handle_flr_event() local
972 if (vf->abs_vfid < 32) in bnx2x_vf_handle_flr_event()
973 reset = bp->vfdb->flrd_vfs[0] & (1 << vf->abs_vfid); in bnx2x_vf_handle_flr_event()
976 (1 << (vf->abs_vfid - 32)); in bnx2x_vf_handle_flr_event()
980 vf->state = VF_RESET; in bnx2x_vf_handle_flr_event()
981 vf->flr_clnup_stage = true; in bnx2x_vf_handle_flr_event()
985 vf->abs_vfid); in bnx2x_vf_handle_flr_event()
1061 static void bnx2x_vf_set_bars(struct bnx2x *bp, struct bnx2x_virtf *vf) in bnx2x_vf_set_bars() argument
1072 vf->bars[n].bar = start + size * vf->abs_vfid; in bnx2x_vf_set_bars()
1073 vf->bars[n].size = size; in bnx2x_vf_set_bars()
1414 static void bnx2x_vfq_init(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_vfq_init() argument
1417 u8 cl_id = vfq_cl_id(vf, q); in bnx2x_vfq_init()
1418 u8 func_id = FW_VF_HANDLE(vf->abs_vfid); in bnx2x_vfq_init()
1427 bnx2x_vf_sp(bp, vf, q_data), in bnx2x_vfq_init()
1428 bnx2x_vf_sp_map(bp, vf, q_data), in bnx2x_vfq_init()
1436 vf->abs_vfid, q->sp_obj.func_id, q->cid); in bnx2x_vfq_init()
1454 struct bnx2x_virtf *vf; in bnx2x_iov_link_update_vf() local
1459 rc = bnx2x_vf_op_prep(bp, idx, &vf, &bulletin, false); in bnx2x_iov_link_update_vf()
1465 if (vf->link_cfg == IFLA_VF_LINK_STATE_AUTO) { in bnx2x_iov_link_update_vf()
1482 } else if (vf->link_cfg == IFLA_VF_LINK_STATE_DISABLE && in bnx2x_iov_link_update_vf()
1486 } else if (vf->link_cfg == IFLA_VF_LINK_STATE_ENABLE && in bnx2x_iov_link_update_vf()
1498 vf->link_cfg, bulletin->link_speed, bulletin->link_flags); in bnx2x_iov_link_update_vf()
1516 struct bnx2x_virtf *vf = BP_VF(bp, idx); in bnx2x_set_vf_link_state() local
1518 if (!vf) in bnx2x_set_vf_link_state()
1521 if (vf->link_cfg == link_state) in bnx2x_set_vf_link_state()
1524 vf->link_cfg = link_state; in bnx2x_set_vf_link_state()
1557 struct bnx2x_virtf *vf = BP_VF(bp, vfid); in bnx2x_iov_nic_init() local
1568 vf->abs_vfid, vf_sb_count(vf), base_vf_cid, in bnx2x_iov_nic_init()
1572 bnx2x_iov_static_resc(bp, vf); in bnx2x_iov_nic_init()
1575 vf->filter_state = 0; in bnx2x_iov_nic_init()
1576 vf->sp_cl_id = bnx2x_fp(bp, 0, cl_id); in bnx2x_iov_nic_init()
1578 bnx2x_init_credit_pool(&vf->vf_vlans_pool, 0, in bnx2x_iov_nic_init()
1579 vf_vlan_rules_cnt(vf)); in bnx2x_iov_nic_init()
1580 bnx2x_init_credit_pool(&vf->vf_macs_pool, 0, in bnx2x_iov_nic_init()
1581 vf_mac_rules_cnt(vf)); in bnx2x_iov_nic_init()
1588 bnx2x_init_mcast_obj(bp, &vf->mcast_obj, 0xFF, in bnx2x_iov_nic_init()
1590 bnx2x_vf_sp(bp, vf, mcast_rdata), in bnx2x_iov_nic_init()
1591 bnx2x_vf_sp_map(bp, vf, mcast_rdata), in bnx2x_iov_nic_init()
1593 &vf->filter_state, in bnx2x_iov_nic_init()
1605 bnx2x_vf_enable_mbx(bp, vf->abs_vfid); in bnx2x_iov_nic_init()
1610 struct bnx2x_virtf *vf = BP_VF(bp, vfid); in bnx2x_iov_nic_init() local
1613 vf->domain = bnx2x_vf_domain(bp, vfid); in bnx2x_iov_nic_init()
1614 vf->bus = bnx2x_vf_bus(bp, vfid); in bnx2x_iov_nic_init()
1615 vf->devfn = bnx2x_vf_devfn(bp, vfid); in bnx2x_iov_nic_init()
1616 bnx2x_vf_set_bars(bp, vf); in bnx2x_iov_nic_init()
1620 vf->abs_vfid, vf->bus, vf->devfn, in bnx2x_iov_nic_init()
1621 (unsigned)vf->bars[0].bar, vf->bars[0].size, in bnx2x_iov_nic_init()
1622 (unsigned)vf->bars[1].bar, vf->bars[1].size, in bnx2x_iov_nic_init()
1623 (unsigned)vf->bars[2].bar, vf->bars[2].size); in bnx2x_iov_nic_init()
1703 struct bnx2x_virtf *vf) in bnx2x_vf_handle_mcast_eqe() argument
1708 rparam.mcast_obj = &vf->mcast_obj; in bnx2x_vf_handle_mcast_eqe()
1709 vf->mcast_obj.raw.clear_pending(&vf->mcast_obj.raw); in bnx2x_vf_handle_mcast_eqe()
1712 if (vf->mcast_obj.check_pending(&vf->mcast_obj)) { in bnx2x_vf_handle_mcast_eqe()
1722 struct bnx2x_virtf *vf) in bnx2x_vf_handle_filters_eqe() argument
1725 clear_bit(BNX2X_FILTER_RX_MODE_PENDING, &vf->filter_state); in bnx2x_vf_handle_filters_eqe()
1730 struct bnx2x_virtf *vf) in bnx2x_vf_handle_rss_update_eqe() argument
1732 vf->rss_conf_obj.raw.clear_pending(&vf->rss_conf_obj.raw); in bnx2x_vf_handle_rss_update_eqe()
1737 struct bnx2x_virtf *vf; in bnx2x_iov_eq_sp_event() local
1790 vf = bnx2x_vf_by_abs_fid(bp, abs_vfid); in bnx2x_iov_eq_sp_event()
1792 if (!vf) { in bnx2x_iov_eq_sp_event()
1801 vf->abs_vfid, qidx); in bnx2x_iov_eq_sp_event()
1802 vfq_get(vf, qidx)->sp_obj.complete_cmd(bp, in bnx2x_iov_eq_sp_event()
1803 &vfq_get(vf, in bnx2x_iov_eq_sp_event()
1809 vf->abs_vfid, qidx); in bnx2x_iov_eq_sp_event()
1810 bnx2x_vf_handle_classification_eqe(bp, vfq_get(vf, qidx), elem); in bnx2x_iov_eq_sp_event()
1814 vf->abs_vfid, qidx); in bnx2x_iov_eq_sp_event()
1815 bnx2x_vf_handle_mcast_eqe(bp, vf); in bnx2x_iov_eq_sp_event()
1819 vf->abs_vfid, qidx); in bnx2x_iov_eq_sp_event()
1820 bnx2x_vf_handle_filters_eqe(bp, vf); in bnx2x_iov_eq_sp_event()
1824 vf->abs_vfid, qidx); in bnx2x_iov_eq_sp_event()
1825 bnx2x_vf_handle_rss_update_eqe(bp, vf); in bnx2x_iov_eq_sp_event()
1831 vf->malicious = true; in bnx2x_iov_eq_sp_event()
1851 struct bnx2x_virtf *vf; in bnx2x_iov_set_queue_sp_obj() local
1856 vf = bnx2x_vf_by_cid(bp, vf_cid); in bnx2x_iov_set_queue_sp_obj()
1858 if (vf) { in bnx2x_iov_set_queue_sp_obj()
1864 *q_obj = &bnx2x_vfq(vf, q_index, sp_obj); in bnx2x_iov_set_queue_sp_obj()
1899 struct bnx2x_virtf *vf = BP_VF(bp, i); in bnx2x_iov_adjust_stats_req() local
1901 if (vf->state != VF_ENABLED) { in bnx2x_iov_adjust_stats_req()
1904 vf->abs_vfid); in bnx2x_iov_adjust_stats_req()
1908 if (vf->malicious) { in bnx2x_iov_adjust_stats_req()
1911 vf->abs_vfid); in bnx2x_iov_adjust_stats_req()
1916 "add addresses for vf %d\n", vf->abs_vfid); in bnx2x_iov_adjust_stats_req()
1917 for_each_vfq(vf, j) { in bnx2x_iov_adjust_stats_req()
1918 struct bnx2x_vf_queue *rxq = vfq_get(vf, j); in bnx2x_iov_adjust_stats_req()
1921 vf->fw_stat_map + j * vf->stats_stride; in bnx2x_iov_adjust_stats_req()
1930 cur_query_entry->index = vfq_stat_id(vf, rxq); in bnx2x_iov_adjust_stats_req()
1932 cpu_to_le16(FW_VF_HANDLE(vf->abs_vfid)); in bnx2x_iov_adjust_stats_req()
1947 if (vf->cfg_flags & VF_CFG_STATS_COALESCE) in bnx2x_iov_adjust_stats_req()
1964 static void bnx2x_vf_clr_qtbl(struct bnx2x *bp, struct bnx2x_virtf *vf) in bnx2x_vf_clr_qtbl() argument
1968 for_each_vfq(vf, i) in bnx2x_vf_clr_qtbl()
1969 bnx2x_vf_qtbl_set_q(bp, vf->abs_vfid, in bnx2x_vf_clr_qtbl()
1970 vfq_qzone_id(vf, vfq_get(vf, i)), false); in bnx2x_vf_clr_qtbl()
1973 static void bnx2x_vf_igu_disable(struct bnx2x *bp, struct bnx2x_virtf *vf) in bnx2x_vf_igu_disable() argument
1978 bnx2x_pretend_func(bp, HW_VF_HANDLE(bp, vf->abs_vfid)); in bnx2x_vf_igu_disable()
1986 u8 bnx2x_vf_max_queue_cnt(struct bnx2x *bp, struct bnx2x_virtf *vf) in bnx2x_vf_max_queue_cnt() argument
1988 return min_t(u8, min_t(u8, vf_sb_count(vf), BNX2X_CIDS_PER_VF), in bnx2x_vf_max_queue_cnt()
1993 int bnx2x_vf_chk_avail_resc(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_vf_chk_avail_resc() argument
1996 u8 rxq_cnt = vf_rxq_count(vf) ? : bnx2x_vf_max_queue_cnt(bp, vf); in bnx2x_vf_chk_avail_resc()
1997 u8 txq_cnt = vf_txq_count(vf) ? : bnx2x_vf_max_queue_cnt(bp, vf); in bnx2x_vf_chk_avail_resc()
2001 (req_resc->num_sbs <= vf_sb_count(vf)) && in bnx2x_vf_chk_avail_resc()
2002 (req_resc->num_mac_filters <= vf_mac_rules_cnt(vf)) && in bnx2x_vf_chk_avail_resc()
2003 (req_resc->num_vlan_filters <= vf_vlan_rules_cnt(vf))); in bnx2x_vf_chk_avail_resc()
2007 int bnx2x_vf_acquire(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_vf_acquire() argument
2010 int base_vf_cid = (BP_VFDB(bp)->sriov.first_vf_in_pf + vf->index) * in bnx2x_vf_acquire()
2023 if (vf->state == VF_ACQUIRED) { in bnx2x_vf_acquire()
2025 vf->abs_vfid); in bnx2x_vf_acquire()
2027 if (!bnx2x_vf_chk_avail_resc(bp, vf, resc)) { in bnx2x_vf_acquire()
2029 vf->abs_vfid); in bnx2x_vf_acquire()
2036 if (vf->state != VF_FREE && vf->state != VF_RESET) { in bnx2x_vf_acquire()
2038 vf->abs_vfid, vf->state); in bnx2x_vf_acquire()
2046 if (!bnx2x_vf_chk_avail_resc(bp, vf, resc)) { in bnx2x_vf_acquire()
2054 vf_sb_count(vf) = resc->num_sbs; in bnx2x_vf_acquire()
2055 vf_rxq_count(vf) = resc->num_rxqs ? : bnx2x_vf_max_queue_cnt(bp, vf); in bnx2x_vf_acquire()
2056 vf_txq_count(vf) = resc->num_txqs ? : bnx2x_vf_max_queue_cnt(bp, vf); in bnx2x_vf_acquire()
2060 vf_sb_count(vf), vf_rxq_count(vf), in bnx2x_vf_acquire()
2061 vf_txq_count(vf), vf_mac_rules_cnt(vf), in bnx2x_vf_acquire()
2062 vf_vlan_rules_cnt(vf)); in bnx2x_vf_acquire()
2065 if (!vf->vfqs) { in bnx2x_vf_acquire()
2070 for_each_vfq(vf, i) { in bnx2x_vf_acquire()
2071 struct bnx2x_vf_queue *q = vfq_get(vf, i); in bnx2x_vf_acquire()
2083 vf->abs_vfid, i, q->index, q->cid, q->cxt); in bnx2x_vf_acquire()
2086 bnx2x_vfq_init(bp, vf, q); in bnx2x_vf_acquire()
2088 vf->state = VF_ACQUIRED; in bnx2x_vf_acquire()
2092 int bnx2x_vf_init(struct bnx2x *bp, struct bnx2x_virtf *vf, dma_addr_t *sb_map) in bnx2x_vf_init() argument
2100 for_each_vf_sb(vf, i) in bnx2x_vf_init()
2101 bnx2x_init_sb(bp, (dma_addr_t)sb_map[i], vf->abs_vfid, true, in bnx2x_vf_init()
2102 vf_igu_sb(vf, i), vf_igu_sb(vf, i)); in bnx2x_vf_init()
2105 if (vf->state != VF_ACQUIRED) { in bnx2x_vf_init()
2107 vf->abs_vfid, vf->state); in bnx2x_vf_init()
2115 if (bnx2x_vf_flr_clnup_epilog(bp, vf->abs_vfid)) in bnx2x_vf_init()
2119 REG_WR(bp, IGU_REG_STATISTIC_NUM_MESSAGE_SENT + vf->abs_vfid * 4 , 0); in bnx2x_vf_init()
2123 func_init.func_id = FW_VF_HANDLE(vf->abs_vfid); in bnx2x_vf_init()
2127 bnx2x_vf_enable_access(bp, vf->abs_vfid); in bnx2x_vf_init()
2128 bnx2x_vf_enable_traffic(bp, vf); in bnx2x_vf_init()
2131 for_each_vfq(vf, i) in bnx2x_vf_init()
2132 bnx2x_vf_qtbl_set_q(bp, vf->abs_vfid, in bnx2x_vf_init()
2133 vfq_qzone_id(vf, vfq_get(vf, i)), true); in bnx2x_vf_init()
2135 vf->state = VF_ENABLED; in bnx2x_vf_init()
2138 bnx2x_post_vf_bulletin(bp, vf->index); in bnx2x_vf_init()
2144 struct bnx2x_virtf *vf; member
2152 p->vf->state = p->state; in bnx2x_set_vf_state()
2155 int bnx2x_vf_close(struct bnx2x *bp, struct bnx2x_virtf *vf) in bnx2x_vf_close() argument
2159 DP(BNX2X_MSG_IOV, "vf[%d]\n", vf->abs_vfid); in bnx2x_vf_close()
2162 for (i = 0; i < vf_rxq_count(vf); i++) { in bnx2x_vf_close()
2163 rc = bnx2x_vf_queue_teardown(bp, vf, i); in bnx2x_vf_close()
2170 bnx2x_vf_igu_disable(bp, vf); in bnx2x_vf_close()
2174 bnx2x_vf_clr_qtbl(bp, vf); in bnx2x_vf_close()
2183 cookie.vf = vf; in bnx2x_vf_close()
2194 BNX2X_ERR("vf[%d] CLOSE error: rc %d\n", vf->abs_vfid, rc); in bnx2x_vf_close()
2202 int bnx2x_vf_free(struct bnx2x *bp, struct bnx2x_virtf *vf) in bnx2x_vf_free() argument
2206 DP(BNX2X_MSG_IOV, "VF[%d] STATE: %s\n", vf->abs_vfid, in bnx2x_vf_free()
2207 vf->state == VF_FREE ? "Free" : in bnx2x_vf_free()
2208 vf->state == VF_ACQUIRED ? "Acquired" : in bnx2x_vf_free()
2209 vf->state == VF_ENABLED ? "Enabled" : in bnx2x_vf_free()
2210 vf->state == VF_RESET ? "Reset" : in bnx2x_vf_free()
2213 switch (vf->state) { in bnx2x_vf_free()
2215 rc = bnx2x_vf_close(bp, vf); in bnx2x_vf_free()
2221 bnx2x_vf_free_resc(bp, vf); in bnx2x_vf_free()
2231 BNX2X_ERR("VF[%d] RELEASE error: rc %d\n", vf->abs_vfid, rc); in bnx2x_vf_free()
2235 int bnx2x_vf_rss_update(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_vf_rss_update() argument
2238 DP(BNX2X_MSG_IOV, "vf[%d]\n", vf->abs_vfid); in bnx2x_vf_rss_update()
2243 int bnx2x_vf_tpa_update(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_vf_tpa_update() argument
2251 DP(BNX2X_MSG_IOV, "vf[%d]\n", vf->abs_vfid); in bnx2x_vf_tpa_update()
2260 for (qid = 0; qid < vf_rxq_count(vf); qid++) { in bnx2x_vf_tpa_update()
2261 qstate.q_obj = &bnx2x_vfq(vf, qid, sp_obj); in bnx2x_vf_tpa_update()
2264 vf->abs_vfid, qid, U64_HI(sge_addr[qid]), in bnx2x_vf_tpa_update()
2270 vf->abs_vfid, qid); in bnx2x_vf_tpa_update()
2282 int bnx2x_vf_release(struct bnx2x *bp, struct bnx2x_virtf *vf) in bnx2x_vf_release() argument
2286 DP(BNX2X_MSG_IOV, "PF releasing vf %d\n", vf->abs_vfid); in bnx2x_vf_release()
2287 bnx2x_lock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_RELEASE_VF); in bnx2x_vf_release()
2289 rc = bnx2x_vf_free(bp, vf); in bnx2x_vf_release()
2293 vf->abs_vfid, rc); in bnx2x_vf_release()
2294 bnx2x_unlock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_RELEASE_VF); in bnx2x_vf_release()
2298 void bnx2x_lock_vf_pf_channel(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_lock_vf_pf_channel() argument
2308 mutex_lock(&vf->op_mutex); in bnx2x_lock_vf_pf_channel()
2311 vf->op_current = tlv; in bnx2x_lock_vf_pf_channel()
2315 vf->abs_vfid, tlv); in bnx2x_lock_vf_pf_channel()
2318 void bnx2x_unlock_vf_pf_channel(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_unlock_vf_pf_channel() argument
2323 if (!vf) { in bnx2x_unlock_vf_pf_channel()
2324 BNX2X_ERR("VF was %p\n", vf); in bnx2x_unlock_vf_pf_channel()
2328 current_tlv = vf->op_current; in bnx2x_unlock_vf_pf_channel()
2334 WARN(expected_tlv != vf->op_current, in bnx2x_unlock_vf_pf_channel()
2336 vf->op_current); in bnx2x_unlock_vf_pf_channel()
2339 vf->op_current = CHANNEL_TLV_NONE; in bnx2x_unlock_vf_pf_channel()
2342 mutex_unlock(&vf->op_mutex); in bnx2x_unlock_vf_pf_channel()
2346 vf->abs_vfid, current_tlv); in bnx2x_unlock_vf_pf_channel()
2464 struct bnx2x_virtf *vf = BP_VF(bp, vf_idx); in bnx2x_enable_sriov() local
2466 vf->sb_count = 0; in bnx2x_enable_sriov()
2495 struct bnx2x_virtf *vf = BP_VF(bp, vf_idx); in bnx2x_enable_sriov() local
2498 vf->vfqs = &bp->vfdb->vfqs[qcount]; in bnx2x_enable_sriov()
2499 qcount += vf_sb_count(vf); in bnx2x_enable_sriov()
2500 bnx2x_iov_static_resc(bp, vf); in bnx2x_enable_sriov()
2561 struct bnx2x_virtf **vf, in bnx2x_vf_op_prep() argument
2582 *vf = BP_VF(bp, vfidx); in bnx2x_vf_op_prep()
2585 if (!*vf) { in bnx2x_vf_op_prep()
2590 if (test_queue && !(*vf)->vfqs) { in bnx2x_vf_op_prep()
2609 struct bnx2x_virtf *vf = NULL; in bnx2x_get_vf_config() local
2616 rc = bnx2x_vf_op_prep(bp, vfidx, &vf, &bulletin, true); in bnx2x_get_vf_config()
2620 mac_obj = &bnx2x_leading_vfq(vf, mac_obj); in bnx2x_get_vf_config()
2621 vlan_obj = &bnx2x_leading_vfq(vf, vlan_obj); in bnx2x_get_vf_config()
2627 ivi->vf = vfidx; in bnx2x_get_vf_config()
2631 ivi->spoofchk = vf->spoofchk ? 1 : 0; in bnx2x_get_vf_config()
2632 ivi->linkstate = vf->link_cfg; in bnx2x_get_vf_config()
2633 if (vf->state == VF_ENABLED) { in bnx2x_get_vf_config()
2635 if (bnx2x_validate_vf_sp_objs(bp, vf, false)) { in bnx2x_get_vf_config()
2687 struct bnx2x_virtf *vf = NULL; in bnx2x_set_vf_mac() local
2696 rc = bnx2x_vf_op_prep(bp, vfidx, &vf, &bulletin, true); in bnx2x_set_vf_mac()
2720 bnx2x_get_q_logical_state(bp, &bnx2x_leading_vfq(vf, sp_obj)); in bnx2x_set_vf_mac()
2721 if (vf->state == VF_ENABLED && in bnx2x_set_vf_mac()
2728 if (!bnx2x_validate_vf_sp_objs(bp, vf, true)) in bnx2x_set_vf_mac()
2732 bnx2x_lock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_MAC); in bnx2x_set_vf_mac()
2735 mac_obj = &bnx2x_leading_vfq(vf, mac_obj); in bnx2x_set_vf_mac()
2757 bnx2x_unlock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_MAC); in bnx2x_set_vf_mac()
2764 struct bnx2x_virtf *vf, bool accept) in bnx2x_set_vf_vlan_acceptance() argument
2770 accept_flags = bnx2x_leading_vfq(vf, accept_flags); in bnx2x_set_vf_vlan_acceptance()
2776 bnx2x_vf_prep_rx_mode(bp, LEADING_IDX, &rx_ramrod, vf, in bnx2x_set_vf_vlan_acceptance()
2778 bnx2x_leading_vfq(vf, accept_flags) = accept_flags; in bnx2x_set_vf_vlan_acceptance()
2782 static int bnx2x_set_vf_vlan_filter(struct bnx2x *bp, struct bnx2x_virtf *vf, in bnx2x_set_vf_vlan_filter() argument
2792 ramrod_param.vlan_mac_obj = &bnx2x_leading_vfq(vf, vlan_obj); in bnx2x_set_vf_vlan_filter()
2814 struct bnx2x_virtf *vf = NULL; in bnx2x_set_vf_vlan() local
2829 rc = bnx2x_vf_op_prep(bp, vfidx, &vf, &bulletin, true); in bnx2x_set_vf_vlan()
2854 if (vf->state != VF_ENABLED || in bnx2x_set_vf_vlan()
2855 bnx2x_get_q_logical_state(bp, &bnx2x_leading_vfq(vf, sp_obj)) != in bnx2x_set_vf_vlan()
2860 if (!bnx2x_validate_vf_sp_objs(bp, vf, true)) in bnx2x_set_vf_vlan()
2864 bnx2x_lock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_VLAN); in bnx2x_set_vf_vlan()
2868 vlan_obj = &bnx2x_leading_vfq(vf, vlan_obj); in bnx2x_set_vf_vlan()
2880 if (vlan || !(vf->cfg_flags & VF_CFG_VLAN_FILTER)) in bnx2x_set_vf_vlan()
2881 bnx2x_set_vf_vlan_acceptance(bp, vf, !vlan); in bnx2x_set_vf_vlan()
2883 rc = bnx2x_set_vf_vlan_filter(bp, vf, vlan, true); in bnx2x_set_vf_vlan()
2890 for_each_vfq(vf, i) { in bnx2x_set_vf_vlan()
2894 q_params.q_obj = &bnx2x_vfq(vf, i, sp_obj); in bnx2x_set_vf_vlan()
2940 bnx2x_unlock_vf_pf_channel(bp, vf, CHANNEL_TLV_PF_SET_VLAN); in bnx2x_set_vf_vlan()
2953 struct bnx2x_virtf *vf; in bnx2x_set_vf_spoofchk() local
2956 vf = BP_VF(bp, idx); in bnx2x_set_vf_spoofchk()
2957 if (!vf) in bnx2x_set_vf_spoofchk()
2961 if (vf->spoofchk == val) in bnx2x_set_vf_spoofchk()
2964 vf->spoofchk = val ? 1 : 0; in bnx2x_set_vf_spoofchk()
2970 if (vf->state != VF_ENABLED || in bnx2x_set_vf_spoofchk()
2971 bnx2x_get_q_logical_state(bp, &bnx2x_leading_vfq(vf, sp_obj)) != in bnx2x_set_vf_spoofchk()
2976 if (!bnx2x_validate_vf_sp_objs(bp, vf, true)) in bnx2x_set_vf_spoofchk()
2980 for_each_vfq(vf, i) { in bnx2x_set_vf_spoofchk()
2984 q_params.q_obj = &bnx2x_vfq(vf, i, sp_obj); in bnx2x_set_vf_spoofchk()