aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Crispin <blogic@openwrt.org>2013-02-25 13:41:48 +0000
committerJohn Crispin <blogic@openwrt.org>2013-02-25 13:41:48 +0000
commitfe6b56b0082ade3017ea2445204e5af35b5ad87a (patch)
tree96cbe4f5d3b142fe051850fed06dc978f75ed559
parent2222f314840d7191c1fd7f27bf5ebf0aefe5dd60 (diff)
downloadupstream-fe6b56b0082ade3017ea2445204e5af35b5ad87a.tar.gz
upstream-fe6b56b0082ade3017ea2445204e5af35b5ad87a.tar.bz2
upstream-fe6b56b0082ade3017ea2445204e5af35b5ad87a.zip
[mac80211] adds missing backport needed for ralink mbssid
fixes #12952 Signed-off-by: John Crispin <blogic@openwrt.org> git-svn-id: svn://svn.openwrt.org/openwrt/branches/attitude_adjustment@35780 3c298f89-4303-0410-b956-a3cf2f4a3e73
-rw-r--r--package/mac80211/patches/b02-rt2x00-add-multiple-ap.patch94
1 files changed, 94 insertions, 0 deletions
diff --git a/package/mac80211/patches/b02-rt2x00-add-multiple-ap.patch b/package/mac80211/patches/b02-rt2x00-add-multiple-ap.patch
new file mode 100644
index 0000000000..4f06e79dec
--- /dev/null
+++ b/package/mac80211/patches/b02-rt2x00-add-multiple-ap.patch
@@ -0,0 +1,94 @@
+--- a/drivers/net/wireless/rt2x00/rt2x00.h
++++ b/drivers/net/wireless/rt2x00/rt2x00.h
+@@ -750,6 +750,14 @@ enum rt2x00_capability_flags {
+ };
+
+ /*
++ * Interface combinations
++ */
++enum {
++ IF_COMB_AP = 0,
++ NUM_IF_COMB,
++};
++
++/*
+ * rt2x00 device structure.
+ */
+ struct rt2x00_dev {
+@@ -876,6 +884,12 @@ struct rt2x00_dev {
+ unsigned int intf_beaconing;
+
+ /*
++ * Interface combinations
++ */
++ struct ieee80211_iface_limit if_limits_ap;
++ struct ieee80211_iface_combination if_combinations[NUM_IF_COMB];
++
++ /*
+ * Link quality
+ */
+ struct link link;
+--- a/drivers/net/wireless/rt2x00/rt2x00dev.c
++++ b/drivers/net/wireless/rt2x00/rt2x00dev.c
+@@ -1146,6 +1146,34 @@ void rt2x00lib_stop(struct rt2x00_dev *r
+ rt2x00dev->intf_associated = 0;
+ }
+
++static inline void rt2x00lib_set_if_combinations(struct rt2x00_dev *rt2x00dev)
++{
++ struct ieee80211_iface_limit *if_limit;
++ struct ieee80211_iface_combination *if_combination;
++
++ /*
++ * Build up AP interface limits structure.
++ */
++ if_limit = &rt2x00dev->if_limits_ap;
++ if_limit->max = rt2x00dev->ops->max_ap_intf;
++ if_limit->types = BIT(NL80211_IFTYPE_AP);
++
++ /*
++ * Build up AP interface combinations structure.
++ */
++ if_combination = &rt2x00dev->if_combinations[IF_COMB_AP];
++ if_combination->limits = if_limit;
++ if_combination->n_limits = 1;
++ if_combination->max_interfaces = if_limit->max;
++ if_combination->num_different_channels = 1;
++
++ /*
++ * Finally, specify the possible combinations to mac80211.
++ */
++ rt2x00dev->hw->wiphy->iface_combinations = rt2x00dev->if_combinations;
++ rt2x00dev->hw->wiphy->n_iface_combinations = 1;
++}
++
+ /*
+ * driver allocation handlers.
+ */
+@@ -1165,6 +1193,11 @@ int rt2x00lib_probe_dev(struct rt2x00_de
+ }
+ }
+
++ /*
++ * Set possible interface combinations.
++ */
++ rt2x00lib_set_if_combinations(rt2x00dev);
++
+ spin_lock_init(&rt2x00dev->irqmask_lock);
+ mutex_init(&rt2x00dev->csr_mutex);
+
+--- a/drivers/net/wireless/rt2x00/rt2x00mac.c
++++ b/drivers/net/wireless/rt2x00/rt2x00mac.c
+@@ -243,10 +243,9 @@ int rt2x00mac_add_interface(struct ieee8
+ return -ENOBUFS;
+
+ /*
+- * Check if we exceeded the maximum amount
+- * of supported interfaces.
++ * We don't support multiple STA interfaces.
+ */
+- if (rt2x00dev->intf_sta_count >= rt2x00dev->ops->max_sta_intf)
++ if (rt2x00dev->intf_sta_count)
+ return -ENOBUFS;
+
+ break;