cfg80211: module_param to disable HT40 in 2.4GHz band

Currently mac80211 uses ieee80211_disable_40mhz_24ghz module
parameter to allow disabling 40MHz operation in the 2.4GHz band.
Move this handling from mac80211 to cfg80211 so that the feature
will be more generic.

Signed-off-by: Amitkumar Karwar <akarwar@marvell.com>
Signed-off-by: Bing Zhao <bzhao@marvell.com>
Reviewed-by: Johannes Berg <johannes@sipsolutions.net>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Amitkumar Karwar 2011-04-21 14:10:27 -07:00 committed by John W. Linville
parent 0a6c9b1b66
commit 40db6c77ab
2 changed files with 17 additions and 18 deletions

View File

@ -33,12 +33,6 @@
#include "cfg.h" #include "cfg.h"
#include "debugfs.h" #include "debugfs.h"
static bool ieee80211_disable_40mhz_24ghz;
module_param(ieee80211_disable_40mhz_24ghz, bool, 0644);
MODULE_PARM_DESC(ieee80211_disable_40mhz_24ghz,
"Disable 40MHz support in the 2.4GHz band");
static struct lock_class_key ieee80211_rx_skb_queue_class; static struct lock_class_key ieee80211_rx_skb_queue_class;
void ieee80211_configure_filter(struct ieee80211_local *local) void ieee80211_configure_filter(struct ieee80211_local *local)
@ -728,18 +722,6 @@ int ieee80211_register_hw(struct ieee80211_hw *hw)
} }
channels += sband->n_channels; channels += sband->n_channels;
/*
* Since ieee80211_disable_40mhz_24ghz is global, we can
* modify the sband's ht data even if the driver uses a
* global structure for that.
*/
if (ieee80211_disable_40mhz_24ghz &&
band == IEEE80211_BAND_2GHZ &&
sband->ht_cap.ht_supported) {
sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_40;
}
if (max_bitrates < sband->n_bitrates) if (max_bitrates < sband->n_bitrates)
max_bitrates = sband->n_bitrates; max_bitrates = sband->n_bitrates;
supp_ht = supp_ht || sband->ht_cap.ht_supported; supp_ht = supp_ht || sband->ht_cap.ht_supported;

View File

@ -46,6 +46,11 @@ static struct dentry *ieee80211_debugfs_dir;
/* for the cleanup, scan and event works */ /* for the cleanup, scan and event works */
struct workqueue_struct *cfg80211_wq; struct workqueue_struct *cfg80211_wq;
static bool cfg80211_disable_40mhz_24ghz;
module_param(cfg80211_disable_40mhz_24ghz, bool, 0644);
MODULE_PARM_DESC(cfg80211_disable_40mhz_24ghz,
"Disable 40MHz support in the 2.4GHz band");
/* requires cfg80211_mutex to be held! */ /* requires cfg80211_mutex to be held! */
struct cfg80211_registered_device *cfg80211_rdev_by_wiphy_idx(int wiphy_idx) struct cfg80211_registered_device *cfg80211_rdev_by_wiphy_idx(int wiphy_idx)
{ {
@ -450,6 +455,18 @@ int wiphy_register(struct wiphy *wiphy)
if (WARN_ON(!sband->n_channels || !sband->n_bitrates)) if (WARN_ON(!sband->n_channels || !sband->n_bitrates))
return -EINVAL; return -EINVAL;
/*
* Since cfg80211_disable_40mhz_24ghz is global, we can
* modify the sband's ht data even if the driver uses a
* global structure for that.
*/
if (cfg80211_disable_40mhz_24ghz &&
band == IEEE80211_BAND_2GHZ &&
sband->ht_cap.ht_supported) {
sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SUP_WIDTH_20_40;
sband->ht_cap.cap &= ~IEEE80211_HT_CAP_SGI_40;
}
/* /*
* Since we use a u32 for rate bitmaps in * Since we use a u32 for rate bitmaps in
* ieee80211_get_response_rate, we cannot * ieee80211_get_response_rate, we cannot