]> Pileus Git - ~andy/linux/blobdiff - drivers/net/ethernet/emulex/benet/be_main.c
Merge tag 'sound-3.14-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai...
[~andy/linux] / drivers / net / ethernet / emulex / benet / be_main.c
index a37039d353c57e999a9235a0af2ca3d48f3c3b14..36c80612e21a3ebe6ee52447e9075dc4022f005e 100644 (file)
@@ -121,12 +121,6 @@ static const char * const ue_status_hi_desc[] = {
        "Unknown"
 };
 
-/* Is BE in a multi-channel mode */
-static inline bool be_is_mc(struct be_adapter *adapter) {
-       return (adapter->function_mode & FLEX10_MODE ||
-               adapter->function_mode & VNIC_MODE ||
-               adapter->function_mode & UMC_ENABLED);
-}
 
 static void be_queue_free(struct be_adapter *adapter, struct be_queue_info *q)
 {
@@ -258,6 +252,12 @@ static int be_mac_addr_set(struct net_device *netdev, void *p)
        if (!is_valid_ether_addr(addr->sa_data))
                return -EADDRNOTAVAIL;
 
+       /* Proceed further only if, User provided MAC is different
+        * from active MAC
+        */
+       if (ether_addr_equal(addr->sa_data, netdev->dev_addr))
+               return 0;
+
        /* The PMAC_ADD cmd may fail if the VF doesn't have FILTMGMT
         * privilege or if PF did not provision the new MAC address.
         * On BE3, this cmd will always fail if the VF doesn't have the
@@ -280,14 +280,15 @@ static int be_mac_addr_set(struct net_device *netdev, void *p)
        /* Decide if the new MAC is successfully activated only after
         * querying the FW
         */
-       status = be_cmd_get_active_mac(adapter, curr_pmac_id, mac);
+       status = be_cmd_get_active_mac(adapter, curr_pmac_id, mac,
+                                      adapter->if_handle, true, 0);
        if (status)
                goto err;
 
        /* The MAC change did not happen, either due to lack of privilege
         * or PF didn't pre-provision.
         */
-       if (memcmp(addr->sa_data, mac, ETH_ALEN)) {
+       if (!ether_addr_equal(addr->sa_data, mac)) {
                status = -EPERM;
                goto err;
        }
@@ -912,24 +913,14 @@ static int be_ipv6_tx_stall_chk(struct be_adapter *adapter,
        return BE3_chip(adapter) && be_ipv6_exthdr_check(skb);
 }
 
-static struct sk_buff *be_xmit_workarounds(struct be_adapter *adapter,
-                                          struct sk_buff *skb,
-                                          bool *skip_hw_vlan)
+static struct sk_buff *be_lancer_xmit_workarounds(struct be_adapter *adapter,
+                                                 struct sk_buff *skb,
+                                                 bool *skip_hw_vlan)
 {
        struct vlan_ethhdr *veh = (struct vlan_ethhdr *)skb->data;
        unsigned int eth_hdr_len;
        struct iphdr *ip;
 
-       /* Lancer, SH-R ASICs have a bug wherein Packets that are 32 bytes or less
-        * may cause a transmit stall on that port. So the work-around is to
-        * pad short packets (<= 32 bytes) to a 36-byte length.
-        */
-       if (unlikely(!BEx_chip(adapter) && skb->len <= 32)) {
-               if (skb_padto(skb, 36))
-                       goto tx_drop;
-               skb->len = 36;
-       }
-
        /* For padded packets, BE HW modifies tot_len field in IP header
         * incorrecly when VLAN tag is inserted by HW.
         * For padded packets, Lancer computes incorrect checksum.
@@ -958,7 +949,7 @@ static struct sk_buff *be_xmit_workarounds(struct be_adapter *adapter,
            vlan_tx_tag_present(skb)) {
                skb = be_insert_vlan_in_pkt(adapter, skb, skip_hw_vlan);
                if (unlikely(!skb))
-                       goto tx_drop;
+                       goto err;
        }
 
        /* HW may lockup when VLAN HW tagging is requested on
@@ -980,15 +971,39 @@ static struct sk_buff *be_xmit_workarounds(struct be_adapter *adapter,
            be_vlan_tag_tx_chk(adapter, skb)) {
                skb = be_insert_vlan_in_pkt(adapter, skb, skip_hw_vlan);
                if (unlikely(!skb))
-                       goto tx_drop;
+                       goto err;
        }
 
        return skb;
 tx_drop:
        dev_kfree_skb_any(skb);
+err:
        return NULL;
 }
 
+static struct sk_buff *be_xmit_workarounds(struct be_adapter *adapter,
+                                          struct sk_buff *skb,
+                                          bool *skip_hw_vlan)
+{
+       /* Lancer, SH-R ASICs have a bug wherein Packets that are 32 bytes or
+        * less may cause a transmit stall on that port. So the work-around is
+        * to pad short packets (<= 32 bytes) to a 36-byte length.
+        */
+       if (unlikely(!BEx_chip(adapter) && skb->len <= 32)) {
+               if (skb_padto(skb, 36))
+                       return NULL;
+               skb->len = 36;
+       }
+
+       if (BEx_chip(adapter) || lancer_chip(adapter)) {
+               skb = be_lancer_xmit_workarounds(adapter, skb, skip_hw_vlan);
+               if (!skb)
+                       return NULL;
+       }
+
+       return skb;
+}
+
 static netdev_tx_t be_xmit(struct sk_buff *skb, struct net_device *netdev)
 {
        struct be_adapter *adapter = netdev_priv(netdev);
@@ -1096,8 +1111,6 @@ static int be_vid_config(struct be_adapter *adapter)
                                dev_info(&adapter->pdev->dev,
                                         "Disabling VLAN Promiscuous mode.\n");
                                adapter->flags &= ~BE_FLAGS_VLAN_PROMISC;
-                               dev_info(&adapter->pdev->dev,
-                                        "Re-Enabling HW VLAN filtering\n");
                        }
                }
        }
