iwlwifi: refactor stop master function
This patch refactors stop master function for 4965 and 5000. Currently it duplicates the function. Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
f118a91d16
commit
46315e0122
|
@ -579,39 +579,6 @@ static void iwl4965_nic_config(struct iwl_priv *priv)
|
||||||
spin_unlock_irqrestore(&priv->lock, flags);
|
spin_unlock_irqrestore(&priv->lock, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
int iwl4965_hw_nic_stop_master(struct iwl_priv *priv)
|
|
||||||
{
|
|
||||||
int rc = 0;
|
|
||||||
u32 reg_val;
|
|
||||||
unsigned long flags;
|
|
||||||
|
|
||||||
spin_lock_irqsave(&priv->lock, flags);
|
|
||||||
|
|
||||||
/* set stop master bit */
|
|
||||||
iwl_set_bit(priv, CSR_RESET, CSR_RESET_REG_FLAG_STOP_MASTER);
|
|
||||||
|
|
||||||
reg_val = iwl_read32(priv, CSR_GP_CNTRL);
|
|
||||||
|
|
||||||
if (CSR_GP_CNTRL_REG_FLAG_MAC_POWER_SAVE ==
|
|
||||||
(reg_val & CSR_GP_CNTRL_REG_MSK_POWER_SAVE_TYPE))
|
|
||||||
IWL_DEBUG_INFO("Card in power save, master is already "
|
|
||||||
"stopped\n");
|
|
||||||
else {
|
|
||||||
rc = iwl_poll_bit(priv, CSR_RESET,
|
|
||||||
CSR_RESET_REG_FLAG_MASTER_DISABLED,
|
|
||||||
CSR_RESET_REG_FLAG_MASTER_DISABLED, 100);
|
|
||||||
if (rc < 0) {
|
|
||||||
spin_unlock_irqrestore(&priv->lock, flags);
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
spin_unlock_irqrestore(&priv->lock, flags);
|
|
||||||
IWL_DEBUG_INFO("stop master\n");
|
|
||||||
|
|
||||||
return rc;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* iwl4965_hw_txq_ctx_stop - Stop all Tx DMA channels, free Tx queue memory
|
* iwl4965_hw_txq_ctx_stop - Stop all Tx DMA channels, free Tx queue memory
|
||||||
*/
|
*/
|
||||||
|
@ -642,11 +609,34 @@ void iwl4965_hw_txq_ctx_stop(struct iwl_priv *priv)
|
||||||
iwl_hw_txq_ctx_free(priv);
|
iwl_hw_txq_ctx_free(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int iwl4965_apm_stop_master(struct iwl_priv *priv)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&priv->lock, flags);
|
||||||
|
|
||||||
|
/* set stop master bit */
|
||||||
|
iwl_set_bit(priv, CSR_RESET, CSR_RESET_REG_FLAG_STOP_MASTER);
|
||||||
|
|
||||||
|
ret = iwl_poll_bit(priv, CSR_RESET,
|
||||||
|
CSR_RESET_REG_FLAG_MASTER_DISABLED,
|
||||||
|
CSR_RESET_REG_FLAG_MASTER_DISABLED, 100);
|
||||||
|
if (ret < 0)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
out:
|
||||||
|
spin_unlock_irqrestore(&priv->lock, flags);
|
||||||
|
IWL_DEBUG_INFO("stop master\n");
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
static void iwl4965_apm_stop(struct iwl_priv *priv)
|
static void iwl4965_apm_stop(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
iwl4965_hw_nic_stop_master(priv);
|
iwl4965_apm_stop_master(priv);
|
||||||
|
|
||||||
spin_lock_irqsave(&priv->lock, flags);
|
spin_lock_irqsave(&priv->lock, flags);
|
||||||
|
|
||||||
|
@ -663,7 +653,7 @@ static int iwl4965_apm_reset(struct iwl_priv *priv)
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
iwl4965_hw_nic_stop_master(priv);
|
iwl4965_apm_stop_master(priv);
|
||||||
|
|
||||||
spin_lock_irqsave(&priv->lock, flags);
|
spin_lock_irqsave(&priv->lock, flags);
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,31 @@ static const u16 iwl5000_default_queue_to_tx_fifo[] = {
|
||||||
IWL_TX_FIFO_HCCA_2
|
IWL_TX_FIFO_HCCA_2
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/* FIXME: same implementation as 4965 */
|
||||||
|
static int iwl5000_apm_stop_master(struct iwl_priv *priv)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
unsigned long flags;
|
||||||
|
|
||||||
|
spin_lock_irqsave(&priv->lock, flags);
|
||||||
|
|
||||||
|
/* set stop master bit */
|
||||||
|
iwl_set_bit(priv, CSR_RESET, CSR_RESET_REG_FLAG_STOP_MASTER);
|
||||||
|
|
||||||
|
ret = iwl_poll_bit(priv, CSR_RESET,
|
||||||
|
CSR_RESET_REG_FLAG_MASTER_DISABLED,
|
||||||
|
CSR_RESET_REG_FLAG_MASTER_DISABLED, 100);
|
||||||
|
if (ret < 0)
|
||||||
|
goto out;
|
||||||
|
|
||||||
|
out:
|
||||||
|
spin_unlock_irqrestore(&priv->lock, flags);
|
||||||
|
IWL_DEBUG_INFO("stop master\n");
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int iwl5000_apm_init(struct iwl_priv *priv)
|
static int iwl5000_apm_init(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
@ -105,7 +130,7 @@ static void iwl5000_apm_stop(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
iwl4965_hw_nic_stop_master(priv);
|
iwl5000_apm_stop_master(priv);
|
||||||
|
|
||||||
spin_lock_irqsave(&priv->lock, flags);
|
spin_lock_irqsave(&priv->lock, flags);
|
||||||
|
|
||||||
|
@ -124,7 +149,7 @@ static int iwl5000_apm_reset(struct iwl_priv *priv)
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
|
|
||||||
iwl4965_hw_nic_stop_master(priv);
|
iwl5000_apm_stop_master(priv);
|
||||||
|
|
||||||
spin_lock_irqsave(&priv->lock, flags);
|
spin_lock_irqsave(&priv->lock, flags);
|
||||||
|
|
||||||
|
|
|
@ -686,7 +686,6 @@ extern void iwl4965_hw_setup_deferred_work(struct iwl_priv *priv);
|
||||||
extern void iwl4965_hw_cancel_deferred_work(struct iwl_priv *priv);
|
extern void iwl4965_hw_cancel_deferred_work(struct iwl_priv *priv);
|
||||||
extern int iwl4965_hw_rxq_stop(struct iwl_priv *priv);
|
extern int iwl4965_hw_rxq_stop(struct iwl_priv *priv);
|
||||||
extern int iwl4965_hw_set_hw_params(struct iwl_priv *priv);
|
extern int iwl4965_hw_set_hw_params(struct iwl_priv *priv);
|
||||||
extern int iwl4965_hw_nic_stop_master(struct iwl_priv *priv);
|
|
||||||
extern void iwl4965_hw_txq_ctx_stop(struct iwl_priv *priv);
|
extern void iwl4965_hw_txq_ctx_stop(struct iwl_priv *priv);
|
||||||
extern int iwl4965_hw_get_temperature(struct iwl_priv *priv);
|
extern int iwl4965_hw_get_temperature(struct iwl_priv *priv);
|
||||||
extern unsigned int iwl4965_hw_get_beacon_cmd(struct iwl_priv *priv,
|
extern unsigned int iwl4965_hw_get_beacon_cmd(struct iwl_priv *priv,
|
||||||
|
|
Loading…
Reference in New Issue