Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 150373
b: refs/heads/master
c: 294196a
h: refs/heads/master
i:
  150371: 54ac5da
v: v3
  • Loading branch information
Luis R. Rodriguez authored and John W. Linville committed May 20, 2009
1 parent 627347a commit b445e57
Show file tree
Hide file tree
Showing 2 changed files with 18 additions and 23 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 768777ea1118f6ff3f1a013557e7bc4f5d2683a4
refs/heads/master: 294196ab22c91da974ba1f40d0a7cdcb0b3e6bc3
39 changes: 17 additions & 22 deletions trunk/net/wireless/nl80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -492,7 +492,7 @@ static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info)
enum nl80211_channel_type channel_type = NL80211_CHAN_NO_HT;
struct ieee80211_channel *chan;
struct ieee80211_sta_ht_cap *ht_cap;
u32 freq, sec_freq;
u32 freq;

if (!rdev->ops->set_channel) {
result = -EOPNOTSUPP;
Expand All @@ -518,33 +518,28 @@ static int nl80211_set_wiphy(struct sk_buff *skb, struct genl_info *info)
if (!chan || chan->flags & IEEE80211_CHAN_DISABLED)
goto bad_res;

if (channel_type == NL80211_CHAN_HT40MINUS)
sec_freq = freq - 20;
else if (channel_type == NL80211_CHAN_HT40PLUS)
sec_freq = freq + 20;
else
sec_freq = 0;

ht_cap = &rdev->wiphy.bands[chan->band]->ht_cap;

/* no HT capabilities */
if (channel_type != NL80211_CHAN_NO_HT &&
!ht_cap->ht_supported)
if (channel_type == NL80211_CHAN_HT40MINUS &&
(chan->flags & IEEE80211_CHAN_NO_HT40MINUS))
goto bad_res;
else if (channel_type == NL80211_CHAN_HT40PLUS &&
(chan->flags & IEEE80211_CHAN_NO_HT40PLUS))
goto bad_res;

if (sec_freq) {
struct ieee80211_channel *schan;
/*
* At this point we know if that if HT40 was requested
* we are allowed to use it and the extension channel
* exists.
*/

/* no 40 MHz capabilities */
ht_cap = &rdev->wiphy.bands[chan->band]->ht_cap;

/* no HT capabilities or intolerant */
if (channel_type != NL80211_CHAN_NO_HT) {
if (!ht_cap->ht_supported)
goto bad_res;
if (!(ht_cap->cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) ||
(ht_cap->cap & IEEE80211_HT_CAP_40MHZ_INTOLERANT))
goto bad_res;

schan = ieee80211_get_channel(&rdev->wiphy, sec_freq);

/* Secondary channel not allowed */
if (!schan || schan->flags & IEEE80211_CHAN_DISABLED)
goto bad_res;
}

result = rdev->ops->set_channel(&rdev->wiphy, chan,
Expand Down

0 comments on commit b445e57

Please sign in to comment.