linux/drivers/net/ethernet/intel/ixgbe/ixgbe_sriov.c
<<
>>
Prefs
   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
  48static 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 */
 123void 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 */
 172int 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
 237static 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
 284static 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
 303int 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
 311static 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
 357void 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
 390static 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
 400static 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
 485static 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
 496static 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}
 502static 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
 541static 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
 551static 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
 606int 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
 619static 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
 719static 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
 741static 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
 764static 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
 834static 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
 873static 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
 892static 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
 931static 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
1006static 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
1016void 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
1036void 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
1048void 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
1062int 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
1080int 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        }
1126out:
1127        return err;
1128}
1129
1130static 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
1144static 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
1196void 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
1218int 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
1254int 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
1280int 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}
1295