mac80211: add spectrum capabilities
This patch add spectrum capability and required information elements to association request providing AP has requested it and it is supported by the driver Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Assaf Krauss <assaf.krauss@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
7b1e78d505
commit
06ff47bc95
|
@ -710,6 +710,10 @@ enum ieee80211_tkip_key_type {
|
||||||
* @IEEE80211_HW_NOISE_DBM:
|
* @IEEE80211_HW_NOISE_DBM:
|
||||||
* Hardware can provide noise (radio interference) values in units dBm,
|
* Hardware can provide noise (radio interference) values in units dBm,
|
||||||
* decibel difference from one milliwatt.
|
* decibel difference from one milliwatt.
|
||||||
|
*
|
||||||
|
* @IEEE80211_HW_SPECTRUM_MGMT:
|
||||||
|
* Hardware supports spectrum management defined in 802.11h
|
||||||
|
* Measurement, Channel Switch, Quieting, TPC
|
||||||
*/
|
*/
|
||||||
enum ieee80211_hw_flags {
|
enum ieee80211_hw_flags {
|
||||||
IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE = 1<<0,
|
IEEE80211_HW_HOST_GEN_BEACON_TEMPLATE = 1<<0,
|
||||||
|
@ -721,6 +725,7 @@ enum ieee80211_hw_flags {
|
||||||
IEEE80211_HW_SIGNAL_DB = 1<<6,
|
IEEE80211_HW_SIGNAL_DB = 1<<6,
|
||||||
IEEE80211_HW_SIGNAL_DBM = 1<<7,
|
IEEE80211_HW_SIGNAL_DBM = 1<<7,
|
||||||
IEEE80211_HW_NOISE_DBM = 1<<8,
|
IEEE80211_HW_NOISE_DBM = 1<<8,
|
||||||
|
IEEE80211_HW_SPECTRUM_MGMT = 1<<9,
|
||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -747,6 +747,10 @@ static void ieee80211_send_assoc(struct net_device *dev,
|
||||||
* b-only mode) */
|
* b-only mode) */
|
||||||
rates_len = ieee80211_compatible_rates(bss, sband, &rates);
|
rates_len = ieee80211_compatible_rates(bss, sband, &rates);
|
||||||
|
|
||||||
|
if ((bss->capability & WLAN_CAPABILITY_SPECTRUM_MGMT) &&
|
||||||
|
(local->hw.flags & IEEE80211_HW_SPECTRUM_MGMT))
|
||||||
|
capab |= WLAN_CAPABILITY_SPECTRUM_MGMT;
|
||||||
|
|
||||||
ieee80211_rx_bss_put(dev, bss);
|
ieee80211_rx_bss_put(dev, bss);
|
||||||
} else {
|
} else {
|
||||||
rates = ~0;
|
rates = ~0;
|
||||||
|
@ -814,6 +818,26 @@ static void ieee80211_send_assoc(struct net_device *dev,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (capab & WLAN_CAPABILITY_SPECTRUM_MGMT) {
|
||||||
|
/* 1. power capabilities */
|
||||||
|
pos = skb_put(skb, 4);
|
||||||
|
*pos++ = WLAN_EID_PWR_CAPABILITY;
|
||||||
|
*pos++ = 2;
|
||||||
|
*pos++ = 0; /* min tx power */
|
||||||
|
*pos++ = local->hw.conf.channel->max_power; /* max tx power */
|
||||||
|
|
||||||
|
/* 2. supported channels */
|
||||||
|
/* TODO: get this in reg domain format */
|
||||||
|
pos = skb_put(skb, 2 * sband->n_channels + 2);
|
||||||
|
*pos++ = WLAN_EID_SUPPORTED_CHANNELS;
|
||||||
|
*pos++ = 2 * sband->n_channels;
|
||||||
|
for (i = 0; i < sband->n_channels; i++) {
|
||||||
|
*pos++ = ieee80211_frequency_to_channel(
|
||||||
|
sband->channels[i].center_freq);
|
||||||
|
*pos++ = 1; /* one channel in the subband*/
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (ifsta->extra_ie) {
|
if (ifsta->extra_ie) {
|
||||||
pos = skb_put(skb, ifsta->extra_ie_len);
|
pos = skb_put(skb, ifsta->extra_ie_len);
|
||||||
memcpy(pos, ifsta->extra_ie, ifsta->extra_ie_len);
|
memcpy(pos, ifsta->extra_ie, ifsta->extra_ie_len);
|
||||||
|
|
Loading…
Reference in New Issue