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

Commit 3e4fb5fa authored by Trieu 'Andrew' Nguyen's avatar Trieu 'Andrew' Nguyen Committed by John W. Linville
Browse files

iwlwifi: Tune radio to prevent unexpected behavior



We have seen the throughput dropped due to external noisy environment
and the radio is out of tune.  There are lot of plcp errors indicating
this condition. Eventually the station can get de-authenticated by the
Access Point.  By resetting and tuning the radio, the plcp errors are
reduced or eliminated and the throughput starts to rise.

To prevent unexpected behavior such as drop in throughput or deauthentication,
- The change provides the driver feature to monitor and tune the radio base on
the statistics notification from the uCode.
- It also allows the setting of the plcp error rate threshold via
the plcp_delta under debugfs interface.

Signed-off-by: default avatarTrieu 'Andrew' Nguyen <trieux.t.nguyen@intel.com>
Signed-off-by: default avatarReinette Chatre <reinette.chatre@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent d4d59e88
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -175,6 +175,7 @@ struct iwl_cfg iwl1000_bgn_cfg = {
	.use_rts_for_ht = true, /* use rts/cts protection */
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.support_ct_kill_exit = true,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
};

struct iwl_cfg iwl1000_bg_cfg = {
@@ -201,6 +202,7 @@ struct iwl_cfg iwl1000_bg_cfg = {
	.led_compensation = 51,
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.support_ct_kill_exit = true,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
};

MODULE_FIRMWARE(IWL1000_MODULE_FIRMWARE(IWL1000_UCODE_API_MAX));
+2 −0
Original line number Diff line number Diff line
@@ -2830,6 +2830,7 @@ static struct iwl_cfg iwl3945_bg_cfg = {
	.ht_greenfield_support = false,
	.led_compensation = 64,
	.broken_powersave = true,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
};

static struct iwl_cfg iwl3945_abg_cfg = {
@@ -2847,6 +2848,7 @@ static struct iwl_cfg iwl3945_abg_cfg = {
	.ht_greenfield_support = false,
	.led_compensation = 64,
	.broken_powersave = true,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
};

struct pci_device_id iwl3945_hw_card_ids[] = {
+1 −0
Original line number Diff line number Diff line
@@ -2239,6 +2239,7 @@ struct iwl_cfg iwl4965_agn_cfg = {
	.broken_powersave = true,
	.led_compensation = 61,
	.chain_noise_num_beacons = IWL4965_CAL_NUM_BEACONS,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
};

/* Module firmware */
+7 −0
Original line number Diff line number Diff line
@@ -1603,6 +1603,7 @@ struct iwl_cfg iwl5300_agn_cfg = {
	.led_compensation = 51,
	.use_rts_for_ht = true, /* use rts/cts protection */
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
};

struct iwl_cfg iwl5100_bgn_cfg = {
@@ -1627,6 +1628,7 @@ struct iwl_cfg iwl5100_bgn_cfg = {
	.led_compensation = 51,
	.use_rts_for_ht = true, /* use rts/cts protection */
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
};

struct iwl_cfg iwl5100_abg_cfg = {
@@ -1649,6 +1651,7 @@ struct iwl_cfg iwl5100_abg_cfg = {
	.use_bsm = false,
	.led_compensation = 51,
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
};

struct iwl_cfg iwl5100_agn_cfg = {
@@ -1673,6 +1676,7 @@ struct iwl_cfg iwl5100_agn_cfg = {
	.led_compensation = 51,
	.use_rts_for_ht = true, /* use rts/cts protection */
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
};

struct iwl_cfg iwl5350_agn_cfg = {
@@ -1697,6 +1701,7 @@ struct iwl_cfg iwl5350_agn_cfg = {
	.led_compensation = 51,
	.use_rts_for_ht = true, /* use rts/cts protection */
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
};

struct iwl_cfg iwl5150_agn_cfg = {
@@ -1721,6 +1726,7 @@ struct iwl_cfg iwl5150_agn_cfg = {
	.led_compensation = 51,
	.use_rts_for_ht = true, /* use rts/cts protection */
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
};

struct iwl_cfg iwl5150_abg_cfg = {
@@ -1743,6 +1749,7 @@ struct iwl_cfg iwl5150_abg_cfg = {
	.use_bsm = false,
	.led_compensation = 51,
	.chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
};

MODULE_FIRMWARE(IWL5000_MODULE_FIRMWARE(IWL5000_UCODE_API_MAX));
+6 −0
Original line number Diff line number Diff line
@@ -308,6 +308,7 @@ struct iwl_cfg iwl6000i_2agn_cfg = {
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
};

struct iwl_cfg iwl6000i_2abg_cfg = {
@@ -337,6 +338,7 @@ struct iwl_cfg iwl6000i_2abg_cfg = {
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
};

struct iwl_cfg iwl6000i_2bg_cfg = {
@@ -366,6 +368,7 @@ struct iwl_cfg iwl6000i_2bg_cfg = {
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
};

struct iwl_cfg iwl6050_2agn_cfg = {
@@ -396,6 +399,7 @@ struct iwl_cfg iwl6050_2agn_cfg = {
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
};

struct iwl_cfg iwl6050_2abg_cfg = {
@@ -425,6 +429,7 @@ struct iwl_cfg iwl6050_2abg_cfg = {
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
};

struct iwl_cfg iwl6000_3agn_cfg = {
@@ -455,6 +460,7 @@ struct iwl_cfg iwl6000_3agn_cfg = {
	.supports_idle = true,
	.adv_thermal_throttle = true,
	.support_ct_kill_exit = true,
	.plcp_delta_threshold = IWL_MAX_PLCP_ERR_THRESHOLD_DEF,
};

MODULE_FIRMWARE(IWL6000_MODULE_FIRMWARE(IWL6000_UCODE_API_MAX));
Loading