123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392 |
- --- a/Embedded/src/GbE/kcompat.h
- +++ b/Embedded/src/GbE/kcompat.h
- @@ -590,6 +590,10 @@ static inline void _kc_synchronize_irq()
- #define ETHTOOL_OPS_COMPAT
- #endif
-
- +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(3,3,0))
- +#define HAVE_NETIF_MSG 1
- +#endif
- +
- #ifndef HAVE_NETIF_MSG
- #define HAVE_NETIF_MSG 1
- enum {
- --- a/Embedded/src/GbE/iegbe_main.c
- +++ b/Embedded/src/GbE/iegbe_main.c
- @@ -159,9 +159,9 @@ static void iegbe_smartspeed(struct iegb
- static inline int iegbe_82547_fifo_workaround(struct iegbe_adapter *adapter,
- struct sk_buff *skb);
-
- -static void iegbe_vlan_rx_register(struct net_device *netdev, struct vlan_group *grp);
- -static void iegbe_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid);
- -static void iegbe_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid);
- +static bool iegbe_vlan_used(struct iegbe_adapter *adapter);
- +static int iegbe_vlan_rx_add_vid(struct net_device *netdev, uint16_t vid);
- +static int iegbe_vlan_rx_kill_vid(struct net_device *netdev, uint16_t vid);
- static void iegbe_restore_vlan(struct iegbe_adapter *adapter);
-
- static int iegbe_notify_reboot(struct notifier_block *,
- @@ -324,8 +324,8 @@ static void iegbe_update_mng_vlan(struct
- struct net_device *netdev = adapter->netdev;
- u16 vid = hw->mng_cookie.vlan_id;
- u16 old_vid = adapter->mng_vlan_id;
- - if (adapter->vlgrp) {
- - if (!vlan_group_get_device(adapter->vlgrp, vid)) {
- + if (iegbe_vlan_used(adapter)) {
- + if (!test_bit(old_vid, adapter->active_vlans)) {
- if (hw->mng_cookie.status &
- E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) {
- iegbe_vlan_rx_add_vid(netdev, vid);
- @@ -335,7 +335,7 @@ static void iegbe_update_mng_vlan(struct
-
- if ((old_vid != (u16)E1000_MNG_VLAN_NONE) &&
- (vid != old_vid) &&
- - !vlan_group_get_device(adapter->vlgrp, old_vid))
- + !test_bit(old_vid, adapter->active_vlans))
- iegbe_vlan_rx_kill_vid(netdev, old_vid);
- } else
- adapter->mng_vlan_id = vid;
- @@ -736,7 +736,6 @@ static const struct net_device_ops iegbe
- .ndo_do_ioctl = iegbe_ioctl,
- .ndo_validate_addr = eth_validate_addr,
-
- - .ndo_vlan_rx_register = iegbe_vlan_rx_register,
- .ndo_vlan_rx_add_vid = iegbe_vlan_rx_add_vid,
- .ndo_vlan_rx_kill_vid = iegbe_vlan_rx_kill_vid,
- #ifdef CONFIG_NET_POLL_CONTROLLER
- @@ -767,7 +766,6 @@ static int __devinit iegbe_probe(struct
- u16 eeprom_data = 0;
- u16 eeprom_apme_mask = E1000_EEPROM_APME;
- int bars;
- - DECLARE_MAC_BUF(mac);
-
- bars = pci_select_bars(pdev, IORESOURCE_MEM);
- err = pci_enable_device(pdev);
- @@ -1247,8 +1245,7 @@ static int iegbe_close(struct net_device
-
- if ((hw->mng_cookie.status &
- E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) &&
- - !(adapter->vlgrp &&
- - vlan_group_get_device(adapter->vlgrp, adapter->mng_vlan_id))) {
- + !test_bit(adapter->mng_vlan_id, adapter->active_vlans)) {
- iegbe_vlan_rx_kill_vid(netdev, adapter->mng_vlan_id);
- }
- return 0;
- @@ -2163,11 +2160,13 @@ static void iegbe_set_rx_mode(struct net
- struct iegbe_hw *hw = &adapter->hw;
- struct netdev_hw_addr *ha;
- bool use_uc = false;
- +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0))
- struct dev_addr_list *mc_ptr;
- - u32 rctl;
- u32 hash_value;
- - int i, rar_entries = E1000_RAR_ENTRIES;
- int mta_reg_count = E1000_NUM_MTA_REGISTERS;
- +#endif
- + u32 rctl;
- + int i, rar_entries = E1000_RAR_ENTRIES;
-
- /* reserve RAR[14] for LAA over-write work-around */
- if (hw->mac_type == iegbe_82571)
- @@ -2220,6 +2219,7 @@ int mta_reg_count = E1000_NUM_MTA_REGIST
-
- WARN_ON(i == rar_entries);
-
- +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0))
- mc_ptr = netdev->mc_list;
-
- for (; i < rar_entries; i++) {
- @@ -2247,6 +2247,7 @@ int mta_reg_count = E1000_NUM_MTA_REGIST
- hash_value = iegbe_hash_mc_addr(hw, mc_ptr->da_addr);
- iegbe_mta_set(hw, hash_value);
- }
- +#endif
-
- if (hw->mac_type == iegbe_82542_rev2_0)
- iegbe_leave_82542_rst(adapter);
- @@ -2821,14 +2822,14 @@ static int iegbe_tx_map(struct iegbe_ada
- * Avoid terminating buffers within evenly-aligned
- * dwords. */
- if(unlikely(adapter->pcix_82544 &&
- - !((unsigned long)(frag->page+offset+size-1) & 4) &&
- + !((unsigned long)(frag->page.p+offset+size-1) & 4) &&
- size > 4))
- size -= 4;
-
- buffer_info->length = size;
- buffer_info->dma =
- pci_map_page(adapter->pdev,
- - frag->page,
- + frag->page.p,
- offset,
- size,
- PCI_DMA_TODEVICE);
- @@ -3131,7 +3132,7 @@ static int iegbe_xmit_frame(struct sk_bu
- }
- }
-
- - if (unlikely(adapter->vlgrp && vlan_tx_tag_present(skb))) {
- + if (unlikely(iegbe_vlan_used(adapter) && vlan_tx_tag_present(skb))) {
- tx_flags |= E1000_TX_FLAGS_VLAN;
- tx_flags |= (vlan_tx_tag_get(skb) << E1000_TX_FLAGS_VLAN_SHIFT);
- }
- @@ -3832,10 +3833,12 @@ static bool iegbe_clean_rx_irq(struct ie
-
- skb->protocol = eth_type_trans(skb, netdev);
-
- - if (unlikely(adapter->vlgrp &&
- + if (unlikely(iegbe_vlan_used(adapter) &&
- (status & E1000_RXD_STAT_VP))) {
- - vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
- - le16_to_cpu(rx_desc->special));
- + u16 vid;
- +
- + vid = le16_to_cpu(rx_desc->special);
- + __vlan_hwaccel_put_tag(skb, vid);
- } else {
- netif_receive_skb(skb);
- }
- @@ -3986,9 +3989,10 @@ copydone:
- cpu_to_le16(E1000_RXDPS_HDRSTAT_HDRSP)))
- adapter->rx_hdr_split++;
-
- - if(unlikely(adapter->vlgrp && (staterr & E1000_RXD_STAT_VP))) {
- - vlan_hwaccel_receive_skb(skb, adapter->vlgrp,
- - le16_to_cpu(rx_desc->wb.middle.vlan));
- + if(unlikely(iegbe_vlan_used(adapter) && (staterr & E1000_RXD_STAT_VP))) {
- + u16 vid;
- + vid = le16_to_cpu(rx_desc->wb.middle.vlan);
- + __vlan_hwaccel_put_tag(skb, vid);
- } else {
- netif_receive_skb(skb);
- }
- @@ -4496,17 +4500,25 @@ iegbe_io_write(struct iegbe_hw *hw, unsi
- outl(value, port);
- }
-
- -static void iegbe_vlan_rx_register(struct net_device *netdev,
- - struct vlan_group *grp)
- +static bool iegbe_vlan_used(struct iegbe_adapter *adapter)
- +{
- + u16 vid;
- +
- + for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID)
- + return true;
- +
- + return false;
- +}
- +
- +static void iegbe_vlan_mode(struct net_device *netdev, bool vlan_on)
- {
- struct iegbe_adapter *adapter = netdev_priv(netdev);
- uint32_t ctrl, rctl;
-
- if (!test_bit(__E1000_DOWN, &adapter->flags))
- iegbe_irq_disable(adapter);
- - adapter->vlgrp = grp;
-
- - if(grp) {
- + if(vlan_on) {
- /* enable VLAN tag insert/strip */
- ctrl = E1000_READ_REG(&adapter->hw, CTRL);
- ctrl |= E1000_CTRL_VME;
- @@ -4538,30 +4550,37 @@ static void iegbe_vlan_rx_register(struc
- iegbe_irq_enable(adapter);
- }
-
- -static void iegbe_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
- +static int iegbe_vlan_rx_add_vid(struct net_device *netdev, u16 vid)
- {
- struct iegbe_adapter *adapter = netdev_priv(netdev);
- uint32_t vfta, index;
- if((adapter->hw.mng_cookie.status &
- E1000_MNG_DHCP_COOKIE_STATUS_VLAN_SUPPORT) &&
- (vid == adapter->mng_vlan_id)) {
- - return;
- + return 0;
- }
- +
- + if (!iegbe_vlan_used(adapter))
- + iegbe_vlan_mode(netdev, true);
- +
- /* add VID to filter table */
- index = (vid >> 0x5) & 0x7F;
- vfta = E1000_READ_REG_ARRAY(&adapter->hw, VFTA, index);
- vfta |= (0x1 << (vid & 0x1F));
- iegbe_write_vfta(&adapter->hw, index, vfta);
- +
- + set_bit(vid, adapter->active_vlans);
- +
- + return 0;
- }
-
- -static void iegbe_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
- +static int iegbe_vlan_rx_kill_vid(struct net_device *netdev, u16 vid)
- {
- struct iegbe_adapter *adapter = netdev_priv(netdev);
- u32 vfta, index;
-
- if (!test_bit(__E1000_DOWN, &adapter->flags))
- iegbe_irq_disable(adapter);
- - vlan_group_set_device(adapter->vlgrp, vid, NULL);
- if (!test_bit(__E1000_DOWN, &adapter->flags))
- iegbe_irq_enable(adapter);
-
- @@ -4570,21 +4589,26 @@ static void iegbe_vlan_rx_kill_vid(struc
- vfta = E1000_READ_REG_ARRAY(&adapter->hw, VFTA, index);
- vfta &= ~(0x1 << (vid & 0x1F));
- iegbe_write_vfta(&adapter->hw, index, vfta);
- +
- + clear_bit(vid, adapter->active_vlans);
- +
- + if (!iegbe_vlan_used(adapter))
- + iegbe_vlan_mode(netdev, false);
- +
- + return 0;
- }
-
- static void iegbe_restore_vlan(struct iegbe_adapter *adapter)
- {
- - iegbe_vlan_rx_register(adapter->netdev, adapter->vlgrp);
- -
- - if (adapter->vlgrp) {
- u16 vid;
- - for (vid = 0x0; vid < VLAN_GROUP_ARRAY_LEN; vid++) {
- - if (!vlan_group_get_device(adapter->vlgrp, vid))
- - continue;
- +
- + if (!iegbe_vlan_used(adapter))
- + return;
- +
- + iegbe_vlan_mode(adapter->netdev, true);
- + for_each_set_bit(vid, adapter->active_vlans, VLAN_N_VID)
- iegbe_vlan_rx_add_vid(adapter->netdev, vid);
- }
- - }
- -}
-
-
- int iegbe_set_spd_dplx(struct iegbe_adapter *adapter, u16 spddplx)
- @@ -4864,10 +4888,11 @@ iegbe_resume(struct pci_dev *pdev)
- default:
- break;
- }
- -#endif
-
- return 0x0;
- }
- +#endif
- +
-
- #ifdef CONFIG_NET_POLL_CONTROLLER
- /*
- --- a/Embedded/src/GbE/iegbe_ethtool.c
- +++ b/Embedded/src/GbE/iegbe_ethtool.c
- @@ -327,6 +327,7 @@ iegbe_set_pauseparam(struct net_device *
- return 0;
- }
-
- +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0))
- static uint32_t
- iegbe_get_rx_csum(struct net_device *netdev)
- {
- @@ -392,6 +393,7 @@ iegbe_set_tso(struct net_device *netdev,
- return 0;
- }
- #endif /* NETIF_F_TSO */
- +#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) */
-
- static uint32_t
- iegbe_get_msglevel(struct net_device *netdev)
- @@ -807,6 +809,7 @@ err_setup_rx:
- E1000_82542_##R : E1000_##R; \
- return 1; } }
-
- +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0))
- static int
- iegbe_reg_test(struct iegbe_adapter *adapter, uint64_t *data)
- {
- @@ -1710,6 +1713,7 @@ iegbe_diag_test(struct net_device *netde
- }
- msleep_interruptible(0xfa0);
- }
- +#endif /* (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0)) */
-
- static void
- iegbe_get_wol(struct net_device *netdev, struct ethtool_wolinfo *wol)
- @@ -1812,6 +1816,7 @@ iegbe_set_wol(struct net_device *netdev,
- /* bit defines for adapter->led_status */
- #define E1000_LED_ON 0
-
- +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0))
- static void
- iegbe_led_blink_callback(unsigned long data)
- {
- @@ -1864,6 +1869,7 @@ iegbe_phys_id(struct net_device *netdev,
-
- return 0;
- }
- +#endif
-
- static int
- iegbe_nway_reset(struct net_device *netdev)
- @@ -1876,11 +1882,13 @@ iegbe_nway_reset(struct net_device *netd
- return 0;
- }
-
- +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0))
- static int
- iegbe_get_stats_count(struct net_device *netdev)
- {
- return E1000_STATS_LEN;
- }
- +#endif
-
- static void
- iegbe_get_ethtool_stats(struct net_device *netdev,
- @@ -1936,6 +1944,8 @@ struct ethtool_ops iegbe_ethtool_ops = {
- .set_ringparam = iegbe_set_ringparam,
- .get_pauseparam = iegbe_get_pauseparam,
- .set_pauseparam = iegbe_set_pauseparam,
- +
- +#if (LINUX_VERSION_CODE < KERNEL_VERSION(3,3,0))
- .get_rx_csum = iegbe_get_rx_csum,
- .set_rx_csum = iegbe_set_rx_csum,
- .get_tx_csum = iegbe_get_tx_csum,
- @@ -1946,11 +1956,13 @@ struct ethtool_ops iegbe_ethtool_ops = {
- .get_tso = ethtool_op_get_tso,
- .set_tso = iegbe_set_tso,
- #endif
- +
- .self_test_count = iegbe_diag_test_count,
- .self_test = iegbe_diag_test,
- - .get_strings = iegbe_get_strings,
- .phys_id = iegbe_phys_id,
- .get_stats_count = iegbe_get_stats_count,
- +#endif
- + .get_strings = iegbe_get_strings,
- .get_ethtool_stats = iegbe_get_ethtool_stats,
- };
-
- --- a/Embedded/src/GbE/gcu_main.c
- +++ b/Embedded/src/GbE/gcu_main.c
- @@ -93,7 +93,7 @@ static struct pci_driver gcu_driver = {
- };
-
- static struct gcu_adapter *global_adapter = 0;
- -static spinlock_t global_adapter_spinlock = SPIN_LOCK_UNLOCKED;
- +static DEFINE_SPINLOCK(global_adapter_spinlock);
- static unsigned long g_intflags = 0;
-
- MODULE_AUTHOR("Intel(R) Corporation");
- --- a/Embedded/src/GbE/iegbe.h
- +++ b/Embedded/src/GbE/iegbe.h
- @@ -257,7 +257,7 @@ struct iegbe_adapter {
- struct timer_list tx_fifo_stall_timer;
- struct timer_list watchdog_timer;
- struct timer_list phy_info_timer;
- - struct vlan_group *vlgrp;
- + unsigned long active_vlans[BITS_TO_LONGS(VLAN_N_VID)];
- uint16_t mng_vlan_id;
- uint32_t bd_number;
- uint32_t rx_buffer_len;
|