]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
Merge branch 'for-3.17-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj...
[karo-tx-linux.git] / drivers / net / ethernet / intel / ixgbe / ixgbe_sriov.c
1 /*******************************************************************************
2
3   Intel 10 Gigabit PCI Express Linux driver
4   Copyright(c) 1999 - 2014 Intel Corporation.
5
6   This program is free software; you can redistribute it and/or modify it
7   under the terms and conditions of the GNU General Public License,
8   version 2, as published by the Free Software Foundation.
9
10   This program is distributed in the hope it will be useful, but WITHOUT
11   ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
12   FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
13   more details.
14
15   You should have received a copy of the GNU General Public License along with
16   this program; if not, write to the Free Software Foundation, Inc.,
17   51 Franklin St - Fifth Floor, Boston, MA 02110-1301 USA.
18
19   The full GNU General Public License is included in this distribution in
20   the file called "COPYING".
21
22   Contact Information:
23   Linux NICS <linux.nics@intel.com>
24   e1000-devel Mailing List <e1000-devel@lists.sourceforge.net>
25   Intel Corporation, 5200 N.E. Elam Young Parkway, Hillsboro, OR 97124-6497
26
27 *******************************************************************************/
28
29 #include <linux/types.h>
30 #include <linux/module.h>
31 #include <linux/pci.h>
32 #include <linux/netdevice.h>
33 #include <linux/vmalloc.h>
34 #include <linux/string.h>
35 #include <linux/in.h>
36 #include <linux/ip.h>
37 #include <linux/tcp.h>
38 #include <linux/ipv6.h>
39 #ifdef NETIF_F_HW_VLAN_CTAG_TX
40 #include <linux/if_vlan.h>
41 #endif
42
43 #include "ixgbe.h"
44 #include "ixgbe_type.h"
45 #include "ixgbe_sriov.h"
46
47 #ifdef CONFIG_PCI_IOV
48 static int __ixgbe_enable_sriov(struct ixgbe_adapter *adapter)
49 {
50         struct ixgbe_hw *hw = &adapter->hw;
51         int num_vf_macvlans, i;
52         struct vf_macvlans *mv_list;
53
54         adapter->flags |= IXGBE_FLAG_SRIOV_ENABLED;
55         e_info(probe, "SR-IOV enabled with %d VFs\n", adapter->num_vfs);
56
57         /* Enable VMDq flag so device will be set in VM mode */
58         adapter->flags |= IXGBE_FLAG_VMDQ_ENABLED;
59         if (!adapter->ring_feature[RING_F_VMDQ].limit)
60                 adapter->ring_feature[RING_F_VMDQ].limit = 1;
61         adapter->ring_feature[RING_F_VMDQ].offset = adapter->num_vfs;
62
63         num_vf_macvlans = hw->mac.num_rar_entries -
64         (IXGBE_MAX_PF_MACVLANS + 1 + adapter->num_vfs);
65
66         adapter->mv_list = mv_list = kcalloc(num_vf_macvlans,
67                                              sizeof(struct vf_macvlans),
68                                              GFP_KERNEL);
69         if (mv_list) {
70                 /* Initialize list of VF macvlans */
71                 INIT_LIST_HEAD(&adapter->vf_mvs.l);
72                 for (i = 0; i < num_vf_macvlans; i++) {
73                         mv_list->vf = -1;
74                         mv_list->free = true;
75                         list_add(&mv_list->l, &adapter->vf_mvs.l);
76                         mv_list++;
77                 }
78         }
79
80         /* Initialize default switching mode VEB */
81         IXGBE_WRITE_REG(hw, IXGBE_PFDTXGSWC, IXGBE_PFDTXGSWC_VT_LBEN);
82         adapter->flags2 |= IXGBE_FLAG2_BRIDGE_MODE_VEB;
83
84         /* If call to enable VFs succeeded then allocate memory
85          * for per VF control structures.
86          */
87         adapter->vfinfo =
88                 kcalloc(adapter->num_vfs,
89                         sizeof(struct vf_data_storage), GFP_KERNEL);
90         if (adapter->vfinfo) {
91                 /* limit trafffic classes based on VFs enabled */
92                 if ((adapter->hw.mac.type == ixgbe_mac_82599EB) &&
93                     (adapter->num_vfs < 16)) {
94                         adapter->dcb_cfg.num_tcs.pg_tcs = MAX_TRAFFIC_CLASS;
95                         adapter->dcb_cfg.num_tcs.pfc_tcs = MAX_TRAFFIC_CLASS;
96                 } else if (adapter->num_vfs < 32) {
97                         adapter->dcb_cfg.num_tcs.pg_tcs = 4;
98                         adapter->dcb_cfg.num_tcs.pfc_tcs = 4;
99                 } else {
100                         adapter->dcb_cfg.num_tcs.pg_tcs = 1;
101                         adapter->dcb_cfg.num_tcs.pfc_tcs = 1;
102                 }
103
104                 /* We do not support RSS w/ SR-IOV */
105                 adapter->ring_feature[RING_F_RSS].limit = 1;
106
107                 /* Disable RSC when in SR-IOV mode */
108                 adapter->flags2 &= ~(IXGBE_FLAG2_RSC_CAPABLE |
109                                      IXGBE_FLAG2_RSC_ENABLED);
110
111                 /* enable spoof checking for all VFs */
112                 for (i = 0; i < adapter->num_vfs; i++)
113                         adapter->vfinfo[i].spoofchk_enabled = true;
114                 return 0;
115         }
116
117         return -ENOMEM;
118 }
119
120 /* Note this function is called when the user wants to enable SR-IOV
121  * VFs using the now deprecated module parameter
122  */
123 void ixgbe_enable_sriov(struct ixgbe_adapter *adapter)
124 {
125         int pre_existing_vfs = 0;
126
127         pre_existing_vfs = pci_num_vf(adapter->pdev);
128         if (!pre_existing_vfs && !adapter->num_vfs)
129                 return;
130
131         /* If there are pre-existing VFs then we have to force
132          * use of that many - over ride any module parameter value.
133          * This may result from the user unloading the PF driver
134          * while VFs were assigned to guest VMs or because the VFs
135          * have been created via the new PCI SR-IOV sysfs interface.
136          */
137         if (pre_existing_vfs) {
138                 adapter->num_vfs = pre_existing_vfs;
139                 dev_warn(&adapter->pdev->dev,
140                          "Virtual Functions already enabled for this device - Please reload all VF drivers to avoid spoofed packet errors\n");
141         } else {
142                 int err;
143                 /*
144                  * The 82599 supports up to 64 VFs per physical function
145                  * but this implementation limits allocation to 63 so that
146                  * basic networking resources are still available to the
147                  * physical function.  If the user requests greater thn
148                  * 63 VFs then it is an error - reset to default of zero.
149                  */
150                 adapter->num_vfs = min_t(unsigned int, adapter->num_vfs, IXGBE_MAX_VFS_DRV_LIMIT);
151
152                 err = pci_enable_sriov(adapter->pdev, adapter->num_vfs);
153                 if (err) {
154                         e_err(probe, "Failed to enable PCI sriov: %d\n", err);
155                         adapter->num_vfs = 0;
156                         return;
157                 }
158         }
159
160         if (!__ixgbe_enable_sriov(adapter))
161                 return;
162
163         /* If we have gotten to this point then there is no memory available
164          * to manage the VF devices - print message and bail.
165          */
166         e_err(probe, "Unable to allocate memory for VF Data Storage - "
167               "SRIOV disabled\n");
168         ixgbe_disable_sriov(adapter);
169 }
170
171 #endif /* #ifdef CONFIG_PCI_IOV */
172 int ixgbe_disable_sriov(struct ixgbe_adapter *adapter)
173 {
174         struct ixgbe_hw *hw = &adapter->hw;
175         u32 gpie;
176         u32 vmdctl;
177         int rss;
178
179         /* set num VFs to 0 to prevent access to vfinfo */
180         adapter->num_vfs = 0;
181
182         /* free VF control structures */
183         kfree(adapter->vfinfo);
184         adapter->vfinfo = NULL;
185
186         /* free macvlan list */
187         kfree(adapter->mv_list);
188         adapter->mv_list = NULL;
189
190         /* if SR-IOV is already disabled then there is nothing to do */
191         if (!(adapter->flags & IXGBE_FLAG_SRIOV_ENABLED))
192                 return 0;
193
194 #ifdef CONFIG_PCI_IOV
195         /*
196          * If our VFs are assigned we cannot shut down SR-IOV
197          * without causing issues, so just leave the hardware
198          * available but disabled
199          */
200         if (pci_vfs_assigned(adapter->pdev)) {
201                 e_dev_warn("Unloading driver while VFs are assigned - VFs will not be deallocated\n");
202                 return -EPERM;
203         }
204         /* disable iov and allow time for transactions to clear */
205         pci_disable_sriov(adapter->pdev);
206 #endif
207
208         /* turn off device IOV mode */
209         IXGBE_WRITE_REG(hw, IXGBE_GCR_EXT, 0);
210         gpie = IXGBE_READ_REG(hw, IXGBE_GPIE);
211         gpie &= ~IXGBE_GPIE_VTMODE_MASK;
212         IXGBE_WRITE_REG(hw, IXGBE_GPIE, gpie);
213
214         /* set default pool back to 0 */
215         vmdctl = IXGBE_READ_REG(hw, IXGBE_VT_CTL);
216         vmdctl &= ~IXGBE_VT_CTL_POOL_MASK;
217         IXGBE_WRITE_REG(hw, IXGBE_VT_CTL, vmdctl);
218         IXGBE_WRITE_FLUSH(hw);
219
220         /* Disable VMDq flag so device will be set in VM mode */
221         if (adapter->ring_feature[RING_F_VMDQ].limit == 1) {
222                 adapter->flags &= ~IXGBE_FLAG_VMDQ_ENABLED;
223                 adapter->flags &= ~IXGBE_FLAG_SRIOV_ENABLED;
224                 rss = min_t(int, IXGBE_MAX_RSS_INDICES, num_online_cpus());
225         } else {
226                 rss = min_t(int, IXGBE_MAX_L2A_QUEUES, num_online_cpus());
227         }
228
229         adapter->ring_feature[RING_F_VMDQ].offset = 0;
230         adapter->ring_feature[RING_F_RSS].limit = rss;
231
232         /* take a breather then clean up driver data */
233         msleep(100);
234         return 0;
235 }
236
237 static int ixgbe_pci_sriov_enable(struct pci_dev *dev, int num_vfs)
238 {
239 #ifdef CONFIG_PCI_IOV
240         struct ixgbe_adapter *adapter = pci_get_drvdata(dev);
241         int err = 0;
242         int i;
243         int pre_existing_vfs = pci_num_vf(dev);
244
245         if (pre_existing_vfs && pre_existing_vfs != num_vfs)
246                 err = ixgbe_disable_sriov(adapter);
247         else if (pre_existing_vfs && pre_existing_vfs == num_vfs)
248                 return num_vfs;
249
250         if (err)
251                 return err;
252
253         /* While the SR-IOV capability structure reports total VFs to be
254          * 64 we limit the actual number that can be allocated to 63 so
255          * that some transmit/receive resources can be reserved to the
256          * PF.  The PCI bus driver already checks for other values out of
257          * range.
258          */
259         if (num_vfs > IXGBE_MAX_VFS_DRV_LIMIT)
260                 return -EPERM;
261
262         adapter->num_vfs = num_vfs;
263
264         err = __ixgbe_enable_sriov(adapter);
265         if (err)
266                 return  err;
267
268         for (i = 0; i < adapter->num_vfs; i++)
269                 ixgbe_vf_configuration(dev, (i | 0x10000000));
270
271         err = pci_enable_sriov(dev, num_vfs);
272         if (err) {
273                 e_dev_warn("Failed to enable PCI sriov: %d\n", err);
274                 return err;
275         }
276         ixgbe_sriov_reinit(adapter);
277
278         return num_vfs;
279 #else
280         return 0;
281 #endif
282 }
283
284 static int ixgbe_pci_sriov_disable(struct pci_dev *dev)
285 {
286         struct ixgbe_adapter *adapter = pci_get_drvdata(dev);
287         int err;
288 #ifdef CONFIG_PCI_IOV
289         u32 current_flags = adapter->flags;
290 #endif
291
292         err = ixgbe_disable_sriov(adapter);
293
294         /* Only reinit if no error and state changed */
295 #ifdef CONFIG_PCI_IOV
296         if (!err && current_flags != adapter->flags)
297                 ixgbe_sriov_reinit(adapter);
298 #endif
299
300         return err;
301 }
302
303 int ixgbe_pci_sriov_configure(struct pci_dev *dev, int num_vfs)
304 {
305         if (num_vfs == 0)
306                 return ixgbe_pci_sriov_disable(dev);
307         else
308                 return ixgbe_pci_sriov_enable(dev, num_vfs);
309 }
310
311 static int ixgbe_set_vf_multicasts(struct ixgbe_adapter *adapter,
312                                    u32 *msgbuf, u32 vf)
313 {
314         int entries = (msgbuf[0] & IXGBE_VT_MSGINFO_MASK)
315                        >> IXGBE_VT_MSGINFO_SHIFT;
316         u16 *hash_list = (u16 *)&msgbuf[1];
317         struct vf_data_storage *vfinfo = &adapter->vfinfo[vf];
318         struct ixgbe_hw *hw = &adapter->hw;
319         int i;
320         u32 vector_bit;
321         u32 vector_reg;
322         u32 mta_reg;
323         u32 vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf));
324
325         /* only so many hash values supported */
326         entries = min(entries, IXGBE_MAX_VF_MC_ENTRIES);
327
328         /*
329          * salt away the number of multi cast addresses assigned
330          * to this VF for later use to restore when the PF multi cast
331          * list changes
332          */
333         vfinfo->num_vf_mc_hashes = entries;
334
335         /*
336          * VFs are limited to using the MTA hash table for their multicast
337          * addresses
338          */
339         for (i = 0; i < entries; i++) {
340                 vfinfo->vf_mc_hashes[i] = hash_list[i];
341         }
342
343         for (i = 0; i < vfinfo->num_vf_mc_hashes; i++) {
344                 vector_reg = (vfinfo->vf_mc_hashes[i] >> 5) & 0x7F;
345                 vector_bit = vfinfo->vf_mc_hashes[i] & 0x1F;
346                 mta_reg = IXGBE_READ_REG(hw, IXGBE_MTA(vector_reg));
347                 mta_reg |= (1 << vector_bit);
348                 IXGBE_WRITE_REG(hw, IXGBE_MTA(vector_reg), mta_reg);
349         }
350         vmolr |= IXGBE_VMOLR_ROMPE;
351         IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr);
352
353         return 0;
354 }
355
356 #ifdef CONFIG_PCI_IOV
357 void ixgbe_restore_vf_multicasts(struct ixgbe_adapter *adapter)
358 {
359         struct ixgbe_hw *hw = &adapter->hw;
360         struct vf_data_storage *vfinfo;
361         int i, j;
362         u32 vector_bit;
363         u32 vector_reg;
364         u32 mta_reg;
365
366         for (i = 0; i < adapter->num_vfs; i++) {
367                 u32 vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(i));
368                 vfinfo = &adapter->vfinfo[i];
369                 for (j = 0; j < vfinfo->num_vf_mc_hashes; j++) {
370                         hw->addr_ctrl.mta_in_use++;
371                         vector_reg = (vfinfo->vf_mc_hashes[j] >> 5) & 0x7F;
372                         vector_bit = vfinfo->vf_mc_hashes[j] & 0x1F;
373                         mta_reg = IXGBE_READ_REG(hw, IXGBE_MTA(vector_reg));
374                         mta_reg |= (1 << vector_bit);
375                         IXGBE_WRITE_REG(hw, IXGBE_MTA(vector_reg), mta_reg);
376                 }
377
378                 if (vfinfo->num_vf_mc_hashes)
379                         vmolr |= IXGBE_VMOLR_ROMPE;
380                 else
381                         vmolr &= ~IXGBE_VMOLR_ROMPE;
382                 IXGBE_WRITE_REG(hw, IXGBE_VMOLR(i), vmolr);
383         }
384
385         /* Restore any VF macvlans */
386         ixgbe_full_sync_mac_table(adapter);
387 }
388 #endif
389
390 static int ixgbe_set_vf_vlan(struct ixgbe_adapter *adapter, int add, int vid,
391                              u32 vf)
392 {
393         /* VLAN 0 is a special case, don't allow it to be removed */
394         if (!vid && !add)
395                 return 0;
396
397         return adapter->hw.mac.ops.set_vfta(&adapter->hw, vid, vf, (bool)add);
398 }
399
400 static s32 ixgbe_set_vf_lpe(struct ixgbe_adapter *adapter, u32 *msgbuf, u32 vf)
401 {
402         struct ixgbe_hw *hw = &adapter->hw;
403         int max_frame = msgbuf[1];
404         u32 max_frs;
405
406         /*
407          * For 82599EB we have to keep all PFs and VFs operating with
408          * the same max_frame value in order to avoid sending an oversize
409          * frame to a VF.  In order to guarantee this is handled correctly
410          * for all cases we have several special exceptions to take into
411          * account before we can enable the VF for receive
412          */
413         if (adapter->hw.mac.type == ixgbe_mac_82599EB) {
414                 struct net_device *dev = adapter->netdev;
415                 int pf_max_frame = dev->mtu + ETH_HLEN;
416                 u32 reg_offset, vf_shift, vfre;
417                 s32 err = 0;
418
419 #ifdef CONFIG_FCOE
420                 if (dev->features & NETIF_F_FCOE_MTU)
421                         pf_max_frame = max_t(int, pf_max_frame,
422                                              IXGBE_FCOE_JUMBO_FRAME_SIZE);
423
424 #endif /* CONFIG_FCOE */
425                 switch (adapter->vfinfo[vf].vf_api) {
426                 case ixgbe_mbox_api_11:
427                         /*
428                          * Version 1.1 supports jumbo frames on VFs if PF has
429                          * jumbo frames enabled which means legacy VFs are
430                          * disabled
431                          */
432                         if (pf_max_frame > ETH_FRAME_LEN)
433                                 break;
434                 default:
435                         /*
436                          * If the PF or VF are running w/ jumbo frames enabled
437                          * we need to shut down the VF Rx path as we cannot
438                          * support jumbo frames on legacy VFs
439                          */
440                         if ((pf_max_frame > ETH_FRAME_LEN) ||
441                             (max_frame > (ETH_FRAME_LEN + ETH_FCS_LEN)))
442                                 err = -EINVAL;
443                         break;
444                 }
445
446                 /* determine VF receive enable location */
447                 vf_shift = vf % 32;
448                 reg_offset = vf / 32;
449
450                 /* enable or disable receive depending on error */
451                 vfre = IXGBE_READ_REG(hw, IXGBE_VFRE(reg_offset));
452                 if (err)
453                         vfre &= ~(1 << vf_shift);
454                 else
455                         vfre |= 1 << vf_shift;
456                 IXGBE_WRITE_REG(hw, IXGBE_VFRE(reg_offset), vfre);
457
458                 if (err) {
459                         e_err(drv, "VF max_frame %d out of range\n", max_frame);
460                         return err;
461                 }
462         }
463
464         /* MTU < 68 is an error and causes problems on some kernels */
465         if (max_frame > IXGBE_MAX_JUMBO_FRAME_SIZE) {
466                 e_err(drv, "VF max_frame %d out of range\n", max_frame);
467                 return -EINVAL;
468         }
469
470         /* pull current max frame size from hardware */
471         max_frs = IXGBE_READ_REG(hw, IXGBE_MAXFRS);
472         max_frs &= IXGBE_MHADD_MFS_MASK;
473         max_frs >>= IXGBE_MHADD_MFS_SHIFT;
474
475         if (max_frs < max_frame) {
476                 max_frs = max_frame << IXGBE_MHADD_MFS_SHIFT;
477                 IXGBE_WRITE_REG(hw, IXGBE_MAXFRS, max_frs);
478         }
479
480         e_info(hw, "VF requests change max MTU to %d\n", max_frame);
481
482         return 0;
483 }
484
485 static void ixgbe_set_vmolr(struct ixgbe_hw *hw, u32 vf, bool aupe)
486 {
487         u32 vmolr = IXGBE_READ_REG(hw, IXGBE_VMOLR(vf));
488         vmolr |= IXGBE_VMOLR_BAM;
489         if (aupe)
490                 vmolr |= IXGBE_VMOLR_AUPE;
491         else
492                 vmolr &= ~IXGBE_VMOLR_AUPE;
493         IXGBE_WRITE_REG(hw, IXGBE_VMOLR(vf), vmolr);
494 }
495
496 static void ixgbe_clear_vmvir(struct ixgbe_adapter *adapter, u32 vf)
497 {
498         struct ixgbe_hw *hw = &adapter->hw;
499
500         IXGBE_WRITE_REG(hw, IXGBE_VMVIR(vf), 0);
501 }
502 static inline void ixgbe_vf_reset_event(struct ixgbe_adapter *adapter, u32 vf)
503 {
504         struct ixgbe_hw *hw = &adapter->hw;
505         struct vf_data_storage *vfinfo = &adapter->vfinfo[vf];
506         u8 num_tcs = netdev_get_num_tc(adapter->netdev);
507
508         /* add PF assigned VLAN or VLAN 0 */
509         ixgbe_set_vf_vlan(adapter, true, vfinfo->pf_vlan, vf);
510
511         /* reset offloads to defaults */
512         ixgbe_set_vmolr(hw, vf, !vfinfo->pf_vlan);
513
514         /* set outgoing tags for VFs */
515         if (!vfinfo->pf_vlan && !vfinfo->pf_qos && !num_tcs) {
516                 ixgbe_clear_vmvir(adapter, vf);
517         } else {
518                 if (vfinfo->pf_qos || !num_tcs)
519                         ixgbe_set_vmvir(adapter, vfinfo->pf_vlan,
520                                         vfinfo->pf_qos, vf);
521                 else
522                         ixgbe_set_vmvir(adapter, vfinfo->pf_vlan,
523                                         adapter->default_up, vf);
524
525                 if (vfinfo->spoofchk_enabled)
526                         hw->mac.ops.set_vlan_anti_spoofing(hw, true, vf);
527         }
528
529         /* reset multicast table array for vf */
530         adapter->vfinfo[vf].num_vf_mc_hashes = 0;
531
532         /* Flush and reset the mta with the new values */
533         ixgbe_set_rx_mode(adapter->netdev);
534
535         ixgbe_del_mac_filter(adapter, adapter->vfinfo[vf].vf_mac_addresses, vf);
536
537         /* reset VF api back to unknown */
538         adapter->vfinfo[vf].vf_api = ixgbe_mbox_api_10;
539 }
540
541 static int ixgbe_set_vf_mac(struct ixgbe_adapter *adapter,
542                             int vf, unsigned char *mac_addr)
543 {
544         ixgbe_del_mac_filter(adapter, adapter->vfinfo[vf].vf_mac_addresses, vf);
545         memcpy(adapter->vfinfo[vf].vf_mac_addresses, mac_addr, ETH_ALEN);
546         ixgbe_add_mac_filter(adapter, adapter->vfinfo[vf].vf_mac_addresses, vf);
547
548         return 0;
549 }
550
551 static int ixgbe_set_vf_macvlan(struct ixgbe_adapter *adapter,
552                                 int vf, int index, unsigned char *mac_addr)
553 {
554         struct list_head *pos;
555         struct vf_macvlans *entry;
556
557         if (index <= 1) {
558                 list_for_each(pos, &adapter->vf_mvs.l) {
559                         entry = list_entry(pos, struct vf_macvlans, l);
560                         if (entry->vf == vf) {
561                                 entry->vf = -1;
562                                 entry->free = true;
563                                 entry->is_macvlan = false;
564                                 ixgbe_del_mac_filter(adapter,
565                                                      entry->vf_macvlan, vf);
566                         }
567                 }
568         }
569
570         /*
571          * If index was zero then we were asked to clear the uc list
572          * for the VF.  We're done.
573          */
574         if (!index)
575                 return 0;
576
577         entry = NULL;
578
579         list_for_each(pos, &adapter->vf_mvs.l) {
580                 entry = list_entry(pos, struct vf_macvlans, l);
581                 if (entry->free)
582                         break;
583         }
584
585         /*
586          * If we traversed the entire list and didn't find a free entry
587          * then we're out of space on the RAR table.  Also entry may
588          * be NULL because the original memory allocation for the list
589          * failed, which is not fatal but does mean we can't support
590          * VF requests for MACVLAN because we couldn't allocate
591          * memory for the list management required.
592          */
593         if (!entry || !entry->free)
594                 return -ENOSPC;
595
596         entry->free = false;
597         entry->is_macvlan = true;
598         entry->vf = vf;
599         memcpy(entry->vf_macvlan, mac_addr, ETH_ALEN);
600
601         ixgbe_add_mac_filter(adapter, mac_addr, vf);
602
603         return 0;
604 }
605
606 int ixgbe_vf_configuration(struct pci_dev *pdev, unsigned int event_mask)
607 {
608         struct ixgbe_adapter *adapter = pci_get_drvdata(pdev);
609         unsigned int vfn = (event_mask & 0x3f);
610
611         bool enable = ((event_mask & 0x10000000U) != 0);
612
613         if (enable)
614                 eth_zero_addr(adapter->vfinfo[vfn].vf_mac_addresses);
615
616         return 0;
617 }
618
619 static int ixgbe_vf_reset_msg(struct ixgbe_adapter *adapter, u32 vf)
620 {
621         struct ixgbe_ring_feature *vmdq = &adapter->ring_feature[RING_F_VMDQ];
622         struct ixgbe_hw *hw = &adapter->hw;
623         unsigned char *vf_mac = adapter->vfinfo[vf].vf_mac_addresses;
624         u32 reg, reg_offset, vf_shift;
625         u32 msgbuf[4] = {0, 0, 0, 0};
626         u8 *addr = (u8 *)(&msgbuf[1]);
627         u32 q_per_pool = __ALIGN_MASK(1, ~vmdq->mask);
628         int i;
629
630         e_info(probe, "VF Reset msg received from vf %d\n", vf);
631
632         /* reset the filters for the device */
633         ixgbe_vf_reset_event(adapter, vf);
634
635         /* set vf mac address */
636         if (!is_zero_ether_addr(vf_mac))
637                 ixgbe_set_vf_mac(adapter, vf, vf_mac);
638
639         vf_shift = vf % 32;
640         reg_offset = vf / 32;
641
642         /* enable transmit for vf */
643         reg = IXGBE_READ_REG(hw, IXGBE_VFTE(reg_offset));
644         reg |= 1 << vf_shift;
645         IXGBE_WRITE_REG(hw, IXGBE_VFTE(reg_offset), reg);
646
647         /* force drop enable for all VF Rx queues */
648         for (i = vf * q_per_pool; i < ((vf + 1) * q_per_pool); i++) {
649                 /* flush previous write */
650                 IXGBE_WRITE_FLUSH(hw);
651
652                 /* indicate to hardware that we want to set drop enable */
653                 reg = IXGBE_QDE_WRITE | IXGBE_QDE_ENABLE;
654                 reg |= i <<  IXGBE_QDE_IDX_SHIFT;
655                 IXGBE_WRITE_REG(hw, IXGBE_QDE, reg);
656         }
657
658         /* enable receive for vf */
659         reg = IXGBE_READ_REG(hw, IXGBE_VFRE(reg_offset));
660         reg |= 1 << vf_shift;
661         /*
662          * The 82599 cannot support a mix of jumbo and non-jumbo PF/VFs.
663          * For more info take a look at ixgbe_set_vf_lpe
664          */
665         if (adapter->hw.mac.type == ixgbe_mac_82599EB) {
666                 struct net_device *dev = adapter->netdev;
667                 int pf_max_frame = dev->mtu + ETH_HLEN;
668
669 #ifdef CONFIG_FCOE
670                 if (dev->features & NETIF_F_FCOE_MTU)
671                         pf_max_frame = max_t(int, pf_max_frame,
672                                              IXGBE_FCOE_JUMBO_FRAME_SIZE);
673
674 #endif /* CONFIG_FCOE */
675                 if (pf_max_frame > ETH_FRAME_LEN)
676                         reg &= ~(1 << vf_shift);
677         }
678         IXGBE_WRITE_REG(hw, IXGBE_VFRE(reg_offset), reg);
679
680         /* enable VF mailbox for further messages */
681         adapter->vfinfo[vf].clear_to_send = true;
682
683         /* Enable counting of spoofed packets in the SSVPC register */
684         reg = IXGBE_READ_REG(hw, IXGBE_VMECM(reg_offset));
685         reg |= (1 << vf_shift);
686         IXGBE_WRITE_REG(hw, IXGBE_VMECM(reg_offset), reg);
687
688         /*
689          * Reset the VFs TDWBAL and TDWBAH registers
690          * which are not cleared by an FLR
691          */
692         for (i = 0; i < q_per_pool; i++) {
693                 IXGBE_WRITE_REG(hw, IXGBE_PVFTDWBAHn(q_per_pool, vf, i), 0);
694                 IXGBE_WRITE_REG(hw, IXGBE_PVFTDWBALn(q_per_pool, vf, i), 0);
695         }
696
697         /* reply to reset with ack and vf mac address */
698         msgbuf[0] = IXGBE_VF_RESET;
699         if (!is_zero_ether_addr(vf_mac)) {
700                 msgbuf[0] |= IXGBE_VT_MSGTYPE_ACK;
701                 memcpy(addr, vf_mac, ETH_ALEN);
702         } else {
703                 msgbuf[0] |= IXGBE_VT_MSGTYPE_NACK;
704                 dev_warn(&adapter->pdev->dev,
705                          "VF %d has no MAC address assigned, you may have to assign one manually\n",
706                          vf);
707         }
708
709         /*
710          * Piggyback the multicast filter type so VF can compute the
711          * correct vectors
712          */
713         msgbuf[3] = hw->mac.mc_filter_type;
714         ixgbe_write_mbx(hw, msgbuf, IXGBE_VF_PERMADDR_MSG_LEN, vf);
715
716         return 0;
717 }
718
719 static int ixgbe_set_vf_mac_addr(struct ixgbe_adapter *adapter,
720                                  u32 *msgbuf, u32 vf)
721 {
722         u8 *new_mac = ((u8 *)(&msgbuf[1]));
723
724         if (!is_valid_ether_addr(new_mac)) {
725                 e_warn(drv, "VF %d attempted to set invalid mac\n", vf);
726                 return -1;
727         }
728
729         if (adapter->vfinfo[vf].pf_set_mac &&
730             !ether_addr_equal(adapter->vfinfo[vf].vf_mac_addresses, new_mac)) {
731                 e_warn(drv,
732                        "VF %d attempted to override administratively set MAC address\n"
733                        "Reload the VF driver to resume operations\n",
734                        vf);
735                 return -1;
736         }
737
738         return ixgbe_set_vf_mac(adapter, vf, new_mac) < 0;
739 }
740
741 static int ixgbe_find_vlvf_entry(struct ixgbe_hw *hw, u32 vlan)
742 {
743         u32 vlvf;
744         s32 regindex;
745
746         /* short cut the special case */
747         if (vlan == 0)
748                 return 0;
749
750         /* Search for the vlan id in the VLVF entries */
751         for (regindex = 1; regindex < IXGBE_VLVF_ENTRIES; regindex++) {
752                 vlvf = IXGBE_READ_REG(hw, IXGBE_VLVF(regindex));
753                 if ((vlvf & VLAN_VID_MASK) == vlan)
754                         break;
755         }
756
757         /* Return a negative value if not found */
758         if (regindex >= IXGBE_VLVF_ENTRIES)
759                 regindex = -1;
760
761         return regindex;
762 }
763
764 static int ixgbe_set_vf_vlan_msg(struct ixgbe_adapter *adapter,
765                                  u32 *msgbuf, u32 vf)
766 {
767         struct ixgbe_hw *hw = &adapter->hw;
768         int add = (msgbuf[0] & IXGBE_VT_MSGINFO_MASK) >> IXGBE_VT_MSGINFO_SHIFT;
769         int vid = (msgbuf[1] & IXGBE_VLVF_VLANID_MASK);
770         int err;
771         s32 reg_ndx;
772         u32 vlvf;
773         u32 bits;
774         u8 tcs = netdev_get_num_tc(adapter->netdev);
775
776         if (adapter->vfinfo[vf].pf_vlan || tcs) {
777                 e_warn(drv,
778                        "VF %d attempted to override administratively set VLAN configuration\n"
779                        "Reload the VF driver to resume operations\n",
780                        vf);
781                 return -1;
782         }
783
784         if (add)
785                 adapter->vfinfo[vf].vlan_count++;
786         else if (adapter->vfinfo[vf].vlan_count)
787                 adapter->vfinfo[vf].vlan_count--;
788
789         /* in case of promiscuous mode any VLAN filter set for a VF must
790          * also have the PF pool added to it.
791          */
792         if (add && adapter->netdev->flags & IFF_PROMISC)
793                 err = ixgbe_set_vf_vlan(adapter, add, vid, VMDQ_P(0));
794
795         err = ixgbe_set_vf_vlan(adapter, add, vid, vf);
796         if (!err && adapter->vfinfo[vf].spoofchk_enabled)
797                 hw->mac.ops.set_vlan_anti_spoofing(hw, true, vf);
798
799         /* Go through all the checks to see if the VLAN filter should
800          * be wiped completely.
801          */
802         if (!add && adapter->netdev->flags & IFF_PROMISC) {
803                 reg_ndx = ixgbe_find_vlvf_entry(hw, vid);
804                 if (reg_ndx < 0)
805                         return err;
806                 vlvf = IXGBE_READ_REG(hw, IXGBE_VLVF(reg_ndx));
807                 /* See if any other pools are set for this VLAN filter
808                  * entry other than the PF.
809                  */
810                 if (VMDQ_P(0) < 32) {
811                         bits = IXGBE_READ_REG(hw, IXGBE_VLVFB(reg_ndx * 2));
812                         bits &= ~(1 << VMDQ_P(0));
813                         bits |= IXGBE_READ_REG(hw,
814                                                IXGBE_VLVFB(reg_ndx * 2) + 1);
815                 } else {
816                         bits = IXGBE_READ_REG(hw,
817                                               IXGBE_VLVFB(reg_ndx * 2) + 1);
818                         bits &= ~(1 << (VMDQ_P(0) - 32));
819                         bits |= IXGBE_READ_REG(hw, IXGBE_VLVFB(reg_ndx * 2));
820                 }
821
822                 /* If the filter was removed then ensure PF pool bit
823                  * is cleared if the PF only added itself to the pool
824                  * because the PF is in promiscuous mode.
825                  */
826                 if ((vlvf & VLAN_VID_MASK) == vid &&
827                     !test_bit(vid, adapter->active_vlans) && !bits)
828                         ixgbe_set_vf_vlan(adapter, add, vid, VMDQ_P(0));
829         }
830
831         return err;
832 }
833
834 static int ixgbe_set_vf_macvlan_msg(struct ixgbe_adapter *adapter,
835                                     u32 *msgbuf, u32 vf)
836 {
837         u8 *new_mac = ((u8 *)(&msgbuf[1]));
838         int index = (msgbuf[0] & IXGBE_VT_MSGINFO_MASK) >>
839                     IXGBE_VT_MSGINFO_SHIFT;
840         int err;
841
842         if (adapter->vfinfo[vf].pf_set_mac && index > 0) {
843                 e_warn(drv,
844                        "VF %d requested MACVLAN filter but is administratively denied\n",
845                        vf);
846                 return -1;
847         }
848
849         /* An non-zero index indicates the VF is setting a filter */
850         if (index) {
851                 if (!is_valid_ether_addr(new_mac)) {
852                         e_warn(drv, "VF %d attempted to set invalid mac\n", vf);
853                         return -1;
854                 }
855
856                 /*
857                  * If the VF is allowed to set MAC filters then turn off
858                  * anti-spoofing to avoid false positives.
859                  */
860                 if (adapter->vfinfo[vf].spoofchk_enabled)
861                         ixgbe_ndo_set_vf_spoofchk(adapter->netdev, vf, false);
862         }
863
864         err = ixgbe_set_vf_macvlan(adapter, vf, index, new_mac);
865         if (err == -ENOSPC)
866                 e_warn(drv,
867                        "VF %d has requested a MACVLAN filter but there is no space for it\n",
868                        vf);
869
870         return err < 0;
871 }
872
873 static int ixgbe_negotiate_vf_api(struct ixgbe_adapter *adapter,
874                                   u32 *msgbuf, u32 vf)
875 {
876         int api = msgbuf[1];
877
878         switch (api) {
879         case ixgbe_mbox_api_10:
880         case ixgbe_mbox_api_11:
881                 adapter->vfinfo[vf].vf_api = api;
882                 return 0;
883         default:
884                 break;
885         }
886
887         e_info(drv, "VF %d requested invalid api version %u\n", vf, api);
888
889         return -1;
890 }
891
892 static int ixgbe_get_vf_queues(struct ixgbe_adapter *adapter,
893                                u32 *msgbuf, u32 vf)
894 {
895         struct net_device *dev = adapter->netdev;
896         struct ixgbe_ring_feature *vmdq = &adapter->ring_feature[RING_F_VMDQ];
897         unsigned int default_tc = 0;
898         u8 num_tcs = netdev_get_num_tc(dev);
899
900         /* verify the PF is supporting the correct APIs */
901         switch (adapter->vfinfo[vf].vf_api) {
902         case ixgbe_mbox_api_20:
903         case ixgbe_mbox_api_11:
904                 break;
905         default:
906                 return -1;
907         }
908
909         /* only allow 1 Tx queue for bandwidth limiting */
910         msgbuf[IXGBE_VF_TX_QUEUES] = __ALIGN_MASK(1, ~vmdq->mask);
911         msgbuf[IXGBE_VF_RX_QUEUES] = __ALIGN_MASK(1, ~vmdq->mask);
912
913         /* if TCs > 1 determine which TC belongs to default user priority */
914         if (num_tcs > 1)
915                 default_tc = netdev_get_prio_tc_map(dev, adapter->default_up);
916
917         /* notify VF of need for VLAN tag stripping, and correct queue */
918         if (num_tcs)
919                 msgbuf[IXGBE_VF_TRANS_VLAN] = num_tcs;
920         else if (adapter->vfinfo[vf].pf_vlan || adapter->vfinfo[vf].pf_qos)
921                 msgbuf[IXGBE_VF_TRANS_VLAN] = 1;
922         else
923                 msgbuf[IXGBE_VF_TRANS_VLAN] = 0;
924
925         /* notify VF of default queue */
926         msgbuf[IXGBE_VF_DEF_QUEUE] = default_tc;
927
928         return 0;
929 }
930
931 static int ixgbe_rcv_msg_from_vf(struct ixgbe_adapter *adapter, u32 vf)
932 {
933         u32 mbx_size = IXGBE_VFMAILBOX_SIZE;
934         u32 msgbuf[IXGBE_VFMAILBOX_SIZE];
935         struct ixgbe_hw *hw = &adapter->hw;
936         s32 retval;
937
938         retval = ixgbe_read_mbx(hw, msgbuf, mbx_size, vf);
939
940         if (retval) {
941                 pr_err("Error receiving message from VF\n");
942                 return retval;
943         }
944
945         /* this is a message we already processed, do nothing */
946         if (msgbuf[0] & (IXGBE_VT_MSGTYPE_ACK | IXGBE_VT_MSGTYPE_NACK))
947                 return 0;
948
949         /* flush the ack before we write any messages back */
950         IXGBE_WRITE_FLUSH(hw);
951
952         if (msgbuf[0] == IXGBE_VF_RESET)
953                 return ixgbe_vf_reset_msg(adapter, vf);
954
955         /*
956          * until the vf completes a virtual function reset it should not be
957          * allowed to start any configuration.
958          */
959         if (!adapter->vfinfo[vf].clear_to_send) {
960                 msgbuf[0] |= IXGBE_VT_MSGTYPE_NACK;
961                 ixgbe_write_mbx(hw, msgbuf, 1, vf);
962                 return 0;
963         }
964
965         switch ((msgbuf[0] & 0xFFFF)) {
966         case IXGBE_VF_SET_MAC_ADDR:
967                 retval = ixgbe_set_vf_mac_addr(adapter, msgbuf, vf);
968                 break;
969         case IXGBE_VF_SET_MULTICAST:
970                 retval = ixgbe_set_vf_multicasts(adapter, msgbuf, vf);
971                 break;
972         case IXGBE_VF_SET_VLAN:
973                 retval = ixgbe_set_vf_vlan_msg(adapter, msgbuf, vf);
974                 break;
975         case IXGBE_VF_SET_LPE:
976                 retval = ixgbe_set_vf_lpe(adapter, msgbuf, vf);
977                 break;
978         case IXGBE_VF_SET_MACVLAN:
979                 retval = ixgbe_set_vf_macvlan_msg(adapter, msgbuf, vf);
980                 break;
981         case IXGBE_VF_API_NEGOTIATE:
982                 retval = ixgbe_negotiate_vf_api(adapter, msgbuf, vf);
983                 break;
984         case IXGBE_VF_GET_QUEUES:
985                 retval = ixgbe_get_vf_queues(adapter, msgbuf, vf);
986                 break;
987         default:
988                 e_err(drv, "Unhandled Msg %8.8x\n", msgbuf[0]);
989                 retval = IXGBE_ERR_MBX;
990                 break;
991         }
992
993         /* notify the VF of the results of what it sent us */
994         if (retval)
995                 msgbuf[0] |= IXGBE_VT_MSGTYPE_NACK;
996         else
997                 msgbuf[0] |= IXGBE_VT_MSGTYPE_ACK;
998
999         msgbuf[0] |= IXGBE_VT_MSGTYPE_CTS;
1000
1001         ixgbe_write_mbx(hw, msgbuf, mbx_size, vf);
1002
1003         return retval;
1004 }
1005
1006 static void ixgbe_rcv_ack_from_vf(struct ixgbe_adapter *adapter, u32 vf)
1007 {
1008         struct ixgbe_hw *hw = &adapter->hw;
1009         u32 msg = IXGBE_VT_MSGTYPE_NACK;
1010
1011         /* if device isn't clear to send it shouldn't be reading either */
1012         if (!adapter->vfinfo[vf].clear_to_send)
1013                 ixgbe_write_mbx(hw, &msg, 1, vf);
1014 }
1015
1016 void ixgbe_msg_task(struct ixgbe_adapter *adapter)
1017 {
1018         struct ixgbe_hw *hw = &adapter->hw;
1019         u32 vf;
1020
1021         for (vf = 0; vf < adapter->num_vfs; vf++) {
1022                 /* process any reset requests */
1023                 if (!ixgbe_check_for_rst(hw, vf))
1024                         ixgbe_vf_reset_event(adapter, vf);
1025
1026                 /* process any messages pending */
1027                 if (!ixgbe_check_for_msg(hw, vf))
1028                         ixgbe_rcv_msg_from_vf(adapter, vf);
1029
1030                 /* process any acks */
1031                 if (!ixgbe_check_for_ack(hw, vf))
1032                         ixgbe_rcv_ack_from_vf(adapter, vf);
1033         }
1034 }
1035
1036 void ixgbe_disable_tx_rx(struct ixgbe_adapter *adapter)
1037 {
1038         struct ixgbe_hw *hw = &adapter->hw;
1039
1040         /* disable transmit and receive for all vfs */
1041         IXGBE_WRITE_REG(hw, IXGBE_VFTE(0), 0);
1042         IXGBE_WRITE_REG(hw, IXGBE_VFTE(1), 0);
1043
1044         IXGBE_WRITE_REG(hw, IXGBE_VFRE(0), 0);
1045         IXGBE_WRITE_REG(hw, IXGBE_VFRE(1), 0);
1046 }
1047
1048 void ixgbe_ping_all_vfs(struct ixgbe_adapter *adapter)
1049 {
1050         struct ixgbe_hw *hw = &adapter->hw;
1051         u32 ping;
1052         int i;
1053
1054         for (i = 0 ; i < adapter->num_vfs; i++) {
1055                 ping = IXGBE_PF_CONTROL_MSG;
1056                 if (adapter->vfinfo[i].clear_to_send)
1057                         ping |= IXGBE_VT_MSGTYPE_CTS;
1058                 ixgbe_write_mbx(hw, &ping, 1, i);
1059         }
1060 }
1061
1062 int ixgbe_ndo_set_vf_mac(struct net_device *netdev, int vf, u8 *mac)
1063 {
1064         struct ixgbe_adapter *adapter = netdev_priv(netdev);
1065         if (!is_valid_ether_addr(mac) || (vf >= adapter->num_vfs))
1066                 return -EINVAL;
1067         adapter->vfinfo[vf].pf_set_mac = true;
1068         dev_info(&adapter->pdev->dev, "setting MAC %pM on VF %d\n", mac, vf);
1069         dev_info(&adapter->pdev->dev, "Reload the VF driver to make this"
1070                                       " change effective.");
1071         if (test_bit(__IXGBE_DOWN, &adapter->state)) {
1072                 dev_warn(&adapter->pdev->dev, "The VF MAC address has been set,"
1073                          " but the PF device is not up.\n");
1074                 dev_warn(&adapter->pdev->dev, "Bring the PF device up before"
1075                          " attempting to use the VF device.\n");
1076         }
1077         return ixgbe_set_vf_mac(adapter, vf, mac);
1078 }
1079
1080 int ixgbe_ndo_set_vf_vlan(struct net_device *netdev, int vf, u16 vlan, u8 qos)
1081 {
1082         int err = 0;
1083         struct ixgbe_adapter *adapter = netdev_priv(netdev);
1084         struct ixgbe_hw *hw = &adapter->hw;
1085
1086         if ((vf >= adapter->num_vfs) || (vlan > 4095) || (qos > 7))
1087                 return -EINVAL;
1088         if (vlan || qos) {
1089                 if (adapter->vfinfo[vf].pf_vlan)
1090                         err = ixgbe_set_vf_vlan(adapter, false,
1091                                                 adapter->vfinfo[vf].pf_vlan,
1092                                                 vf);
1093                 if (err)
1094                         goto out;
1095                 err = ixgbe_set_vf_vlan(adapter, true, vlan, vf);
1096                 if (err)
1097                         goto out;
1098                 ixgbe_set_vmvir(adapter, vlan, qos, vf);
1099                 ixgbe_set_vmolr(hw, vf, false);
1100                 if (adapter->vfinfo[vf].spoofchk_enabled)
1101                         hw->mac.ops.set_vlan_anti_spoofing(hw, true, vf);
1102                 adapter->vfinfo[vf].vlan_count++;
1103                 adapter->vfinfo[vf].pf_vlan = vlan;
1104                 adapter->vfinfo[vf].pf_qos = qos;
1105                 dev_info(&adapter->pdev->dev,
1106                          "Setting VLAN %d, QOS 0x%x on VF %d\n", vlan, qos, vf);
1107                 if (test_bit(__IXGBE_DOWN, &adapter->state)) {
1108                         dev_warn(&adapter->pdev->dev,
1109                                  "The VF VLAN has been set,"
1110                                  " but the PF device is not up.\n");
1111                         dev_warn(&adapter->pdev->dev,
1112                                  "Bring the PF device up before"
1113                                  " attempting to use the VF device.\n");
1114                 }
1115         } else {
1116                 err = ixgbe_set_vf_vlan(adapter, false,
1117                                         adapter->vfinfo[vf].pf_vlan, vf);
1118                 ixgbe_clear_vmvir(adapter, vf);
1119                 ixgbe_set_vmolr(hw, vf, true);
1120                 hw->mac.ops.set_vlan_anti_spoofing(hw, false, vf);
1121                 if (adapter->vfinfo[vf].vlan_count)
1122                         adapter->vfinfo[vf].vlan_count--;
1123                 adapter->vfinfo[vf].pf_vlan = 0;
1124                 adapter->vfinfo[vf].pf_qos = 0;
1125         }
1126 out:
1127         return err;
1128 }
1129
1130 static int ixgbe_link_mbps(struct ixgbe_adapter *adapter)
1131 {
1132         switch (adapter->link_speed) {
1133         case IXGBE_LINK_SPEED_100_FULL:
1134                 return 100;
1135         case IXGBE_LINK_SPEED_1GB_FULL:
1136                 return 1000;
1137         case IXGBE_LINK_SPEED_10GB_FULL:
1138                 return 10000;
1139         default:
1140                 return 0;
1141         }
1142 }
1143
1144 static void ixgbe_set_vf_rate_limit(struct ixgbe_adapter *adapter, int vf)
1145 {
1146         struct ixgbe_ring_feature *vmdq = &adapter->ring_feature[RING_F_VMDQ];
1147         struct ixgbe_hw *hw = &adapter->hw;
1148         u32 bcnrc_val = 0;
1149         u16 queue, queues_per_pool;
1150         u16 tx_rate = adapter->vfinfo[vf].tx_rate;
1151
1152         if (tx_rate) {
1153                 /* start with base link speed value */
1154                 bcnrc_val = adapter->vf_rate_link_speed;
1155
1156                 /* Calculate the rate factor values to set */
1157                 bcnrc_val <<= IXGBE_RTTBCNRC_RF_INT_SHIFT;
1158                 bcnrc_val /= tx_rate;
1159
1160                 /* clear everything but the rate factor */
1161                 bcnrc_val &= IXGBE_RTTBCNRC_RF_INT_MASK |
1162                              IXGBE_RTTBCNRC_RF_DEC_MASK;
1163
1164                 /* enable the rate scheduler */
1165                 bcnrc_val |= IXGBE_RTTBCNRC_RS_ENA;
1166         }
1167
1168         /*
1169          * Set global transmit compensation time to the MMW_SIZE in RTTBCNRM
1170          * register. Typically MMW_SIZE=0x014 if 9728-byte jumbo is supported
1171          * and 0x004 otherwise.
1172          */
1173         switch (hw->mac.type) {
1174         case ixgbe_mac_82599EB:
1175                 IXGBE_WRITE_REG(hw, IXGBE_RTTBCNRM, 0x4);
1176                 break;
1177         case ixgbe_mac_X540:
1178                 IXGBE_WRITE_REG(hw, IXGBE_RTTBCNRM, 0x14);
1179                 break;
1180         default:
1181                 break;
1182         }
1183
1184         /* determine how many queues per pool based on VMDq mask */
1185         queues_per_pool = __ALIGN_MASK(1, ~vmdq->mask);
1186
1187         /* write value for all Tx queues belonging to VF */
1188         for (queue = 0; queue < queues_per_pool; queue++) {
1189                 unsigned int reg_idx = (vf * queues_per_pool) + queue;
1190
1191                 IXGBE_WRITE_REG(hw, IXGBE_RTTDQSEL, reg_idx);
1192                 IXGBE_WRITE_REG(hw, IXGBE_RTTBCNRC, bcnrc_val);
1193         }
1194 }
1195
1196 void ixgbe_check_vf_rate_limit(struct ixgbe_adapter *adapter)
1197 {
1198         int i;
1199
1200         /* VF Tx rate limit was not set */
1201         if (!adapter->vf_rate_link_speed)
1202                 return;
1203
1204         if (ixgbe_link_mbps(adapter) != adapter->vf_rate_link_speed) {
1205                 adapter->vf_rate_link_speed = 0;
1206                 dev_info(&adapter->pdev->dev,
1207                          "Link speed has been changed. VF Transmit rate is disabled\n");
1208         }
1209
1210         for (i = 0; i < adapter->num_vfs; i++) {
1211                 if (!adapter->vf_rate_link_speed)
1212                         adapter->vfinfo[i].tx_rate = 0;
1213
1214                 ixgbe_set_vf_rate_limit(adapter, i);
1215         }
1216 }
1217
1218 int ixgbe_ndo_set_vf_bw(struct net_device *netdev, int vf, int min_tx_rate,
1219                         int max_tx_rate)
1220 {
1221         struct ixgbe_adapter *adapter = netdev_priv(netdev);
1222         int link_speed;
1223
1224         /* verify VF is active */
1225         if (vf >= adapter->num_vfs)
1226                 return -EINVAL;
1227
1228         /* verify link is up */
1229         if (!adapter->link_up)
1230                 return -EINVAL;
1231
1232         /* verify we are linked at 10Gbps */
1233         link_speed = ixgbe_link_mbps(adapter);
1234         if (link_speed != 10000)
1235                 return -EINVAL;
1236
1237         if (min_tx_rate)
1238                 return -EINVAL;
1239
1240         /* rate limit cannot be less than 10Mbs or greater than link speed */
1241         if (max_tx_rate && ((max_tx_rate <= 10) || (max_tx_rate > link_speed)))
1242                 return -EINVAL;
1243
1244         /* store values */
1245         adapter->vf_rate_link_speed = link_speed;
1246         adapter->vfinfo[vf].tx_rate = max_tx_rate;
1247
1248         /* update hardware configuration */
1249         ixgbe_set_vf_rate_limit(adapter, vf);
1250
1251         return 0;
1252 }
1253
1254 int ixgbe_ndo_set_vf_spoofchk(struct net_device *netdev, int vf, bool setting)
1255 {
1256         struct ixgbe_adapter *adapter = netdev_priv(netdev);
1257         int vf_target_reg = vf >> 3;
1258         int vf_target_shift = vf % 8;
1259         struct ixgbe_hw *hw = &adapter->hw;
1260         u32 regval;
1261
1262         adapter->vfinfo[vf].spoofchk_enabled = setting;
1263
1264         regval = IXGBE_READ_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg));
1265         regval &= ~(1 << vf_target_shift);
1266         regval |= (setting << vf_target_shift);
1267         IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg), regval);
1268
1269         if (adapter->vfinfo[vf].vlan_count) {
1270                 vf_target_shift += IXGBE_SPOOF_VLANAS_SHIFT;
1271                 regval = IXGBE_READ_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg));
1272                 regval &= ~(1 << vf_target_shift);
1273                 regval |= (setting << vf_target_shift);
1274                 IXGBE_WRITE_REG(hw, IXGBE_PFVFSPOOF(vf_target_reg), regval);
1275         }
1276
1277         return 0;
1278 }
1279
1280 int ixgbe_ndo_get_vf_config(struct net_device *netdev,
1281                             int vf, struct ifla_vf_info *ivi)
1282 {
1283         struct ixgbe_adapter *adapter = netdev_priv(netdev);
1284         if (vf >= adapter->num_vfs)
1285                 return -EINVAL;
1286         ivi->vf = vf;
1287         memcpy(&ivi->mac, adapter->vfinfo[vf].vf_mac_addresses, ETH_ALEN);
1288         ivi->max_tx_rate = adapter->vfinfo[vf].tx_rate;
1289         ivi->min_tx_rate = 0;
1290         ivi->vlan = adapter->vfinfo[vf].pf_vlan;
1291         ivi->qos = adapter->vfinfo[vf].pf_qos;
1292         ivi->spoofchk = adapter->vfinfo[vf].spoofchk_enabled;
1293         return 0;
1294 }