@@ -1105,12 +1118,12 @@ static int be_vid_config(struct be_adapter *adapter)
        return status;
 
 set_vlan_promisc:
-       dev_warn(&adapter->pdev->dev, "Exhausted VLAN HW filters.\n");
+       if (adapter->flags & BE_FLAGS_VLAN_PROMISC)
+               return 0;
 
        status = be_cmd_rx_filter(adapter, BE_FLAGS_VLAN_PROMISC, ON);
        if (!status) {
                dev_info(&adapter->pdev->dev, "Enable VLAN Promiscuous mode\n");
-               dev_info(&adapter->pdev->dev, "Disabling HW VLAN filtering\n");
                adapter->flags |= BE_FLAGS_VLAN_PROMISC;
        } else
                dev_err(&adapter->pdev->dev,
@@ -1123,19 +1136,18 @@ static int be_vlan_add_vid(struct net_device *netdev, __be16 proto, u16 vid)
        struct be_adapter *adapter = netdev_priv(netdev);
        int status = 0;
 
-
        /* Packets with VID 0 are always received by Lancer by default */
        if (lancer_chip(adapter) && vid == 0)
                goto ret;
 
        adapter->vlan_tag[vid] = 1;
-       if (adapter->vlans_added <= (be_max_vlans(adapter) + 1))
-               status = be_vid_config(adapter);
+       adapter->vlans_added++;
 
-       if (!status)
-               adapter->vlans_added++;
-       else
+       status = be_vid_config(adapter);
+       if (status) {
+               adapter->vlans_added--;
                adapter->vlan_tag[vid] = 0;
+       }
 ret:
        return status;
 }
@@ -1150,9 +1162,7 @@ static int be_vlan_rem_vid(struct net_device *netdev, __be16 proto, u16 vid)
                goto ret;
 
        adapter->vlan_tag[vid] = 0;
-       if (adapter->vlans_added <= be_max_vlans(adapter))
-               status = be_vid_config(adapter);
-
+       status = be_vid_config(adapter);
        if (!status)
                adapter->vlans_added--;
        else
@@ -1161,6 +1171,14 @@ ret:
        return status;
 }
 
