Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 149866
b: refs/heads/master
c: d5522e0
h: refs/heads/master
v: v3
  • Loading branch information
Johannes Berg authored and John W. Linville committed Apr 22, 2009
1 parent a165c95 commit 88e1643
Show file tree
Hide file tree
Showing 4 changed files with 84 additions and 87 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: f5c38ef06e005705ef87b7a77752c183bacb94cc
refs/heads/master: d5522e039586fdf72493225a88b944f726b69671
83 changes: 0 additions & 83 deletions trunk/net/mac80211/ht.c
Original file line number Diff line number Diff line change
Expand Up @@ -83,89 +83,6 @@ void ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_supported_band *sband,
ht_cap->mcs.rx_mask[32/8] |= 1;
}

/*
* ieee80211_enable_ht should be called only after the operating band
* has been determined as ht configuration depends on the hw's
* HT abilities for a specific band.
*/
u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata,
struct ieee80211_ht_info *hti,
u16 ap_ht_cap_flags)
{
struct ieee80211_local *local = sdata->local;
struct ieee80211_supported_band *sband;
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
struct ieee80211_bss_ht_conf ht;
struct sta_info *sta;
u32 changed = 0;
bool enable_ht = true, ht_changed;
enum nl80211_channel_type channel_type = NL80211_CHAN_NO_HT;

sband = local->hw.wiphy->bands[local->hw.conf.channel->band];

memset(&ht, 0, sizeof(ht));

/* HT is not supported */
if (!sband->ht_cap.ht_supported)
enable_ht = false;

/* check that channel matches the right operating channel */
if (local->hw.conf.channel->center_freq !=
ieee80211_channel_to_frequency(hti->control_chan))
enable_ht = false;

if (enable_ht) {
channel_type = NL80211_CHAN_HT20;

if (!(ap_ht_cap_flags & IEEE80211_HT_CAP_40MHZ_INTOLERANT) &&
(sband->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) &&
(hti->ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) {
switch(hti->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
channel_type = NL80211_CHAN_HT40PLUS;
break;
case IEEE80211_HT_PARAM_CHA_SEC_BELOW:
channel_type = NL80211_CHAN_HT40MINUS;
break;
}
}
}

ht_changed = conf_is_ht(&local->hw.conf) != enable_ht ||
channel_type != local->hw.conf.channel_type;

local->oper_channel_type = channel_type;

if (ht_changed) {
/* channel_type change automatically detected */
ieee80211_hw_config(local, 0);

rcu_read_lock();

sta = sta_info_get(local, ifmgd->bssid);
if (sta)
rate_control_rate_update(local, sband, sta,
IEEE80211_RC_HT_CHANGED);

rcu_read_unlock();

}

/* disable HT */
if (!enable_ht)
return 0;

ht.operation_mode = le16_to_cpu(hti->operation_mode);

/* if bss configuration changed store the new one */
if (memcmp(&sdata->vif.bss_conf.ht, &ht, sizeof(ht))) {
changed |= BSS_CHANGED_HT;
sdata->vif.bss_conf.ht = ht;
}

return changed;
}

void ieee80211_sta_tear_down_BA_sessions(struct sta_info *sta)
{
int i;
Expand Down
3 changes: 0 additions & 3 deletions trunk/net/mac80211/ieee80211_i.h
Original file line number Diff line number Diff line change
Expand Up @@ -995,9 +995,6 @@ int ieee80211_subif_start_xmit(struct sk_buff *skb, struct net_device *dev);
void ieee80211_ht_cap_ie_to_sta_ht_cap(struct ieee80211_supported_band *sband,
struct ieee80211_ht_cap *ht_cap_ie,
struct ieee80211_sta_ht_cap *ht_cap);
u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata,
struct ieee80211_ht_info *hti,
u16 ap_ht_cap_flags);
void ieee80211_send_bar(struct ieee80211_sub_if_data *sdata, u8 *ra, u16 tid, u16 ssn);
void ieee80211_send_delba(struct ieee80211_sub_if_data *sdata,
const u8 *da, u16 tid,
Expand Down
83 changes: 83 additions & 0 deletions trunk/net/mac80211/mlme.c
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,89 @@ static int ieee80211_compatible_rates(struct ieee80211_bss *bss,
return count;
}

/*
* ieee80211_enable_ht should be called only after the operating band
* has been determined as ht configuration depends on the hw's
* HT abilities for a specific band.
*/
static u32 ieee80211_enable_ht(struct ieee80211_sub_if_data *sdata,
struct ieee80211_ht_info *hti,
u16 ap_ht_cap_flags)
{
struct ieee80211_local *local = sdata->local;
struct ieee80211_supported_band *sband;
struct ieee80211_if_managed *ifmgd = &sdata->u.mgd;
struct ieee80211_bss_ht_conf ht;
struct sta_info *sta;
u32 changed = 0;
bool enable_ht = true, ht_changed;
enum nl80211_channel_type channel_type = NL80211_CHAN_NO_HT;

sband = local->hw.wiphy->bands[local->hw.conf.channel->band];

memset(&ht, 0, sizeof(ht));

/* HT is not supported */
if (!sband->ht_cap.ht_supported)
enable_ht = false;

/* check that channel matches the right operating channel */
if (local->hw.conf.channel->center_freq !=
ieee80211_channel_to_frequency(hti->control_chan))
enable_ht = false;

if (enable_ht) {
channel_type = NL80211_CHAN_HT20;

if (!(ap_ht_cap_flags & IEEE80211_HT_CAP_40MHZ_INTOLERANT) &&
(sband->ht_cap.cap & IEEE80211_HT_CAP_SUP_WIDTH_20_40) &&
(hti->ht_param & IEEE80211_HT_PARAM_CHAN_WIDTH_ANY)) {
switch(hti->ht_param & IEEE80211_HT_PARAM_CHA_SEC_OFFSET) {
case IEEE80211_HT_PARAM_CHA_SEC_ABOVE:
channel_type = NL80211_CHAN_HT40PLUS;
break;
case IEEE80211_HT_PARAM_CHA_SEC_BELOW:
channel_type = NL80211_CHAN_HT40MINUS;
break;
}
}
}

ht_changed = conf_is_ht(&local->hw.conf) != enable_ht ||
channel_type != local->hw.conf.channel_type;

local->oper_channel_type = channel_type;

if (ht_changed) {
/* channel_type change automatically detected */
ieee80211_hw_config(local, 0);

rcu_read_lock();

sta = sta_info_get(local, ifmgd->bssid);
if (sta)
rate_control_rate_update(local, sband, sta,
IEEE80211_RC_HT_CHANGED);

rcu_read_unlock();

}

/* disable HT */
if (!enable_ht)
return 0;

ht.operation_mode = le16_to_cpu(hti->operation_mode);

/* if bss configuration changed store the new one */
if (memcmp(&sdata->vif.bss_conf.ht, &ht, sizeof(ht))) {
changed |= BSS_CHANGED_HT;
sdata->vif.bss_conf.ht = ht;
}

return changed;
}

/* frame sending functions */

static void ieee80211_send_assoc(struct ieee80211_sub_if_data *sdata)
Expand Down

0 comments on commit 88e1643

Please sign in to comment.