compat-wireless: backport multicast filter in p54 for kernel < 2.6.35
authorHauke Mehrtens <hauke@hauke-m.de>
Wed, 27 Apr 2011 18:00:59 +0000 (20:00 +0200)
committerLuis R. Rodriguez <lrodriguez@atheros.com>
Wed, 27 Apr 2011 18:05:26 +0000 (11:05 -0700)
The interface changed with kernel 2.6.35 and we have to backport these changes.

CC: Christian Lamparter <chunkeey@googlemail.com>
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
patches/25-multicast-list_head.patch

index f4d8aae5588bcdaa56d121f0931dc0b179c28942..719321ae5223bded8ff700dc6f8474b36ab1e527 100644 (file)
@@ -437,6 +437,51 @@ This also backport commit 2f787b0b76bf5de2eaa3ca3a29d89123ae03c856
  
  int determine_fw_capabilities(struct orinoco_private *priv, char *fw_name,
                              size_t fw_name_len, u32 *hw_ver);
+--- a/drivers/net/wireless/p54/main.c
++++ b/drivers/net/wireless/p54/main.c
+@@ -308,11 +308,18 @@ out:
+       return ret;
+ }
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+ static u64 p54_prepare_multicast(struct ieee80211_hw *dev,
+                                struct netdev_hw_addr_list *mc_list)
++#else
++static u64 p54_prepare_multicast(struct ieee80211_hw *dev, int mc_count,
++                               struct dev_addr_list *ha)
++#endif
+ {
+       struct p54_common *priv = dev->priv;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+       struct netdev_hw_addr *ha;
++#endif
+       int i;
+       BUILD_BUG_ON(ARRAY_SIZE(priv->mc_maclist) !=
+@@ -322,12 +329,23 @@ static u64 p54_prepare_multicast(struct
+        * Otherwise the firmware will drop it and ARP will no longer work.
+        */
+       i = 1;
++#if (LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,35))
+       priv->mc_maclist_num = netdev_hw_addr_list_count(mc_list) + i;
+       netdev_hw_addr_list_for_each(ha, mc_list) {
+               memcpy(&priv->mc_maclist[i], ha->addr, ETH_ALEN);
++#else
++      priv->mc_maclist_num = mc_count + i;
++      while (i <= mc_count) {
++              if (!ha)
++                      break;
++              memcpy(&priv->mc_maclist[i], ha->dmi_addr, ETH_ALEN);
++#endif
+               i++;
+               if (i >= ARRAY_SIZE(priv->mc_maclist))
+                       break;
++#if (LINUX_VERSION_CODE < KERNEL_VERSION(2,6,35))
++              ha = ha->next;
++#endif
+       }
+       return 1; /* update */
 --- a/drivers/net/wireless/rndis_wlan.c
 +++ b/drivers/net/wireless/rndis_wlan.c
 @@ -1629,7 +1629,11 @@ static void set_multicast_list(struct us