madwifi: properly fix build against Linux 3.7 and later
authorJo-Philipp Wich <jow@openwrt.org>
Wed, 29 May 2013 16:08:13 +0000 (16:08 +0000)
committerJo-Philipp Wich <jow@openwrt.org>
Wed, 29 May 2013 16:08:13 +0000 (16:08 +0000)
SVN-Revision: 36762

66 files changed:
net/madwifi/Makefile
net/madwifi/patches/123-ccmp_checks.patch
net/madwifi/patches/200-no_debug.patch
net/madwifi/patches/202-debug_variables.patch
net/madwifi/patches/300-napi_polling.patch
net/madwifi/patches/305-pureg_fix.patch
net/madwifi/patches/309-micfail_detect.patch
net/madwifi/patches/311-bssid_alloc.patch
net/madwifi/patches/312-erpupdate.patch
net/madwifi/patches/325-channel_spam.patch
net/madwifi/patches/330-beaconcal.patch
net/madwifi/patches/334-input.patch
net/madwifi/patches/340-maxrate.patch
net/madwifi/patches/341-minrate.patch
net/madwifi/patches/342-performance.patch
net/madwifi/patches/345-minstrel_sampling.patch
net/madwifi/patches/346-protmode_trig.patch
net/madwifi/patches/352-ani_fix.patch
net/madwifi/patches/357-bgscan_thresh.patch
net/madwifi/patches/360-sta_nodes.patch
net/madwifi/patches/361-bmiss_handling.patch
net/madwifi/patches/362-rssithr.patch
net/madwifi/patches/368-sta_ie_preserve.patch
net/madwifi/patches/370-wdsvap.patch
net/madwifi/patches/372-queue_vif.patch
net/madwifi/patches/374-nbtt_fix.patch
net/madwifi/patches/375-atim_tsf_update.patch
net/madwifi/patches/378-adhoc_crash_fix.patch
net/madwifi/patches/379-invalid_rate_fix.patch
net/madwifi/patches/380-noderef_hack.patch
net/madwifi/patches/381-ibss_modes.patch
net/madwifi/patches/383-ibss_hostap.patch
net/madwifi/patches/384-hwdetect.patch
net/madwifi/patches/385-antenna_fix.patch
net/madwifi/patches/386-acl_crashfix.patch
net/madwifi/patches/387-maxassoc.patch
net/madwifi/patches/389-autochannel.patch
net/madwifi/patches/390-frame_type.patch
net/madwifi/patches/393-mbss_vap_auth.patch
net/madwifi/patches/394-probereq.patch
net/madwifi/patches/396-napi_ff_fix.patch
net/madwifi/patches/400-new_hal.patch
net/madwifi/patches/408-changeset_r3337.patch
net/madwifi/patches/411-autochannel_multi.patch
net/madwifi/patches/414-txpower.patch
net/madwifi/patches/416-wprobe.patch
net/madwifi/patches/420-diversity_fix.patch
net/madwifi/patches/421-channel_handling.patch
net/madwifi/patches/424-timing.patch
net/madwifi/patches/425-rc_rexmit.patch
net/madwifi/patches/430-use_netdev_priv.patch
net/madwifi/patches/432-netdev_ops.patch
net/madwifi/patches/434-name-alloc-fix.patch
net/madwifi/patches/436-injection_checks.patch
net/madwifi/patches/440-wme_cleanup.patch
net/madwifi/patches/441-fix_ibss_node_handling.patch
net/madwifi/patches/446-single_module.patch
net/madwifi/patches/448-beacon_handling_fixes.patch
net/madwifi/patches/451-ibss_race_fix.patch
net/madwifi/patches/452-minstrel_no_timer.patch
net/madwifi/patches/455-beacon_watchdog.patch
net/madwifi/patches/459-2.6.33_compile.patch
net/madwifi/patches/460-pci_softled_disable.patch
net/madwifi/patches/462-fix_ap_scan.patch
net/madwifi/patches/472-remove_11n_devids.patch
net/madwifi/patches/479-deprecate-devinitdata.patch [new file with mode: 0644]

index f41fb1ebdda5cd14ad1edc105b9577ba50fcef80..d177cf8a7f53e0888c9658ab05f6365dd399fc88 100644 (file)
@@ -195,6 +195,7 @@ MAKE_ARGS:= \
        TOOLPREFIX="$(KERNEL_CROSS)" \
        TOOLPATH="$(KERNEL_CROSS)" \
        KERNELPATH="$(LINUX_DIR)" \
+       KERNELRELEASE="$(LINUX_VERSION)" \
        LDOPTS="--no-warn-mismatch " \
        ATH_RATE="$(RATE_CONTROL)" \
        ATH_CAP_SUPERG_COMP="$(COMPRESSION)" \
index 6178a3f78650a421f379e2e6019ce8f43c74eb97..d9a0ad4e2b96f045453c4aa71340e6d555374191 100644 (file)
@@ -59,7 +59,7 @@
  }
  
  /*
-@@ -475,6 +483,9 @@ ccmp_encrypt(struct ieee80211_key *key,
+@@ -475,6 +483,9 @@ ccmp_encrypt(struct ieee80211_key *key, 
        uint8_t *mic, *pos;
        u_int space;
  
@@ -69,7 +69,7 @@
        ctx->cc_vap->iv_stats.is_crypto_ccmp++;
  
        skb = skb0;
-@@ -589,6 +600,9 @@ ccmp_decrypt(struct ieee80211_key *key,
+@@ -589,6 +600,9 @@ ccmp_decrypt(struct ieee80211_key *key, 
        uint8_t *pos, *mic;
        u_int space;
  
index 3f46ec88b46bfbd38b1e88c927e7e9b549e695b0..d5f285c241ebd3547232e1e6634c629b5c6cbee2 100644 (file)
@@ -43,7 +43,7 @@
        ic->ic_set_dfs_testmode     = ath_set_dfs_testmode;
        ic->ic_get_dfs_testmode     = ath_get_dfs_testmode;
  
-@@ -1297,12 +1301,14 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1297,12 +1301,14 @@ ath_vap_create(struct ieee80211com *ic, 
                /* If no default VAP debug flags are passed, allow a few to
                 * transfer down from the driver to new VAPs so we can have load
                 * time debugging for VAPs too. */
index 33e6efad13b7270ca714b12e9dd1be632292faa6..041344ff0a6be388c5c7d7f1dd1f198fb345f398 100644 (file)
@@ -10,7 +10,7 @@
  #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,52))
  MODULE_PARM(ath_debug, "i");
  #else
