iwlwifi: add a mechanism to disable plcp error checking
authorWey-Yi Guy <wey-yi.w.guy@intel.com>
Thu, 17 Jun 2010 22:25:00 +0000 (15:25 -0700)
committerReinette Chatre <reinette.chatre@intel.com>
Fri, 25 Jun 2010 21:52:47 +0000 (14:52 -0700)
For some devices, especially the upcoming new devices, the plcp error
rate is different. Before the correct error rate can be determine, also
for the debugging purpose; add the mechanism to disable plcp error checking
which cause radio reset happen.

Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: Reinette Chatre <reinette.chatre@intel.com>
drivers/net/wireless/iwlwifi/iwl-3945.c
drivers/net/wireless/iwlwifi/iwl-agn-rx.c
drivers/net/wireless/iwlwifi/iwl-debugfs.c
drivers/net/wireless/iwlwifi/iwl-dev.h

index 93d513e14186eaf12b4851a3499b0a8826e58689..a07310fefcf2d0e56c45d45fabce4251d26e12fc 100644 (file)
@@ -406,6 +406,11 @@ static bool iwl3945_good_plcp_health(struct iwl_priv *priv,
        unsigned int plcp_msec;
        unsigned long plcp_received_jiffies;
 
+       if (priv->cfg->plcp_delta_threshold ==
+           IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE) {
+               IWL_DEBUG_RADIO(priv, "plcp_err check disabled\n");
+               return rc;
+       }
        memcpy(&current_stat, pkt->u.raw, sizeof(struct
                        iwl3945_notif_statistics));
        /*
index ad2bead25c82b2311a9ed4da0d955059e8c2feac..d54edc326f8158de91bf75fc6a2833c5062a67c0 100644 (file)
@@ -166,6 +166,12 @@ bool iwl_good_plcp_health(struct iwl_priv *priv,
        unsigned int plcp_msec;
        unsigned long plcp_received_jiffies;
 
+       if (priv->cfg->plcp_delta_threshold ==
+           IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE) {
+               IWL_DEBUG_RADIO(priv, "plcp_err check disabled\n");
+               return rc;
+       }
+
        /*
         * check for plcp_err and trigger radio reset if it exceeds
         * the plcp error threshold plcp_delta.
index cee3d12eb383bfd4b001e749252c0ed69653fe2d..7d9ffc1575de761531f3f1610edfa135e54eb468 100644 (file)
@@ -1430,10 +1430,10 @@ static ssize_t iwl_dbgfs_plcp_delta_write(struct file *file,
                return -EFAULT;
        if (sscanf(buf, "%d", &plcp) != 1)
                return -EINVAL;
-       if ((plcp <= IWL_MAX_PLCP_ERR_THRESHOLD_MIN) ||
+       if ((plcp < IWL_MAX_PLCP_ERR_THRESHOLD_MIN) ||
                (plcp > IWL_MAX_PLCP_ERR_THRESHOLD_MAX))
                priv->cfg->plcp_delta_threshold =
-                       IWL_MAX_PLCP_ERR_THRESHOLD_DEF;
+                       IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE;
        else
                priv->cfg->plcp_delta_threshold = plcp;
        return count;
index 1af845c0f0b9da95917ab2ded83cd932049ccf95..df07a144c78686ed882d02ffa227218c7e245deb 100644 (file)
@@ -1036,11 +1036,12 @@ struct iwl_event_log {
  * This is the threshold value of plcp error rate per 100mSecs.  It is
  * used to set and check for the validity of plcp_delta.
  */
-#define IWL_MAX_PLCP_ERR_THRESHOLD_MIN (0)
+#define IWL_MAX_PLCP_ERR_THRESHOLD_MIN (1)
 #define IWL_MAX_PLCP_ERR_THRESHOLD_DEF (50)
 #define IWL_MAX_PLCP_ERR_LONG_THRESHOLD_DEF    (100)
 #define IWL_MAX_PLCP_ERR_EXT_LONG_THRESHOLD_DEF        (200)
 #define IWL_MAX_PLCP_ERR_THRESHOLD_MAX (255)
+#define IWL_MAX_PLCP_ERR_THRESHOLD_DISABLE     (0)
 
 #define IWL_DELAY_NEXT_FORCE_RF_RESET  (HZ*3)
 #define IWL_DELAY_NEXT_FORCE_FW_RELOAD (HZ*5)