iwlwifi: add {ack,plpc}_check module parameters
authorStanislaw Gruszka <sgruszka@redhat.com>
Mon, 28 Feb 2011 13:33:15 +0000 (14:33 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 28 Feb 2011 19:06:57 +0000 (14:06 -0500)
Add module ack_check, and plcp_check parameters. Ack_check is disabled
by default since is proved that check ack health can cause troubles.
Plcp_check is enabled by default.

Signed-off-by: Stanislaw Gruszka <sgruszka@redhat.com>
Acked-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-agn-lib.c
drivers/net/wireless/iwlwifi/iwl-agn.c
drivers/net/wireless/iwlwifi/iwl-core.h
drivers/net/wireless/iwlwifi/iwl-rx.c

index 8e19207..fd142be 100644 (file)
@@ -609,6 +609,7 @@ const u8 *iwlagn_eeprom_query_addr(const struct iwl_priv *priv,
 struct iwl_mod_params iwlagn_mod_params = {
        .amsdu_size_8K = 1,
        .restart_fw = 1,
+       .plcp_check = true,
        /* the rest are 0 by default */
 };
 
index 8cdbd8c..4792418 100644 (file)
@@ -4785,3 +4785,9 @@ MODULE_PARM_DESC(antenna_coupling,
 module_param_named(bt_ch_inhibition, iwlagn_bt_ch_announce, bool, S_IRUGO);
 MODULE_PARM_DESC(bt_ch_inhibition,
                 "Disable BT channel inhibition (default: enable)");
+
+module_param_named(plcp_check, iwlagn_mod_params.plcp_check, bool, S_IRUGO);
+MODULE_PARM_DESC(plcp_check, "Check plcp health (default: 1 [enabled])");
+
+module_param_named(ack_check, iwlagn_mod_params.ack_check, bool, S_IRUGO);
+MODULE_PARM_DESC(ack_check, "Check ack health (default: 0 [disabled])");
index ce368d8..1be7f29 100644 (file)
@@ -261,6 +261,8 @@ struct iwl_mod_params {
        int amsdu_size_8K;      /* def: 1 = enable 8K amsdu size */
        int antenna;            /* def: 0 = both antennas (use diversity) */
        int restart_fw;         /* def: 1 = restart firmware */
+       bool plcp_check;        /* def: true = enable plcp health check */
+       bool ack_check;         /* def: false = disable ack health check */
 };
 
 /*
index a21f6fe..fd84d53 100644 (file)
@@ -230,18 +230,22 @@ void iwl_rx_spectrum_measure_notif(struct iwl_priv *priv,
 void iwl_recover_from_statistics(struct iwl_priv *priv,
                                struct iwl_rx_packet *pkt)
 {
+       const struct iwl_mod_params *mod_params = priv->cfg->mod_params;
+
        if (test_bit(STATUS_EXIT_PENDING, &priv->status) ||
            !iwl_is_any_associated(priv))
                return;
 
-       if (priv->cfg->ops->lib->check_ack_health &&
+       if (mod_params->ack_check &&
+           priv->cfg->ops->lib->check_ack_health &&
            !priv->cfg->ops->lib->check_ack_health(priv, pkt)) {
                IWL_ERR(priv, "low ack count detected, restart firmware\n");
                if (!iwl_force_reset(priv, IWL_FW_RESET, false))
                        return;
        }
 
-       if (priv->cfg->ops->lib->check_plcp_health &&
+       if (mod_params->plcp_check &&
+           priv->cfg->ops->lib->check_plcp_health &&
            !priv->cfg->ops->lib->check_plcp_health(priv, pkt))
                iwl_force_reset(priv, IWL_RF_RESET, false);
 }