|
@@ -727,12 +727,28 @@ static const struct ieee80211_iface_limit if_limits[] = {
|
|
|
BIT(NL80211_IFTYPE_P2P_GO) },
|
|
|
};
|
|
|
|
|
|
-static const struct ieee80211_iface_combination if_comb = {
|
|
|
- .limits = if_limits,
|
|
|
- .n_limits = ARRAY_SIZE(if_limits),
|
|
|
- .max_interfaces = 2048,
|
|
|
- .num_different_channels = 1,
|
|
|
- .beacon_int_infra_match = true,
|
|
|
+
|
|
|
+static const struct ieee80211_iface_limit if_dfs_limits[] = {
|
|
|
+ { .max = 1, .types = BIT(NL80211_IFTYPE_AP) },
|
|
|
+};
|
|
|
+
|
|
|
+static const struct ieee80211_iface_combination if_comb[] = {
|
|
|
+ {
|
|
|
+ .limits = if_limits,
|
|
|
+ .n_limits = ARRAY_SIZE(if_limits),
|
|
|
+ .max_interfaces = 2048,
|
|
|
+ .num_different_channels = 1,
|
|
|
+ .beacon_int_infra_match = true,
|
|
|
+ },
|
|
|
+ {
|
|
|
+ .limits = if_dfs_limits,
|
|
|
+ .n_limits = ARRAY_SIZE(if_dfs_limits),
|
|
|
+ .max_interfaces = 1,
|
|
|
+ .num_different_channels = 1,
|
|
|
+ .beacon_int_infra_match = true,
|
|
|
+ .radar_detect_widths = BIT(NL80211_CHAN_NO_HT) |
|
|
|
+ BIT(NL80211_CHAN_HT20),
|
|
|
+ }
|
|
|
};
|
|
|
|
|
|
void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
|
|
@@ -763,8 +779,8 @@ void ath9k_set_hw_capab(struct ath_softc *sc, struct ieee80211_hw *hw)
|
|
|
BIT(NL80211_IFTYPE_ADHOC) |
|
|
|
BIT(NL80211_IFTYPE_MESH_POINT);
|
|
|
|
|
|
- hw->wiphy->iface_combinations = &if_comb;
|
|
|
- hw->wiphy->n_iface_combinations = 1;
|
|
|
+ hw->wiphy->iface_combinations = if_comb;
|
|
|
+ hw->wiphy->n_iface_combinations = ARRAY_SIZE(if_comb);
|
|
|
|
|
|
if (AR_SREV_5416(sc->sc_ah))
|
|
|
hw->wiphy->flags &= ~WIPHY_FLAG_PS_ON_BY_DEFAULT;
|