aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-trans.c
diff options
context:
space:
mode:
authorEmmanuel Grumbach <emmanuel.grumbach@intel.com>2011-07-07 07:37:26 -0400
committerWey-Yi Guy <wey-yi.w.guy@intel.com>2011-07-16 10:39:28 -0400
commitab6cf8e816bad473a1496f2006bea3a3849c2519 (patch)
tree924e71788ca5a299714fa520fc841b4d3aba11fb /drivers/net/wireless/iwlwifi/iwl-trans.c
parent253a634ccd1b291282cd0cade219bd90eb0371eb (diff)
iwlagn: move iwlagn_stop_device to transport layer
Since iwlagn_stop_device was the only caller to the rx_stop / tx_stop, these two don't need to be API any more. Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com> Signed-off-by: Wey-Yi Guy <wey-yi.guy@intel.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-trans.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans.c44
1 files changed, 42 insertions, 2 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.c b/drivers/net/wireless/iwlwifi/iwl-trans.c
index 6b7cb73442b..8d455540479 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans.c
@@ -611,6 +611,46 @@ static int iwl_trans_tx_stop(struct iwl_priv *priv)
611 return 0; 611 return 0;
612} 612}
613 613
614static void iwl_trans_stop_device(struct iwl_priv *priv)
615{
616 unsigned long flags;
617
618 /* stop and reset the on-board processor */
619 iwl_write32(priv, CSR_RESET, CSR_RESET_REG_FLAG_NEVO_RESET);
620
621 /* tell the device to stop sending interrupts */
622 spin_lock_irqsave(&priv->lock, flags);
623 iwl_disable_interrupts(priv);
624 spin_unlock_irqrestore(&priv->lock, flags);
625 trans_sync_irq(priv);
626
627 /* device going down, Stop using ICT table */
628 iwl_disable_ict(priv);
629
630 /*
631 * If a HW restart happens during firmware loading,
632 * then the firmware loading might call this function
633 * and later it might be called again due to the
634 * restart. So don't process again if the device is
635 * already dead.
636 */
637 if (test_bit(STATUS_DEVICE_ENABLED, &priv->status)) {
638 iwl_trans_tx_stop(priv);
639 iwl_trans_rx_stop(priv);
640
641 /* Power-down device's busmaster DMA clocks */
642 iwl_write_prph(priv, APMG_CLK_DIS_REG,
643 APMG_CLK_VAL_DMA_CLK_RQT);
644 udelay(5);
645 }
646
647 /* Make sure (redundant) we've released our request to stay awake */
648 iwl_clear_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ);
649
650 /* Stop the device, and put it in low power state */
651 iwl_apm_stop(priv);
652}
653
614static struct iwl_tx_cmd *iwl_trans_get_tx_cmd(struct iwl_priv *priv, 654static struct iwl_tx_cmd *iwl_trans_get_tx_cmd(struct iwl_priv *priv,
615 int txq_id) 655 int txq_id)
616{ 656{
@@ -779,13 +819,13 @@ static void iwl_trans_free(struct iwl_priv *priv)
779 819
780static const struct iwl_trans_ops trans_ops = { 820static const struct iwl_trans_ops trans_ops = {
781 .rx_init = iwl_trans_rx_init, 821 .rx_init = iwl_trans_rx_init,
782 .rx_stop = iwl_trans_rx_stop,
783 .rx_free = iwl_trans_rx_free, 822 .rx_free = iwl_trans_rx_free,
784 823
785 .tx_init = iwl_trans_tx_init, 824 .tx_init = iwl_trans_tx_init,
786 .tx_stop = iwl_trans_tx_stop,
787 .tx_free = iwl_trans_tx_free, 825 .tx_free = iwl_trans_tx_free,
788 826
827 .stop_device = iwl_trans_stop_device,
828
789 .send_cmd = iwl_send_cmd, 829 .send_cmd = iwl_send_cmd,
790 .send_cmd_pdu = iwl_send_cmd_pdu, 830 .send_cmd_pdu = iwl_send_cmd_pdu,
791 831