summaryrefslogtreecommitdiff
path: root/package/system/ep80579-drivers/patches/711-3.3-gbe-fixes.patch
diff options
context:
space:
mode:
Diffstat (limited to 'package/system/ep80579-drivers/patches/711-3.3-gbe-fixes.patch')
-rw-r--r--package/system/ep80579-drivers/patches/711-3.3-gbe-fixes.patch392
1 files changed, 0 insertions, 392 deletions
diff --git a/package/system/ep80579-drivers/patches/711-3.3-gbe-fixes.patch b/package/system/ep80579-drivers/patches/711-3.3-gbe-fixes.patch
deleted file mode 100644
index 7b2df63..0000000
--- a/package/system/ep80579-drivers/patches/711-3.3-gbe-fixes.patch
+++ /dev/null
@@ -1,392 +0,0 @@
---- 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;