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: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
committed by
John W. Linville
parent
da6833cb05
commit
445c2dff40
@@ -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,
|
|||||||
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,
|
|||||||
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);
|
|||||||
|
|
||||||
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 {
|
|||||||
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 @@
|
|||||||
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)
|
|||||||
}
|
}
|
||||||
|
|
||||||
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)
|
|||||||
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)
|
|||||||
EXPORT_SYMBOL(iwl_dbgfs_unregister);
|
EXPORT_SYMBOL(iwl_dbgfs_unregister);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@@ -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 */
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user