Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 351769
b: refs/heads/master
c: ec61cd6
h: refs/heads/master
i:
  351767: 7718474
v: v3
  • Loading branch information
Johannes Berg committed Jan 3, 2013
1 parent b98de5e commit eae40b1
Show file tree
Hide file tree
Showing 3 changed files with 40 additions and 2 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: 598a5938e04ce30d837dca4c3c3326c69435342a
refs/heads/master: ec61cd63dd3f3bf982180b2bcc1b325160d73837
9 changes: 9 additions & 0 deletions trunk/include/linux/ieee80211.h
Original file line number Diff line number Diff line change
Expand Up @@ -701,6 +701,11 @@ enum ieee80211_rann_flags {
RANN_FLAG_IS_GATE = 1 << 0,
};

enum ieee80211_ht_chanwidth_values {
IEEE80211_HT_CHANWIDTH_20MHZ = 0,
IEEE80211_HT_CHANWIDTH_ANY = 1,
};

#define WLAN_SA_QUERY_TR_ID_LEN 2

struct ieee80211_mgmt {
Expand Down Expand Up @@ -821,6 +826,10 @@ struct ieee80211_mgmt {
u8 action;
u8 smps_control;
} __packed ht_smps;
struct {
u8 action_code;
u8 chanwidth;
} __packed ht_notify_cw;
struct {
u8 action_code;
u8 dialog_token;
Expand Down
31 changes: 30 additions & 1 deletion trunk/net/mac80211/rx.c
Original file line number Diff line number Diff line change
Expand Up @@ -2353,7 +2353,7 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
sdata->vif.type != NL80211_IFTYPE_ADHOC)
break;

/* verify action & smps_control are present */
/* verify action & smps_control/chanwidth are present */
if (len < IEEE80211_MIN_ACTION_SIZE + 2)
goto invalid;

Expand Down Expand Up @@ -2392,6 +2392,35 @@ ieee80211_rx_h_action(struct ieee80211_rx_data *rx)
IEEE80211_RC_SMPS_CHANGED);
goto handled;
}
case WLAN_HT_ACTION_NOTIFY_CHANWIDTH: {
struct ieee80211_supported_band *sband;
u8 chanwidth = mgmt->u.action.u.ht_notify_cw.chanwidth;
bool old_40mhz, new_40mhz;

/* If it doesn't support 40 MHz it can't change ... */
if (!rx->sta->supports_40mhz)
goto handled;

old_40mhz = rx->sta->sta.ht_cap.cap &
IEEE80211_HT_CAP_SUP_WIDTH_20_40;
new_40mhz = chanwidth == IEEE80211_HT_CHANWIDTH_ANY;

if (old_40mhz == new_40mhz)
goto handled;

if (new_40mhz)
rx->sta->sta.ht_cap.cap |=
IEEE80211_HT_CAP_SUP_WIDTH_20_40;
else
rx->sta->sta.ht_cap.cap &=
~IEEE80211_HT_CAP_SUP_WIDTH_20_40;

sband = rx->local->hw.wiphy->bands[status->band];

rate_control_rate_update(local, sband, rx->sta,
IEEE80211_RC_BW_CHANGED);
goto handled;
}
default:
goto invalid;
}
Expand Down

0 comments on commit eae40b1

Please sign in to comment.