aboutsummaryrefslogtreecommitdiffstats
path: root/net/mac80211
diff options
context:
space:
mode:
authorTomas Winkler <tomas.winkler@intel.com>2008-06-18 10:53:44 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-06-30 17:37:34 -0400
commit06ff47bc9595848b818ac79e7d8069337c6e58b1 (patch)
treea0a2d00f25f5c97f04dffd4c27059e1d217ea5a0 /net/mac80211
parent7b1e78d5052a92e95d851fbb0236a712264fe7e8 (diff)
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>
Diffstat (limited to 'net/mac80211')
-rw-r--r--net/mac80211/mlme.c24
1 files changed, 24 insertions, 0 deletions
diff --git a/net/mac80211/mlme.c b/net/mac80211/mlme.c
index 7b4d4d46843b..c9f7c13d2e7e 100644
--- a/net/mac80211/mlme.c
+++ b/net/mac80211/mlme.c
@@ -747,6 +747,10 @@ static void ieee80211_send_assoc(struct net_device *dev,
747 * b-only mode) */ 747 * b-only mode) */
748 rates_len = ieee80211_compatible_rates(bss, sband, &rates); 748 rates_len = ieee80211_compatible_rates(bss, sband, &rates);
749 749
750 if ((bss->capability & WLAN_CAPABILITY_SPECTRUM_MGMT) &&
751 (local->hw.flags & IEEE80211_HW_SPECTRUM_MGMT))
752 capab |= WLAN_CAPABILITY_SPECTRUM_MGMT;
753
750 ieee80211_rx_bss_put(dev, bss); 754 ieee80211_rx_bss_put(dev, bss);
751 } else { 755 } else {
752 rates = ~0; 756 rates = ~0;
@@ -814,6 +818,26 @@ static void ieee80211_send_assoc(struct net_device *dev,
814 } 818 }
815 } 819 }
816 820
821 if (capab & WLAN_CAPABILITY_SPECTRUM_MGMT) {
822 /* 1. power capabilities */
823 pos = skb_put(skb, 4);
824 *pos++ = WLAN_EID_PWR_CAPABILITY;
825 *pos++ = 2;
826 *pos++ = 0; /* min tx power */
827 *pos++ = local->hw.conf.channel->max_power; /* max tx power */
828
829 /* 2. supported channels */
830 /* TODO: get this in reg domain format */
831 pos = skb_put(skb, 2 * sband->n_channels + 2);
832 *pos++ = WLAN_EID_SUPPORTED_CHANNELS;
833 *pos++ = 2 * sband->n_channels;
834 for (i = 0; i < sband->n_channels; i++) {
835 *pos++ = ieee80211_frequency_to_channel(
836 sband->channels[i].center_freq);
837 *pos++ = 1; /* one channel in the subband*/
838 }
839 }
840
817 if (ifsta->extra_ie) { 841 if (ifsta->extra_ie) {
818 pos = skb_put(skb, ifsta->extra_ie_len); 842 pos = skb_put(skb, ifsta->extra_ie_len);
819 memcpy(pos, ifsta->extra_ie, ifsta->extra_ie_len); 843 memcpy(pos, ifsta->extra_ie, ifsta->extra_ie_len);