mirror of https://gitee.com/openkylin/linux.git
iwlwifi: clean up in setup/cancel deferred work
This patch makes some clean up in setup/cancel_deferred_work. iwl_setup_deferred_work does the work that is common to 4965 and 5000, then it calls to HW specific handlers. This patch also removes uneeded work_struct from iwl_priv. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Signed-off-by: Zhu Yi <yi.zhu@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
16e727e866
commit
4e39317df0
|
@ -608,26 +608,6 @@ static int iwl4965_apm_reset(struct iwl_priv *priv)
|
||||||
|
|
||||||
#define REG_RECALIB_PERIOD (60)
|
#define REG_RECALIB_PERIOD (60)
|
||||||
|
|
||||||
/**
|
|
||||||
* iwl4965_bg_statistics_periodic - Timer callback to queue statistics
|
|
||||||
*
|
|
||||||
* This callback is provided in order to send a statistics request.
|
|
||||||
*
|
|
||||||
* This timer function is continually reset to execute within
|
|
||||||
* REG_RECALIB_PERIOD seconds since the last STATISTICS_NOTIFICATION
|
|
||||||
* was received. We need to ensure we receive the statistics in order
|
|
||||||
* to update the temperature used for calibrating the TXPOWER.
|
|
||||||
*/
|
|
||||||
static void iwl4965_bg_statistics_periodic(unsigned long data)
|
|
||||||
{
|
|
||||||
struct iwl_priv *priv = (struct iwl_priv *)data;
|
|
||||||
|
|
||||||
if (test_bit(STATUS_EXIT_PENDING, &priv->status))
|
|
||||||
return;
|
|
||||||
|
|
||||||
iwl_send_statistics_request(priv, CMD_ASYNC);
|
|
||||||
}
|
|
||||||
|
|
||||||
void iwl4965_rf_kill_ct_config(struct iwl_priv *priv)
|
void iwl4965_rf_kill_ct_config(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
struct iwl4965_ct_kill_config cmd;
|
struct iwl4965_ct_kill_config cmd;
|
||||||
|
@ -3469,19 +3449,14 @@ static void iwl4965_rx_handler_setup(struct iwl_priv *priv)
|
||||||
priv->rx_handlers[REPLY_COMPRESSED_BA] = iwl4965_rx_reply_compressed_ba;
|
priv->rx_handlers[REPLY_COMPRESSED_BA] = iwl4965_rx_reply_compressed_ba;
|
||||||
}
|
}
|
||||||
|
|
||||||
void iwl4965_hw_setup_deferred_work(struct iwl_priv *priv)
|
static void iwl4965_setup_deferred_work(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
INIT_WORK(&priv->txpower_work, iwl4965_bg_txpower_work);
|
INIT_WORK(&priv->txpower_work, iwl4965_bg_txpower_work);
|
||||||
init_timer(&priv->statistics_periodic);
|
|
||||||
priv->statistics_periodic.data = (unsigned long)priv;
|
|
||||||
priv->statistics_periodic.function = iwl4965_bg_statistics_periodic;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void iwl4965_hw_cancel_deferred_work(struct iwl_priv *priv)
|
static void iwl4965_cancel_deferred_work(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
del_timer_sync(&priv->statistics_periodic);
|
cancel_work_sync(&priv->txpower_work);
|
||||||
|
|
||||||
cancel_delayed_work(&priv->init_alive_start);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3506,6 +3481,8 @@ static struct iwl_lib_ops iwl4965_lib = {
|
||||||
.txq_agg_enable = iwl4965_txq_agg_enable,
|
.txq_agg_enable = iwl4965_txq_agg_enable,
|
||||||
.txq_agg_disable = iwl4965_txq_agg_disable,
|
.txq_agg_disable = iwl4965_txq_agg_disable,
|
||||||
.rx_handler_setup = iwl4965_rx_handler_setup,
|
.rx_handler_setup = iwl4965_rx_handler_setup,
|
||||||
|
.setup_deferred_work = iwl4965_setup_deferred_work,
|
||||||
|
.cancel_deferred_work = iwl4965_cancel_deferred_work,
|
||||||
.is_valid_rtc_data_addr = iwl4965_hw_valid_rtc_data_addr,
|
.is_valid_rtc_data_addr = iwl4965_hw_valid_rtc_data_addr,
|
||||||
.alive_notify = iwl4965_alive_notify,
|
.alive_notify = iwl4965_alive_notify,
|
||||||
.init_alive_start = iwl4965_init_alive_start,
|
.init_alive_start = iwl4965_init_alive_start,
|
||||||
|
|
|
@ -116,6 +116,10 @@ struct iwl_lib_ops {
|
||||||
u8 tx_fifo);
|
u8 tx_fifo);
|
||||||
/* setup Rx handler */
|
/* setup Rx handler */
|
||||||
void (*rx_handler_setup)(struct iwl_priv *priv);
|
void (*rx_handler_setup)(struct iwl_priv *priv);
|
||||||
|
/* setup deferred work */
|
||||||
|
void (*setup_deferred_work)(struct iwl_priv *priv);
|
||||||
|
/* cancel deferred work */
|
||||||
|
void (*cancel_deferred_work)(struct iwl_priv *priv);
|
||||||
/* alive notification after init uCode load */
|
/* alive notification after init uCode load */
|
||||||
void (*init_alive_start)(struct iwl_priv *priv);
|
void (*init_alive_start)(struct iwl_priv *priv);
|
||||||
/* alive notification */
|
/* alive notification */
|
||||||
|
|
|
@ -1179,9 +1179,6 @@ struct iwl_priv {
|
||||||
|
|
||||||
struct delayed_work init_alive_start;
|
struct delayed_work init_alive_start;
|
||||||
struct delayed_work alive_start;
|
struct delayed_work alive_start;
|
||||||
struct delayed_work activity_timer;
|
|
||||||
struct delayed_work thermal_periodic;
|
|
||||||
struct delayed_work gather_stats;
|
|
||||||
struct delayed_work scan_check;
|
struct delayed_work scan_check;
|
||||||
struct delayed_work post_associate;
|
struct delayed_work post_associate;
|
||||||
|
|
||||||
|
|
|
@ -1647,6 +1647,26 @@ static void iwl4965_bg_beacon_update(struct work_struct *work)
|
||||||
iwl4965_send_beacon_cmd(priv);
|
iwl4965_send_beacon_cmd(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* iwl4965_bg_statistics_periodic - Timer callback to queue statistics
|
||||||
|
*
|
||||||
|
* This callback is provided in order to send a statistics request.
|
||||||
|
*
|
||||||
|
* This timer function is continually reset to execute within
|
||||||
|
* REG_RECALIB_PERIOD seconds since the last STATISTICS_NOTIFICATION
|
||||||
|
* was received. We need to ensure we receive the statistics in order
|
||||||
|
* to update the temperature used for calibrating the TXPOWER.
|
||||||
|
*/
|
||||||
|
static void iwl4965_bg_statistics_periodic(unsigned long data)
|
||||||
|
{
|
||||||
|
struct iwl_priv *priv = (struct iwl_priv *)data;
|
||||||
|
|
||||||
|
if (test_bit(STATUS_EXIT_PENDING, &priv->status))
|
||||||
|
return;
|
||||||
|
|
||||||
|
iwl_send_statistics_request(priv, CMD_ASYNC);
|
||||||
|
}
|
||||||
|
|
||||||
static void iwl4965_rx_beacon_notif(struct iwl_priv *priv,
|
static void iwl4965_rx_beacon_notif(struct iwl_priv *priv,
|
||||||
struct iwl_rx_mem_buffer *rxb)
|
struct iwl_rx_mem_buffer *rxb)
|
||||||
{
|
{
|
||||||
|
@ -2887,7 +2907,7 @@ static void iwl_alive_start(struct iwl_priv *priv)
|
||||||
queue_work(priv->workqueue, &priv->restart);
|
queue_work(priv->workqueue, &priv->restart);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void iwl4965_cancel_deferred_work(struct iwl_priv *priv);
|
static void iwl_cancel_deferred_work(struct iwl_priv *priv);
|
||||||
|
|
||||||
static void __iwl4965_down(struct iwl_priv *priv)
|
static void __iwl4965_down(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
|
@ -2991,7 +3011,7 @@ static void iwl4965_down(struct iwl_priv *priv)
|
||||||
__iwl4965_down(priv);
|
__iwl4965_down(priv);
|
||||||
mutex_unlock(&priv->mutex);
|
mutex_unlock(&priv->mutex);
|
||||||
|
|
||||||
iwl4965_cancel_deferred_work(priv);
|
iwl_cancel_deferred_work(priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define MAX_HW_RESTARTS 5
|
#define MAX_HW_RESTARTS 5
|
||||||
|
@ -5022,7 +5042,7 @@ static DEVICE_ATTR(status, S_IRUGO, show_status, NULL);
|
||||||
*
|
*
|
||||||
*****************************************************************************/
|
*****************************************************************************/
|
||||||
|
|
||||||
static void iwl4965_setup_deferred_work(struct iwl_priv *priv)
|
static void iwl_setup_deferred_work(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
priv->workqueue = create_workqueue(DRV_NAME);
|
priv->workqueue = create_workqueue(DRV_NAME);
|
||||||
|
|
||||||
|
@ -5043,21 +5063,28 @@ static void iwl4965_setup_deferred_work(struct iwl_priv *priv)
|
||||||
INIT_DELAYED_WORK(&priv->alive_start, iwl_bg_alive_start);
|
INIT_DELAYED_WORK(&priv->alive_start, iwl_bg_alive_start);
|
||||||
INIT_DELAYED_WORK(&priv->scan_check, iwl4965_bg_scan_check);
|
INIT_DELAYED_WORK(&priv->scan_check, iwl4965_bg_scan_check);
|
||||||
|
|
||||||
iwl4965_hw_setup_deferred_work(priv);
|
if (priv->cfg->ops->lib->setup_deferred_work)
|
||||||
|
priv->cfg->ops->lib->setup_deferred_work(priv);
|
||||||
|
|
||||||
|
init_timer(&priv->statistics_periodic);
|
||||||
|
priv->statistics_periodic.data = (unsigned long)priv;
|
||||||
|
priv->statistics_periodic.function = iwl4965_bg_statistics_periodic;
|
||||||
|
|
||||||
tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
|
tasklet_init(&priv->irq_tasklet, (void (*)(unsigned long))
|
||||||
iwl4965_irq_tasklet, (unsigned long)priv);
|
iwl4965_irq_tasklet, (unsigned long)priv);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void iwl4965_cancel_deferred_work(struct iwl_priv *priv)
|
static void iwl_cancel_deferred_work(struct iwl_priv *priv)
|
||||||
{
|
{
|
||||||
iwl4965_hw_cancel_deferred_work(priv);
|
if (priv->cfg->ops->lib->cancel_deferred_work)
|
||||||
|
priv->cfg->ops->lib->cancel_deferred_work(priv);
|
||||||
|
|
||||||
cancel_delayed_work_sync(&priv->init_alive_start);
|
cancel_delayed_work_sync(&priv->init_alive_start);
|
||||||
cancel_delayed_work(&priv->scan_check);
|
cancel_delayed_work(&priv->scan_check);
|
||||||
cancel_delayed_work(&priv->alive_start);
|
cancel_delayed_work(&priv->alive_start);
|
||||||
cancel_delayed_work(&priv->post_associate);
|
cancel_delayed_work(&priv->post_associate);
|
||||||
cancel_work_sync(&priv->beacon_update);
|
cancel_work_sync(&priv->beacon_update);
|
||||||
|
del_timer_sync(&priv->statistics_periodic);
|
||||||
}
|
}
|
||||||
|
|
||||||
static struct attribute *iwl4965_sysfs_entries[] = {
|
static struct attribute *iwl4965_sysfs_entries[] = {
|
||||||
|
@ -5269,7 +5296,7 @@ static int iwl4965_pci_probe(struct pci_dev *pdev, const struct pci_device_id *e
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
iwl4965_setup_deferred_work(priv);
|
iwl_setup_deferred_work(priv);
|
||||||
iwl4965_setup_rx_handlers(priv);
|
iwl4965_setup_rx_handlers(priv);
|
||||||
|
|
||||||
/********************
|
/********************
|
||||||
|
|
Loading…
Reference in New Issue