+static void be_clear_promisc(struct be_adapter *adapter)
+{
+       adapter->promiscuous = false;
+       adapter->flags &= ~BE_FLAGS_VLAN_PROMISC;
+
+       be_cmd_rx_filter(adapter, IFF_PROMISC, OFF);
+}
+
 static void be_set_rx_mode(struct net_device *netdev)
 {
        struct be_adapter *adapter = netdev_priv(netdev);
@@ -1174,9 +1192,7 @@ static void be_set_rx_mode(struct net_device *netdev)
 
        /* BE was previously in promiscuous mode; disable it */
        if (adapter->promiscuous) {
-               adapter->promiscuous = false;
-               be_cmd_rx_filter(adapter, IFF_PROMISC, OFF);
-
+               be_clear_promisc(adapter);
                if (adapter->vlans_added)
                        be_vid_config(adapter);
        }
@@ -1291,24 +1307,20 @@ static int be_set_vf_vlan(struct net_device *netdev,
 
        if (vlan || qos) {
                vlan |= qos << VLAN_PRIO_SHIFT;
-               if (vf_cfg->vlan_tag != vlan) {
-                       /* If this is new value, program it. Else skip. */
-                       vf_cfg->vlan_tag = vlan;
+               if (vf_cfg->vlan_tag != vlan)
                        status = be_cmd_set_hsw_config(adapter, vlan, vf + 1,
                                                       vf_cfg->if_handle, 0);
-               }
        } else {
                /* Reset Transparent Vlan Tagging. */
-               vf_cfg->vlan_tag = 0;
-               vlan = vf_cfg->def_vid;
-               status = be_cmd_set_hsw_config(adapter, vlan, vf + 1,
-                                              vf_cfg->if_handle, 0);
+               status = be_cmd_set_hsw_config(adapter, BE_RESET_VLAN_TAG_ID,
+                                              vf + 1, vf_cfg->if_handle, 0);
        }
 
-
-       if (status)
+       if (!status)
+               vf_cfg->vlan_tag = vlan;
+       else
                dev_info(&adapter->pdev->dev,
-                               "VLAN %d config on VF %d failed\n", vlan, vf);
+                        "VLAN %d config on VF %d failed\n", vlan, vf);
        return status;
 }
 
@@ -1442,12 +1454,12 @@ static inline bool csum_passed(struct be_rx_compl_info *rxcp)
                                (rxcp->ip_csum || rxcp->ipv6);
 }
 
-static struct be_rx_page_info *get_rx_page_info(struct be_rx_obj *rxo,
-                                               u16 frag_idx)
+static struct be_rx_page_info *get_rx_page_info(struct be_rx_obj *rxo)
 {
        struct be_adapter *adapter = rxo->adapter;
        struct be_rx_page_info *rx_page_info;
        struct be_queue_info *rxq = &rxo->q;
+       u16 frag_idx = rxq->tail;
 
        rx_page_info = &rxo->page_info_tbl[frag_idx];
        BUG_ON(!rx_page_info->page);
@@ -1459,6 +1471,7 @@ static struct be_rx_page_info *get_rx_page_info(struct be_rx_obj *rxo,
                rx_page_info->last_page_user = false;
        }
 
+       queue_tail_inc(rxq);
        atomic_dec(&rxq->used);
        return rx_page_info;
 }
