aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-5000.c
diff options
context:
space:
mode:
authorTrieu 'Andrew' Nguyen <trieux.t.nguyen@intel.com>2010-01-22 17:22:46 -0500
committerJohn W. Linville <linville@tuxdriver.com>2010-01-25 16:36:21 -0500
commit3e4fb5faefb57824f2e42305b3d5907845af978c (patch)
treea9cb64dff2fea16e290ab29eb4260c973d52e88f /drivers/net/wireless/iwlwifi/iwl-5000.c
parentd4d59e88cb746165c6fe33eacb6f582d525c6ef1 (diff)
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: Trieu 'Andrew' Nguyen <trieux.t.nguyen@intel.com> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-5000.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-5000.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
index aab6cf23c2bd..cbbc0e4f2c76 100644
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
@@ -1603,6 +1603,7 @@ struct iwl_cfg iwl5300_agn_cfg = {
1603 .led_compensation = 51, 1603 .led_compensation = 51,
1604 .use_rts_for_ht = true, /* use rts/cts protection */ 1604 .use_rts_for_ht = true, /* use rts/cts protection */
1605 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1605 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1606 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
1606}; 1607};
1607 1608
1608struct iwl_cfg iwl5100_bgn_cfg = { 1609struct iwl_cfg iwl5100_bgn_cfg = {
@@ -1627,6 +1628,7 @@ struct iwl_cfg iwl5100_bgn_cfg = {
1627 .led_compensation = 51, 1628 .led_compensation = 51,
1628 .use_rts_for_ht = true, /* use rts/cts protection */ 1629 .use_rts_for_ht = true, /* use rts/cts protection */
1629 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1630 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1631 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
1630}; 1632};
1631 1633
1632struct iwl_cfg iwl5100_abg_cfg = { 1634struct iwl_cfg iwl5100_abg_cfg = {
@@ -1649,6 +1651,7 @@ struct iwl_cfg iwl5100_abg_cfg = {
1649 .use_bsm = false, 1651 .use_bsm = false,
1650 .led_compensation = 51, 1652 .led_compensation = 51,
1651 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1653 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1654 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
1652}; 1655};
1653 1656
1654struct iwl_cfg iwl5100_agn_cfg = { 1657struct iwl_cfg iwl5100_agn_cfg = {
@@ -1673,6 +1676,7 @@ struct iwl_cfg iwl5100_agn_cfg = {
1673 .led_compensation = 51, 1676 .led_compensation = 51,
1674 .use_rts_for_ht = true, /* use rts/cts protection */ 1677 .use_rts_for_ht = true, /* use rts/cts protection */
1675 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1678 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1679 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
1676}; 1680};
1677 1681
1678struct iwl_cfg iwl5350_agn_cfg = { 1682struct iwl_cfg iwl5350_agn_cfg = {
@@ -1697,6 +1701,7 @@ struct iwl_cfg iwl5350_agn_cfg = {
1697 .led_compensation = 51, 1701 .led_compensation = 51,
1698 .use_rts_for_ht = true, /* use rts/cts protection */ 1702 .use_rts_for_ht = true, /* use rts/cts protection */
1699 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1703 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1704 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
1700}; 1705};
1701 1706
1702struct iwl_cfg iwl5150_agn_cfg = { 1707struct iwl_cfg iwl5150_agn_cfg = {
@@ -1721,6 +1726,7 @@ struct iwl_cfg iwl5150_agn_cfg = {
1721 .led_compensation = 51, 1726 .led_compensation = 51,
1722 .use_rts_for_ht = true, /* use rts/cts protection */ 1727 .use_rts_for_ht = true, /* use rts/cts protection */
1723 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1728 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1729 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
1724}; 1730};
1725 1731
1726struct iwl_cfg iwl5150_abg_cfg = { 1732struct iwl_cfg iwl5150_abg_cfg = {
@@ -1743,6 +1749,7 @@ struct iwl_cfg iwl5150_abg_cfg = {
1743 .use_bsm = false, 1749 .use_bsm = false,
1744 .led_compensation = 51, 1750 .led_compensation = 51,
1745 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS, 1751 .chain_noise_num_beacons = IWL_CAL_NUM_BEACONS,
1752 .plcp_delta_threshold = IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF,
1746}; 1753};
1747 1754
1748MODULE_FIRMWARE(IWL5000_MODULE_FIRMWARE(IWL5000_UCODE_API_MAX)); 1755MODULE_FIRMWARE(IWL5000_MODULE_FIRMWARE(IWL5000_UCODE_API_MAX));