Lines Matching refs:vf
74 mv_list->vf = -1; in __ixgbe_enable_sriov()
328 u32 *msgbuf, u32 vf) in ixgbe_set_vf_multicasts() argument
333 struct vf_data_storage *vfinfo = &adapter->vfinfo[vf]; in ixgbe_set_vf_multicasts()
339 u32 vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf)); in ixgbe_set_vf_multicasts()
367 IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr); in ixgbe_set_vf_multicasts()
407 u32 vf) in ixgbe_set_vf_vlan() argument
413 return adapter->hw.mac.ops.set_vfta(&adapter->hw, vid, vf, (bool)add); in ixgbe_set_vf_vlan()
416 static s32 ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf) in ixgbe_set_vf_lpe() argument
441 switch (adapter->vfinfo[vf].vf_api) { in ixgbe_set_vf_lpe()
464 vf_shift = vf % 32; in ixgbe_set_vf_lpe()
465 reg_offset = vf / 32; in ixgbe_set_vf_lpe()
502 static void ixgbe_set_vmolr(struct ixgbe_hw *hw, u32 vf, bool aupe) in ixgbe_set_vmolr() argument
504 u32 vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf)); in ixgbe_set_vmolr()
510 IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr); in ixgbe_set_vmolr()
513 static void ixgbe_clear_vmvir(struct ixgbe_adapter *adapter, u32 vf) in ixgbe_clear_vmvir() argument
517 IXGBE_WRITE_REG(hw, IXGBE_VMVIR(vf), 0); in ixgbe_clear_vmvir()
519 static inline void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf) in ixgbe_vf_reset_event() argument
522 struct vf_data_storage *vfinfo = &adapter->vfinfo[vf]; in ixgbe_vf_reset_event()
526 ixgbe_set_vf_vlan(adapter, true, vfinfo->pf_vlan, vf); in ixgbe_vf_reset_event()
529 ixgbe_set_vmolr(hw, vf, !vfinfo->pf_vlan); in ixgbe_vf_reset_event()
533 ixgbe_clear_vmvir(adapter, vf); in ixgbe_vf_reset_event()
537 vfinfo->pf_qos, vf); in ixgbe_vf_reset_event()
540 adapter->default_up, vf); in ixgbe_vf_reset_event()
543 hw->mac.ops.set_vlan_anti_spoofing(hw, true, vf); in ixgbe_vf_reset_event()
547 adapter->vfinfo[vf].num_vf_mc_hashes = 0; in ixgbe_vf_reset_event()
552 ixgbe_del_mac_filter(adapter, adapter->vfinfo[vf].vf_mac_addresses, vf); in ixgbe_vf_reset_event()
555 adapter->vfinfo[vf].vf_api = ixgbe_mbox_api_10; in ixgbe_vf_reset_event()
559 int vf, unsigned char *mac_addr) in ixgbe_set_vf_mac() argument
561 ixgbe_del_mac_filter(adapter, adapter->vfinfo[vf].vf_mac_addresses, vf); in ixgbe_set_vf_mac()
562 memcpy(adapter->vfinfo[vf].vf_mac_addresses, mac_addr, ETH_ALEN); in ixgbe_set_vf_mac()
563 ixgbe_add_mac_filter(adapter, adapter->vfinfo[vf].vf_mac_addresses, vf); in ixgbe_set_vf_mac()
569 int vf, int index, unsigned char *mac_addr) in ixgbe_set_vf_macvlan() argument
577 if (entry->vf == vf) { in ixgbe_set_vf_macvlan()
578 entry->vf = -1; in ixgbe_set_vf_macvlan()
582 entry->vf_macvlan, vf); in ixgbe_set_vf_macvlan()
615 entry->vf = vf; in ixgbe_set_vf_macvlan()
618 ixgbe_add_mac_filter(adapter, mac_addr, vf); in ixgbe_set_vf_macvlan()
636 static inline void ixgbe_write_qde(struct ixgbe_adapter *adapter, u32 vf, in ixgbe_write_qde() argument
644 for (i = vf * q_per_pool; i < ((vf + 1) * q_per_pool); i++) { in ixgbe_write_qde()
657 static int ixgbe_vf_reset_msg(struct ixgbe_adapter *adapter, u32 vf) in ixgbe_vf_reset_msg() argument
661 unsigned char *vf_mac = adapter->vfinfo[vf].vf_mac_addresses; in ixgbe_vf_reset_msg()
668 e_info(probe, "VF Reset msg received from vf %d\n", vf); in ixgbe_vf_reset_msg()
671 ixgbe_vf_reset_event(adapter, vf); in ixgbe_vf_reset_msg()
675 ixgbe_set_vf_mac(adapter, vf, vf_mac); in ixgbe_vf_reset_msg()
677 vf_shift = vf % 32; in ixgbe_vf_reset_msg()
678 reg_offset = vf / 32; in ixgbe_vf_reset_msg()
686 ixgbe_write_qde(adapter, vf, IXGBE_QDE_ENABLE); in ixgbe_vf_reset_msg()
711 adapter->vfinfo[vf].clear_to_send = true; in ixgbe_vf_reset_msg()
723 IXGBE_WRITE_REG(hw, IXGBE_PVFTDWBAHn(q_per_pool, vf, i), 0); in ixgbe_vf_reset_msg()
724 IXGBE_WRITE_REG(hw, IXGBE_PVFTDWBALn(q_per_pool, vf, i), 0); in ixgbe_vf_reset_msg()
736 vf); in ixgbe_vf_reset_msg()
744 ixgbe_write_mbx(hw, msgbuf, IXGBE_VF_PERMADDR_MSG_LEN, vf); in ixgbe_vf_reset_msg()
750 u32 *msgbuf, u32 vf) in ixgbe_set_vf_mac_addr() argument
755 e_warn(drv, "VF %d attempted to set invalid mac\n", vf); in ixgbe_set_vf_mac_addr()
759 if (adapter->vfinfo[vf].pf_set_mac && in ixgbe_set_vf_mac_addr()
760 !ether_addr_equal(adapter->vfinfo[vf].vf_mac_addresses, new_mac)) { in ixgbe_set_vf_mac_addr()
764 vf); in ixgbe_set_vf_mac_addr()
768 return ixgbe_set_vf_mac(adapter, vf, new_mac) < 0; in ixgbe_set_vf_mac_addr()
795 u32 *msgbuf, u32 vf) in ixgbe_set_vf_vlan_msg() argument
806 if (adapter->vfinfo[vf].pf_vlan || tcs) { in ixgbe_set_vf_vlan_msg()
810 vf); in ixgbe_set_vf_vlan_msg()
815 adapter->vfinfo[vf].vlan_count++; in ixgbe_set_vf_vlan_msg()
816 else if (adapter->vfinfo[vf].vlan_count) in ixgbe_set_vf_vlan_msg()
817 adapter->vfinfo[vf].vlan_count--; in ixgbe_set_vf_vlan_msg()
825 err = ixgbe_set_vf_vlan(adapter, add, vid, vf); in ixgbe_set_vf_vlan_msg()
826 if (!err && adapter->vfinfo[vf].spoofchk_enabled) in ixgbe_set_vf_vlan_msg()
827 hw->mac.ops.set_vlan_anti_spoofing(hw, true, vf); in ixgbe_set_vf_vlan_msg()
865 u32 *msgbuf, u32 vf) in ixgbe_set_vf_macvlan_msg() argument
872 if (adapter->vfinfo[vf].pf_set_mac && index > 0) { in ixgbe_set_vf_macvlan_msg()
875 vf); in ixgbe_set_vf_macvlan_msg()
882 e_warn(drv, "VF %d attempted to set invalid mac\n", vf); in ixgbe_set_vf_macvlan_msg()
890 if (adapter->vfinfo[vf].spoofchk_enabled) in ixgbe_set_vf_macvlan_msg()
891 ixgbe_ndo_set_vf_spoofchk(adapter->netdev, vf, false); in ixgbe_set_vf_macvlan_msg()
894 err = ixgbe_set_vf_macvlan(adapter, vf, index, new_mac); in ixgbe_set_vf_macvlan_msg()
898 vf); in ixgbe_set_vf_macvlan_msg()
904 u32 *msgbuf, u32 vf) in ixgbe_negotiate_vf_api() argument
912 adapter->vfinfo[vf].vf_api = api; in ixgbe_negotiate_vf_api()
918 e_info(drv, "VF %d requested invalid api version %u\n", vf, api); in ixgbe_negotiate_vf_api()
924 u32 *msgbuf, u32 vf) in ixgbe_get_vf_queues() argument
932 switch (adapter->vfinfo[vf].vf_api) { in ixgbe_get_vf_queues()
952 else if (adapter->vfinfo[vf].pf_vlan || adapter->vfinfo[vf].pf_qos) in ixgbe_get_vf_queues()
963 static int ixgbe_get_vf_reta(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf) in ixgbe_get_vf_reta() argument
971 if (!adapter->vfinfo[vf].rss_query_enabled) in ixgbe_get_vf_reta()
975 if (adapter->vfinfo[vf].vf_api != ixgbe_mbox_api_12) in ixgbe_get_vf_reta()
993 u32 *msgbuf, u32 vf) in ixgbe_get_vf_rss_key() argument
998 if (!adapter->vfinfo[vf].rss_query_enabled) in ixgbe_get_vf_rss_key()
1002 if (adapter->vfinfo[vf].vf_api != ixgbe_mbox_api_12) in ixgbe_get_vf_rss_key()
1011 u32 *msgbuf, u32 vf) in ixgbe_update_vf_xcast_mode() argument
1018 switch (adapter->vfinfo[vf].vf_api) { in ixgbe_update_vf_xcast_mode()
1026 !adapter->vfinfo[vf].trusted) { in ixgbe_update_vf_xcast_mode()
1030 if (adapter->vfinfo[vf].xcast_mode == xcast_mode) in ixgbe_update_vf_xcast_mode()
1050 vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf)); in ixgbe_update_vf_xcast_mode()
1053 IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr); in ixgbe_update_vf_xcast_mode()
1055 adapter->vfinfo[vf].xcast_mode = xcast_mode; in ixgbe_update_vf_xcast_mode()
1063 static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf) in ixgbe_rcv_msg_from_vf() argument
1070 retval = ixgbe_read_mbx(hw, msgbuf, mbx_size, vf); in ixgbe_rcv_msg_from_vf()
1085 return ixgbe_vf_reset_msg(adapter, vf); in ixgbe_rcv_msg_from_vf()
1091 if (!adapter->vfinfo[vf].clear_to_send) { in ixgbe_rcv_msg_from_vf()
1093 ixgbe_write_mbx(hw, msgbuf, 1, vf); in ixgbe_rcv_msg_from_vf()
1099 retval = ixgbe_set_vf_mac_addr(adapter, msgbuf, vf); in ixgbe_rcv_msg_from_vf()
1102 retval = ixgbe_set_vf_multicasts(adapter, msgbuf, vf); in ixgbe_rcv_msg_from_vf()
1105 retval = ixgbe_set_vf_vlan_msg(adapter, msgbuf, vf); in ixgbe_rcv_msg_from_vf()
1108 retval = ixgbe_set_vf_lpe(adapter, msgbuf, vf); in ixgbe_rcv_msg_from_vf()
1111 retval = ixgbe_set_vf_macvlan_msg(adapter, msgbuf, vf); in ixgbe_rcv_msg_from_vf()
1114 retval = ixgbe_negotiate_vf_api(adapter, msgbuf, vf); in ixgbe_rcv_msg_from_vf()
1117 retval = ixgbe_get_vf_queues(adapter, msgbuf, vf); in ixgbe_rcv_msg_from_vf()
1120 retval = ixgbe_get_vf_reta(adapter, msgbuf, vf); in ixgbe_rcv_msg_from_vf()
1123 retval = ixgbe_get_vf_rss_key(adapter, msgbuf, vf); in ixgbe_rcv_msg_from_vf()
1126 retval = ixgbe_update_vf_xcast_mode(adapter, msgbuf, vf); in ixgbe_rcv_msg_from_vf()
1142 ixgbe_write_mbx(hw, msgbuf, mbx_size, vf); in ixgbe_rcv_msg_from_vf()
1147 static void ixgbe_rcv_ack_from_vf(struct ixgbe_adapter *adapter, u32 vf) in ixgbe_rcv_ack_from_vf() argument
1153 if (!adapter->vfinfo[vf].clear_to_send) in ixgbe_rcv_ack_from_vf()
1154 ixgbe_write_mbx(hw, &msg, 1, vf); in ixgbe_rcv_ack_from_vf()
1160 u32 vf; in ixgbe_msg_task() local
1162 for (vf = 0; vf < adapter->num_vfs; vf++) { in ixgbe_msg_task()
1164 if (!ixgbe_check_for_rst(hw, vf)) in ixgbe_msg_task()
1165 ixgbe_vf_reset_event(adapter, vf); in ixgbe_msg_task()
1168 if (!ixgbe_check_for_msg(hw, vf)) in ixgbe_msg_task()
1169 ixgbe_rcv_msg_from_vf(adapter, vf); in ixgbe_msg_task()
1172 if (!ixgbe_check_for_ack(hw, vf)) in ixgbe_msg_task()
1173 ixgbe_rcv_ack_from_vf(adapter, vf); in ixgbe_msg_task()
1189 static inline void ixgbe_ping_vf(struct ixgbe_adapter *adapter, int vf) in ixgbe_ping_vf() argument
1195 if (adapter->vfinfo[vf].clear_to_send) in ixgbe_ping_vf()
1197 ixgbe_write_mbx(hw, &ping, 1, vf); in ixgbe_ping_vf()
1214 int ixgbe_ndo_set_vf_mac(struct net_device *netdev, int vf, u8 *mac) in ixgbe_ndo_set_vf_mac() argument
1217 if (!is_valid_ether_addr(mac) || (vf >= adapter->num_vfs)) in ixgbe_ndo_set_vf_mac()
1219 adapter->vfinfo[vf].pf_set_mac = true; in ixgbe_ndo_set_vf_mac()
1220 dev_info(&adapter->pdev->dev, "setting MAC %pM on VF %d\n", mac, vf); in ixgbe_ndo_set_vf_mac()
1229 return ixgbe_set_vf_mac(adapter, vf, mac); in ixgbe_ndo_set_vf_mac()
1232 static int ixgbe_enable_port_vlan(struct ixgbe_adapter *adapter, int vf, in ixgbe_enable_port_vlan() argument
1238 err = ixgbe_set_vf_vlan(adapter, true, vlan, vf); in ixgbe_enable_port_vlan()
1242 ixgbe_set_vmvir(adapter, vlan, qos, vf); in ixgbe_enable_port_vlan()
1243 ixgbe_set_vmolr(hw, vf, false); in ixgbe_enable_port_vlan()
1244 if (adapter->vfinfo[vf].spoofchk_enabled) in ixgbe_enable_port_vlan()
1245 hw->mac.ops.set_vlan_anti_spoofing(hw, true, vf); in ixgbe_enable_port_vlan()
1246 adapter->vfinfo[vf].vlan_count++; in ixgbe_enable_port_vlan()
1250 ixgbe_write_qde(adapter, vf, IXGBE_QDE_ENABLE | in ixgbe_enable_port_vlan()
1253 adapter->vfinfo[vf].pf_vlan = vlan; in ixgbe_enable_port_vlan()
1254 adapter->vfinfo[vf].pf_qos = qos; in ixgbe_enable_port_vlan()
1256 "Setting VLAN %d, QOS 0x%x on VF %d\n", vlan, qos, vf); in ixgbe_enable_port_vlan()
1268 static int ixgbe_disable_port_vlan(struct ixgbe_adapter *adapter, int vf) in ixgbe_disable_port_vlan() argument
1274 adapter->vfinfo[vf].pf_vlan, vf); in ixgbe_disable_port_vlan()
1275 ixgbe_clear_vmvir(adapter, vf); in ixgbe_disable_port_vlan()
1276 ixgbe_set_vmolr(hw, vf, true); in ixgbe_disable_port_vlan()
1277 hw->mac.ops.set_vlan_anti_spoofing(hw, false, vf); in ixgbe_disable_port_vlan()
1278 if (adapter->vfinfo[vf].vlan_count) in ixgbe_disable_port_vlan()
1279 adapter->vfinfo[vf].vlan_count--; in ixgbe_disable_port_vlan()
1283 ixgbe_write_qde(adapter, vf, IXGBE_QDE_ENABLE); in ixgbe_disable_port_vlan()
1285 adapter->vfinfo[vf].pf_vlan = 0; in ixgbe_disable_port_vlan()
1286 adapter->vfinfo[vf].pf_qos = 0; in ixgbe_disable_port_vlan()
1291 int ixgbe_ndo_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, u8 qos) in ixgbe_ndo_set_vf_vlan() argument
1296 if ((vf >= adapter->num_vfs) || (vlan > 4095) || (qos > 7)) in ixgbe_ndo_set_vf_vlan()
1306 if (adapter->vfinfo[vf].pf_vlan) in ixgbe_ndo_set_vf_vlan()
1307 err = ixgbe_disable_port_vlan(adapter, vf); in ixgbe_ndo_set_vf_vlan()
1310 err = ixgbe_enable_port_vlan(adapter, vf, vlan, qos); in ixgbe_ndo_set_vf_vlan()
1312 err = ixgbe_disable_port_vlan(adapter, vf); in ixgbe_ndo_set_vf_vlan()
1333 static void ixgbe_set_vf_rate_limit(struct ixgbe_adapter *adapter, int vf) in ixgbe_set_vf_rate_limit() argument
1339 u16 tx_rate = adapter->vfinfo[vf].tx_rate; in ixgbe_set_vf_rate_limit()
1378 unsigned int reg_idx = (vf * queues_per_pool) + queue; in ixgbe_set_vf_rate_limit()
1407 int ixgbe_ndo_set_vf_bw(struct net_device *netdev, int vf, int min_tx_rate, in ixgbe_ndo_set_vf_bw() argument
1414 if (vf >= adapter->num_vfs) in ixgbe_ndo_set_vf_bw()
1435 adapter->vfinfo[vf].tx_rate = max_tx_rate; in ixgbe_ndo_set_vf_bw()
1438 ixgbe_set_vf_rate_limit(adapter, vf); in ixgbe_ndo_set_vf_bw()
1443 int ixgbe_ndo_set_vf_spoofchk(struct net_device *netdev, int vf, bool setting) in ixgbe_ndo_set_vf_spoofchk() argument
1446 int vf_target_reg = vf >> 3; in ixgbe_ndo_set_vf_spoofchk()
1447 int vf_target_shift = vf % 8; in ixgbe_ndo_set_vf_spoofchk()
1451 if (vf >= adapter->num_vfs) in ixgbe_ndo_set_vf_spoofchk()
1454 adapter->vfinfo[vf].spoofchk_enabled = setting; in ixgbe_ndo_set_vf_spoofchk()
1461 if (adapter->vfinfo[vf].vlan_count) { in ixgbe_ndo_set_vf_spoofchk()
1472 int ixgbe_ndo_set_vf_rss_query_en(struct net_device *netdev, int vf, in ixgbe_ndo_set_vf_rss_query_en() argument
1484 if (vf >= adapter->num_vfs) in ixgbe_ndo_set_vf_rss_query_en()
1487 adapter->vfinfo[vf].rss_query_enabled = setting; in ixgbe_ndo_set_vf_rss_query_en()
1492 int ixgbe_ndo_set_vf_trust(struct net_device *netdev, int vf, bool setting) in ixgbe_ndo_set_vf_trust() argument
1496 if (vf >= adapter->num_vfs) in ixgbe_ndo_set_vf_trust()
1500 if (adapter->vfinfo[vf].trusted == setting) in ixgbe_ndo_set_vf_trust()
1503 adapter->vfinfo[vf].trusted = setting; in ixgbe_ndo_set_vf_trust()
1506 adapter->vfinfo[vf].clear_to_send = false; in ixgbe_ndo_set_vf_trust()
1507 ixgbe_ping_vf(adapter, vf); in ixgbe_ndo_set_vf_trust()
1509 e_info(drv, "VF %u is %strusted\n", vf, setting ? "" : "not "); in ixgbe_ndo_set_vf_trust()
1515 int vf, struct ifla_vf_info *ivi) in ixgbe_ndo_get_vf_config() argument
1518 if (vf >= adapter->num_vfs) in ixgbe_ndo_get_vf_config()
1520 ivi->vf = vf; in ixgbe_ndo_get_vf_config()
1521 memcpy(&ivi->mac, adapter->vfinfo[vf].vf_mac_addresses, ETH_ALEN); in ixgbe_ndo_get_vf_config()
1522 ivi->max_tx_rate = adapter->vfinfo[vf].tx_rate; in ixgbe_ndo_get_vf_config()
1524 ivi->vlan = adapter->vfinfo[vf].pf_vlan; in ixgbe_ndo_get_vf_config()
1525 ivi->qos = adapter->vfinfo[vf].pf_qos; in ixgbe_ndo_get_vf_config()
1526 ivi->spoofchk = adapter->vfinfo[vf].spoofchk_enabled; in ixgbe_ndo_get_vf_config()
1527 ivi->rss_query_en = adapter->vfinfo[vf].rss_query_enabled; in ixgbe_ndo_get_vf_config()
1528 ivi->trusted = adapter->vfinfo[vf].trusted; in ixgbe_ndo_get_vf_config()