Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 40db6c77 authored by Amitkumar Karwar's avatar Amitkumar Karwar Committed by John W. Linville
Browse files

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: default avatarAmitkumar Karwar <akarwar@marvell.com>
Signed-off-by: default avatarBing Zhao <bzhao@marvell.com>
Reviewed-by: default avatarJohannes Berg <johannes@sipsolutions.net>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent 0a6c9b1b
Loading
Loading
Loading
Loading
+0 −18
Original line number Original line Diff line number Diff line
@@ -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;
+17 −0
Original line number Original line Diff line number Diff line
@@ -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