aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/ethernet/qlogic
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/ethernet/qlogic')
-rw-r--r--drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c23
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_hsi.h1
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_iwarp.c4
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_rdma.c2
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_roce.c15
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_sp_commands.c2
-rw-r--r--drivers/net/ethernet/qlogic/qed/qed_vf.c5
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic.h8
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c3
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h3
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h3
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c12
-rw-r--r--drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c45
13 files changed, 28 insertions, 98 deletions
diff --git a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
index 69aa7fc392c5..59c70be22a84 100644
--- a/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
+++ b/drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c
@@ -72,9 +72,6 @@ static void netxen_schedule_work(struct netxen_adapter *adapter,
72 work_func_t func, int delay); 72 work_func_t func, int delay);
73static void netxen_cancel_fw_work(struct netxen_adapter *adapter); 73static void netxen_cancel_fw_work(struct netxen_adapter *adapter);
74static int netxen_nic_poll(struct napi_struct *napi, int budget); 74static int netxen_nic_poll(struct napi_struct *napi, int budget);
75#ifdef CONFIG_NET_POLL_CONTROLLER
76static void netxen_nic_poll_controller(struct net_device *netdev);
77#endif
78 75
79static void netxen_create_sysfs_entries(struct netxen_adapter *adapter); 76static void netxen_create_sysfs_entries(struct netxen_adapter *adapter);
80static void netxen_remove_sysfs_entries(struct netxen_adapter *adapter); 77static void netxen_remove_sysfs_entries(struct netxen_adapter *adapter);
@@ -581,9 +578,6 @@ static const struct net_device_ops netxen_netdev_ops = {
581 .ndo_tx_timeout = netxen_tx_timeout, 578 .ndo_tx_timeout = netxen_tx_timeout,
582 .ndo_fix_features = netxen_fix_features, 579 .ndo_fix_features = netxen_fix_features,
583 .ndo_set_features = netxen_set_features, 580 .ndo_set_features = netxen_set_features,
584#ifdef CONFIG_NET_POLL_CONTROLLER
585 .ndo_poll_controller = netxen_nic_poll_controller,
586#endif
587}; 581};
588 582
589static inline bool netxen_function_zero(struct pci_dev *pdev) 583static inline bool netxen_function_zero(struct pci_dev *pdev)
@@ -2402,23 +2396,6 @@ static int netxen_nic_poll(struct napi_struct *napi, int budget)
2402 return work_done; 2396 return work_done;
2403} 2397}
2404 2398
2405#ifdef CONFIG_NET_POLL_CONTROLLER
2406static void netxen_nic_poll_controller(struct net_device *netdev)
2407{
2408 int ring;
2409 struct nx_host_sds_ring *sds_ring;
2410 struct netxen_adapter *adapter = netdev_priv(netdev);
2411 struct netxen_recv_context *recv_ctx = &adapter->recv_ctx;
2412
2413 disable_irq(adapter->irq);
2414 for (ring = 0; ring < adapter->max_sds_rings; ring++) {
2415 sds_ring = &recv_ctx->sds_rings[ring];
2416 netxen_intr(adapter->irq, sds_ring);
2417 }
2418 enable_irq(adapter->irq);
2419}
2420#endif
2421
2422static int 2399static int
2423nx_incr_dev_ref_cnt(struct netxen_adapter *adapter) 2400nx_incr_dev_ref_cnt(struct netxen_adapter *adapter)
2424{ 2401{
diff --git a/drivers/net/ethernet/qlogic/qed/qed_hsi.h b/drivers/net/ethernet/qlogic/qed/qed_hsi.h
index 9b3ef00e5782..a71382687ef2 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_hsi.h
+++ b/drivers/net/ethernet/qlogic/qed/qed_hsi.h
@@ -11987,6 +11987,7 @@ struct public_global {
11987 u32 running_bundle_id; 11987 u32 running_bundle_id;
11988 s32 external_temperature; 11988 s32 external_temperature;
11989 u32 mdump_reason; 11989 u32 mdump_reason;
11990 u64 reserved;
11990 u32 data_ptr; 11991 u32 data_ptr;
11991 u32 data_size; 11992 u32 data_size;
11992}; 11993};
diff --git a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
index 17f3dfa2cc94..e860bdf0f752 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_iwarp.c
@@ -1710,7 +1710,7 @@ qed_iwarp_parse_rx_pkt(struct qed_hwfn *p_hwfn,
1710 1710
1711 cm_info->local_ip[0] = ntohl(iph->daddr); 1711 cm_info->local_ip[0] = ntohl(iph->daddr);
1712 cm_info->remote_ip[0] = ntohl(iph->saddr); 1712 cm_info->remote_ip[0] = ntohl(iph->saddr);
1713 cm_info->ip_version = TCP_IPV4; 1713 cm_info->ip_version = QED_TCP_IPV4;
1714 1714
1715 ip_hlen = (iph->ihl) * sizeof(u32); 1715 ip_hlen = (iph->ihl) * sizeof(u32);
1716 *payload_len = ntohs(iph->tot_len) - ip_hlen; 1716 *payload_len = ntohs(iph->tot_len) - ip_hlen;
@@ -1730,7 +1730,7 @@ qed_iwarp_parse_rx_pkt(struct qed_hwfn *p_hwfn,
1730 cm_info->remote_ip[i] = 1730 cm_info->remote_ip[i] =
1731 ntohl(ip6h->saddr.in6_u.u6_addr32[i]); 1731 ntohl(ip6h->saddr.in6_u.u6_addr32[i]);
1732 } 1732 }
1733 cm_info->ip_version = TCP_IPV6; 1733 cm_info->ip_version = QED_TCP_IPV6;
1734 1734
1735 ip_hlen = sizeof(*ip6h); 1735 ip_hlen = sizeof(*ip6h);
1736 *payload_len = ntohs(ip6h->payload_len); 1736 *payload_len = ntohs(ip6h->payload_len);
diff --git a/drivers/net/ethernet/qlogic/qed/qed_rdma.c b/drivers/net/ethernet/qlogic/qed/qed_rdma.c
index be941cfaa2d4..c71391b9c757 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_rdma.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_rdma.c
@@ -228,7 +228,7 @@ static int qed_rdma_alloc(struct qed_hwfn *p_hwfn,
228 num_cons, "Toggle"); 228 num_cons, "Toggle");
229 if (rc) { 229 if (rc) {
230 DP_VERBOSE(p_hwfn, QED_MSG_RDMA, 230 DP_VERBOSE(p_hwfn, QED_MSG_RDMA,
231 "Failed to allocate toogle bits, rc = %d\n", rc); 231 "Failed to allocate toggle bits, rc = %d\n", rc);
232 goto free_cq_map; 232 goto free_cq_map;
233 } 233 }
234 234
diff --git a/drivers/net/ethernet/qlogic/qed/qed_roce.c b/drivers/net/ethernet/qlogic/qed/qed_roce.c
index 7d7a64c55ff1..f9167d1354bb 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_roce.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_roce.c
@@ -140,23 +140,16 @@ static void qed_rdma_copy_gids(struct qed_rdma_qp *qp, __le32 *src_gid,
140 140
141static enum roce_flavor qed_roce_mode_to_flavor(enum roce_mode roce_mode) 141static enum roce_flavor qed_roce_mode_to_flavor(enum roce_mode roce_mode)
142{ 142{
143 enum roce_flavor flavor;
144
145 switch (roce_mode) { 143 switch (roce_mode) {
146 case ROCE_V1: 144 case ROCE_V1:
147 flavor = PLAIN_ROCE; 145 return PLAIN_ROCE;
148 break;
149 case ROCE_V2_IPV4: 146 case ROCE_V2_IPV4:
150 flavor = RROCE_IPV4; 147 return RROCE_IPV4;
151 break;
152 case ROCE_V2_IPV6: 148 case ROCE_V2_IPV6:
153 flavor = ROCE_V2_IPV6; 149 return RROCE_IPV6;
154 break;
155 default: 150 default:
156 flavor = MAX_ROCE_MODE; 151 return MAX_ROCE_FLAVOR;
157 break;
158 } 152 }
159 return flavor;
160} 153}
161 154
162static void qed_roce_free_cid_pair(struct qed_hwfn *p_hwfn, u16 cid) 155static void qed_roce_free_cid_pair(struct qed_hwfn *p_hwfn, u16 cid)
diff --git a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
index 8de644b4721e..77b6248ad3b9 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_sp_commands.c
@@ -154,7 +154,7 @@ qed_set_pf_update_tunn_mode(struct qed_tunnel_info *p_tun,
154static void qed_set_tunn_cls_info(struct qed_tunnel_info *p_tun, 154static void qed_set_tunn_cls_info(struct qed_tunnel_info *p_tun,
155 struct qed_tunnel_info *p_src) 155 struct qed_tunnel_info *p_src)
156{ 156{
157 enum tunnel_clss type; 157 int type;
158 158
159 p_tun->b_update_rx_cls = p_src->b_update_rx_cls; 159 p_tun->b_update_rx_cls = p_src->b_update_rx_cls;
160 p_tun->b_update_tx_cls = p_src->b_update_tx_cls; 160 p_tun->b_update_tx_cls = p_src->b_update_tx_cls;
diff --git a/drivers/net/ethernet/qlogic/qed/qed_vf.c b/drivers/net/ethernet/qlogic/qed/qed_vf.c
index 3d4269659820..be118d057b92 100644
--- a/drivers/net/ethernet/qlogic/qed/qed_vf.c
+++ b/drivers/net/ethernet/qlogic/qed/qed_vf.c
@@ -413,7 +413,6 @@ static int qed_vf_pf_acquire(struct qed_hwfn *p_hwfn)
413 } 413 }
414 414
415 if (!p_iov->b_pre_fp_hsi && 415 if (!p_iov->b_pre_fp_hsi &&
416 ETH_HSI_VER_MINOR &&
417 (resp->pfdev_info.minor_fp_hsi < ETH_HSI_VER_MINOR)) { 416 (resp->pfdev_info.minor_fp_hsi < ETH_HSI_VER_MINOR)) {
418 DP_INFO(p_hwfn, 417 DP_INFO(p_hwfn,
419 "PF is using older fastpath HSI; %02x.%02x is configured\n", 418 "PF is using older fastpath HSI; %02x.%02x is configured\n",
@@ -572,7 +571,7 @@ free_p_iov:
572static void 571static void
573__qed_vf_prep_tunn_req_tlv(struct vfpf_update_tunn_param_tlv *p_req, 572__qed_vf_prep_tunn_req_tlv(struct vfpf_update_tunn_param_tlv *p_req,
574 struct qed_tunn_update_type *p_src, 573 struct qed_tunn_update_type *p_src,
575 enum qed_tunn_clss mask, u8 *p_cls) 574 enum qed_tunn_mode mask, u8 *p_cls)
576{ 575{
577 if (p_src->b_update_mode) { 576 if (p_src->b_update_mode) {
578 p_req->tun_mode_update_mask |= BIT(mask); 577 p_req->tun_mode_update_mask |= BIT(mask);
@@ -587,7 +586,7 @@ __qed_vf_prep_tunn_req_tlv(struct vfpf_update_tunn_param_tlv *p_req,
587static void 586static void
588qed_vf_prep_tunn_req_tlv(struct vfpf_update_tunn_param_tlv *p_req, 587qed_vf_prep_tunn_req_tlv(struct vfpf_update_tunn_param_tlv *p_req,
589 struct qed_tunn_update_type *p_src, 588 struct qed_tunn_update_type *p_src,
590 enum qed_tunn_clss mask, 589 enum qed_tunn_mode mask,
591 u8 *p_cls, struct qed_tunn_update_udp_port *p_port, 590 u8 *p_cls, struct qed_tunn_update_udp_port *p_port,
592 u8 *p_update_port, u16 *p_udp_port) 591 u8 *p_update_port, u16 *p_udp_port)
593{ 592{
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
index 81312924df14..0c443ea98479 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic.h
@@ -1800,7 +1800,8 @@ struct qlcnic_hardware_ops {
1800 int (*config_loopback) (struct qlcnic_adapter *, u8); 1800 int (*config_loopback) (struct qlcnic_adapter *, u8);
1801 int (*clear_loopback) (struct qlcnic_adapter *, u8); 1801 int (*clear_loopback) (struct qlcnic_adapter *, u8);
1802 int (*config_promisc_mode) (struct qlcnic_adapter *, u32); 1802 int (*config_promisc_mode) (struct qlcnic_adapter *, u32);
1803 void (*change_l2_filter) (struct qlcnic_adapter *, u64 *, u16); 1803 void (*change_l2_filter)(struct qlcnic_adapter *adapter, u64 *addr,
1804 u16 vlan, struct qlcnic_host_tx_ring *tx_ring);
1804 int (*get_board_info) (struct qlcnic_adapter *); 1805 int (*get_board_info) (struct qlcnic_adapter *);
1805 void (*set_mac_filter_count) (struct qlcnic_adapter *); 1806 void (*set_mac_filter_count) (struct qlcnic_adapter *);
1806 void (*free_mac_list) (struct qlcnic_adapter *); 1807 void (*free_mac_list) (struct qlcnic_adapter *);
@@ -2064,9 +2065,10 @@ static inline int qlcnic_nic_set_promisc(struct qlcnic_adapter *adapter,
2064} 2065}
2065 2066
2066static inline void qlcnic_change_filter(struct qlcnic_adapter *adapter, 2067static inline void qlcnic_change_filter(struct qlcnic_adapter *adapter,
2067 u64 *addr, u16 id) 2068 u64 *addr, u16 vlan,
2069 struct qlcnic_host_tx_ring *tx_ring)
2068{ 2070{
2069 adapter->ahw->hw_ops->change_l2_filter(adapter, addr, id); 2071 adapter->ahw->hw_ops->change_l2_filter(adapter, addr, vlan, tx_ring);
2070} 2072}
2071 2073
2072static inline int qlcnic_get_board_info(struct qlcnic_adapter *adapter) 2074static inline int qlcnic_get_board_info(struct qlcnic_adapter *adapter)
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
index 569d54ededec..a79d84f99102 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c
@@ -2135,7 +2135,8 @@ out:
2135} 2135}
2136 2136
2137void qlcnic_83xx_change_l2_filter(struct qlcnic_adapter *adapter, u64 *addr, 2137void qlcnic_83xx_change_l2_filter(struct qlcnic_adapter *adapter, u64 *addr,
2138 u16 vlan_id) 2138 u16 vlan_id,
2139 struct qlcnic_host_tx_ring *tx_ring)
2139{ 2140{
2140 u8 mac[ETH_ALEN]; 2141 u8 mac[ETH_ALEN];
2141 memcpy(&mac, addr, ETH_ALEN); 2142 memcpy(&mac, addr, ETH_ALEN);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
index b75a81246856..73fe2f64491d 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h
@@ -550,7 +550,8 @@ int qlcnic_83xx_wrt_reg_indirect(struct qlcnic_adapter *, ulong, u32);
550int qlcnic_83xx_nic_set_promisc(struct qlcnic_adapter *, u32); 550int qlcnic_83xx_nic_set_promisc(struct qlcnic_adapter *, u32);
551int qlcnic_83xx_config_hw_lro(struct qlcnic_adapter *, int); 551int qlcnic_83xx_config_hw_lro(struct qlcnic_adapter *, int);
552int qlcnic_83xx_config_rss(struct qlcnic_adapter *, int); 552int qlcnic_83xx_config_rss(struct qlcnic_adapter *, int);
553void qlcnic_83xx_change_l2_filter(struct qlcnic_adapter *, u64 *, u16); 553void qlcnic_83xx_change_l2_filter(struct qlcnic_adapter *adapter, u64 *addr,
554 u16 vlan, struct qlcnic_host_tx_ring *ring);
554int qlcnic_83xx_get_pci_info(struct qlcnic_adapter *, struct qlcnic_pci_info *); 555int qlcnic_83xx_get_pci_info(struct qlcnic_adapter *, struct qlcnic_pci_info *);
555int qlcnic_83xx_set_nic_info(struct qlcnic_adapter *, struct qlcnic_info *); 556int qlcnic_83xx_set_nic_info(struct qlcnic_adapter *, struct qlcnic_info *);
556void qlcnic_83xx_initialize_nic(struct qlcnic_adapter *, int); 557void qlcnic_83xx_initialize_nic(struct qlcnic_adapter *, int);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h
index 4bb33af8e2b3..56a3bd9e37dc 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h
@@ -173,7 +173,8 @@ int qlcnic_82xx_napi_add(struct qlcnic_adapter *adapter,
173 struct net_device *netdev); 173 struct net_device *netdev);
174void qlcnic_82xx_get_beacon_state(struct qlcnic_adapter *); 174void qlcnic_82xx_get_beacon_state(struct qlcnic_adapter *);
175void qlcnic_82xx_change_filter(struct qlcnic_adapter *adapter, 175void qlcnic_82xx_change_filter(struct qlcnic_adapter *adapter,
176 u64 *uaddr, u16 vlan_id); 176 u64 *uaddr, u16 vlan_id,
177 struct qlcnic_host_tx_ring *tx_ring);
177int qlcnic_82xx_config_intr_coalesce(struct qlcnic_adapter *, 178int qlcnic_82xx_config_intr_coalesce(struct qlcnic_adapter *,
178 struct ethtool_coalesce *); 179 struct ethtool_coalesce *);
179int qlcnic_82xx_set_rx_coalesce(struct qlcnic_adapter *); 180int qlcnic_82xx_set_rx_coalesce(struct qlcnic_adapter *);
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
index 84dd83031a1b..9647578cbe6a 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c
@@ -268,13 +268,12 @@ static void qlcnic_add_lb_filter(struct qlcnic_adapter *adapter,
268} 268}
269 269
270void qlcnic_82xx_change_filter(struct qlcnic_adapter *adapter, u64 *uaddr, 270void qlcnic_82xx_change_filter(struct qlcnic_adapter *adapter, u64 *uaddr,
271 u16 vlan_id) 271 u16 vlan_id, struct qlcnic_host_tx_ring *tx_ring)
272{ 272{
273 struct cmd_desc_type0 *hwdesc; 273 struct cmd_desc_type0 *hwdesc;
274 struct qlcnic_nic_req *req; 274 struct qlcnic_nic_req *req;
275 struct qlcnic_mac_req *mac_req; 275 struct qlcnic_mac_req *mac_req;
276 struct qlcnic_vlan_req *vlan_req; 276 struct qlcnic_vlan_req *vlan_req;
277 struct qlcnic_host_tx_ring *tx_ring = adapter->tx_ring;
278 u32 producer; 277 u32 producer;
279 u64 word; 278 u64 word;
280 279
@@ -301,7 +300,8 @@ void qlcnic_82xx_change_filter(struct qlcnic_adapter *adapter, u64 *uaddr,
301 300
302static void qlcnic_send_filter(struct qlcnic_adapter *adapter, 301static void qlcnic_send_filter(struct qlcnic_adapter *adapter,
303 struct cmd_desc_type0 *first_desc, 302 struct cmd_desc_type0 *first_desc,
304 struct sk_buff *skb) 303 struct sk_buff *skb,
304 struct qlcnic_host_tx_ring *tx_ring)
305{ 305{
306 struct vlan_ethhdr *vh = (struct vlan_ethhdr *)(skb->data); 306 struct vlan_ethhdr *vh = (struct vlan_ethhdr *)(skb->data);
307 struct ethhdr *phdr = (struct ethhdr *)(skb->data); 307 struct ethhdr *phdr = (struct ethhdr *)(skb->data);
@@ -335,7 +335,7 @@ static void qlcnic_send_filter(struct qlcnic_adapter *adapter,
335 tmp_fil->vlan_id == vlan_id) { 335 tmp_fil->vlan_id == vlan_id) {
336 if (jiffies > (QLCNIC_READD_AGE * HZ + tmp_fil->ftime)) 336 if (jiffies > (QLCNIC_READD_AGE * HZ + tmp_fil->ftime))
337 qlcnic_change_filter(adapter, &src_addr, 337 qlcnic_change_filter(adapter, &src_addr,
338 vlan_id); 338 vlan_id, tx_ring);
339 tmp_fil->ftime = jiffies; 339 tmp_fil->ftime = jiffies;
340 return; 340 return;
341 } 341 }
@@ -350,7 +350,7 @@ static void qlcnic_send_filter(struct qlcnic_adapter *adapter,
350 if (!fil) 350 if (!fil)
351 return; 351 return;
352 352
353 qlcnic_change_filter(adapter, &src_addr, vlan_id); 353 qlcnic_change_filter(adapter, &src_addr, vlan_id, tx_ring);
354 fil->ftime = jiffies; 354 fil->ftime = jiffies;
355 fil->vlan_id = vlan_id; 355 fil->vlan_id = vlan_id;
356 memcpy(fil->faddr, &src_addr, ETH_ALEN); 356 memcpy(fil->faddr, &src_addr, ETH_ALEN);
@@ -766,7 +766,7 @@ netdev_tx_t qlcnic_xmit_frame(struct sk_buff *skb, struct net_device *netdev)
766 } 766 }
767 767
768 if (adapter->drv_mac_learn) 768 if (adapter->drv_mac_learn)
769 qlcnic_send_filter(adapter, first_desc, skb); 769 qlcnic_send_filter(adapter, first_desc, skb, tx_ring);
770 770
771 tx_ring->tx_stats.tx_bytes += skb->len; 771 tx_ring->tx_stats.tx_bytes += skb->len;
772 tx_ring->tx_stats.xmit_called++; 772 tx_ring->tx_stats.xmit_called++;
diff --git a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
index 2d38d1ac2aae..dbd48012224f 100644
--- a/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
+++ b/drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c
@@ -59,9 +59,6 @@ static int qlcnic_close(struct net_device *netdev);
59static void qlcnic_tx_timeout(struct net_device *netdev); 59static void qlcnic_tx_timeout(struct net_device *netdev);
60static void qlcnic_attach_work(struct work_struct *work); 60static void qlcnic_attach_work(struct work_struct *work);
61static void qlcnic_fwinit_work(struct work_struct *work); 61static void qlcnic_fwinit_work(struct work_struct *work);
62#ifdef CONFIG_NET_POLL_CONTROLLER
63static void qlcnic_poll_controller(struct net_device *netdev);
64#endif
65 62
66static void qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding); 63static void qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding);
67static int qlcnic_can_start_firmware(struct qlcnic_adapter *adapter); 64static int qlcnic_can_start_firmware(struct qlcnic_adapter *adapter);
@@ -545,9 +542,6 @@ static const struct net_device_ops qlcnic_netdev_ops = {
545 .ndo_udp_tunnel_add = qlcnic_add_vxlan_port, 542 .ndo_udp_tunnel_add = qlcnic_add_vxlan_port,
546 .ndo_udp_tunnel_del = qlcnic_del_vxlan_port, 543 .ndo_udp_tunnel_del = qlcnic_del_vxlan_port,
547 .ndo_features_check = qlcnic_features_check, 544 .ndo_features_check = qlcnic_features_check,
548#ifdef CONFIG_NET_POLL_CONTROLLER
549 .ndo_poll_controller = qlcnic_poll_controller,
550#endif
551#ifdef CONFIG_QLCNIC_SRIOV 545#ifdef CONFIG_QLCNIC_SRIOV
552 .ndo_set_vf_mac = qlcnic_sriov_set_vf_mac, 546 .ndo_set_vf_mac = qlcnic_sriov_set_vf_mac,
553 .ndo_set_vf_rate = qlcnic_sriov_set_vf_tx_rate, 547 .ndo_set_vf_rate = qlcnic_sriov_set_vf_tx_rate,
@@ -3200,45 +3194,6 @@ static irqreturn_t qlcnic_msix_tx_intr(int irq, void *data)
3200 return IRQ_HANDLED; 3194 return IRQ_HANDLED;
3201} 3195}
3202 3196
3203#ifdef CONFIG_NET_POLL_CONTROLLER
3204static void qlcnic_poll_controller(struct net_device *netdev)
3205{
3206 struct qlcnic_adapter *adapter = netdev_priv(netdev);
3207 struct qlcnic_host_sds_ring *sds_ring;
3208 struct qlcnic_recv_context *recv_ctx;
3209 struct qlcnic_host_tx_ring *tx_ring;
3210 int ring;
3211
3212 if (!test_bit(__QLCNIC_DEV_UP, &adapter->state))
3213 return;
3214
3215 recv_ctx = adapter->recv_ctx;
3216
3217 for (ring = 0; ring < adapter->drv_sds_rings; ring++) {
3218 sds_ring = &recv_ctx->sds_rings[ring];
3219 qlcnic_disable_sds_intr(adapter, sds_ring);
3220 napi_schedule(&sds_ring->napi);
3221 }
3222
3223 if (adapter->flags & QLCNIC_MSIX_ENABLED) {
3224 /* Only Multi-Tx queue capable devices need to
3225 * schedule NAPI for TX rings
3226 */
3227 if ((qlcnic_83xx_check(adapter) &&
3228 (adapter->flags & QLCNIC_TX_INTR_SHARED)) ||
3229 (qlcnic_82xx_check(adapter) &&
3230 !qlcnic_check_multi_tx(adapter)))
3231 return;
3232
3233 for (ring = 0; ring < adapter->drv_tx_rings; ring++) {
3234 tx_ring = &adapter->tx_ring[ring];
3235 qlcnic_disable_tx_intr(adapter, tx_ring);
3236 napi_schedule(&tx_ring->napi);
3237 }
3238 }
3239}
3240#endif
3241
3242static void 3197static void
3243qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding) 3198qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding)
3244{ 3199{