-@@ -465,8 +465,8 @@ static void ath_printrxbuf(const struct
+@@ -465,8 +465,8 @@ static void ath_printrxbuf(const struct 
  static void ath_printtxbuf(const struct ath_buf *, int);
  #endif /* defined(AR_DEBUG) */
  
        struct ieee80211com *ic = &sc->sc_ic;
        int required = 0;
  
-@@ -366,6 +370,7 @@ static struct ath_rp *pulse_prev(struct
+@@ -366,6 +370,7 @@ static struct ath_rp *pulse_prev(struct 
  #define MR_FAIL_MIN_PERIOD    4
  #define MR_FAIL_MAX_PERIOD    5
  
        DPRINTF(sc, ATH_DEBUG_DOTHPULSES, "%s: ath_rp_record: "
 --- a/ath_rate/minstrel/minstrel.c
 +++ b/ath_rate/minstrel/minstrel.c
-@@ -931,7 +931,9 @@ ath_proc_read_nodes(struct ieee80211vap
+@@ -931,7 +931,9 @@ ath_proc_read_nodes(struct ieee80211vap 
                            (struct ieee80211_node_table *) &vap->iv_ic->ic_sta;
                unsigned int x = 0;
                unsigned int this_tp, this_prob, this_eprob;
index bde7684946c6ce1859628bb948c00eb22bb5fe1e..bc62d7b4a640fd3266ac8fafa8cd6498457cb762 100644 (file)
  }
  
  /*
-@@ -6360,15 +6426,25 @@ ath_setdefantenna(struct ath_softc *sc,
+@@ -6360,15 +6426,25 @@ ath_setdefantenna(struct ath_softc *sc, 
        sc->sc_rxotherant = 0;
  }
  
                                 * device was too busy */
                                if (ni_tmp != NULL) {
                                        /* node reference was leaked */
-@@ -2322,8 +2322,8 @@ forward_mgmt_to_app(struct ieee80211vap
+@@ -2322,8 +2322,8 @@ forward_mgmt_to_app(struct ieee80211vap 
                skb1->protocol = __constant_htons(0x0019);  /* ETH_P_80211_RAW */
  
                ni_tmp = SKB_CB(skb1)->ni;
index 8adb8a716228cde499486e7d7c4967588b7e5f30..231ab081a42264ad6cba0a5adfb92a0d76fa8e06 100644 (file)
@@ -49,7 +49,7 @@
                        break;
                case IEEE80211_M_WDS:
                        if (skb->len < sizeof(struct ieee80211_frame_addr4)) {
-@@ -3066,7 +3063,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3066,7 +3063,7 @@ ieee80211_recv_mgmt(struct ieee80211vap 
        u_int8_t *frm, *efrm;
        u_int8_t *ssid, *rates, *xrates, *suppchan, *wpa, *rsn, *wme, *ath;
        u_int8_t rate;
@@ -58,7 +58,7 @@
        u_int8_t qosinfo;
  
        if (ni_or_null == NULL)
-@@ -3096,11 +3093,15 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3096,11 +3093,15 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                 *    o station mode when associated (to collect state
                 *      updates such as 802.11g slot time), or
                 *    o adhoc mode (to discover neighbors)
@@ -75,7 +75,7 @@
                        vap->iv_stats.is_rx_mgtdiscard++;
                        return;
                }
-@@ -3184,6 +3185,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3184,6 +3185,7 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                                        break;
                                }
                                scan.erp = frm[2];
@@ -83,7 +83,7 @@
                                break;
                        case IEEE80211_ELEMID_RSN:
                                scan.rsn = frm;
-@@ -3421,6 +3423,20 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3421,6 +3423,20 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                                ieee80211_bg_scan(vap);
                        return;
                }
index ca4103a206cebe1d5571ca330cdd2f4bc28a0feb..d74a390d598396cf6e568ecbbe0536fa16d406c0 100644 (file)
@@ -1,6 +1,6 @@
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -6457,6 +6457,7 @@ ath_rx_poll(struct net_device *dev, int
+@@ -6457,6 +6457,7 @@ ath_rx_poll(struct net_device *dev, int 
        int type;
        u_int phyerr;
        u_int processed = 0, early_stop = 0;
                        IEEE80211_DISCARD_MAC(vap, IEEE80211_MSG_INPUT,
                                ni->ni_macaddr, "data", "%s", "demic error");
                        IEEE80211_NODE_STAT(ni, rx_demicfail);
-@@ -4293,6 +4293,47 @@ ath_eth_type_trans(struct sk_buff *skb,
+@@ -4293,6 +4293,47 @@ ath_eth_type_trans(struct sk_buff *skb, 
  }
  #endif
  
index 005a67738c74936264d7499e4bfbc7b7c5a89863..8059b99e02fb588cfbb0210a03cc33043b7390d9 100644 (file)
@@ -1,6 +1,6 @@
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -1354,7 +1354,7 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1354,7 +1354,7 @@ ath_vap_create(struct ieee80211com *ic, 
                TAILQ_FOREACH(v, &ic->ic_vaps, iv_next)
                        id_mask |= (1 << ATH_GET_VAP_ID(v->iv_myaddr));
  
index f878acd8f474c6a1f43a4033495cccf75f74a5eb..34fae68dbd639b5d6cc2ce78366533e6ec58c22a 100644 (file)
@@ -15,7 +15,7 @@
        /* if it is a mode change beacon for dynamic turbo case */
 --- a/net80211/ieee80211_input.c
 +++ b/net80211/ieee80211_input.c
-@@ -3431,9 +3431,12 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3431,9 +3431,12 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                        /* Assume no ERP IE == 11b AP */
                        if ((!has_erp || (has_erp && (scan.erp & IEEE80211_ERP_NON_ERP_PRESENT))) &&
                                !(ic->ic_flags & IEEE80211_F_USEPROT)) {
index e34b7a409292e7f0bdc7969248f760ac91346d01..a4b9463a2995951a30c02c7187e15f1703df4d95 100644 (file)
@@ -1,6 +1,6 @@
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -9792,7 +9792,9 @@ ath_getchannels(struct net_device *dev,
+@@ -9792,7 +9792,9 @@ ath_getchannels(struct net_device *dev, 
        /*
         * Convert HAL channels to ieee80211 ones.
         */
@@ -10,7 +10,7 @@
        for (i = 0; i < nchan; i++) {
                HAL_CHANNEL *c = &chans[i];
                struct ieee80211_channel *ichan = &ic->ic_channels[i];
-@@ -9819,6 +9821,7 @@ ath_getchannels(struct net_device *dev,
+@@ -9819,6 +9821,7 @@ ath_getchannels(struct net_device *dev, 
                ic->ic_chan_non_occupy[i].tv_sec  = 0;
                ic->ic_chan_non_occupy[i].tv_usec = 0;
  
@@ -18,7 +18,7 @@
                IPRINTF(sc, "Channel %3d (%4d MHz) Max Tx Power %d dBm%s "
                                "[%d hw %d reg] Flags%s%s%s%s%s%s%s%s%s%s%s%s%"
                                "s%s%s%s%s%s%s%s%s%s%s%s\n",
-@@ -9907,6 +9910,7 @@ ath_getchannels(struct net_device *dev,
+@@ -9907,6 +9910,7 @@ ath_getchannels(struct net_device *dev, 
                                (c->privFlags & 0x0080 ? 
                                 " PF & (1 << 7)" : "")
                                );
index a338dc743a797750743de9597642117007701ccc..2b4895f359815eabe7aad5e890fa19bde846f702 100644 (file)
@@ -79,7 +79,7 @@
  
                sc->sc_stats.ast_be_xmit++;             /* XXX per-VAP? */
        }
-@@ -5403,6 +5431,7 @@ ath_beacon_config(struct ath_softc *sc,
+@@ -5403,6 +5431,7 @@ ath_beacon_config(struct ath_softc *sc, 
                ath_hal_beacontimers(ah, &bs);
                sc->sc_imask |= HAL_INT_BMISS;
                ath_hal_intrset(ah, sc->sc_imask);
@@ -87,7 +87,7 @@
        } else {
                ath_hal_intrset(ah, 0);
                if (reset_tsf)
-@@ -5414,8 +5443,11 @@ ath_beacon_config(struct ath_softc *sc,
+@@ -5414,8 +5443,11 @@ ath_beacon_config(struct ath_softc *sc, 
                         */
                        intval |= HAL_BEACON_ENA;
                        sc->sc_imask |= HAL_INT_SWBA;
index 7c133670143224a6c15606875e9a20c3f31e45ef..1e1b2760f3fb365683b6fe3f661e95962c8ac9e7 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net80211/ieee80211_input.c
 +++ b/net80211/ieee80211_input.c
-@@ -950,6 +950,9 @@ ieee80211_input_all(struct ieee80211com
+@@ -950,6 +950,9 @@ ieee80211_input_all(struct ieee80211com 
        TAILQ_FOREACH(vap, &ic->ic_vaps, iv_next) {
                struct sk_buff *skb1;
  
index ae93f02d26c4b3658f616ba215bda31d6ea91769..4613ed3f56292544d5f5a9b01bb0b455f832fef8 100644 (file)
@@ -1,6 +1,6 @@
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -1307,6 +1307,7 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1307,6 +1307,7 @@ ath_vap_create(struct ieee80211com *ic, 
        vap->iv_key_set = ath_key_set;
        vap->iv_key_update_begin = ath_key_update_begin;
        vap->iv_key_update_end = ath_key_update_end;
index cc04ae074c64eb1b58900e7410135dad51216902..53567e2f577b4a9345ecb060429a4dee907532e7 100644 (file)
@@ -1,6 +1,6 @@
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -1308,6 +1308,7 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1308,6 +1308,7 @@ ath_vap_create(struct ieee80211com *ic, 
        vap->iv_key_update_begin = ath_key_update_begin;
        vap->iv_key_update_end = ath_key_update_end;
        vap->iv_maxrateindex = 0;
index 88cec182ddd41f27c851e577d77d91bb40e30a7d..8015643dcdbb3d77c9a8590fbac2a243ad5dda84 100644 (file)
@@ -73,7 +73,6 @@
 -              ieee80211_ref_node(SKB_CB(skb)->ni);
 -              /* Unshare the node, decrementing users in the old skb */
 -              skb = skb_unshare(skb, GFP_ATOMIC);
--      }
 +      need_headroom -= skb_headroom(skb);
 +      if (isff)
 +              need_tailroom -= skb_tailroom(skb2);
 +              need_headroom = 0;
 +      if (need_tailroom < 0)
 +              need_tailroom = 0;
++
++      if (skb_cloned(skb) || (need_headroom > 0) ||
++              (!isff && (need_tailroom > 0))) {
++
++              if (pskb_expand_head(skb, need_headroom, need_tailroom, GFP_ATOMIC)) {
++                      IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
++                              "%s: cannot expand storage (tail)\n", __func__);
++                      goto error;
++              }
+       }
  
--#ifdef ATH_SUPERG_FF
--      if (isff) {
+ #ifdef ATH_SUPERG_FF
+       if (isff) {
 -              if (skb == NULL) {
 -                      IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
 -                              "%s: cannot unshare for encapsulation\n",
 -                              __func__);
 -                      vap->iv_stats.is_tx_nobuf++;
 -                      ieee80211_dev_kfree_skb(&skb2);
-+      if (skb_cloned(skb) || (need_headroom > 0) ||
-+              (!isff && (need_tailroom > 0))) {
+-
 -                      return NULL;
-+              if (pskb_expand_head(skb, need_headroom, need_tailroom, GFP_ATOMIC)) {
-+                      IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
-+                              "%s: cannot expand storage (tail)\n", __func__);
-+                      goto error;
-               }
-+      }
+-              }
++              inter_headroom -= skb_headroom(skb2);
++              if (inter_headroom < 0)
++                      inter_headroom = 0;
++              if ((skb_cloned(skb2) ||
++                      (inter_headroom > 0) || (need_tailroom > 0))) {
  
 -              /* first skb header */
 -              if (skb_headroom(skb) < need_headroom) {
 -                      struct sk_buff *tmp = skb;
 -                      skb = skb_realloc_headroom(skb, need_headroom);
 -                      if (skb == NULL) {
--                              IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
++                      if (pskb_expand_head(skb2, inter_headroom,
++                              need_tailroom, GFP_ATOMIC)) {
+                               IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
 -                                      "%s: cannot expand storage (head1)\n",
 -                                      __func__);
 -                              vap->iv_stats.is_tx_nobuf++;
 -                      /* NB: cb[] area was copied, but not next ptr. must do that
 -                       *     prior to return on success. */
 -              }
-+#ifdef ATH_SUPERG_FF
-+      if (isff) {
-+              inter_headroom -= skb_headroom(skb2);
-+              if (inter_headroom < 0)
-+                      inter_headroom = 0;
-+              if ((skb_cloned(skb2) ||
-+                      (inter_headroom > 0) || (need_tailroom > 0))) {
+-
 -              /* second skb with header and tail adjustments possible */
 -              if (skb_tailroom(skb2) < need_tailroom) {
 -                      int n = 0;
 -                      if (pskb_expand_head(skb2, n,
 -                          need_tailroom - skb_tailroom(skb2), GFP_ATOMIC)) {
 -                              ieee80211_dev_kfree_skb(&skb2);
-+                      if (pskb_expand_head(skb2, inter_headroom,
-+                              need_tailroom, GFP_ATOMIC)) {
-                               IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
+-                              IEEE80211_DPRINTF(vap, IEEE80211_MSG_OUTPUT,
 -                                      "%s: cannot expand storage (tail2)\n",
 -                                      __func__);
 -                              vap->iv_stats.is_tx_nobuf++;
 -                      } else
 -                              ieee80211_skb_copy_noderef(tmp, skb);
 -                      ieee80211_dev_kfree_skb(&tmp);
--              }
+               }
 -              if (skb) {
 -                      skb->next = skb2;
-               }
+-              }
 -              return skb;
 +              skb->next = skb2;
        }
index 63fcb8a6133f597e3f9fa5467a2b801385566e55..d89990c837bb3ba73a1eea7f4da908bc02f5c6e1 100644 (file)
@@ -20,7 +20,7 @@
         *      multiple segments.
 --- a/ath_rate/minstrel/minstrel.c
 +++ b/ath_rate/minstrel/minstrel.c
-@@ -333,15 +333,19 @@ ath_rate_findrate(struct ath_softc *sc,
+@@ -333,15 +333,19 @@ ath_rate_findrate(struct ath_softc *sc, 
                if (sn->static_rate_ndx >= 0) {
                            ndx = sn->static_rate_ndx;
                } else {
index 5b5cec6e984b41c05ddc0d2b7842c36e1a71aa7d..830a6a852ce6aa4573d6cf3c2d622626c961e86b 100644 (file)
@@ -13,7 +13,7 @@
        TAILQ_INIT(&ic->ic_vaps);
 --- a/net80211/ieee80211_input.c
 +++ b/net80211/ieee80211_input.c
-@@ -3411,14 +3411,18 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3411,14 +3411,18 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                        IEEE80211_IS_CHAN_ANYG(ic->ic_curchan)) {
  
                        /* Assume no ERP IE == 11b AP */
index 938d11c623c23ad385ecd8895b71d91f20b82c53..e8dce0cbe40daa1f0be723796b92c0216316da59 100644 (file)
@@ -23,7 +23,7 @@
        return 0;
  bad3:
        ieee80211_ifdetach(ic);
-@@ -2428,6 +2431,43 @@ ath_chan2flags(struct ieee80211_channel
+@@ -2428,6 +2431,43 @@ ath_chan2flags(struct ieee80211_channel 
        return flags;
  }
  
index bf3483776ff2806db9b7b9b0ffa569dc945481e2..df0a6c29d98ef7ffbacc08dfffebbc2e7cfdcd68 100644 (file)
@@ -91,7 +91,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
  }
  
  static __inline int
-@@ -3258,6 +3260,25 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3258,6 +3260,25 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                        /* record tsf of last beacon */
                        memcpy(ni->ni_tstamp.data, scan.tstamp,
                                sizeof(ni->ni_tstamp));
index 8d2dd9ddd6b631bc921a5251d467f345363de520..2060001232d7386f72f6ac4a57342e8e56451d0c 100644 (file)
@@ -219,7 +219,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
        return ret;
 --- a/net80211/ieee80211_wireless.c
 +++ b/net80211/ieee80211_wireless.c
-@@ -514,8 +514,9 @@ ieee80211_ioctl_siwap(struct net_device
+@@ -514,8 +514,9 @@ ieee80211_ioctl_siwap(struct net_device 
                        vap->iv_flags |= IEEE80211_F_DESBSSID;
  
                IEEE80211_ADDR_COPY(vap->iv_des_bssid, &ap_addr->sa_data);
index 15d238f7b458fc1e70385d0876c95eca9b114391..b33cc3f73e97022b363c42a8ec01c1059c829326 100644 (file)
@@ -7,7 +7,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
 
 --- a/net80211/ieee80211_input.c
 +++ b/net80211/ieee80211_input.c
-@@ -3400,12 +3400,17 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3400,12 +3400,17 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                        }
  
                        /* WDS/Repeater: re-schedule software beacon timer for 
index 5a86833bb5e1d1ed72178518ecfe3af358dd39bd..7e178e13ad26e061d65761f8e61040bc37da4ef1 100644 (file)
@@ -59,7 +59,7 @@ Signed-off-by: Felix Fietkau <nbd@openwrt.org>
        { IEEE80211_PARAM_UAPSDINFO,
 --- a/net80211/ieee80211_input.c
 +++ b/net80211/ieee80211_input.c
-@@ -3261,6 +3261,19 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3261,6 +3261,19 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                        memcpy(ni->ni_tstamp.data, scan.tstamp,
                                sizeof(ni->ni_tstamp));
  
index fbd779ea0b54504232281acb4d6294d133ba1e72..4beef62228ebd7739b078fdda8c928196e3fc299 100644 (file)
@@ -29,7 +29,7 @@
        if (se->se_fails && (jiffies - se->se_lastfail) > STA_FAILS_AGE*HZ) {
 --- a/net80211/ieee80211_input.c
 +++ b/net80211/ieee80211_input.c
-@@ -3106,6 +3106,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3106,6 +3106,7 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                 */
                IEEE80211_VERIFY_LENGTH(efrm - frm, 12);
                memset(&scan, 0, sizeof(scan));
index 8a0e823ae820c1afdb86a3a4ac9edda6d9329860..e507afb25d65bae7e67ff24530c42dd6d5e75220 100644 (file)
@@ -44,7 +44,7 @@
  
        if (ic->ic_dev->flags & IFF_RUNNING) {
                /* needs to disable hardware too */
-@@ -1271,8 +1269,12 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1271,8 +1269,12 @@ ath_vap_create(struct ieee80211com *ic, 
                } else
                        ic_opmode = opmode;
                break;
@@ -58,7 +58,7 @@
                /* permit multiple APs and/or WDS links */
                /* XXX sta+ap for repeater/bridge application */
                if ((sc->sc_nvaps != 0) && (ic->ic_opmode == IEEE80211_M_STA))
-@@ -1304,7 +1306,7 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1304,7 +1306,7 @@ ath_vap_create(struct ieee80211com *ic, 
        }
  
        avp = dev->priv;
  {
  #define       IEEE80211_C_OPMODE \
        (IEEE80211_C_IBSS | IEEE80211_C_HOSTAP | IEEE80211_C_AHDEMO | \
-@@ -510,9 +525,18 @@ ieee80211_vap_setup(struct ieee80211com
+@@ -510,9 +525,18 @@ ieee80211_vap_setup(struct ieee80211com 
  
        vap->iv_monitor_crc_errors = 0;
        vap->iv_monitor_phy_errors = 0;
  
        switch (cmd) {
        case SIOCG80211STATS:
-@@ -5921,8 +5922,20 @@ ieee80211_ioctl(struct net_device *dev,
+@@ -5921,8 +5922,20 @@ ieee80211_ioctl(struct net_device *dev, 
        case SIOC80211IFDESTROY:
                if (!capable(CAP_NET_ADMIN))
                        return -EPERM;
                                        skb1 = skb;
                                        skb = NULL;
                                }
-@@ -3084,8 +3133,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3084,8 +3133,7 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                    (vap->iv_opmode == IEEE80211_M_STA && ni->ni_associd) ||
                    (vap->iv_opmode == IEEE80211_M_IBSS) ||
                        ((subtype == IEEE80211_FC0_SUBTYPE_BEACON) &&
                        vap->iv_stats.is_rx_mgtdiscard++;
                        return;
                }
-@@ -3471,13 +3519,56 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3471,13 +3519,56 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                 */
                if (ic->ic_flags & IEEE80211_F_SCAN) {
                        ieee80211_add_scan(vap, &scan, wh, subtype, rssi, rtsf);
                        } else {
                                /*
                                 * Copy data from beacon to neighbor table.
-@@ -3490,6 +3581,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3490,6 +3581,7 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                                IEEE80211_ADDR_COPY(ni->ni_bssid, wh->i_addr3);
                                memcpy(ni->ni_tstamp.data, scan.tstamp,
                                        sizeof(ni->ni_tstamp));
        /* calculate priority so drivers can find the TX queue */
        if (ieee80211_classify(ni, skb)) {
                IEEE80211_NOTE(vap, IEEE80211_MSG_OUTPUT, ni,
-@@ -334,20 +335,33 @@ void ieee80211_parent_queue_xmit(struct
+@@ -334,20 +335,33 @@ void ieee80211_parent_queue_xmit(struct 
   * constructing a frame as it sets i_fc[1]; other bits can
   * then be or'd in.
   */
 +      struct ieee80211_frame *wh;
 +      int len = sizeof(struct ieee80211_frame);
 +      int opmode = vap->iv_opmode;
-+
 +      if ((type & IEEE80211_FC0_TYPE_MASK) == IEEE80211_FC0_TYPE_DATA) {
 +              if ((opmode == IEEE80211_M_STA) &&
 +                      (vap->iv_flags_ext & IEEE80211_FEXT_WDS))
 +                      opmode = IEEE80211_M_WDS;
++
 +              if (opmode == IEEE80211_M_WDS)
 +                      len = sizeof(struct ieee80211_frame_addr4);
 +      }
        }
  }
  EXPORT_SYMBOL(ieee80211_stop_running);
-@@ -1342,9 +1398,9 @@ ieee80211_new_state(struct ieee80211vap
+@@ -1342,9 +1398,9 @@ ieee80211_new_state(struct ieee80211vap 
        struct ieee80211com *ic = vap->iv_ic;
        int rc;
  
index 8b13abc33c5762b4df663a4cc7ced54a300ee882..aa32b1b227fda8fd5af7c4160b334d0cd6629480 100644 (file)
@@ -24,7 +24,7 @@
                                vap->iv_devstats.tx_dropped++;
 --- a/net80211/ieee80211_output.c
 +++ b/net80211/ieee80211_output.c
-@@ -324,9 +324,10 @@ void ieee80211_parent_queue_xmit(struct
+@@ -324,9 +324,10 @@ void ieee80211_parent_queue_xmit(struct 
        /* Dispatch the packet to the parent device */
        skb->dev = vap->iv_ic->ic_dev;
  
index 38a1c59d55289fca0c4b1091f140e3c72c8ec8ad..0a2982799f9ea7cc8ef518a12c432005e60ec28b 100644 (file)
@@ -1,6 +1,6 @@
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -5486,6 +5486,9 @@ ath_beacon_config(struct ath_softc *sc,
+@@ -5486,6 +5486,9 @@ ath_beacon_config(struct ath_softc *sc, 
                ath_beacon_dturbo_config(vap, intval &
                                ~(HAL_BEACON_RESET_TSF | HAL_BEACON_ENA));
  #endif
index d1313aa5645c3bbbf95701c96ee8ca1e9b42adc8..9381f8a818461810b18f33bcb2672f86e2372703 100644 (file)
@@ -81,7 +81,7 @@
  /*
   * Reset the hardware w/o losing operational state.  This is
   * basically a more efficient way of doing ath_stop, ath_init,
-@@ -5294,6 +5361,7 @@ ath_beacon_config(struct ath_softc *sc,
+@@ -5294,6 +5361,7 @@ ath_beacon_config(struct ath_softc *sc, 
        u_int64_t tsf, hw_tsf;
        u_int32_t tsftu, hw_tsftu;
        u_int32_t intval, nexttbtt = 0;
@@ -89,7 +89,7 @@
        int reset_tsf = 0;
  
        if (vap == NULL)
-@@ -5301,6 +5369,9 @@ ath_beacon_config(struct ath_softc *sc,
+@@ -5301,6 +5369,9 @@ ath_beacon_config(struct ath_softc *sc, 
  
        ni = vap->iv_bss;
  
@@ -99,7 +99,7 @@
        hw_tsf = ath_hal_gettsf64(ah);
        tsf = le64_to_cpu(ni->ni_tstamp.tsf);
        hw_tsftu = hw_tsf >> 10;
-@@ -5490,15 +5561,27 @@ ath_beacon_config(struct ath_softc *sc,
+@@ -5490,15 +5561,27 @@ ath_beacon_config(struct ath_softc *sc, 
                                <= ath_hal_sw_beacon_response_time)
                        nexttbtt += intval;
                sc->sc_nexttbtt = nexttbtt;
index 5b91683674ee92b7f67ebcac7bed39fb140f8c5f..1d699a5ffa7e7a9c22bf085b6abedaa6de74c5b9 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net80211/ieee80211_input.c
 +++ b/net80211/ieee80211_input.c
-@@ -3529,6 +3529,11 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3529,6 +3529,11 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                if (ic->ic_flags & IEEE80211_F_SCAN) {
                        ieee80211_add_scan(vap, &scan, wh, subtype, rssi, rtsf);
                }
index c96c04daffaef2e72bbc768b7efc90e982339f7a..3ee2ed2c460e1a9a96b163164c5e6ee42124a54f 100644 (file)
  
                _MOD_INC_USE(THIS_MODULE, return NULL);
                osc = kmalloc(sizeof(struct minstrel_softc), GFP_ATOMIC);
-@@ -963,7 +949,7 @@ ath_proc_read_nodes(struct ieee80211vap
+@@ -963,7 +949,7 @@ ath_proc_read_nodes(struct ieee80211vap 
                                        p += sprintf(p, "out of room for node " MAC_FMT "\n\n", MAC_ADDR(ni->ni_macaddr));
                                        break;
                                }
index 7c082d4143c67a94ebc0a8bd6fa84e8a06a3ae79..e9397724e79a159430796aa689a277aae540e3eb 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net80211/ieee80211_node.c
 +++ b/net80211/ieee80211_node.c
-@@ -427,8 +427,8 @@ ieee80211_reset_bss(struct ieee80211vap
+@@ -427,8 +427,8 @@ ieee80211_reset_bss(struct ieee80211vap 
                          __func__, ni, MAC_ADDR(vap->iv_myaddr));
        KASSERT(ni != NULL, ("unable to setup inital BSS node"));
  
index 38969b0532a435fe4264874e9fa526359a697d67..f904ed9721b8c5b3262f153503cf30b3e52eebaa 100644 (file)
@@ -1,6 +1,6 @@
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -1260,7 +1260,10 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1260,7 +1260,10 @@ ath_vap_create(struct ieee80211com *ic, 
        case IEEE80211_M_IBSS:
                if ((sc->sc_nvaps != 0) && (ic->ic_opmode == IEEE80211_M_STA))
                        return NULL;
@@ -12,7 +12,7 @@
                break;
        case IEEE80211_M_AHDEMO:
        case IEEE80211_M_MONITOR:
-@@ -1455,7 +1458,7 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1455,7 +1458,7 @@ ath_vap_create(struct ieee80211com *ic, 
         * frames.  Other modes carry over directly to the HAL.
         */
        if (ic->ic_opmode == IEEE80211_M_AHDEMO)
index d449c3037a914eb6779a92acec63d6cdb9a5f62d..a91753cc15c1cb7a13b06d4a36b5cbe1975638e0 100644 (file)
@@ -1,6 +1,6 @@
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -1452,6 +1452,23 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1452,6 +1452,23 @@ ath_vap_create(struct ieee80211com *ic, 
                sc->sc_nstavaps++;
        else if (opmode == IEEE80211_M_MONITOR)
                sc->sc_nmonvaps++;
index 3b67615b05a8b1ab8aa032ca3636e4d737e46d2c..da1fe2d09d961438405979a49d1ffe0aa8713e64 100644 (file)
@@ -33,7 +33,7 @@
        /* Allocate space for dynamically determined maximum VAP count */
        sc->sc_bslot = 
                kmalloc(ath_maxvaps * sizeof(struct ieee80211vap*), GFP_KERNEL);
-@@ -1508,6 +1520,29 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1508,6 +1520,29 @@ ath_vap_create(struct ieee80211com *ic, 
        return vap;
  }
  
  
  #include <asm/io.h>
  #include <asm/uaccess.h>
-@@ -181,12 +182,32 @@ exit_ath_wmac(u_int16_t wlanNum, struct
+@@ -181,12 +182,32 @@ exit_ath_wmac(u_int16_t wlanNum, struct 
        return 0;
  }
  
   bad4:
 --- a/ath/if_ath_pci.c
 +++ b/ath/if_ath_pci.c
-@@ -123,6 +123,33 @@ static u16 ath_devidmap[][2] = {
+@@ -125,6 +125,33 @@ static u16 ath_devidmap[][2] = {
        { 0xff1a, 0x001a }
  };
  
  static int
  ath_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
  {
-@@ -257,6 +284,10 @@ ath_pci_probe(struct pci_dev *pdev, cons
+@@ -259,6 +286,10 @@ ath_pci_probe(struct pci_dev *pdev, cons
        printk(KERN_INFO "%s: %s: %s: mem=0x%lx, irq=%d\n",
                dev_info, dev->name, athname ? athname : "Atheros ???", phymem, dev->irq);
  
index 16c7d95c765f16633f42e357fdfb68713af58534..e3899643be6dbf7b60654e6ad59045942a30b169 100644 (file)
@@ -1,6 +1,6 @@
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -6669,6 +6669,7 @@ ath_setdefantenna(struct ath_softc *sc,
+@@ -6669,6 +6669,7 @@ ath_setdefantenna(struct ath_softc *sc, 
        struct ath_hal *ah = sc->sc_ah;
  
        /* XXX block beacon interrupts */
index 04a1ec9110d5a4e20abad13d5177025e44c75e8e..f4ef4ca27fe1b00c9941f40e6783143d8da67df3 100644 (file)
@@ -37,7 +37,7 @@ Signed-off-by: Sebastian Gottschall <brainslayer@dd-wrt.com>
        return NULL;
  }
  
-@@ -176,11 +183,11 @@ acl_add(struct ieee80211vap *vap, const
+@@ -176,11 +183,11 @@ acl_add(struct ieee80211vap *vap, const 
                return -ENOMEM;
        }
  
@@ -51,7 +51,7 @@ Signed-off-by: Sebastian Gottschall <brainslayer@dd-wrt.com>
                        FREE(new, M_80211_ACL);
                        IEEE80211_DPRINTF(vap, IEEE80211_MSG_ACL,
                                "ACL: add " MAC_FMT " failed, already present\n",
-@@ -191,7 +198,7 @@ acl_add(struct ieee80211vap *vap, const
+@@ -191,7 +198,7 @@ acl_add(struct ieee80211vap *vap, const 
        IEEE80211_ADDR_COPY(new->acl_macaddr, mac);
        TAILQ_INSERT_TAIL(&as->as_list, new, acl_list);
        LIST_INSERT_HEAD(&as->as_hash[hash], new, acl_hash);
index 79e5b2f4fc4daf399ad71405cbb8bffc7f6787f4..df2b7fd1f23d7834211dd89f04764b05369a43c2 100644 (file)
        /*
 --- a/net80211/ieee80211_input.c
 +++ b/net80211/ieee80211_input.c
-@@ -4020,7 +4020,26 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -4020,7 +4020,26 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                        vap->iv_stats.is_rx_assoc_norate++;
                        return;
                }
 +              if (vap->iv_max_nodes > 0) {
 +                      unsigned int active_nodes = 0;
 +                      struct ieee80211_node *tni;
++
 +                      IEEE80211_NODE_TABLE_LOCK_IRQ(&ic->ic_sta);
 +                      TAILQ_FOREACH(tni, &ic->ic_sta.nt_node, ni_list) {
 +                              if (tni->ni_vap != vap)
@@ -73,7 +73,7 @@
 +                              active_nodes++;
 +                      }
 +                      IEEE80211_NODE_TABLE_UNLOCK_IRQ(&ic->ic_sta);
-+
 +                      if (active_nodes >= vap->iv_max_nodes) {
 +                              /* too many nodes connected */
 +                              ieee80211_node_leave(ni);
index 548f09e7d6aa67b0614aaac76270152fd8a4130c..06c5c12a7d9a72988c794a20f8d02b4ce9987c6a 100644 (file)
@@ -16,7 +16,7 @@
        sc->sc_curchan.channel = ic->ic_curchan->ic_freq;
        sc->sc_curchan.channelFlags = ath_chan2flags(ic->ic_curchan);
        if (!ath_hal_reset(ah, sc->sc_opmode, &sc->sc_curchan, AH_FALSE, &status)) {
-@@ -2914,6 +2916,48 @@ ath_hw_check_atim(struct ath_softc *sc,
+@@ -2914,6 +2916,48 @@ ath_hw_check_atim(struct ath_softc *sc, 
        return 0;
  }
  
  #define       IEEE80211_CHAN_MAX      255
 --- a/net80211/ieee80211_scan_ap.c
 +++ b/net80211/ieee80211_scan_ap.c
-@@ -417,6 +417,19 @@ pc_cmp_rssi(struct ap_state *as, struct
+@@ -417,6 +417,19 @@ pc_cmp_rssi(struct ap_state *as, struct 
  
  /* This function must be invoked with locks acquired */
  static int
        }
  
        if (best != NULL) {
-@@ -599,6 +583,9 @@ ap_end(struct ieee80211_scan_state *ss,
+@@ -599,6 +583,9 @@ ap_end(struct ieee80211_scan_state *ss, 
                ("wrong opmode %u", vap->iv_opmode));
  
        ic = vap->iv_ic;
index 6de01102c6f59be89e06fc9275d8e020741b0b66..0987f7c5df2142ec10e69718bb881f6e1200f3d9 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net80211/ieee80211_input.c
 +++ b/net80211/ieee80211_input.c
-@@ -4443,7 +4443,9 @@ ath_eth_type_trans(struct sk_buff *skb,
+@@ -4443,7 +4443,9 @@ ath_eth_type_trans(struct sk_buff *skb, 
                if (memcmp(eth->h_dest, dev->dev_addr, ETH_ALEN))
                        skb->pkt_type = PACKET_OTHERHOST;
  
index a2637cccbb31cecacabfd55c914642681407b2ac..0e3ecaf69f4ad769adb1f286a95c56beb25b1a42 100644 (file)
                if (TAILQ_NEXT(vap, iv_next) != NULL) {
                        skb1 = skb_copy(skb, GFP_ATOMIC);
                        if (skb1 == NULL) {
-@@ -950,8 +957,12 @@ ieee80211_input_all(struct ieee80211com
+@@ -950,8 +957,12 @@ ieee80211_input_all(struct ieee80211com 
                        skb1 = skb;
                        skb = NULL;
                }
                                        !ni1->ni_subif &&
                                    ni1 != vap->iv_bss) {
  
-@@ -3520,6 +3529,7 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3520,6 +3529,7 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                                 (vap->iv_opmode == IEEE80211_M_WDS)) &&
                                (scan.capinfo & IEEE80211_CAPINFO_ESS))) {
                        struct ieee80211vap *avp = NULL;
                        int found = 0;
  
                        IEEE80211_LOCK_IRQ(vap->iv_ic);
-@@ -3553,10 +3563,12 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3553,10 +3563,12 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                                        ni->ni_associd |= 0xc000;
                                        avp->iv_wdsnode = ieee80211_ref_node(ni);
                                        IEEE80211_UNLOCK_IRQ(ic);
                        } else {
                                /*
                                 * Copy data from beacon to neighbor table.
-@@ -3595,6 +3607,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3595,6 +3607,8 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                                ni->ni_rssi = rssi;
                                ni->ni_rtsf = rtsf;
                                ni->ni_last_rx = jiffies;
                 (const struct ieee80211_frame_min *)skb->data);
        if (ni == NULL) {
                DPRINTF(sc, ATH_DEBUG_BEACON, "Dropping; node unknown.\n");
-@@ -6746,7 +6745,9 @@ ath_rx_poll(struct net_device *dev, int
+@@ -6746,7 +6745,9 @@ ath_rx_poll(struct net_device *dev, int 
        struct ath_desc *ds;
        struct ath_rx_status *rs;
        struct sk_buff *skb = NULL;
index 706d5a5ac3dfe1ab5f02fcc91c39f7fea00f166c..c754bfa9f0afbf4218969dd27cc3d3ca6f83b1e6 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net80211/ieee80211_input.c
 +++ b/net80211/ieee80211_input.c
-@@ -3621,6 +3621,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3621,6 +3621,8 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                        vap->iv_stats.is_rx_mgtdiscard++;
                        return;
                }
index ca35d4ccac5d6da1bd745ea90cdd80802b79f4ef..f84c4b4d77230f940a148c7424cb65b6112db2e2 100644 (file)
@@ -1,6 +1,6 @@
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -6734,10 +6734,10 @@ ath_rx_poll(struct net_device *dev, int
+@@ -6734,10 +6734,10 @@ ath_rx_poll(struct net_device *dev, int 
  #if LINUX_VERSION_CODE >= KERNEL_VERSION(2,6,24)
        struct ath_softc *sc = container_of(napi, struct ath_softc, sc_napi);
        struct net_device *dev = sc->sc_dev;
index 12a59687bed3cb9fd17f66412b004b79e7191849..621bd0f822dfaf613d5b9971d391dbed3f9e7bd6 100644 (file)
@@ -15,7 +15,7 @@
        /*
         * Check if the MAC has multi-rate retry support.
         * We do this by trying to setup a fake extended
-@@ -7568,7 +7576,7 @@ ath_txq_setup(struct ath_softc *sc, int
+@@ -7568,7 +7576,7 @@ ath_txq_setup(struct ath_softc *sc, int 
        if (qtype == HAL_TX_QUEUE_UAPSD)
                qi.tqi_qflags = HAL_TXQ_TXDESCINT_ENABLE;
        else
index 53e76a9e8ac922d128a58ce530492356f5963baf..c78daf4c69daf31be4260f1c0b4f6a2f077e8b22 100644 (file)
@@ -10,7 +10,7 @@
  Please let us know if you think your name should be mentioned here!
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -3147,7 +3147,7 @@ ath_tx_startraw(struct net_device *dev,
+@@ -3147,7 +3147,7 @@ ath_tx_startraw(struct net_device *dev, 
        struct ath_softc *sc = dev->priv;
        struct ath_hal *ah = sc->sc_ah;
        struct ieee80211_phy_params *ph = (struct ieee80211_phy_params *)
index d05c447f7b9c1d9eee3ae320725f4388c36d1ae6..6e6d678fd49dd17d1c241c2b406f3eb1145d8797 100644 (file)
  }
  
  
-@@ -575,6 +583,7 @@ ap_end(struct ieee80211_scan_state *ss,
+@@ -575,6 +583,7 @@ ap_end(struct ieee80211_scan_state *ss, 
        struct ap_state *as = ss->ss_priv;
        struct ieee80211_channel *bestchan = NULL;
        struct ieee80211com *ic = NULL;
        int res = 1;
  
        SCAN_AP_LOCK_IRQ(as);
-@@ -586,8 +595,11 @@ ap_end(struct ieee80211_scan_state *ss,
+@@ -586,8 +595,11 @@ ap_end(struct ieee80211_scan_state *ss, 
  
        /* record stats for the channel that was scanned last */
        ic->ic_set_channel(ic);
                if (ss->ss_last > 0) {
                        /* no suitable channel, should not happen */
                        printk(KERN_ERR "%s: %s: no suitable channel! "
-@@ -606,6 +618,7 @@ ap_end(struct ieee80211_scan_state *ss,
+@@ -606,6 +618,7 @@ ap_end(struct ieee80211_scan_state *ss, 
                                        bestchan->ic_freq, bestchan->ic_flags &
                                        ~IEEE80211_CHAN_TURBO)) == NULL) {
                                /* should never happen ?? */
                                SCAN_AP_UNLOCK_IRQ_EARLY(as);
                                return 0;
                        }
-@@ -618,6 +631,9 @@ ap_end(struct ieee80211_scan_state *ss,
+@@ -618,6 +631,9 @@ ap_end(struct ieee80211_scan_state *ss, 
                        as->as_action = action;
                as->as_selbss = se;
  
index 3c18bd6fe00ff40fa3ca3e1055e2ec04a4b0cbc8..6b33b8b1c0ff3db5338188f1c7ebb9e796307f5f 100644 (file)
  
  static void ath_poll_disable(struct net_device *dev);
  static void ath_poll_enable(struct net_device *dev);
-@@ -3168,7 +3167,7 @@ ath_tx_startraw(struct net_device *dev,
+@@ -3168,7 +3167,7 @@ ath_tx_startraw(struct net_device *dev, 
        try0 = ph->try0;
        rt = sc->sc_currates;
        txrate = dot11_to_ratecode(sc, rt, ph->rate0);
index 0b378d7e268a3abfcdb46b05b395a49bb7a4589e..6c871f4257f8a53bfbea7574eae2777b6dce56ed 100644 (file)
  static int beacon_cal = 1;
  
  static const struct ath_hw_detect generic_hw_info = {
-@@ -1525,6 +1526,7 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1525,6 +1526,7 @@ ath_vap_create(struct ieee80211com *ic, 
                ath_hal_intrset(ah, sc->sc_imask);
        }
  
                                if (bf->bf_skb->priority == WME_AC_VO ||
                                    bf->bf_skb->priority == WME_AC_VI)
                                        ni->ni_ic->ic_wme.wme_hipri_traffic++;
-@@ -10111,6 +10124,7 @@ ath_newassoc(struct ieee80211_node *ni,
+@@ -10111,6 +10124,7 @@ ath_newassoc(struct ieee80211_node *ni, 
        struct ath_softc *sc = ic->ic_dev->priv;
  
        sc->sc_rc->ops->newassoc(sc, ATH_NODE(ni), isnew);
index 90bcd0e160a6d40ac0f452875e408457a8a2173e..4a5c0b093a59eadaac9699e7987aeb498027c5c4 100644 (file)
@@ -54,7 +54,7 @@
        if (bfaddr != 0) {
                /*
                 * Stop any current DMA and put the new frame(s) on the queue.
-@@ -6734,9 +6708,8 @@ ath_setdefantenna(struct ath_softc *sc,
+@@ -6734,9 +6708,8 @@ ath_setdefantenna(struct ath_softc *sc, 
  {
        struct ath_hal *ah = sc->sc_ah;
  
index 2a8ec27ce3f3ddab626e07a6bff8ceb074f64fee..8424321d76c778ef25c46e2a9cf58dae771d4b03 100644 (file)
@@ -8,7 +8,7 @@
  static void ath_updateslot(struct net_device *);
  static int ath_beaconq_setup(struct ath_softc *);
  static int ath_beacon_alloc(struct ath_softc *, struct ieee80211_node *);
-@@ -240,7 +239,7 @@ static void ath_setup_stationkey(struct
+@@ -240,7 +239,7 @@ static void ath_setup_stationkey(struct 
  static void ath_setup_stationwepkey(struct ieee80211_node *);
  static void ath_setup_keycacheslot(struct ath_softc *, struct ieee80211_node *);
  static void ath_newassoc(struct ieee80211_node *, int);
  
        ath_rate_setup(dev, mode);
        ath_setcurmode(sc, mode);
-@@ -10124,8 +10142,7 @@ ath_newassoc(struct ieee80211_node *ni,
+@@ -10124,8 +10142,7 @@ ath_newassoc(struct ieee80211_node *ni, 
  }
  
  static int
  {
        struct ath_softc *sc = dev->priv;
        struct ieee80211com *ic = &sc->sc_ic;
-@@ -10139,17 +10156,31 @@ ath_getchannels(struct net_device *dev,
+@@ -10139,17 +10156,31 @@ ath_getchannels(struct net_device *dev, 
                EPRINTF(sc, "Insufficient memory for channel table!\n");
                return -ENOMEM;
        }
          .procname     = "rp",
          .mode         = 0200,
          .proc_handler = ath_sysctl_halparam,
-@@ -11669,13 +11801,6 @@ static ctl_table ath_static_sysctls[] =
+@@ -11669,13 +11801,6 @@ static ctl_table ath_static_sysctls[] = 
        },
  #endif
        { .ctl_name     = CTL_AUTO,
          .procname     = "maxvaps",
          .mode         = 0444,
          .data         = &ath_maxvaps,
-@@ -11683,13 +11808,6 @@ static ctl_table ath_static_sysctls[] =
+@@ -11683,13 +11808,6 @@ static ctl_table ath_static_sysctls[] = 
          .proc_handler = proc_dointvec
        },
        { .ctl_name     = CTL_AUTO,
        nrs = &ni->ni_rates;
        fixedrate = IEEE80211_FIXED_RATE_NONE;
        for (i = 0; i < nrs->rs_nrates;) {
-@@ -1407,6 +1407,7 @@ ieee80211_new_state(struct ieee80211vap
+@@ -1407,6 +1407,7 @@ ieee80211_new_state(struct ieee80211vap 
        IEEE80211_VAPS_UNLOCK_IRQ(ic);
        return rc;
  }
        return best;
  }
  
-@@ -609,6 +611,7 @@ ap_end(struct ieee80211_scan_state *ss,
+@@ -609,6 +611,7 @@ ap_end(struct ieee80211_scan_state *ss, 
                res = 1; /* Do NOT restart scan */
        } else {
                struct ieee80211_scan_entry se;
                /* XXX: notify all VAPs? */
                /* if this is a dynamic turbo frequency , start with normal 
                 * mode first */
-@@ -623,6 +626,11 @@ ap_end(struct ieee80211_scan_state *ss,
+@@ -623,6 +626,11 @@ ap_end(struct ieee80211_scan_state *ss, 
                                return 0;
                        }
                }
index 8369db6185e4300f779067561b86a93813d896ec..a8b82fa10421b4abb207d4e7015df6324135c287 100644 (file)
  static inline void ath_hal_beaconinit(struct ath_hal *ah, u_int32_t nexttbtt,
                                      u_int32_t intval)
  {
-@@ -839,6 +850,17 @@ static inline HAL_BOOL ath_hal_setslotti
-       ath_hal_set_function(NULL);
-       ATH_HAL_UNLOCK_IRQ(ah->ah_sc);
+@@ -841,6 +852,17 @@ static inline HAL_BOOL ath_hal_setslotti
        return ret;
-+}
-+
+ }
 +static inline HAL_BOOL ath_hal_seteifstime(struct ath_hal *ah, u_int a1)
 +{
 +      HAL_BOOL ret;
 +      ath_hal_set_function(NULL);
 +      ATH_HAL_UNLOCK_IRQ(ah->ah_sc);
 +      return ret;
- }
++}
++
  static inline void ath_hal_setledstate(struct ath_hal *ah, HAL_LED_STATE a1)
+ {
+       ATH_HAL_LOCK_IRQ(ah->ah_sc);
 --- a/ath/if_athvar.h
 +++ b/ath/if_athvar.h
 @@ -613,6 +613,15 @@ struct ath_rp {
  {
 --- a/ath_rate/sample/sample.c
 +++ b/ath_rate/sample/sample.c
-@@ -137,92 +137,6 @@ rate_to_ndx(struct sample_node *sn, int
+@@ -137,92 +137,6 @@ rate_to_ndx(struct sample_node *sn, int 
        return -1;
  }
  
index 252767a8cf881515c75e4cc962c0316b1f5899fb..10a6f9c511b1279db34a65e3bf55b8f8d51b2f24 100644 (file)
                /* don't use a bit-rate that has been failing */
                if (sn->stats[size_bin][x].successive_failures > 3)
                        continue;
-@@ -234,10 +230,6 @@ pick_sample_ndx(struct sample_node *sn,
+@@ -234,10 +230,6 @@ pick_sample_ndx(struct sample_node *sn, 
                if (sn->rates[ndx].rate > 22 && ndx > current_ndx + 2)
                        continue;
  
index 3f65424a5c29c1013dac9e26402b5f096cb09d13..7a5ae847ed07d8f0dd0d5377b7018e6fc7f40e38 100644 (file)
@@ -67,7 +67,7 @@
        struct ath_hal *ah = sc->sc_ah;
        struct net_device *dev;
        struct ath_vap *avp;
-@@ -1344,7 +1344,7 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1344,7 +1344,7 @@ ath_vap_create(struct ieee80211com *ic, 
                return NULL;
        }
  
        struct ieee80211com *ic = &sc->sc_ic;
        struct ath_hal *ah = sc->sc_ah;
        struct ieee80211_channel *c;
-@@ -3164,7 +3164,7 @@ dot11_to_ratecode(struct ath_softc *sc,
+@@ -3164,7 +3164,7 @@ dot11_to_ratecode(struct ath_softc *sc, 
  static int
  ath_tx_startraw(struct net_device *dev, struct ath_buf *bf, struct sk_buff *skb)
  {
  #ifdef AR_DEBUG
          struct ieee80211_frame *wh = (struct ieee80211_frame *)skb->data;
  #endif
-@@ -6780,7 +6780,7 @@ ath_rx_poll(struct net_device *dev, int
+@@ -6780,7 +6780,7 @@ ath_rx_poll(struct net_device *dev, int 
        struct net_device *dev = sc->sc_dev;
        int rx_limit = budget;
  #else
        ieee80211_keyix_t keyix;
  
        keyix = ath_key_alloc(vap, &ni->ni_ucastkey);
-@@ -10177,7 +10177,7 @@ ath_newassoc(struct ieee80211_node *ni,
+@@ -10177,7 +10177,7 @@ ath_newassoc(struct ieee80211_node *ni, 
  {
        struct ieee80211com *ic = ni->ni_ic;
        struct ieee80211vap *vap = ni->ni_vap;
  
        sc->sc_rc->ops->newassoc(sc, ATH_NODE(ni), isnew);
        ath_wprobe_node_join(ni->ni_vap, ni);
-@@ -10208,7 +10208,7 @@ ath_newassoc(struct ieee80211_node *ni,
+@@ -10208,7 +10208,7 @@ ath_newassoc(struct ieee80211_node *ni, 
  static int
  ath_getchannels(struct net_device *dev)
  {
        if (sc->sc_txcont_rate != new_rate) {
                /*  NOTE: This value is sanity checked and dropped down to 
                 *  closest rate in txcont_on. */
-@@ -12539,7 +12539,7 @@ ath_set_txcont_rate(struct ieee80211com
+@@ -12539,7 +12539,7 @@ ath_set_txcont_rate(struct ieee80211com 
  ath_get_txcont_rate(struct ieee80211com *ic)
  {
        struct net_device *dev = ic->ic_dev;
        ath_hal_dump_map(sc->sc_ah);
        return 0;
  }
-@@ -12724,7 +12724,7 @@ ath_rcv_dev_event(struct notifier_block
+@@ -12724,7 +12724,7 @@ ath_rcv_dev_event(struct notifier_block 
        void *ptr)
  {
        struct net_device *dev = (struct net_device *)ptr;
  #endif /* #ifdef ATH_REVERSE_ENGINEERING */
 --- a/ath/if_ath_pci.c
 +++ b/ath/if_ath_pci.c
-@@ -226,7 +226,7 @@ ath_pci_probe(struct pci_dev *pdev, cons
+@@ -228,7 +228,7 @@ ath_pci_probe(struct pci_dev *pdev, cons
                printk(KERN_ERR "%s: no memory for device state\n", dev_info);
                goto bad2;
        }
        sc->aps_sc.sc_dev = dev;
        sc->aps_sc.sc_iobase = mem;
  
-@@ -309,7 +309,7 @@ static void
+@@ -311,7 +311,7 @@ static void
  ath_pci_remove(struct pci_dev *pdev)
  {
        struct net_device *dev = pci_get_drvdata(pdev);
  
        ath_detach(dev);
        if (dev->irq)
-@@ -327,7 +327,7 @@ ath_pci_suspend(struct pci_dev *pdev, pm
+@@ -329,7 +329,7 @@ ath_pci_suspend(struct pci_dev *pdev, pm
        struct net_device *dev = pci_get_drvdata(pdev);
  
        ath_suspend(dev);
        pci_disable_device(pdev);
        return pci_set_power_state(pdev, PCI_D3hot);
  }
-@@ -344,7 +344,7 @@ ath_pci_resume(struct pci_dev *pdev)
+@@ -346,7 +346,7 @@ ath_pci_resume(struct pci_dev *pdev)
                return err;
  
        /* XXX - Should this return nonzero on fail? */
                }
  }
  
-@@ -822,7 +822,7 @@ ath_proc_read_nodes(struct ieee80211vap
+@@ -822,7 +822,7 @@ ath_proc_read_nodes(struct ieee80211vap 
                unsigned int x = 0;
                unsigned int this_tp, this_prob, this_eprob;
  #ifdef AR_DEBUG
  #define skb_tail_pointer(_skb) ((_skb)->tail)
 --- a/net80211/ieee80211.c
 +++ b/net80211/ieee80211.c
-@@ -458,7 +458,7 @@ ieee80211_vap_setup(struct ieee80211com
+@@ -458,7 +458,7 @@ ieee80211_vap_setup(struct ieee80211com 
  #define       IEEE80211_C_OPMODE \
        (IEEE80211_C_IBSS | IEEE80211_C_HOSTAP | IEEE80211_C_AHDEMO | \
         IEEE80211_C_MONITOR)
        struct ieee80211vap *vap;
        struct ifmedia_entry *ime = ic->ic_media.ifm_cur;
        enum ieee80211_phymode newphymode;
-@@ -1511,7 +1511,7 @@ checkrate(struct ieee80211com *ic, enum
+@@ -1511,7 +1511,7 @@ checkrate(struct ieee80211com *ic, enum 
  int
  ieee80211_media_change(struct net_device *dev)
  {
         struct ieee80211com *ic = vap->iv_ic;
         params[0] = ic->ic_dump_hal_map(ic);
         return 0;
-@@ -1545,7 +1545,7 @@ ieee80211_ioctl_radar(struct net_device
+@@ -1545,7 +1545,7 @@ ieee80211_ioctl_radar(struct net_device 
        void *w, char *extra)
  {
        int *params = (int*) extra;
        struct ieee80211com *ic = vap->iv_ic;
        struct ifreq ifr;
        char s[6];              /* big enough for ``11adt'' */
-@@ -2222,10 +2222,10 @@ ieee80211_setathcap(struct ieee80211vap
+@@ -2222,10 +2222,10 @@ ieee80211_setathcap(struct ieee80211vap 
  static int
  ieee80211_set_turbo(struct net_device *dev, int flag)
  {
        struct ieee80211com *ic = vap->iv_ic;
        struct ieee80211_node *ni;
        u_int8_t macaddr[IEEE80211_ADDR_LEN];
-@@ -4428,7 +4428,7 @@ get_scan_result(void *arg, const struct
+@@ -4428,7 +4428,7 @@ get_scan_result(void *arg, const struct 
  static int
  ieee80211_ioctl_getscanresults(struct net_device *dev, struct iwreq *iwr)
  {
index af829b164a7401d881e8560e718732bbca9143e8..2e542bfecef858cad6cfaedc280b70e282e44226 100644 (file)
@@ -53,7 +53,7 @@ http://madwifi-project.org/changeset/4005
        unregister_netdev(dev);
        return 0;
  }
-@@ -12732,8 +12749,13 @@ ath_rcv_dev_event(struct notifier_block
+@@ -12732,8 +12749,13 @@ ath_rcv_dev_event(struct notifier_block 
        struct net_device *dev = (struct net_device *)ptr;
        struct ath_softc *sc = (struct ath_softc *)netdev_priv(dev);
  
@@ -88,7 +88,7 @@ http://madwifi-project.org/changeset/4005
  int
  ieee80211_vap_setup(struct ieee80211com *ic, struct net_device *dev,
        const char *name, int opmode, int flags, struct ieee80211vap *master)
-@@ -471,16 +483,21 @@ ieee80211_vap_setup(struct ieee80211com
+@@ -471,16 +483,21 @@ ieee80211_vap_setup(struct ieee80211com 
                } else
                        strncpy(dev->name, name, sizeof(dev->name));
        }
index ab277630de60de599add6dc1081f6238d39e3b94..bc96e5c81a85f8e0fd114036d237a0788311dd3d 100644 (file)
@@ -14,7 +14,7 @@
                if (((devid & AR5315_REV_MAJ_M) == AR5315_REV_MAJ) ||
 --- a/ath/if_ath_pci.c
 +++ b/ath/if_ath_pci.c
-@@ -236,6 +236,11 @@ ath_pci_probe(struct pci_dev *pdev, cons
+@@ -238,6 +238,11 @@ ath_pci_probe(struct pci_dev *pdev, cons
         */
        sc->aps_sc.sc_invalid = 1;
  
index 27487311152cfcc0e2f7f58e3b7bb5ae2c26b5d1..7bdd82c0f9926d82451bb14a2adba7ee80b36ef1 100644 (file)
@@ -1,6 +1,6 @@
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -3199,7 +3199,13 @@ ath_tx_startraw(struct net_device *dev,
+@@ -3199,7 +3199,13 @@ ath_tx_startraw(struct net_device *dev, 
        struct ieee80211_frame *wh;
  
        wh = (struct ieee80211_frame *)skb->data;
@@ -14,7 +14,7 @@
        rt = sc->sc_currates;
        txrate = dot11_to_ratecode(sc, rt, ph->rate0);
        power = ph->power > 63 ? 63 : ph->power;
-@@ -3224,7 +3230,8 @@ ath_tx_startraw(struct net_device *dev,
+@@ -3224,7 +3230,8 @@ ath_tx_startraw(struct net_device *dev, 
        rt = sc->sc_currates;
        KASSERT(rt != NULL, ("no rate table, mode %u", sc->sc_curmode));
  
index bb81ac7f81622b5bf453a3ae71884942fe8ffdee..d6c1b26838c1ba94c4cc2654218324a4d4d47f53 100644 (file)
        struct ieee80211vap *vap = ni->ni_vap;
 -      struct ether_header *eh = (struct ether_header *) skb->data;
 -      int v_wme_ac = 0, d_wme_ac = 0;
+-
 -      /* default priority */
 -      skb->priority = WME_AC_BE;
 -
 -      if (!(ni->ni_flags & IEEE80211_NODE_QOS))
 -              return 0;
--
 -      /* 
 -       * If node has a vlan tag then all traffic
 -       * to it must have a matching vlan id.
index 20d59de26b75e458af68d464500dbe03b612b20e..b12930fbdf4dfe67749395156e1aa7b5f685e654 100644 (file)
@@ -44,7 +44,7 @@
                        if (dir != IEEE80211_FC1_DIR_NODS) {
                                IEEE80211_DISCARD(vap, IEEE80211_MSG_ANY,
                                        wh, "data", "invalid dir 0x%x", dir);
-@@ -3558,6 +3563,11 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3558,6 +3563,11 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                        } else if ((vap->iv_opmode == IEEE80211_M_WDS) && vap->iv_wdsnode) {
                                found = 1;
                                ni = ni_or_null = vap->iv_wdsnode;
@@ -56,7 +56,7 @@
                        }
                        IEEE80211_UNLOCK_IRQ(vap->iv_ic);
  
-@@ -3686,19 +3696,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3686,19 +3696,8 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                        vap->iv_stats.is_rx_ssidmismatch++; /*XXX*/
                        return;
                }
index b2898ca7eb0da3ceb324ae0c9d39805729730742..ba4054549e65686b709625df7788485215bcdfe6 100644 (file)
@@ -89,7 +89,7 @@
  {
 --- a/net80211/ieee80211_crypto_ccmp.c
 +++ b/net80211/ieee80211_crypto_ccmp.c
-@@ -686,6 +686,8 @@ ccmp_decrypt(struct ieee80211_key *key,
+@@ -686,6 +686,8 @@ ccmp_decrypt(struct ieee80211_key *key, 
  }
  #undef CCMP_DECRYPT
  
  module_exit(exit_ath_ahb);
 --- a/ath/if_ath_pci.c
 +++ b/ath/if_ath_pci.c
-@@ -415,11 +415,19 @@ MODULE_SUPPORTED_DEVICE("Atheros WLAN ca
+@@ -417,11 +417,19 @@ MODULE_SUPPORTED_DEVICE("Atheros WLAN ca
  MODULE_LICENSE("Dual BSD/GPL");
  #endif
  
        if (pci_register_driver(&ath_pci_driver) < 0) {
                printk(KERN_ERR "%s: No devices found, driver not installed.\n", dev_info);
                return (-ENODEV);
-@@ -434,6 +442,10 @@ exit_ath_pci(void)
+@@ -436,6 +444,10 @@ exit_ath_pci(void)
  {
        ath_sysctl_unregister();
        pci_unregister_driver(&ath_pci_driver);
index 9c0f912e45d21db1bac83a0c1744e7cc9f8d825a..3fa97e2e643abd811c13aabf5f35fe481956be5f 100644 (file)
@@ -1,6 +1,6 @@
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -160,7 +160,7 @@ static int ath_check_beacon_done(struct
+@@ -160,7 +160,7 @@ static int ath_check_beacon_done(struct 
  static void ath_beacon_send(struct ath_softc *, int *, uint64_t hw_tsf);
  static void ath_beacon_return(struct ath_softc *, struct ath_buf *);
  static void ath_beacon_free(struct ath_softc *);
@@ -81,7 +81,7 @@
        if (xchanmode != -1)
                ath_xchanmode = xchanmode;
        error = ath_getchannels(dev);
-@@ -1349,12 +1337,6 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1349,12 +1337,6 @@ ath_vap_create(struct ieee80211com *ic, 
                return NULL;
        }
  
@@ -94,7 +94,7 @@
        dev = alloc_etherdev(sizeof(struct ath_vap) + sc->sc_rc->arc_vap_space);
        if (dev == NULL) {
                /* XXX msg */
-@@ -1424,7 +1406,7 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1424,7 +1406,7 @@ ath_vap_create(struct ieee80211com *ic, 
                TAILQ_FOREACH(v, &ic->ic_vaps, iv_next)
                        id_mask |= (1 << ATH_GET_VAP_ID(v->iv_myaddr));
  
                        /* get the first available slot */
                        if ((id_mask & (1 << id)) == 0) {
                                ATH_SET_VAP_BSSID(vap->iv_myaddr, id);
-@@ -1451,11 +1433,11 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1451,11 +1433,11 @@ ath_vap_create(struct ieee80211com *ic, 
                /* Assign the VAP to a beacon xmit slot.  As
                 * above, this cannot fail to find one. */
                avp->av_bslot = 0;
                                    sc->sc_bslot[slot+1] == NULL) {
                                        avp->av_bslot = slot + 1;
                                        break;
-@@ -1463,8 +1445,11 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1463,8 +1445,11 @@ ath_vap_create(struct ieee80211com *ic, 
                                avp->av_bslot = slot;
                                /* NB: keep looking for a double slot */
                        }
                sc->sc_bslot[avp->av_bslot] = vap;
                sc->sc_nbcnvaps++;
  
-@@ -1475,15 +1460,7 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1475,15 +1460,7 @@ ath_vap_create(struct ieee80211com *ic, 
                         * of staggered beacons.
                         */
                        /* XXX check for beacon interval too small */
                }
                DPRINTF(sc, ATH_DEBUG_BEACON, "sc->sc_stagbeacons %sabled\n", 
                                (sc->sc_stagbeacons ? "en" : "dis"));
-@@ -1553,7 +1530,7 @@ ath_vap_create(struct ieee80211com *ic,
+@@ -1553,7 +1530,7 @@ ath_vap_create(struct ieee80211com *ic, 
                if (ath_startrecv(sc) != 0)     /* restart recv */
                        EPRINTF(sc, "Unable to start receive logic.\n");
                if (sc->sc_beacons)
  {
        struct ieee80211com *ic = &sc->sc_ic;
        struct ath_hal *ah = sc->sc_ah;
-@@ -5553,7 +5530,7 @@ ath_beacon_config(struct ath_softc *sc,
+@@ -5553,7 +5530,7 @@ ath_beacon_config(struct ath_softc *sc, 
        /* We should reset hw TSF only once, so we increment
         * ni_tstamp.tsf to avoid resetting the hw TSF multiple
         * times */
                reset_tsf = 1;
                ni->ni_tstamp.tsf = cpu_to_le64(1);
        }
-@@ -5567,7 +5544,7 @@ ath_beacon_config(struct ath_softc *sc,
+@@ -5567,7 +5544,7 @@ ath_beacon_config(struct ath_softc *sc, 
                /* NB: the beacon interval is kept internally in TUs */
                intval = ic->ic_lintval & HAL_BEACON_PERIOD;
                if (sc->sc_stagbeacons)
                if ((sc->sc_nostabeacons) &&
                    (vap->iv_opmode == IEEE80211_M_HOSTAP))
                        reset_tsf = 1;
-@@ -5583,31 +5560,24 @@ ath_beacon_config(struct ath_softc *sc,
+@@ -5583,31 +5560,24 @@ ath_beacon_config(struct ath_softc *sc, 
                 * time */
                nexttbtt = intval;
        } else if (intval) {    /* NB: can be 0 for monitor mode */
                }
        }
  
-@@ -5730,9 +5700,6 @@ ath_beacon_config(struct ath_softc *sc,
+@@ -5730,9 +5700,6 @@ ath_beacon_config(struct ath_softc *sc, 
                ath_beacon_dturbo_config(vap, intval &
                                ~(HAL_BEACON_RESET_TSF | HAL_BEACON_ENA));
  #endif
          .procname     = "regdomain",
          .mode         = 0644,
          .proc_handler = ath_sysctl_halparam,
-@@ -11928,13 +11883,6 @@ static ctl_table ath_static_sysctls[] =
+@@ -11928,13 +11883,6 @@ static ctl_table ath_static_sysctls[] = 
        },
  #endif
        { .ctl_name     = CTL_AUTO,
index 27e1b47dad4132059bafabb67667f5411d76d852..8349b318f266dfe27301d8f708995f0af5f2a78e 100644 (file)
@@ -43,7 +43,7 @@
                                }
                        }
                        iwspy_event(vap, ni, rssi);
-@@ -3553,8 +3546,8 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3553,8 +3546,8 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                                (((vap->iv_opmode == IEEE80211_M_HOSTAP) ||
                                 (vap->iv_opmode == IEEE80211_M_WDS)) &&
                                (scan.capinfo & IEEE80211_CAPINFO_ESS))) {
@@ -53,7 +53,7 @@
                        int found = 0;
  
                        IEEE80211_LOCK_IRQ(vap->iv_ic);
-@@ -3570,14 +3563,12 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3570,14 +3563,12 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                                        }
                                }
                                if (found)
@@ -72,7 +72,7 @@
                                found = 1;
                        }
                        IEEE80211_UNLOCK_IRQ(vap->iv_ic);
-@@ -3585,20 +3576,21 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3585,20 +3576,21 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                        if (!found)
                                break;
  
                        } else {
                                /*
                                 * Copy data from beacon to neighbor table.
-@@ -3606,39 +3598,38 @@ ieee80211_recv_mgmt(struct ieee80211vap
+@@ -3606,39 +3598,38 @@ ieee80211_recv_mgmt(struct ieee80211vap 
                                 * ieee80211_add_neighbor(), so we just copy
                                 * everything over to be safe.
                                 */
index f0f5c26f934cbfb35dea50bc94a60871ae8ef07e..b9b5c9f074382ef07c0e210e1fe72a959d93ff30 100644 (file)
@@ -27,7 +27,7 @@
  
  
  #if (LINUX_VERSION_CODE < KERNEL_VERSION(2,5,52))
-@@ -204,6 +202,11 @@ ath_rate_findrate(struct ath_softc *sc,
+@@ -204,6 +202,11 @@ ath_rate_findrate(struct ath_softc *sc, 
                unsigned int ndx, offset;
                int mrr;
  
index d0b4fa63e145565590dcd2c18743584d9d611bfc..e399564dfc13d458c2b044ee08984ab1f6ee5b99 100644 (file)
@@ -62,7 +62,7 @@
  /*
   * Configure the beacon and sleep timers.
   *
-@@ -5523,6 +5543,7 @@ ath_beacon_config(struct ath_softc *sc,
+@@ -5523,6 +5543,7 @@ ath_beacon_config(struct ath_softc *sc, 
        if (vap == NULL)
                vap = TAILQ_FIRST(&ic->ic_vaps);   /* XXX */
  
@@ -70,7 +70,7 @@
        ni = vap->iv_bss;
  
        /* TSF calculation is timing critical - we don't want to be interrupted here */
-@@ -5699,6 +5720,9 @@ ath_beacon_config(struct ath_softc *sc,
+@@ -5699,6 +5720,9 @@ ath_beacon_config(struct ath_softc *sc, 
                        sc->sc_imask |= HAL_INT_SWBA;
                        ath_set_beacon_cal(sc, 1);
                        ath_beaconq_config(sc);
index 4e08a011a4ecc2e3785741344affb84c4b6ff836..e3b94b1c8ab0776ae3fd8720fcb8ae08f56a88d4 100644 (file)
@@ -15,7 +15,7 @@
  char *uts_release = UTS_RELEASE;
 --- a/ath/if_ath.c
 +++ b/ath/if_ath.c
-@@ -11580,227 +11580,231 @@ static int mincalibrate = 1;               /* once a
+@@ -11580,227 +11580,231 @@ static int mincalibrate = 1;               /* once a 
  static int maxint = 0x7fffffff;               /* 32-bit big */
  
  static const ctl_table ath_sysctl_template[] = {
          .procname     = "debug",
          .mode         = 0644,
          .data         = &ath_debug,
-@@ -11974,14 +11982,14 @@ static ctl_table ath_static_sysctls[] =
+@@ -11974,14 +11982,14 @@ static ctl_table ath_static_sysctls[] = 
          .proc_handler = proc_dointvec
        },
  #endif
          .procname     = "calibrate",
          .mode         = 0644,
          .data         = &ath_calinterval,
-@@ -11993,14 +12001,14 @@ static ctl_table ath_static_sysctls[] =
+@@ -11993,14 +12001,14 @@ static ctl_table ath_static_sysctls[] = 
        { 0 }
  };
  static ctl_table ath_ath_table[] = {
index 328e8c3505c3459bb5457ce860b58f0cdfd34178..1c0ec94af82a3442e8947c092f34deec72feea52 100644 (file)
@@ -1,6 +1,6 @@
 --- a/ath/if_ath_pci.c
 +++ b/ath/if_ath_pci.c
-@@ -264,6 +264,7 @@ ath_pci_probe(struct pci_dev *pdev, cons
+@@ -266,6 +266,7 @@ ath_pci_probe(struct pci_dev *pdev, cons
                }
        }
  
@@ -8,7 +8,7 @@
        /*
         * Auto-enable soft led processing for IBM cards and for
         * 5211 minipci cards.  Users can also manually enable/disable
-@@ -279,6 +280,7 @@ ath_pci_probe(struct pci_dev *pdev, cons
+@@ -281,6 +282,7 @@ ath_pci_probe(struct pci_dev *pdev, cons
                sc->aps_sc.sc_softled = 1;
                sc->aps_sc.sc_ledpin = 1;
        }
index 8798f534ecda9593244d3544c61e5bb4101c072f..8a14f5b66283f9d7221b23e8c43f0cb511b05cbd 100644 (file)
@@ -1,6 +1,6 @@
 --- a/net80211/ieee80211_scan_ap.c
 +++ b/net80211/ieee80211_scan_ap.c
-@@ -595,6 +595,14 @@ ap_end(struct ieee80211_scan_state *ss,
+@@ -595,6 +595,14 @@ ap_end(struct ieee80211_scan_state *ss, 
  
        ic = vap->iv_ic;
  
@@ -15,7 +15,7 @@
        /* record stats for the channel that was scanned last */
        ic->ic_set_channel(ic);
        spin_lock_irqsave(&channel_lock, sflags);
-@@ -648,6 +656,8 @@ ap_end(struct ieee80211_scan_state *ss,
+@@ -648,6 +656,8 @@ ap_end(struct ieee80211_scan_state *ss, 
                IEEE80211_SCHEDULE_TQUEUE(&as->as_actiontq);
                res = 1;
        }
index cf80f06bf678fd4d49e6ed57613388422fca2462..46e2b04e19ba61ecc3001c944efb5b03926c8338 100644 (file)
@@ -7,9 +7,9 @@
 -      { 0x168c, 0x0023, PCI_ANY_ID, PCI_ANY_ID },
 -      { 0x168c, 0x0024, PCI_ANY_ID, PCI_ANY_ID },
        { 0x168c, 0x9013, PCI_ANY_ID, PCI_ANY_ID }, /* sonicwall */
+       { 0x168c, 0xff16, PCI_ANY_ID, PCI_ANY_ID },
        { 0x168c, 0xff1a, PCI_ANY_ID, PCI_ANY_ID },
-       { 0 }
-@@ -146,8 +144,6 @@ static const struct ath_hw_detect cards[
+@@ -148,8 +146,6 @@ static const struct ath_hw_detect cards[
        { ubnt, "SR4C",    0x168c, 0x0013, 0x7777, 0x1004, 6 },
        { ubnt, "SR5",     0x168c, 0x0013, 0x168c, 0x2042, 7 },
        { ubnt, "SR9",     0x168c, 0x0013, 0x7777, 0x2009, 12 },
diff --git a/net/madwifi/patches/479-deprecate-devinitdata.patch b/net/madwifi/patches/479-deprecate-devinitdata.patch
new file mode 100644 (file)
index 0000000..312043b
--- /dev/null
@@ -0,0 +1,13 @@
+--- a/include/compat.h
++++ b/include/compat.h
+@@ -204,6 +204,10 @@ static inline int timeval_compare(struct
+ #define CTLNAME(x)
+ #endif
++#ifndef __devinitdata
++#define __devinitdata
++#endif
++
+ #endif /* __KERNEL__ */
+ #endif /* _ATH_COMPAT_H_ */