diff options
Diffstat (limited to 'drivers/net/ethernet/qlogic')
| -rw-r--r-- | drivers/net/ethernet/qlogic/netxen/netxen_nic_main.c | 23 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/qed/qed_hsi.h | 1 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/qed/qed_iwarp.c | 4 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/qed/qed_rdma.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/qed/qed_roce.c | 15 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/qed/qed_sp_commands.c | 2 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/qed/qed_vf.c | 5 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic.h | 8 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.c | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_83xx_hw.h | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_hw.h | 3 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_io.c | 12 | ||||
| -rw-r--r-- | drivers/net/ethernet/qlogic/qlcnic/qlcnic_main.c | 45 |
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); |
| 73 | static void netxen_cancel_fw_work(struct netxen_adapter *adapter); | 73 | static void netxen_cancel_fw_work(struct netxen_adapter *adapter); |
| 74 | static int netxen_nic_poll(struct napi_struct *napi, int budget); | 74 | static int netxen_nic_poll(struct napi_struct *napi, int budget); |
| 75 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 76 | static void netxen_nic_poll_controller(struct net_device *netdev); | ||
| 77 | #endif | ||
| 78 | 75 | ||
| 79 | static void netxen_create_sysfs_entries(struct netxen_adapter *adapter); | 76 | static void netxen_create_sysfs_entries(struct netxen_adapter *adapter); |
| 80 | static void netxen_remove_sysfs_entries(struct netxen_adapter *adapter); | 77 | static 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 | ||
| 589 | static inline bool netxen_function_zero(struct pci_dev *pdev) | 583 | static 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 | ||
| 2406 | static 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 | |||
| 2422 | static int | 2399 | static int |
| 2423 | nx_incr_dev_ref_cnt(struct netxen_adapter *adapter) | 2400 | nx_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 | ||
| 141 | static enum roce_flavor qed_roce_mode_to_flavor(enum roce_mode roce_mode) | 141 | static 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 | ||
| 162 | static void qed_roce_free_cid_pair(struct qed_hwfn *p_hwfn, u16 cid) | 155 | static 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, | |||
| 154 | static void qed_set_tunn_cls_info(struct qed_tunnel_info *p_tun, | 154 | static 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: | |||
| 572 | static void | 571 | static 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, | |||
| 587 | static void | 586 | static void |
| 588 | qed_vf_prep_tunn_req_tlv(struct vfpf_update_tunn_param_tlv *p_req, | 587 | qed_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 | ||
| 2066 | static inline void qlcnic_change_filter(struct qlcnic_adapter *adapter, | 2067 | static 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 | ||
| 2072 | static inline int qlcnic_get_board_info(struct qlcnic_adapter *adapter) | 2074 | static 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 | ||
| 2137 | void qlcnic_83xx_change_l2_filter(struct qlcnic_adapter *adapter, u64 *addr, | 2137 | void 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); | |||
| 550 | int qlcnic_83xx_nic_set_promisc(struct qlcnic_adapter *, u32); | 550 | int qlcnic_83xx_nic_set_promisc(struct qlcnic_adapter *, u32); |
| 551 | int qlcnic_83xx_config_hw_lro(struct qlcnic_adapter *, int); | 551 | int qlcnic_83xx_config_hw_lro(struct qlcnic_adapter *, int); |
| 552 | int qlcnic_83xx_config_rss(struct qlcnic_adapter *, int); | 552 | int qlcnic_83xx_config_rss(struct qlcnic_adapter *, int); |
| 553 | void qlcnic_83xx_change_l2_filter(struct qlcnic_adapter *, u64 *, u16); | 553 | void qlcnic_83xx_change_l2_filter(struct qlcnic_adapter *adapter, u64 *addr, |
| 554 | u16 vlan, struct qlcnic_host_tx_ring *ring); | ||
| 554 | int qlcnic_83xx_get_pci_info(struct qlcnic_adapter *, struct qlcnic_pci_info *); | 555 | int qlcnic_83xx_get_pci_info(struct qlcnic_adapter *, struct qlcnic_pci_info *); |
| 555 | int qlcnic_83xx_set_nic_info(struct qlcnic_adapter *, struct qlcnic_info *); | 556 | int qlcnic_83xx_set_nic_info(struct qlcnic_adapter *, struct qlcnic_info *); |
| 556 | void qlcnic_83xx_initialize_nic(struct qlcnic_adapter *, int); | 557 | void 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); |
| 174 | void qlcnic_82xx_get_beacon_state(struct qlcnic_adapter *); | 174 | void qlcnic_82xx_get_beacon_state(struct qlcnic_adapter *); |
| 175 | void qlcnic_82xx_change_filter(struct qlcnic_adapter *adapter, | 175 | void 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); | ||
| 177 | int qlcnic_82xx_config_intr_coalesce(struct qlcnic_adapter *, | 178 | int qlcnic_82xx_config_intr_coalesce(struct qlcnic_adapter *, |
| 178 | struct ethtool_coalesce *); | 179 | struct ethtool_coalesce *); |
| 179 | int qlcnic_82xx_set_rx_coalesce(struct qlcnic_adapter *); | 180 | int 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 | ||
| 270 | void qlcnic_82xx_change_filter(struct qlcnic_adapter *adapter, u64 *uaddr, | 270 | void 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 | ||
| 302 | static void qlcnic_send_filter(struct qlcnic_adapter *adapter, | 301 | static 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); | |||
| 59 | static void qlcnic_tx_timeout(struct net_device *netdev); | 59 | static void qlcnic_tx_timeout(struct net_device *netdev); |
| 60 | static void qlcnic_attach_work(struct work_struct *work); | 60 | static void qlcnic_attach_work(struct work_struct *work); |
| 61 | static void qlcnic_fwinit_work(struct work_struct *work); | 61 | static void qlcnic_fwinit_work(struct work_struct *work); |
| 62 | #ifdef CONFIG_NET_POLL_CONTROLLER | ||
| 63 | static void qlcnic_poll_controller(struct net_device *netdev); | ||
| 64 | #endif | ||
| 65 | 62 | ||
| 66 | static void qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding); | 63 | static void qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding); |
| 67 | static int qlcnic_can_start_firmware(struct qlcnic_adapter *adapter); | 64 | static 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 | ||
| 3204 | static 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 | |||
| 3242 | static void | 3197 | static void |
| 3243 | qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding) | 3198 | qlcnic_idc_debug_info(struct qlcnic_adapter *adapter, u8 encoding) |
| 3244 | { | 3199 | { |
