Commit 445c2dff authored by Tomas Winkler's avatar Tomas Winkler Committed by John W. Linville

iwlwifi: add debugfs to disable/enable run time calibration

This patch adds functionality to debugfs to enable or disable chain
noise or sensitivity calibrations.
Signed-off-by: default avatarTomas Winkler <tomas.winkler@intel.com>
Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
parent da6833cb
...@@ -426,6 +426,9 @@ void iwl_init_sensitivity(struct iwl_priv *priv) ...@@ -426,6 +426,9 @@ void iwl_init_sensitivity(struct iwl_priv *priv)
struct iwl_sensitivity_data *data = NULL; struct iwl_sensitivity_data *data = NULL;
const struct iwl_sensitivity_ranges *ranges = priv->hw_params.sens; const struct iwl_sensitivity_ranges *ranges = priv->hw_params.sens;
if (priv->disable_sens_cal)
return;
IWL_DEBUG_CALIB("Start iwl_init_sensitivity\n"); IWL_DEBUG_CALIB("Start iwl_init_sensitivity\n");
/* Clear driver's sensitivity algo data */ /* Clear driver's sensitivity algo data */
...@@ -486,6 +489,9 @@ void iwl_sensitivity_calibration(struct iwl_priv *priv, ...@@ -486,6 +489,9 @@ void iwl_sensitivity_calibration(struct iwl_priv *priv,
unsigned long flags; unsigned long flags;
struct statistics_general_data statis; struct statistics_general_data statis;
if (priv->disable_sens_cal)
return;
data = &(priv->sensitivity_data); data = &(priv->sensitivity_data);
if (!iwl_is_associated(priv)) { if (!iwl_is_associated(priv)) {
...@@ -608,6 +614,9 @@ void iwl_chain_noise_calibration(struct iwl_priv *priv, ...@@ -608,6 +614,9 @@ void iwl_chain_noise_calibration(struct iwl_priv *priv,
unsigned long flags; unsigned long flags;
struct statistics_rx_non_phy *rx_info = &(stat_resp->rx.general); struct statistics_rx_non_phy *rx_info = &(stat_resp->rx.general);
if (priv->disable_chain_noise_cal)
return;
data = &(priv->chain_noise_data); data = &(priv->chain_noise_data);
/* Accumulate just the first 20 beacons after the first association, /* Accumulate just the first 20 beacons after the first association,
......
...@@ -81,7 +81,9 @@ void iwl_init_sensitivity(struct iwl_priv *priv); ...@@ -81,7 +81,9 @@ void iwl_init_sensitivity(struct iwl_priv *priv);
static inline void iwl_chain_noise_reset(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); priv->cfg->ops->utils->chain_noise_reset(priv);
} }
#else #else
......
...@@ -45,13 +45,20 @@ struct iwl_debugfs { ...@@ -45,13 +45,20 @@ struct iwl_debugfs {
const char *name; const char *name;
struct dentry *dir_drv; struct dentry *dir_drv;
struct dentry *dir_data; struct dentry *dir_data;
struct dir_data_files{ struct dentry *dir_rf;
struct dir_data_files {
struct dentry *file_sram; struct dentry *file_sram;
struct dentry *file_eeprom; struct dentry *file_eeprom;
struct dentry *file_stations; struct dentry *file_stations;
struct dentry *file_rx_statistics; struct dentry *file_rx_statistics;
struct dentry *file_tx_statistics; struct dentry *file_tx_statistics;
} dbgfs_data_files; } 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_offset;
u32 sram_len; u32 sram_len;
}; };
......
...@@ -55,6 +55,13 @@ ...@@ -55,6 +55,13 @@
goto err; \ goto err; \
} while (0) } 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 { \ #define DEBUGFS_REMOVE(name) do { \
debugfs_remove(name); \ debugfs_remove(name); \
name = NULL; \ name = NULL; \
...@@ -344,12 +351,17 @@ int iwl_dbgfs_register(struct iwl_priv *priv, const char *name) ...@@ -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(data, dbgfs->dir_drv);
DEBUGFS_ADD_DIR(rf, dbgfs->dir_drv);
DEBUGFS_ADD_FILE(eeprom, data); DEBUGFS_ADD_FILE(eeprom, data);
DEBUGFS_ADD_FILE(sram, data); DEBUGFS_ADD_FILE(sram, data);
DEBUGFS_ADD_FILE(stations, data); DEBUGFS_ADD_FILE(stations, data);
DEBUGFS_ADD_FILE(rx_statistics, data); DEBUGFS_ADD_FILE(rx_statistics, data);
DEBUGFS_ADD_FILE(tx_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; return 0;
err: err:
...@@ -374,6 +386,11 @@ void iwl_dbgfs_unregister(struct iwl_priv *priv) ...@@ -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_sram);
DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_stations); DEBUGFS_REMOVE(priv->dbgfs->dbgfs_data_files.file_stations);
DEBUGFS_REMOVE(priv->dbgfs->dir_data); 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); DEBUGFS_REMOVE(priv->dbgfs->dir_drv);
kfree(priv->dbgfs); kfree(priv->dbgfs);
priv->dbgfs = NULL; priv->dbgfs = NULL;
...@@ -381,3 +398,4 @@ void iwl_dbgfs_unregister(struct iwl_priv *priv) ...@@ -381,3 +398,4 @@ void iwl_dbgfs_unregister(struct iwl_priv *priv)
EXPORT_SYMBOL(iwl_dbgfs_unregister); EXPORT_SYMBOL(iwl_dbgfs_unregister);
...@@ -1212,9 +1212,13 @@ struct iwl_priv { ...@@ -1212,9 +1212,13 @@ struct iwl_priv {
#endif /* CONFIG_IWLWIFI_DEBUG */ #endif /* CONFIG_IWLWIFI_DEBUG */
struct work_struct txpower_work; 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 #ifdef CONFIG_IWL4965_RUN_TIME_CALIB
struct work_struct sensitivity_work; struct work_struct sensitivity_work;
#endif #endif /* CONFIG_IWL4965_RUN_TIME_CALIB */
struct timer_list statistics_periodic; struct timer_list statistics_periodic;
}; /*iwl_priv */ }; /*iwl_priv */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment