iwlwifi: add debugfs to disable/enable run time calibration
authorTomas Winkler <tomas.winkler@intel.com>
Thu, 15 May 2008 05:54:16 +0000 (13:54 +0800)
committerJohn W. Linville <linville@tuxdriver.com>
Thu, 22 May 2008 01:48:06 +0000 (21:48 -0400)
This patch adds functionality to debugfs to enable or disable chain
noise or sensitivity calibrations.

Signed-off-by: Tomas Winkler <tomas.winkler@intel.com>
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/iwlwifi/iwl-calib.c
drivers/net/wireless/iwlwifi/iwl-calib.h
drivers/net/wireless/iwlwifi/iwl-debug.h
drivers/net/wireless/iwlwifi/iwl-debugfs.c
drivers/net/wireless/iwlwifi/iwl-dev.h

index 1289d4c..beb9716 100644 (file)
@@ -426,6 +426,9 @@ void iwl_init_sensitivity(struct iwl_priv *priv)
        struct iwl_sensitivity_data *data = NULL;
        const struct iwl_sensitivity_ranges *ranges = priv->hw_params.sens;
 
+       if (priv->disable_sens_cal)
+               return;
+
        IWL_DEBUG_CALIB("Start iwl_init_sensitivity\n");
 
        /* Clear driver's sensitivity algo data */
@@ -486,6 +489,9 @@ void iwl_sensitivity_calibration(struct iwl_priv *priv,
        unsigned long flags;
        struct statistics_general_data statis;
 
+       if (priv->disable_sens_cal)
+               return;
+
        data = &(priv->sensitivity_data);
 
        if (!iwl_is_associated(priv)) {
@@ -608,6 +614,9 @@ void iwl_chain_noise_calibration(struct iwl_priv *priv,
        unsigned long flags;
        struct statistics_rx_non_phy *rx_info = &(stat_resp->rx.general);
 
+       if (priv->disable_chain_noise_cal)
+               return;
+
        data = &(priv->chain_noise_data);
 
        /* Accumulate just the first 20 beacons after the first association,
index 933b0b0..e690668 100644 (file)
@@ -81,7 +81,9 @@ void iwl_init_sensitivity(struct iwl_priv *priv);
 
 static inline void iwl_chain_noise_reset(struct iwl_priv *priv)
 {
-       if (priv->cfg->ops->utils->chain_noise_reset)
+
+       if (!priv->disable_chain_noise_cal &&
+           priv->cfg->ops->utils->chain_noise_reset)
                priv->cfg->ops->utils->chain_noise_reset(priv);
 }
 #else
index 2f24594..c3f8e90 100644 (file)
@@ -45,13 +45,20 @@ struct iwl_debugfs {
        const char *name;
        struct dentry *dir_drv;
        struct dentry *dir_data;
-       struct dir_data_files{
+       struct dentry *dir_rf;
+       struct dir_data_files {
                struct dentry *file_sram;
                struct dentry *file_eeprom;
                struct dentry *file_stations;
                struct dentry *file_rx_statistics;
                struct dentry *file_tx_statistics;
        } dbgfs_data_files;
+       struct dir_rf_files {
+#ifdef CONFIG_IWLWIFI_RUN_TIME_CALIB
+               struct dentry *file_disable_sensitivity;
+               struct dentry *file_disable_chain_noise;
+#endif /* CONFIG_IWLWIFI_RUN_TIME_CALIB */
+       } dbgfs_rf_files;
        u32 sram_offset;
        u32 sram_len;
 };
index ad25806..f7ec200 100644 (file)
                goto err;                                               \
 } while (0)
 
+#define DEBUGFS_ADD_BOOL(name, parent, ptr) do {                        \
+       dbgfs->dbgfs_##parent##_files.file_##name =                     \
+       debugfs_create_bool(#name, 0644, dbgfs->dir_##parent, ptr);     \
+       if (IS_ERR(dbgfs->dbgfs_##parent##_files.file_##name))          \
+               goto err;                                               \
+} while (0)
+
 #define DEBUGFS_REMOVE(name)  do {              \
        debugfs_remove(name);                   \
        name = NULL;                            \
@@ -344,12 +351,17 @@ int iwl_dbgfs_register(struct iwl_priv *priv, const char *name)
        }
 
        DEBUGFS_ADD_DIR(data, dbgfs->dir_drv);
+       DEBUGFS_ADD_DIR(rf, dbgfs->dir_drv);
        DEBUGFS_ADD_FILE(eeprom, data);
        DEBUGFS_ADD_FILE(sram, data);
        DEBUGFS_ADD_FILE(stations, data);
        DEBUGFS_ADD_FILE(rx_statistics, data);
        DEBUGFS_ADD_FILE(tx_statistics, data);
-
+#ifdef CONFIG_IWLWIFI_RUN_TIME_CALIB
+       DEBUGFS_ADD_BOOL(disable_sensitivity, rf, &priv->disable_sens_cal);
+       DEBUGFS_ADD_BOOL(disable_chain_noise, rf,
+                        &priv->disable_chain_noise_cal);
+#endif  /* CONFIG_IWLWIFI_RUN_TIME_CALIB */
        return 0;
 
 err:
@@ -374,6 +386,11 @@ void iwl_dbgfs_unregister(struct iwl_priv *priv)
        DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_sram);
        DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_stations);
        DEBUGFS_REMOVE(priv->dbgfs->dir_data);
+#ifdef CONFIG_IWLWIFI_RUN_TIME_CALIB
+       DEBUGFS_REMOVE(priv->dbgfs->dbgfs_rf_files.file_disable_sensitivity);
+       DEBUGFS_REMOVE(priv->dbgfs->dbgfs_rf_files.file_disable_chain_noise);
+#endif /* CONFIG_IWLWIFI_RUN_TIME_CALIB */
+       DEBUGFS_REMOVE(priv->dbgfs->dir_rf);
        DEBUGFS_REMOVE(priv->dbgfs->dir_drv);
        kfree(priv->dbgfs);
        priv->dbgfs = NULL;
@@ -381,3 +398,4 @@ void iwl_dbgfs_unregister(struct iwl_priv *priv)
 EXPORT_SYMBOL(iwl_dbgfs_unregister);
 
 
+
index b1ff0af..820542b 100644 (file)
@@ -1212,9 +1212,13 @@ struct iwl_priv {
 #endif /* CONFIG_IWLWIFI_DEBUG */
 
        struct work_struct txpower_work;
+#ifdef CONFIG_IWLWIFI_RUN_TIME_CALIB
+       u32 disable_sens_cal;
+       u32 disable_chain_noise_cal;
+#endif /* CONFIG_IWLWIFI_RUN_TIME_CALIB */
 #ifdef CONFIG_IWL4965_RUN_TIME_CALIB
        struct work_struct sensitivity_work;
-#endif
+#endif /* CONFIG_IWL4965_RUN_TIME_CALIB */
        struct timer_list statistics_periodic;
 }; /*iwl_priv */