Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+9 −0
Original line number Original line Diff line number Diff line
@@ -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,
+3 −1
Original line number Original line Diff line number Diff line
@@ -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
+8 −1
Original line number Original line Diff line number Diff line
@@ -45,6 +45,7 @@ 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 dentry *dir_rf;
	struct dir_data_files {
	struct dir_data_files {
		struct dentry *file_sram;
		struct dentry *file_sram;
		struct dentry *file_eeprom;
		struct dentry *file_eeprom;
@@ -52,6 +53,12 @@ struct iwl_debugfs {
		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;
};
};
+19 −1
Original line number Original line Diff line number Diff line
@@ -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);




+5 −1
Original line number Original line Diff line number Diff line
@@ -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 */