Loading drivers/net/qlcnic/qlcnic.h +3 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,8 @@ #include <linux/io.h> #include <asm/byteorder.h> #include <linux/bitops.h> #include <linux/if_vlan.h> #include "qlcnic_hdr.h" Loading Loading @@ -982,8 +984,8 @@ struct qlcnic_adapter { u8 mac_addr[ETH_ALEN]; u64 dev_rst_time; unsigned long vlans[BITS_TO_LONGS(VLAN_N_VID)]; struct vlan_group *vlgrp; struct qlcnic_npar_info *npars; struct qlcnic_eswitch *eswitch; struct qlcnic_nic_template *nic_ops; Loading drivers/net/qlcnic/qlcnic_init.c +7 −8 Original line number Diff line number Diff line Loading @@ -1467,9 +1467,9 @@ qlcnic_process_rcv(struct qlcnic_adapter *adapter, skb->protocol = eth_type_trans(skb, netdev); if ((vid != 0xffff) && adapter->vlgrp) vlan_gro_receive(&sds_ring->napi, adapter->vlgrp, vid, skb); else if (vid != 0xffff) __vlan_hwaccel_put_tag(skb, vid); napi_gro_receive(&sds_ring->napi, skb); adapter->stats.rx_pkts++; Loading Loading @@ -1552,9 +1552,8 @@ qlcnic_process_lro(struct qlcnic_adapter *adapter, length = skb->len; if ((vid != 0xffff) && adapter->vlgrp) vlan_hwaccel_receive_skb(skb, adapter->vlgrp, vid); else if (vid != 0xffff) __vlan_hwaccel_put_tag(skb, vid); netif_receive_skb(skb); adapter->stats.lro_pkts++; Loading drivers/net/qlcnic/qlcnic_main.c +25 −17 Original line number Diff line number Diff line Loading @@ -13,7 +13,6 @@ #include <linux/swab.h> #include <linux/dma-mapping.h> #include <linux/if_vlan.h> #include <net/ip.h> #include <linux/ipv6.h> #include <linux/inetdevice.h> Loading Loading @@ -98,6 +97,9 @@ static int qlcnicvf_config_bridged_mode(struct qlcnic_adapter *, u32); static int qlcnicvf_start_firmware(struct qlcnic_adapter *); static void qlcnic_set_netdev_features(struct qlcnic_adapter *, struct qlcnic_esw_func_cfg *); static void qlcnic_vlan_rx_add(struct net_device *, u16); static void qlcnic_vlan_rx_del(struct net_device *, u16); /* PCI Device ID Table */ #define ENTRY(device) \ {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, (device)), \ Loading Loading @@ -317,13 +319,6 @@ static int qlcnic_set_mac(struct net_device *netdev, void *p) return 0; } static void qlcnic_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp) { struct qlcnic_adapter *adapter = netdev_priv(netdev); adapter->vlgrp = grp; } static const struct net_device_ops qlcnic_netdev_ops = { .ndo_open = qlcnic_open, .ndo_stop = qlcnic_close, Loading @@ -334,7 +329,8 @@ static const struct net_device_ops qlcnic_netdev_ops = { .ndo_set_mac_address = qlcnic_set_mac, .ndo_change_mtu = qlcnic_change_mtu, .ndo_tx_timeout = qlcnic_tx_timeout, .ndo_vlan_rx_register = qlcnic_vlan_rx_register, .ndo_vlan_rx_add_vid = qlcnic_vlan_rx_add, .ndo_vlan_rx_kill_vid = qlcnic_vlan_rx_del, #ifdef CONFIG_NET_POLL_CONTROLLER .ndo_poll_controller = qlcnic_poll_controller, #endif Loading Loading @@ -709,6 +705,22 @@ qlcnic_set_vlan_config(struct qlcnic_adapter *adapter, adapter->pvid = 0; } static void qlcnic_vlan_rx_add(struct net_device *netdev, u16 vid) { struct qlcnic_adapter *adapter = netdev_priv(netdev); set_bit(vid, adapter->vlans); } static void qlcnic_vlan_rx_del(struct net_device *netdev, u16 vid) { struct qlcnic_adapter *adapter = netdev_priv(netdev); qlcnic_restore_indev_addr(netdev, NETDEV_DOWN); clear_bit(vid, adapter->vlans); } static void qlcnic_set_eswitch_port_features(struct qlcnic_adapter *adapter, struct qlcnic_esw_func_cfg *esw_cfg) Loading Loading @@ -755,7 +767,7 @@ qlcnic_set_netdev_features(struct qlcnic_adapter *adapter, features = (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_GRO); vlan_features = (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM); NETIF_F_IPV6_CSUM | NETIF_F_HW_VLAN_FILTER); if (adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO) { features |= (NETIF_F_TSO | NETIF_F_TSO6); Loading Loading @@ -1448,7 +1460,7 @@ qlcnic_setup_netdev(struct qlcnic_adapter *adapter, netdev->features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_GRO | NETIF_F_HW_VLAN_RX); netdev->vlan_features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM); NETIF_F_IPV6_CSUM | NETIF_F_HW_VLAN_FILTER); if (adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO) { netdev->features |= (NETIF_F_TSO | NETIF_F_TSO6); Loading Loading @@ -4068,14 +4080,10 @@ qlcnic_restore_indev_addr(struct net_device *netdev, unsigned long event) qlcnic_config_indev_addr(adapter, netdev, event); if (!adapter->vlgrp) return; for (vid = 0; vid < VLAN_N_VID; vid++) { dev = vlan_group_get_device(adapter->vlgrp, vid); for_each_set_bit(vid, adapter->vlans, VLAN_N_VID) { dev = vlan_find_dev(netdev, vid); if (!dev) continue; qlcnic_config_indev_addr(adapter, dev, event); } } Loading Loading
drivers/net/qlcnic/qlcnic.h +3 −1 Original line number Diff line number Diff line Loading @@ -29,6 +29,8 @@ #include <linux/io.h> #include <asm/byteorder.h> #include <linux/bitops.h> #include <linux/if_vlan.h> #include "qlcnic_hdr.h" Loading Loading @@ -982,8 +984,8 @@ struct qlcnic_adapter { u8 mac_addr[ETH_ALEN]; u64 dev_rst_time; unsigned long vlans[BITS_TO_LONGS(VLAN_N_VID)]; struct vlan_group *vlgrp; struct qlcnic_npar_info *npars; struct qlcnic_eswitch *eswitch; struct qlcnic_nic_template *nic_ops; Loading
drivers/net/qlcnic/qlcnic_init.c +7 −8 Original line number Diff line number Diff line Loading @@ -1467,9 +1467,9 @@ qlcnic_process_rcv(struct qlcnic_adapter *adapter, skb->protocol = eth_type_trans(skb, netdev); if ((vid != 0xffff) && adapter->vlgrp) vlan_gro_receive(&sds_ring->napi, adapter->vlgrp, vid, skb); else if (vid != 0xffff) __vlan_hwaccel_put_tag(skb, vid); napi_gro_receive(&sds_ring->napi, skb); adapter->stats.rx_pkts++; Loading Loading @@ -1552,9 +1552,8 @@ qlcnic_process_lro(struct qlcnic_adapter *adapter, length = skb->len; if ((vid != 0xffff) && adapter->vlgrp) vlan_hwaccel_receive_skb(skb, adapter->vlgrp, vid); else if (vid != 0xffff) __vlan_hwaccel_put_tag(skb, vid); netif_receive_skb(skb); adapter->stats.lro_pkts++; Loading
drivers/net/qlcnic/qlcnic_main.c +25 −17 Original line number Diff line number Diff line Loading @@ -13,7 +13,6 @@ #include <linux/swab.h> #include <linux/dma-mapping.h> #include <linux/if_vlan.h> #include <net/ip.h> #include <linux/ipv6.h> #include <linux/inetdevice.h> Loading Loading @@ -98,6 +97,9 @@ static int qlcnicvf_config_bridged_mode(struct qlcnic_adapter *, u32); static int qlcnicvf_start_firmware(struct qlcnic_adapter *); static void qlcnic_set_netdev_features(struct qlcnic_adapter *, struct qlcnic_esw_func_cfg *); static void qlcnic_vlan_rx_add(struct net_device *, u16); static void qlcnic_vlan_rx_del(struct net_device *, u16); /* PCI Device ID Table */ #define ENTRY(device) \ {PCI_DEVICE(PCI_VENDOR_ID_QLOGIC, (device)), \ Loading Loading @@ -317,13 +319,6 @@ static int qlcnic_set_mac(struct net_device *netdev, void *p) return 0; } static void qlcnic_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp) { struct qlcnic_adapter *adapter = netdev_priv(netdev); adapter->vlgrp = grp; } static const struct net_device_ops qlcnic_netdev_ops = { .ndo_open = qlcnic_open, .ndo_stop = qlcnic_close, Loading @@ -334,7 +329,8 @@ static const struct net_device_ops qlcnic_netdev_ops = { .ndo_set_mac_address = qlcnic_set_mac, .ndo_change_mtu = qlcnic_change_mtu, .ndo_tx_timeout = qlcnic_tx_timeout, .ndo_vlan_rx_register = qlcnic_vlan_rx_register, .ndo_vlan_rx_add_vid = qlcnic_vlan_rx_add, .ndo_vlan_rx_kill_vid = qlcnic_vlan_rx_del, #ifdef CONFIG_NET_POLL_CONTROLLER .ndo_poll_controller = qlcnic_poll_controller, #endif Loading Loading @@ -709,6 +705,22 @@ qlcnic_set_vlan_config(struct qlcnic_adapter *adapter, adapter->pvid = 0; } static void qlcnic_vlan_rx_add(struct net_device *netdev, u16 vid) { struct qlcnic_adapter *adapter = netdev_priv(netdev); set_bit(vid, adapter->vlans); } static void qlcnic_vlan_rx_del(struct net_device *netdev, u16 vid) { struct qlcnic_adapter *adapter = netdev_priv(netdev); qlcnic_restore_indev_addr(netdev, NETDEV_DOWN); clear_bit(vid, adapter->vlans); } static void qlcnic_set_eswitch_port_features(struct qlcnic_adapter *adapter, struct qlcnic_esw_func_cfg *esw_cfg) Loading Loading @@ -755,7 +767,7 @@ qlcnic_set_netdev_features(struct qlcnic_adapter *adapter, features = (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_GRO); vlan_features = (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM); NETIF_F_IPV6_CSUM | NETIF_F_HW_VLAN_FILTER); if (adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO) { features |= (NETIF_F_TSO | NETIF_F_TSO6); Loading Loading @@ -1448,7 +1460,7 @@ qlcnic_setup_netdev(struct qlcnic_adapter *adapter, netdev->features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM | NETIF_F_GRO | NETIF_F_HW_VLAN_RX); netdev->vlan_features |= (NETIF_F_SG | NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM); NETIF_F_IPV6_CSUM | NETIF_F_HW_VLAN_FILTER); if (adapter->capabilities & QLCNIC_FW_CAPABILITY_TSO) { netdev->features |= (NETIF_F_TSO | NETIF_F_TSO6); Loading Loading @@ -4068,14 +4080,10 @@ qlcnic_restore_indev_addr(struct net_device *netdev, unsigned long event) qlcnic_config_indev_addr(adapter, netdev, event); if (!adapter->vlgrp) return; for (vid = 0; vid < VLAN_N_VID; vid++) { dev = vlan_group_get_device(adapter->vlgrp, vid); for_each_set_bit(vid, adapter->vlans, VLAN_N_VID) { dev = vlan_find_dev(netdev, vid); if (!dev) continue; qlcnic_config_indev_addr(adapter, dev, event); } } Loading