@@ -1467,15 +1480,13 @@ static struct be_rx_page_info *get_rx_page_info(struct be_rx_obj *rxo,
 static void be_rx_compl_discard(struct be_rx_obj *rxo,
                                struct be_rx_compl_info *rxcp)
 {
-       struct be_queue_info *rxq = &rxo->q;
        struct be_rx_page_info *page_info;
        u16 i, num_rcvd = rxcp->num_rcvd;
 
        for (i = 0; i < num_rcvd; i++) {
-               page_info = get_rx_page_info(rxo, rxcp->rxq_idx);
+               page_info = get_rx_page_info(rxo);
                put_page(page_info->page);
                memset(page_info, 0, sizeof(*page_info));
-               index_inc(&rxcp->rxq_idx, rxq->len);
        }
 }
 
@@ -1486,13 +1497,12 @@ static void be_rx_compl_discard(struct be_rx_obj *rxo,
 static void skb_fill_rx_data(struct be_rx_obj *rxo, struct sk_buff *skb,
                             struct be_rx_compl_info *rxcp)
 {
-       struct be_queue_info *rxq = &rxo->q;
        struct be_rx_page_info *page_info;
        u16 i, j;
        u16 hdr_len, curr_frag_len, remaining;
        u8 *start;
 
-       page_info = get_rx_page_info(rxo, rxcp->rxq_idx);
+       page_info = get_rx_page_info(rxo);
        start = page_address(page_info->page) + page_info->page_offset;
        prefetch(start);
 
@@ -1526,10 +1536,9 @@ static void skb_fill_rx_data(struct be_rx_obj *rxo, struct sk_buff *skb,
        }
 
        /* More frags present for this completion */
-       index_inc(&rxcp->rxq_idx, rxq->len);
        remaining = rxcp->pkt_size - curr_frag_len;
        for (i = 1, j = 0; i < rxcp->num_rcvd; i++) {
-               page_info = get_rx_page_info(rxo, rxcp->rxq_idx);
+               page_info = get_rx_page_info(rxo);
                curr_frag_len = min(remaining, rx_frag_size);
 
                /* Coalesce all frags from the same physical page in one slot */
@@ -1550,7 +1559,6 @@ static void skb_fill_rx_data(struct be_rx_obj *rxo, struct sk_buff *skb,
                skb->data_len += curr_frag_len;
                skb->truesize += rx_frag_size;
                remaining -= curr_frag_len;
-               index_inc(&rxcp->rxq_idx, rxq->len);
                page_info->page = NULL;
        }
        BUG_ON(j > MAX_SKB_FRAGS);
@@ -1581,7 +1589,7 @@ static void be_rx_compl_process(struct be_rx_obj *rxo, struct napi_struct *napi,
        skb->protocol = eth_type_trans(skb, netdev);
        skb_record_rx_queue(skb, rxo - &adapter->rx_obj[0]);
        if (netdev->features & NETIF_F_RXHASH)
-               skb->rxhash = rxcp->rss_hash;
+               skb_set_hash(skb, rxcp->rss_hash, PKT_HASH_TYPE_L3);
        skb_mark_napi_id(skb, napi);
 
        if (rxcp->vlanf)
@@ -1598,7 +1606,6 @@ static void be_rx_compl_process_gro(struct be_rx_obj *rxo,
        struct be_adapter *adapter = rxo->adapter;
        struct be_rx_page_info *page_info;
        struct sk_buff *skb = NULL;
-       struct be_queue_info *rxq = &rxo->q;
        u16 remaining, curr_frag_len;
        u16 i, j;
 
@@ -1610,7 +1617,7 @@ static void be_rx_compl_process_gro(struct be_rx_obj *rxo,
 
        remaining = rxcp->pkt_size;
        for (i = 0, j = -1; i < rxcp->num_rcvd; i++) {
-               page_info = get_rx_page_info(rxo, rxcp->rxq_idx);
+               page_info = get_rx_page_info(rxo);
 
                curr_frag_len = min(remaining, rx_frag_size);
 
@@ -1628,7 +1635,6 @@ static void be_rx_compl_process_gro(struct be_rx_obj *rxo,
                skb_frag_size_add(&skb_shinfo(skb)->frags[j], curr_frag_len);
                skb->truesize += rx_frag_size;
                remaining -= curr_frag_len;
-               index_inc(&rxcp->rxq_idx, rxq->len);
                memset(page_info, 0, sizeof(*page_info));
        }
        BUG_ON(j > MAX_SKB_FRAGS);
@@ -1639,7 +1645,7 @@ static void be_rx_compl_process_gro(struct be_rx_obj *rxo,
        skb->ip_summed = CHECKSUM_UNNECESSARY;
        skb_record_rx_queue(skb, rxo - &adapter->rx_obj[0]);
        if (adapter->netdev->features & NETIF_F_RXHASH)
-               skb->rxhash = rxcp->rss_hash;
+               skb_set_hash(skb, rxcp->rss_hash, PKT_HASH_TYPE_L3);
        skb_mark_napi_id(skb, napi);
 
        if (rxcp->vlanf)
@@ -1663,8 +1669,6 @@ static void be_parse_rx_compl_v1(struct be_eth_rx_compl *compl,
                AMAP_GET_BITS(struct amap_eth_rx_compl_v1, l4_cksm, compl);
        rxcp->ipv6 =
                AMAP_GET_BITS(struct amap_eth_rx_compl_v1, ip_version, compl);
-       rxcp->rxq_idx =
-               AMAP_GET_BITS(struct amap_eth_rx_compl_v1, fragndx, compl);
        rxcp->num_rcvd =
                AMAP_GET_BITS(struct amap_eth_rx_compl_v1, numfrags, compl);
        rxcp->pkt_type =
@@ -1695,8 +1699,6 @@ static void be_parse_rx_compl_v0(struct be_eth_rx_compl *compl,
                AMAP_GET_BITS(struct amap_eth_rx_compl_v0, l4_cksm, compl);
        rxcp->ipv6 =
                AMAP_GET_BITS(struct amap_eth_rx_compl_v0, ip_version, compl);
-       rxcp->rxq_idx =
-               AMAP_GET_BITS(struct amap_eth_rx_compl_v0, fragndx, compl);
        rxcp->num_rcvd =
                AMAP_GET_BITS(struct amap_eth_rx_compl_v0, numfrags, compl);
        rxcp->pkt_type =
@@ -1921,7 +1923,6 @@ static void be_rx_cq_clean(struct be_rx_obj *rxo)
        struct be_rx_compl_info *rxcp;
        struct be_adapter *adapter = rxo->adapter;
        int flush_wait = 0;
-       u16 tail;
 
        /* Consume pending rx completions.
         * Wait for the flush completion (identified by zero num_rcvd)
@@ -1954,9 +1955,8 @@ static void be_rx_cq_clean(struct be_rx_obj *rxo)
        be_cq_notify(adapter, rx_cq->id, false, 0);
 
        /* Then free posted rx buffers that were not used */
-       tail = (rxq->head + rxq->len - atomic_read(&rxq->used)) % rxq->len;
-       for (; atomic_read(&rxq->used) > 0; index_inc(&tail, rxq->len)) {
-               page_info = get_rx_page_info(rxo, tail);
+       while (atomic_read(&rxq->used) > 0) {
+               page_info = get_rx_page_info(rxo);
                put_page(page_info->page);
                memset(page_info, 0, sizeof(*page_info));
        }
@@ -2891,14 +2891,11 @@ static int be_vfs_mac_query(struct be_adapter *adapter)
        int status, vf;
        u8 mac[ETH_ALEN];
        struct be_vf_cfg *vf_cfg;
-       bool active = false;
 
        for_all_vfs(adapter, vf_cfg, vf) {
-               be_cmd_get_mac_from_list(adapter, mac, &active,
-                                        &vf_cfg->pmac_id, 0);
-
-               status = be_cmd_mac_addr_query(adapter, mac, false,
-                                              vf_cfg->if_handle, 0);
+               status = be_cmd_get_active_mac(adapter, vf_cfg->pmac_id,
+                                              mac, vf_cfg->if_handle,
+                                              false, vf+1);
                if (status)
                        return status;
                memcpy(vf_cfg->mac_addr, mac, ETH_ALEN);
@@ -3032,11 +3029,11 @@ static int be_vf_setup_init(struct be_adapter *adapter)
 
 static int be_vf_setup(struct be_adapter *adapter)
 {
+       struct device *dev = &adapter->pdev->dev;
        struct be_vf_cfg *vf_cfg;
-       u16 def_vlan, lnk_speed;
        int status, old_vfs, vf;
-       struct device *dev = &adapter->pdev->dev;
        u32 privileges;
+       u16 lnk_speed;
 
        old_vfs = pci_num_vf(adapter->pdev);
        if (old_vfs) {
@@ -3103,12 +3100,6 @@ static int be_vf_setup(struct be_adapter *adapter)
                if (!status)
                        vf_cfg->tx_rate = lnk_speed;
 
-               status = be_cmd_get_hsw_config(adapter, &def_vlan,
-                                              vf + 1, vf_cfg->if_handle, NULL);
-               if (status)
-                       goto err;
-               vf_cfg->def_vid = def_vlan;
-
                if (!old_vfs)
                        be_cmd_enable_vf(adapter, vf + 1);
        }
@@ -3240,6 +3231,7 @@ static int be_get_resources(struct be_adapter *adapter)
 /* Routine to query per function resource limits */
 static int be_get_config(struct be_adapter *adapter)
 {
+       u16 profile_id;
        int status;
 
        status = be_cmd_query_fw_cfg(adapter, &adapter->port_num,
@@ -3249,6 +3241,13 @@ static int be_get_config(struct be_adapter *adapter)
        if (status)
                return status;
 
+        if (be_physfn(adapter)) {
+               status = be_cmd_get_active_profile(adapter, &profile_id);
+               if (!status)
+                       dev_info(&adapter->pdev->dev,
+                                "Using profile 0x%x\n", profile_id);
+       }
+
        status = be_get_resources(adapter);
        if (status)
                return status;
@@ -3403,11 +3402,6 @@ static int be_setup(struct be_adapter *adapter)
                goto err;
 
        be_cmd_get_fn_privileges(adapter, &adapter->cmd_privileges, 0);
-       /* In UMC mode FW does not return right privileges.
-        * Override with correct privilege equivalent to PF.
-        */
-       if (be_is_mc(adapter))
-               adapter->cmd_privileges = MAX_PRIVILEGES;
 
        status = be_mac_setup(adapter);
        if (status)
@@ -3426,6 +3420,8 @@ static int be_setup(struct be_adapter *adapter)
 
        be_set_rx_mode(adapter->netdev);
 
+       be_cmd_get_acpi_wol_cap(adapter);
+
        be_cmd_get_flow_control(adapter, &tx_fc, &rx_fc);
 
        if (rx_fc != adapter->rx_fc || tx_fc != adapter->tx_fc)
@@ -4295,74 +4291,22 @@ static void be_remove(struct pci_dev *pdev)
        free_netdev(adapter->netdev);
 }
 
-bool be_is_wol_supported(struct be_adapter *adapter)
-{
-       return ((adapter->wol_cap & BE_WOL_CAP) &&
-               !be_is_wol_excluded(adapter)) ? true : false;
-}
-
-u32 be_get_fw_log_level(struct be_adapter *adapter)
-{
-       struct be_dma_mem extfat_cmd;
-       struct be_fat_conf_params *cfgs;
-       int status;
-       u32 level = 0;
-       int j;
-
-       if (lancer_chip(adapter))
-               return 0;
-
-       memset(&extfat_cmd, 0, sizeof(struct be_dma_mem));
-       extfat_cmd.size = sizeof(struct be_cmd_resp_get_ext_fat_caps);
-       extfat_cmd.va = pci_alloc_consistent(adapter->pdev, extfat_cmd.size,
-                                            &extfat_cmd.dma);
-
-       if (!extfat_cmd.va) {
-               dev_err(&adapter->pdev->dev, "%s: Memory allocation failure\n",
-                       __func__);
-               goto err;
-       }
-
-       status = be_cmd_get_ext_fat_capabilites(adapter, &extfat_cmd);
-       if (!status) {
-               cfgs = (struct be_fat_conf_params *)(extfat_cmd.va +
-                                               sizeof(struct be_cmd_resp_hdr));
-               for (j = 0; j < le32_to_cpu(cfgs->module[0].num_modes); j++) {
-                       if (cfgs->module[0].trace_lvl[j].mode == MODE_UART)
-                               level = cfgs->module[0].trace_lvl[j].dbg_lvl;
-               }
-       }
-       pci_free_consistent(adapter->pdev, extfat_cmd.size, extfat_cmd.va,
-                           extfat_cmd.dma);
-err:
-       return level;
-}
-
 static int be_get_initial_config(struct be_adapter *adapter)
 {
-       int status;
-       u32 level;
+       int status, level;
 
        status = be_cmd_get_cntl_attributes(adapter);
        if (status)
                return status;
 
-       status = be_cmd_get_acpi_wol_cap(adapter);
-       if (status) {
-               /* in case of a failure to get wol capabillities
-                * check the exclusion list to determine WOL capability */
-               if (!be_is_wol_excluded(adapter))
-                       adapter->wol_cap |= BE_WOL_CAP;
-       }
-
-       if (be_is_wol_supported(adapter))
-               adapter->wol = true;
-
        /* Must be a power of 2 or else MODULO will BUG_ON */
        adapter->be_get_temp_freq = 64;
 
-       level = be_get_fw_log_level(adapter);
-       adapter->msg_enable = level <= FW_LOG_LEVEL_DEFAULT ? NETIF_MSG_HW : 0;
+       if (BEx_chip(adapter)) {
+               level = be_cmd_get_fw_log_level(adapter);
+               adapter->msg_enable =
+                       level <= FW_LOG_LEVEL_DEFAULT ? NETIF_MSG_HW : 0;
+       }
 
        adapter->cfg_num_qs = netif_get_num_default_rss_queues();
        return 0;
@@ -4625,7 +4569,7 @@ static int be_suspend(struct pci_dev *pdev, pm_message_t state)
        struct be_adapter *adapter = pci_get_drvdata(pdev);
        struct net_device *netdev =  adapter->netdev;
 
-       if (adapter->wol)
+       if (adapter->wol_en)
                be_setup_wol(adapter, true);
 
        be_intr_set(adapter, false);
@@ -4681,7 +4625,7 @@ static int be_resume(struct pci_dev *pdev)
                              msecs_to_jiffies(1000));
        netif_device_attach(netdev);
 
-       if (adapter->wol)
+       if (adapter->wol_en)
                be_setup_wol(adapter, false);
 
        return 0;