mac80211: merge a client mode state handling fix, refresh patches
authorFelix Fietkau <nbd@openwrt.org>
Wed, 17 Oct 2012 18:54:05 +0000 (18:54 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Wed, 17 Oct 2012 18:54:05 +0000 (18:54 +0000)
Backport of r33821

SVN-Revision: 33822

package/mac80211/patches/300-pending_work.patch
package/mac80211/patches/524-mac80211_configure_antenna_gain.patch
package/mac80211/patches/851-brcmsmac-start-adding-support-for-core-rev-28.patch

index f7a0aede533607339ff565ad19e405b1584ec924..9a4b24e4eae32bd6560e312d996ac2cad5bd96a4 100644 (file)
  
        ieee80211_bss_info_change_notify(sdata, changed);
  }
+@@ -3526,6 +3572,7 @@ int ieee80211_mgd_deauth(struct ieee8021
+ {
+       struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
+       u8 frame_buf[DEAUTH_DISASSOC_LEN];
++      bool tx = !req->local_state_change;
+       mutex_lock(&ifmgd->mtx);
+@@ -3542,12 +3589,12 @@ int ieee80211_mgd_deauth(struct ieee8021
+       if (ifmgd->associated &&
+           ether_addr_equal(ifmgd->associated->bssid, req->bssid)) {
+               ieee80211_set_disassoc(sdata, IEEE80211_STYPE_DEAUTH,
+-                                     req->reason_code, true, frame_buf);
++                                     req->reason_code, tx, frame_buf);
+       } else {
+               drv_mgd_prepare_tx(sdata->local, sdata);
+               ieee80211_send_deauth_disassoc(sdata, req->bssid,
+                                              IEEE80211_STYPE_DEAUTH,
+-                                             req->reason_code, true,
++                                             req->reason_code, tx,
+                                              frame_buf);
+       }
 --- a/net/mac80211/sta_info.c
 +++ b/net/mac80211/sta_info.c
 @@ -674,7 +674,7 @@ int __must_check __sta_info_destroy(stru
  
        if (local->user_power_level >= 0)
                power = min(power, local->user_power_level);
+--- a/include/net/cfg80211.h
++++ b/include/net/cfg80211.h
+@@ -1218,6 +1218,7 @@ struct cfg80211_deauth_request {
+       const u8 *ie;
+       size_t ie_len;
+       u16 reason_code;
++      bool local_state_change;
+ };
+ /**
+--- a/net/wireless/mlme.c
++++ b/net/wireless/mlme.c
+@@ -457,20 +457,14 @@ int __cfg80211_mlme_deauth(struct cfg802
+               .reason_code = reason,
+               .ie = ie,
+               .ie_len = ie_len,
++              .local_state_change = local_state_change,
+       };
+       ASSERT_WDEV_LOCK(wdev);
+-      if (local_state_change) {
+-              if (wdev->current_bss &&
+-                  ether_addr_equal(wdev->current_bss->pub.bssid, bssid)) {
+-                      cfg80211_unhold_bss(wdev->current_bss);
+-                      cfg80211_put_bss(&wdev->current_bss->pub);
+-                      wdev->current_bss = NULL;
+-              }
+-
++      if (local_state_change && (!wdev->current_bss ||
++          !ether_addr_equal(wdev->current_bss->pub.bssid, bssid)))
+               return 0;
+-      }
+       return rdev->ops->deauth(&rdev->wiphy, dev, &req);
+ }
index b2870a8aa10215087db17315e9f9d919b0dff7c1..b3b4ebb2f38db9aab5c9b5d490564640ea0b16ec 100644 (file)
        CFG80211_TESTMODE_CMD(ieee80211_testmode_cmd)
 --- a/include/net/cfg80211.h
 +++ b/include/net/cfg80211.h
-@@ -1551,6 +1551,7 @@ struct cfg80211_gtk_rekey_data {
+@@ -1552,6 +1552,7 @@ struct cfg80211_gtk_rekey_data {
   *    the power passed is in mBm, to get dBm use MBM_TO_DBM().
   * @get_tx_power: store the current TX power into the dbm variable;
   *    return 0 if successful
   *
   * @set_wds_peer: set the WDS peer for a WDS interface
   *
-@@ -1750,6 +1751,7 @@ struct cfg80211_ops {
+@@ -1751,6 +1752,7 @@ struct cfg80211_ops {
        int     (*set_tx_power)(struct wiphy *wiphy,
                                enum nl80211_tx_power_setting type, int mbm);
        int     (*get_tx_power)(struct wiphy *wiphy, int *dbm);
index 198af613cc6715a0a247b65a3d8908a5e3798a95..bfa9ff5b1ae48a9b71bdd86f6b71dc67ceba0cea 100644 (file)
@@ -1,7 +1,7 @@
 --- a/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
 +++ b/drivers/net/wireless/brcm80211/brcmsmac/mac80211_if.c
 @@ -97,6 +97,7 @@ static struct bcma_device_id brcms_corei
//    BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 17, BCMA_ANY_CLASS),
      BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 17, BCMA_ANY_CLASS),
        BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 23, BCMA_ANY_CLASS),
        BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 24, BCMA_ANY_CLASS),
 +//    BCMA_CORE(BCMA_MANUF_BCM, BCMA_CORE_80211, 28, BCMA_ANY_CLASS),