diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2011-07-07 07:37:26 -0400 |
---|---|---|
committer | Wey-Yi Guy <wey-yi.w.guy@intel.com> | 2011-07-16 10:39:28 -0400 |
commit | ab6cf8e816bad473a1496f2006bea3a3849c2519 (patch) | |
tree | 924e71788ca5a299714fa520fc841b4d3aba11fb /drivers/net/wireless | |
parent | 253a634ccd1b291282cd0cade219bd90eb0371eb (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')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-lib.c | 39 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn-ucode.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-agn.h | 1 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-dev.h | 7 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-sv-open.c | 2 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-trans.c | 44 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-trans.h | 13 |
8 files changed, 52 insertions, 58 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c index 4156316e108d..e06a5c2f8355 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-lib.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-lib.c | |||
@@ -2166,42 +2166,3 @@ int iwlagn_start_device(struct iwl_priv *priv) | |||
2166 | return 0; | 2166 | return 0; |
2167 | } | 2167 | } |
2168 | 2168 | ||
2169 | void iwlagn_stop_device(struct iwl_priv *priv) | ||
2170 | { | ||
2171 | unsigned long flags; | ||
2172 | |||
2173 | /* stop and reset the on-board processor */ | ||
2174 | iwl_write32(priv, CSR_RESET, CSR_RESET_REG_FLAG_NEVO_RESET); | ||
2175 | |||
2176 | /* tell the device to stop sending interrupts */ | ||
2177 | spin_lock_irqsave(&priv->lock, flags); | ||
2178 | iwl_disable_interrupts(priv); | ||
2179 | spin_unlock_irqrestore(&priv->lock, flags); | ||
2180 | trans_sync_irq(priv); | ||
2181 | |||
2182 | /* device going down, Stop using ICT table */ | ||
2183 | iwl_disable_ict(priv); | ||
2184 | |||
2185 | /* | ||
2186 | * If a HW restart happens during firmware loading, | ||
2187 | * then the firmware loading might call this function | ||
2188 | * and later it might be called again due to the | ||
2189 | * restart. So don't process again if the device is | ||
2190 | * already dead. | ||
2191 | */ | ||
2192 | if (test_bit(STATUS_DEVICE_ENABLED, &priv->status)) { | ||
2193 | trans_tx_stop(priv); | ||
2194 | trans_rx_stop(priv); | ||
2195 | |||
2196 | /* Power-down device's busmaster DMA clocks */ | ||
2197 | iwl_write_prph(priv, APMG_CLK_DIS_REG, | ||
2198 | APMG_CLK_VAL_DMA_CLK_RQT); | ||
2199 | udelay(5); | ||
2200 | } | ||
2201 | |||
2202 | /* Make sure (redundant) we've released our request to stay awake */ | ||
2203 | iwl_clear_bit(priv, CSR_GP_CNTRL, CSR_GP_CNTRL_REG_FLAG_MAC_ACCESS_REQ); | ||
2204 | |||
2205 | /* Stop the device, and put it in low power state */ | ||
2206 | iwl_apm_stop(priv); | ||
2207 | } | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn-ucode.c b/drivers/net/wireless/iwlwifi/iwl-agn-ucode.c index 06304a681ed3..c15a1f7f4ff8 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn-ucode.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn-ucode.c | |||
@@ -707,6 +707,6 @@ int iwlagn_run_init_ucode(struct iwl_priv *priv) | |||
707 | iwlagn_remove_notification(priv, &calib_wait); | 707 | iwlagn_remove_notification(priv, &calib_wait); |
708 | out: | 708 | out: |
709 | /* Whatever happened, stop the device */ | 709 | /* Whatever happened, stop the device */ |
710 | iwlagn_stop_device(priv); | 710 | trans_stop_device(priv); |
711 | return ret; | 711 | return ret; |
712 | } | 712 | } |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c index bd85af91c58a..3de90c540287 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.c +++ b/drivers/net/wireless/iwlwifi/iwl-agn.c | |||
@@ -1782,7 +1782,7 @@ static void __iwl_down(struct iwl_priv *priv) | |||
1782 | test_bit(STATUS_EXIT_PENDING, &priv->status) << | 1782 | test_bit(STATUS_EXIT_PENDING, &priv->status) << |
1783 | STATUS_EXIT_PENDING; | 1783 | STATUS_EXIT_PENDING; |
1784 | 1784 | ||
1785 | iwlagn_stop_device(priv); | 1785 | trans_stop_device(priv); |
1786 | 1786 | ||
1787 | dev_kfree_skb(priv->beacon_skb); | 1787 | dev_kfree_skb(priv->beacon_skb); |
1788 | priv->beacon_skb = NULL; | 1788 | priv->beacon_skb = NULL; |
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.h b/drivers/net/wireless/iwlwifi/iwl-agn.h index 0c4e14527df0..fa32eb99e1d6 100644 --- a/drivers/net/wireless/iwlwifi/iwl-agn.h +++ b/drivers/net/wireless/iwlwifi/iwl-agn.h | |||
@@ -129,7 +129,6 @@ static inline void iwl_set_calib_hdr(struct iwl_calib_hdr *hdr, u8 cmd) | |||
129 | int iwl_prepare_card_hw(struct iwl_priv *priv); | 129 | int iwl_prepare_card_hw(struct iwl_priv *priv); |
130 | 130 | ||
131 | int iwlagn_start_device(struct iwl_priv *priv); | 131 | int iwlagn_start_device(struct iwl_priv *priv); |
132 | void iwlagn_stop_device(struct iwl_priv *priv); | ||
133 | 132 | ||
134 | /* tx queue */ | 133 | /* tx queue */ |
135 | void iwlagn_set_wr_ptrs(struct iwl_priv *priv, | 134 | void iwlagn_set_wr_ptrs(struct iwl_priv *priv, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-dev.h b/drivers/net/wireless/iwlwifi/iwl-dev.h index 34625de2e516..cf6f4b2e2cd5 100644 --- a/drivers/net/wireless/iwlwifi/iwl-dev.h +++ b/drivers/net/wireless/iwlwifi/iwl-dev.h | |||
@@ -1236,11 +1236,10 @@ struct iwl_trans; | |||
1236 | * struct iwl_trans_ops - transport specific operations | 1236 | * struct iwl_trans_ops - transport specific operations |
1237 | 1237 | ||
1238 | * @rx_init: inits the rx memory, allocate it if needed | 1238 | * @rx_init: inits the rx memory, allocate it if needed |
1239 | * @rx_stop: stop the rx | ||
1240 | * @rx_free: frees the rx memory | 1239 | * @rx_free: frees the rx memory |
1241 | * @tx_init:inits the tx memory, allocate if needed | 1240 | * @tx_init:inits the tx memory, allocate if needed |
1242 | * @tx_stop: stop the tx | ||
1243 | * @tx_free: frees the tx memory | 1241 | * @tx_free: frees the tx memory |
1242 | * @stop_device:stops the whole device (embedded CPU put to reset) | ||
1244 | * @send_cmd:send a host command | 1243 | * @send_cmd:send a host command |
1245 | * @send_cmd_pdu:send a host command: flags can be CMD_* | 1244 | * @send_cmd_pdu:send a host command: flags can be CMD_* |
1246 | * @get_tx_cmd: returns a pointer to a new Tx cmd for the upper layer use | 1245 | * @get_tx_cmd: returns a pointer to a new Tx cmd for the upper layer use |
@@ -1254,13 +1253,13 @@ struct iwl_trans; | |||
1254 | */ | 1253 | */ |
1255 | struct iwl_trans_ops { | 1254 | struct iwl_trans_ops { |
1256 | int (*rx_init)(struct iwl_priv *priv); | 1255 | int (*rx_init)(struct iwl_priv *priv); |
1257 | int (*rx_stop)(struct iwl_priv *priv); | ||
1258 | void (*rx_free)(struct iwl_priv *priv); | 1256 | void (*rx_free)(struct iwl_priv *priv); |
1259 | 1257 | ||
1260 | int (*tx_init)(struct iwl_priv *priv); | 1258 | int (*tx_init)(struct iwl_priv *priv); |
1261 | int (*tx_stop)(struct iwl_priv *priv); | ||
1262 | void (*tx_free)(struct iwl_priv *priv); | 1259 | void (*tx_free)(struct iwl_priv *priv); |
1263 | 1260 | ||
1261 | void (*stop_device)(struct iwl_priv *priv); | ||
1262 | |||
1264 | int (*send_cmd)(struct iwl_priv *priv, struct iwl_host_cmd *cmd); | 1263 | int (*send_cmd)(struct iwl_priv *priv, struct iwl_host_cmd *cmd); |
1265 | 1264 | ||
1266 | int (*send_cmd_pdu)(struct iwl_priv *priv, u8 id, u32 flags, u16 len, | 1265 | int (*send_cmd_pdu)(struct iwl_priv *priv, u8 id, u32 flags, u16 len, |
diff --git a/drivers/net/wireless/iwlwifi/iwl-sv-open.c b/drivers/net/wireless/iwlwifi/iwl-sv-open.c index 77ed1c295da4..d736a9d0e06e 100644 --- a/drivers/net/wireless/iwlwifi/iwl-sv-open.c +++ b/drivers/net/wireless/iwlwifi/iwl-sv-open.c | |||
@@ -407,7 +407,7 @@ static int iwl_testmode_driver(struct ieee80211_hw *hw, struct nlattr **tb) | |||
407 | 407 | ||
408 | case IWL_TM_CMD_APP2DEV_CFG_INIT_CALIB: | 408 | case IWL_TM_CMD_APP2DEV_CFG_INIT_CALIB: |
409 | iwl_testmode_cfg_init_calib(priv); | 409 | iwl_testmode_cfg_init_calib(priv); |
410 | iwlagn_stop_device(priv); | 410 | trans_stop_device(priv); |
411 | break; | 411 | break; |
412 | 412 | ||
413 | case IWL_TM_CMD_APP2DEV_LOAD_RUNTIME_FW: | 413 | case IWL_TM_CMD_APP2DEV_LOAD_RUNTIME_FW: |
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.c b/drivers/net/wireless/iwlwifi/iwl-trans.c index 6b7cb73442bf..8d4555404799 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 | ||
614 | static 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 | |||
614 | static struct iwl_tx_cmd *iwl_trans_get_tx_cmd(struct iwl_priv *priv, | 654 | static 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 | ||
780 | static const struct iwl_trans_ops trans_ops = { | 820 | static 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 | ||
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h index 8293f54e0390..55e6c333bfa1 100644 --- a/drivers/net/wireless/iwlwifi/iwl-trans.h +++ b/drivers/net/wireless/iwlwifi/iwl-trans.h | |||
@@ -69,11 +69,6 @@ static inline int trans_rx_init(struct iwl_priv *priv) | |||
69 | return priv->trans.ops->rx_init(priv); | 69 | return priv->trans.ops->rx_init(priv); |
70 | } | 70 | } |
71 | 71 | ||
72 | static inline int trans_rx_stop(struct iwl_priv *priv) | ||
73 | { | ||
74 | return priv->trans.ops->rx_stop(priv); | ||
75 | } | ||
76 | |||
77 | static inline void trans_rx_free(struct iwl_priv *priv) | 72 | static inline void trans_rx_free(struct iwl_priv *priv) |
78 | { | 73 | { |
79 | priv->trans.ops->rx_free(priv); | 74 | priv->trans.ops->rx_free(priv); |
@@ -84,14 +79,14 @@ static inline int trans_tx_init(struct iwl_priv *priv) | |||
84 | return priv->trans.ops->tx_init(priv); | 79 | return priv->trans.ops->tx_init(priv); |
85 | } | 80 | } |
86 | 81 | ||
87 | static inline int trans_tx_stop(struct iwl_priv *priv) | 82 | static inline void trans_tx_free(struct iwl_priv *priv) |
88 | { | 83 | { |
89 | return priv->trans.ops->tx_stop(priv); | 84 | priv->trans.ops->tx_free(priv); |
90 | } | 85 | } |
91 | 86 | ||
92 | static inline void trans_tx_free(struct iwl_priv *priv) | 87 | static inline void trans_stop_device(struct iwl_priv *priv) |
93 | { | 88 | { |
94 | priv->trans.ops->tx_free(priv); | 89 | priv->trans.ops->stop_device(priv); |
95 | } | 90 | } |
96 | 91 | ||
97 | static inline int trans_send_cmd(struct iwl_priv *priv, | 92 | static inline int trans_send_cmd(struct iwl_priv *priv, |