Commit 37d51101 authored by David S. Miller's avatar David S. Miller

Merge branch 'for-davem' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless

John W. Linville says:

====================
Here is another handful of late-breaking fixes intended for the 3.8
stream...  Hopefully the will still make it! :-)

There are three mac80211 fixes pulled from Johannes:

"Here are three fixes still for the 3.8 stream, the fix from Cong Ding
for the bad sizeof (Stephen Hemminger had pointed it out before but I'd
promptly forgotten), a mac80211 managed-mode channel context usage fix
where a downgrade would never stop until reaching non-HT and a bug in
the channel determination that could cause invalid channels like HT40+
on channel 11 to be used."

Also included is a mwl8k fix that avoids an oops when using mwl8k
devices that only support the 5 GHz band.

Please let me know if there are problems!
====================
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parents 96be80ab 318d86db
...@@ -318,20 +318,20 @@ struct mwl8k_sta { ...@@ -318,20 +318,20 @@ struct mwl8k_sta {
#define MWL8K_STA(_sta) ((struct mwl8k_sta *)&((_sta)->drv_priv)) #define MWL8K_STA(_sta) ((struct mwl8k_sta *)&((_sta)->drv_priv))
static const struct ieee80211_channel mwl8k_channels_24[] = { static const struct ieee80211_channel mwl8k_channels_24[] = {
{ .center_freq = 2412, .hw_value = 1, }, { .band = IEEE80211_BAND_2GHZ, .center_freq = 2412, .hw_value = 1, },
{ .center_freq = 2417, .hw_value = 2, }, { .band = IEEE80211_BAND_2GHZ, .center_freq = 2417, .hw_value = 2, },
{ .center_freq = 2422, .hw_value = 3, }, { .band = IEEE80211_BAND_2GHZ, .center_freq = 2422, .hw_value = 3, },
{ .center_freq = 2427, .hw_value = 4, }, { .band = IEEE80211_BAND_2GHZ, .center_freq = 2427, .hw_value = 4, },
{ .center_freq = 2432, .hw_value = 5, }, { .band = IEEE80211_BAND_2GHZ, .center_freq = 2432, .hw_value = 5, },
{ .center_freq = 2437, .hw_value = 6, }, { .band = IEEE80211_BAND_2GHZ, .center_freq = 2437, .hw_value = 6, },
{ .center_freq = 2442, .hw_value = 7, }, { .band = IEEE80211_BAND_2GHZ, .center_freq = 2442, .hw_value = 7, },
{ .center_freq = 2447, .hw_value = 8, }, { .band = IEEE80211_BAND_2GHZ, .center_freq = 2447, .hw_value = 8, },
{ .center_freq = 2452, .hw_value = 9, }, { .band = IEEE80211_BAND_2GHZ, .center_freq = 2452, .hw_value = 9, },
{ .center_freq = 2457, .hw_value = 10, }, { .band = IEEE80211_BAND_2GHZ, .center_freq = 2457, .hw_value = 10, },
{ .center_freq = 2462, .hw_value = 11, }, { .band = IEEE80211_BAND_2GHZ, .center_freq = 2462, .hw_value = 11, },
{ .center_freq = 2467, .hw_value = 12, }, { .band = IEEE80211_BAND_2GHZ, .center_freq = 2467, .hw_value = 12, },
{ .center_freq = 2472, .hw_value = 13, }, { .band = IEEE80211_BAND_2GHZ, .center_freq = 2472, .hw_value = 13, },
{ .center_freq = 2484, .hw_value = 14, }, { .band = IEEE80211_BAND_2GHZ, .center_freq = 2484, .hw_value = 14, },
}; };
static const struct ieee80211_rate mwl8k_rates_24[] = { static const struct ieee80211_rate mwl8k_rates_24[] = {
...@@ -352,10 +352,10 @@ static const struct ieee80211_rate mwl8k_rates_24[] = { ...@@ -352,10 +352,10 @@ static const struct ieee80211_rate mwl8k_rates_24[] = {
}; };
static const struct ieee80211_channel mwl8k_channels_50[] = { static const struct ieee80211_channel mwl8k_channels_50[] = {
{ .center_freq = 5180, .hw_value = 36, }, { .band = IEEE80211_BAND_5GHZ, .center_freq = 5180, .hw_value = 36, },
{ .center_freq = 5200, .hw_value = 40, }, { .band = IEEE80211_BAND_5GHZ, .center_freq = 5200, .hw_value = 40, },
{ .center_freq = 5220, .hw_value = 44, }, { .band = IEEE80211_BAND_5GHZ, .center_freq = 5220, .hw_value = 44, },
{ .center_freq = 5240, .hw_value = 48, }, { .band = IEEE80211_BAND_5GHZ, .center_freq = 5240, .hw_value = 48, },
}; };
static const struct ieee80211_rate mwl8k_rates_50[] = { static const struct ieee80211_rate mwl8k_rates_50[] = {
......
...@@ -2004,7 +2004,8 @@ static int ieee80211_set_mcast_rate(struct wiphy *wiphy, struct net_device *dev, ...@@ -2004,7 +2004,8 @@ static int ieee80211_set_mcast_rate(struct wiphy *wiphy, struct net_device *dev,
{ {
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
memcpy(sdata->vif.bss_conf.mcast_rate, rate, sizeof(rate)); memcpy(sdata->vif.bss_conf.mcast_rate, rate,
sizeof(int) * IEEE80211_NUM_BANDS);
return 0; return 0;
} }
......
...@@ -3400,6 +3400,7 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata, ...@@ -3400,6 +3400,7 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata,
ret = 0; ret = 0;
out:
while (!cfg80211_chandef_usable(sdata->local->hw.wiphy, chandef, while (!cfg80211_chandef_usable(sdata->local->hw.wiphy, chandef,
IEEE80211_CHAN_DISABLED)) { IEEE80211_CHAN_DISABLED)) {
if (WARN_ON(chandef->width == NL80211_CHAN_WIDTH_20_NOHT)) { if (WARN_ON(chandef->width == NL80211_CHAN_WIDTH_20_NOHT)) {
...@@ -3408,14 +3409,13 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata, ...@@ -3408,14 +3409,13 @@ ieee80211_determine_chantype(struct ieee80211_sub_if_data *sdata,
goto out; goto out;
} }
ret = chandef_downgrade(chandef); ret |= chandef_downgrade(chandef);
} }
if (chandef->width != vht_chandef.width) if (chandef->width != vht_chandef.width)
sdata_info(sdata, sdata_info(sdata,
"local regulatory prevented using AP HT/VHT configuration, downgraded\n"); "capabilities/regulatory prevented using AP HT/VHT configuration, downgraded\n");
out:
WARN_ON_ONCE(!cfg80211_chandef_valid(chandef)); WARN_ON_ONCE(!cfg80211_chandef_valid(chandef));
return ret; return ret;
} }
...@@ -3529,8 +3529,11 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata, ...@@ -3529,8 +3529,11 @@ static int ieee80211_prep_channel(struct ieee80211_sub_if_data *sdata,
*/ */
ret = ieee80211_vif_use_channel(sdata, &chandef, ret = ieee80211_vif_use_channel(sdata, &chandef,
IEEE80211_CHANCTX_SHARED); IEEE80211_CHANCTX_SHARED);
while (ret && chandef.width != NL80211_CHAN_WIDTH_20_NOHT) while (ret && chandef.width != NL80211_CHAN_WIDTH_20_NOHT) {
ifmgd->flags |= chandef_downgrade(&chandef); ifmgd->flags |= chandef_downgrade(&chandef);
ret = ieee80211_vif_use_channel(sdata, &chandef,
IEEE80211_CHANCTX_SHARED);
}
return ret; return ret;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment