diff options
Diffstat (limited to 'package/mac80211')
-rw-r--r-- | package/mac80211/patches/b02-rt2x00-add-multiple-ap.patch | 94 |
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; |