Lines Matching refs:vf

161 static int igb_ndo_set_vf_mac(struct net_device *netdev, int vf, u8 *mac);
163 int vf, u16 vlan, u8 qos);
164 static int igb_ndo_set_vf_bw(struct net_device *netdev, int vf, int tx_rate);
165 static int igb_ndo_get_vf_config(struct net_device *netdev, int vf,
170 static int igb_vf_configure(struct igb_adapter *adapter, int vf);
2254 * igb_probe_vfs - Initialize vf data storage and add VFs to pci config space
2257 * This function initializes the vf specific data storage and then attempts to
4980 static int igb_vf_configure(struct igb_adapter *adapter, int vf)
4990 igb_set_vf_mac(adapter, vf, mac_addr);
4996 thisvf_devfn = (pdev->devfn + 0x80 + (vf << 1)) |
5002 thisvf_devfn = (pdev->devfn + 0x80 + (vf << 2)) |
5020 adapter->vf_data[vf].vfdev = pvfdev;
5097 static int igb_set_vf_promisc(struct igb_adapter *adapter, u32 *msgbuf, u32 vf)
5100 u32 vmolr = rd32(E1000_VMOLR(vf));
5101 struct vf_data_storage *vf_data = &adapter->vf_data[vf];
5127 wr32(E1000_VMOLR(vf), vmolr);
5138 u32 *msgbuf, u32 vf)
5142 struct vf_data_storage *vf_data = &adapter->vf_data[vf];
5189 static void igb_clear_vf_vfta(struct igb_adapter *adapter, u32 vf)
5195 pool_mask = 1 << (E1000_VLVF_POOLSEL_SHIFT + vf);
5201 /* remove the vf from the pool */
5215 adapter->vf_data[vf].vlans_enabled = 0;
5218 static s32 igb_vlvf_set(struct igb_adapter *adapter, u32 vid, bool add, u32 vf)
5253 reg |= 1 << (E1000_VLVF_POOLSEL_SHIFT + vf);
5266 if (vf >= adapter->vfs_allocated_count)
5269 if (!adapter->vf_data[vf].vlans_enabled) {
5271 reg = rd32(E1000_VMOLR(vf));
5276 wr32(E1000_VMOLR(vf), reg);
5279 adapter->vf_data[vf].vlans_enabled++;
5283 /* remove vf from the pool */
5284 reg &= ~(1 << (E1000_VLVF_POOLSEL_SHIFT + vf));
5293 if (vf >= adapter->vfs_allocated_count)
5296 adapter->vf_data[vf].vlans_enabled--;
5297 if (!adapter->vf_data[vf].vlans_enabled) {
5299 reg = rd32(E1000_VMOLR(vf));
5304 wr32(E1000_VMOLR(vf), reg);
5311 static void igb_set_vmvir(struct igb_adapter *adapter, u32 vid, u32 vf)
5316 wr32(E1000_VMVIR(vf), (vid | E1000_VMVIR_VLANA_DEFAULT));
5318 wr32(E1000_VMVIR(vf), 0);
5322 int vf, u16 vlan, u8 qos)
5327 if ((vf >= adapter->vfs_allocated_count) || (vlan > 4095) || (qos > 7))
5330 err = igb_vlvf_set(adapter, vlan, !!vlan, vf);
5333 igb_set_vmvir(adapter, vlan | (qos << VLAN_PRIO_SHIFT), vf);
5334 igb_set_vmolr(adapter, vf, !vlan);
5335 adapter->vf_data[vf].pf_vlan = vlan;
5336 adapter->vf_data[vf].pf_qos = qos;
5338 "Setting VLAN %d, QOS 0x%x on VF %d\n", vlan, qos, vf);
5348 igb_vlvf_set(adapter, adapter->vf_data[vf].pf_vlan,
5349 false, vf);
5350 igb_set_vmvir(adapter, vlan, vf);
5351 igb_set_vmolr(adapter, vf, true);
5352 adapter->vf_data[vf].pf_vlan = 0;
5353 adapter->vf_data[vf].pf_qos = 0;
5359 static int igb_set_vf_vlan(struct igb_adapter *adapter, u32 *msgbuf, u32 vf)
5364 return igb_vlvf_set(adapter, vid, add, vf);
5367 static inline void igb_vf_reset(struct igb_adapter *adapter, u32 vf)
5370 adapter->vf_data[vf].flags &= IGB_VF_FLAG_PF_SET_MAC;
5371 adapter->vf_data[vf].last_nack = jiffies;
5374 igb_set_vmolr(adapter, vf, true);
5377 igb_clear_vf_vfta(adapter, vf);
5378 if (adapter->vf_data[vf].pf_vlan)
5379 igb_ndo_set_vf_vlan(adapter->netdev, vf,
5380 adapter->vf_data[vf].pf_vlan,
5381 adapter->vf_data[vf].pf_qos);
5383 igb_clear_vf_vfta(adapter, vf);
5385 /* reset multicast table array for vf */
5386 adapter->vf_data[vf].num_vf_mc_hashes = 0;
5392 static void igb_vf_reset_event(struct igb_adapter *adapter, u32 vf)
5394 unsigned char *vf_mac = adapter->vf_data[vf].vf_mac_addresses;
5397 if (!(adapter->vf_data[vf].flags & IGB_VF_FLAG_PF_SET_MAC))
5401 igb_vf_reset(adapter, vf);
5404 static void igb_vf_reset_msg(struct igb_adapter *adapter, u32 vf)
5407 unsigned char *vf_mac = adapter->vf_data[vf].vf_mac_addresses;
5408 int rar_entry = hw->mac.rar_entry_count - (vf + 1);
5413 igb_vf_reset(adapter, vf);
5415 /* set vf mac address */
5416 igb_rar_set_qsel(adapter, vf_mac, rar_entry, vf);
5418 /* enable transmit and receive for vf */
5420 wr32(E1000_VFTE, reg | (1 << vf));
5422 wr32(E1000_VFRE, reg | (1 << vf));
5424 adapter->vf_data[vf].flags |= IGB_VF_FLAG_CTS;
5426 /* reply to reset with ack and vf mac address */
5429 igb_write_mbx(hw, msgbuf, 3, vf);
5432 static int igb_set_vf_mac_addr(struct igb_adapter *adapter, u32 *msg, int vf)
5442 err = igb_set_vf_mac(adapter, vf, addr);
5447 static void igb_rcv_ack_from_vf(struct igb_adapter *adapter, u32 vf)
5450 struct vf_data_storage *vf_data = &adapter->vf_data[vf];
5456 igb_write_mbx(hw, &msg, 1, vf);
5461 static void igb_rcv_msg_from_vf(struct igb_adapter *adapter, u32 vf)
5466 struct vf_data_storage *vf_data = &adapter->vf_data[vf];
5469 retval = igb_read_mbx(hw, msgbuf, E1000_VFMAILBOX_SIZE, vf);
5485 * until the vf completes a reset it should not be
5490 igb_vf_reset_msg(adapter, vf);
5505 retval = igb_set_vf_mac_addr(adapter, msgbuf, vf);
5510 "resume operations\n", vf);
5513 retval = igb_set_vf_promisc(adapter, msgbuf, vf);
5516 retval = igb_set_vf_multicasts(adapter, msgbuf, vf);
5519 retval = igb_set_vf_rlpml(adapter, msgbuf[1], vf);
5527 "resume operations\n", vf);
5529 retval = igb_set_vf_vlan(adapter, msgbuf, vf);
5545 igb_write_mbx(hw, msgbuf, 1, vf);
5551 u32 vf;
5553 for (vf = 0; vf < adapter->vfs_allocated_count; vf++) {
5555 if (!igb_check_for_rst(hw, vf))
5556 igb_vf_reset_event(adapter, vf);
5559 if (!igb_check_for_msg(hw, vf))
5560 igb_rcv_msg_from_vf(adapter, vf);
5563 if (!igb_check_for_ack(hw, vf))
5564 igb_rcv_ack_from_vf(adapter, vf);
7025 int vf, unsigned char *mac_addr)
7030 int rar_entry = hw->mac.rar_entry_count - (vf + 1);
7032 memcpy(adapter->vf_data[vf].vf_mac_addresses, mac_addr, ETH_ALEN);
7034 igb_rar_set_qsel(adapter, mac_addr, rar_entry, vf);
7039 static int igb_ndo_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
7042 if (!is_valid_ether_addr(mac) || (vf >= adapter->vfs_allocated_count))
7044 adapter->vf_data[vf].flags |= IGB_VF_FLAG_PF_SET_MAC;
7045 dev_info(&adapter->pdev->dev, "setting MAC %pM on VF %d\n", mac, vf);
7054 return igb_set_vf_mac(adapter, vf, mac);
7069 static void igb_set_vf_rate_limit(struct e1000_hw *hw, int vf, int tx_rate,
7089 wr32(E1000_RTTDQSEL, vf); /* vf X uses queue X */
7122 static int igb_ndo_set_vf_bw(struct net_device *netdev, int vf, int tx_rate)
7132 if ((vf >= adapter->vfs_allocated_count) ||
7138 adapter->vf_data[vf].tx_rate = (u16)tx_rate;
7139 igb_set_vf_rate_limit(hw, vf, tx_rate, actual_link_speed);
7145 int vf, struct ifla_vf_info *ivi)
7148 if (vf >= adapter->vfs_allocated_count)
7150 ivi->vf = vf;
7151 memcpy(&ivi->mac, adapter->vf_data[vf].vf_mac_addresses, ETH_ALEN);
7152 ivi->tx_rate = adapter->vf_data[vf].tx_rate;
7153 ivi->vlan = adapter->vf_data[vf].pf_vlan;
7154 ivi->qos = adapter->vf_data[vf].pf_qos;