aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-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;