mac80211: update to wireless-testing 2012-04-13
[openwrt.git] / package / mac80211 / patches / 411-ath5k_allow_adhoc_and_ap.patch
index d37da10..410e6bc 100644 (file)
@@ -1,6 +1,6 @@
 --- a/drivers/net/wireless/ath/ath5k/mac80211-ops.c
 +++ b/drivers/net/wireless/ath/ath5k/mac80211-ops.c
-@@ -97,13 +97,8 @@ ath5k_add_interface(struct ieee80211_hw
+@@ -86,13 +86,8 @@ ath5k_add_interface(struct ieee80211_hw 
                goto end;
        }
  
@@ -9,30 +9,38 @@
 -       * We would need to operate the HW in ad-hoc mode to allow TSF updates
 -       * for the IBSS, but this breaks with additional AP or STA interfaces
 -       * at the moment. */
--      if (sc->num_adhoc_vifs ||
--          (sc->nvifs && vif->type == NL80211_IFTYPE_ADHOC)) {
+-      if (ah->num_adhoc_vifs ||
+-          (ah->nvifs && vif->type == NL80211_IFTYPE_ADHOC)) {
 +      /* Don't allow more than one ad-hoc interface */
-+      if (sc->num_adhoc_vifs && vif->type == NL80211_IFTYPE_ADHOC) {
-               ATH5K_ERR(sc, "Only one single ad-hoc interface is allowed.\n");
++      if (ah->num_adhoc_vifs && vif->type == NL80211_IFTYPE_ADHOC) {
+               ATH5K_ERR(ah, "Only one single ad-hoc interface is allowed.\n");
                ret = -ELNRNG;
                goto end;
 --- a/drivers/net/wireless/ath/ath5k/base.c
 +++ b/drivers/net/wireless/ath/ath5k/base.c
-@@ -1880,7 +1880,7 @@ ath5k_beacon_send(struct ath5k_softc *sc
-               sc->bmisscount = 0;
+@@ -1871,7 +1871,7 @@ ath5k_beacon_send(struct ath5k_hw *ah)
        }
  
--      if ((sc->opmode == NL80211_IFTYPE_AP && sc->num_ap_vifs > 1) ||
-+      if ((sc->opmode == NL80211_IFTYPE_AP && sc->num_ap_vifs + sc->num_adhoc_vifs > 1) ||
-                       sc->opmode == NL80211_IFTYPE_MESH_POINT) {
+       if ((ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs +
+-                      ah->num_mesh_vifs > 1) ||
++                      ah->num_adhoc_vifs + ah->num_mesh_vifs > 1) ||
+                       ah->opmode == NL80211_IFTYPE_MESH_POINT) {
                u64 tsf = ath5k_hw_get_tsf64(ah);
                u32 tsftu = TSF_TO_TU(tsf);
-@@ -1958,7 +1958,7 @@ ath5k_beacon_update_timers(struct ath5k_
-       u64 hw_tsf;
+@@ -1957,7 +1957,7 @@ ath5k_beacon_update_timers(struct ath5k_
  
-       intval = sc->bintval & AR5K_BEACON_PERIOD;
--      if (sc->opmode == NL80211_IFTYPE_AP && sc->num_ap_vifs > 1) {
-+      if (sc->opmode == NL80211_IFTYPE_AP && sc->num_ap_vifs + sc->num_adhoc_vifs > 1) {
+       intval = ah->bintval & AR5K_BEACON_PERIOD;
+       if (ah->opmode == NL80211_IFTYPE_AP && ah->num_ap_vifs
+-              + ah->num_mesh_vifs > 1) {
++              + ah->num_adhoc_vifs + ah->num_mesh_vifs > 1) {
                intval /= ATH_BCBUF;    /* staggered multi-bss beacons */
                if (intval < 15)
-                       ATH5K_WARN(sc, "intval %u is too low, min 15\n",
+                       ATH5K_WARN(ah, "intval %u is too low, min 15\n",
+@@ -2419,6 +2419,7 @@ ath5k_tx_complete_poll_work(struct work_
+ static const struct ieee80211_iface_limit if_limits[] = {
+       { .max = 256,   .types = BIT(NL80211_IFTYPE_STATION) },
+       { .max = 4,     .types = BIT(NL80211_IFTYPE_AP) |
++                               BIT(NL80211_IFTYPE_ADHOC) |
+                                BIT(NL80211_IFTYPE_MESH_POINT) },
+ };