aboutsummaryrefslogtreecommitdiffstats
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
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>
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-lib.c39
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn-ucode.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.h1
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-dev.h7
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-sv-open.c2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans.c44
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans.h13
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 4156316e108..e06a5c2f835 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
2169void 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 06304a681ed..c15a1f7f4ff 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 bd85af91c58..3de90c54028 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 0c4e14527df..fa32eb99e1d 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)
129int iwl_prepare_card_hw(struct iwl_priv *priv); 129int iwl_prepare_card_hw(struct iwl_priv *priv);
130 130
131int iwlagn_start_device(struct iwl_priv *priv); 131int iwlagn_start_device(struct iwl_priv *priv);
132void iwlagn_stop_device(struct iwl_priv *priv);
133 132
134/* tx queue */ 133/* tx queue */
135void iwlagn_set_wr_ptrs(struct iwl_priv *priv, 134void 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 34625de2e51..cf6f4b2e2cd 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 */
1255struct iwl_trans_ops { 1254struct 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 77ed1c295da..d736a9d0e06 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 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
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h
index 8293f54e039..55e6c333bfa 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
72static inline int trans_rx_stop(struct iwl_priv *priv)
73{
74 return priv->trans.ops->rx_stop(priv);
75}
76
77static inline void trans_rx_free(struct iwl_priv *priv) 72static 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
87static inline int trans_tx_stop(struct iwl_priv *priv) 82static 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
92static inline void trans_tx_free(struct iwl_priv *priv) 87static 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
97static inline int trans_send_cmd(struct iwl_priv *priv, 92static inline int trans_send_cmd(struct iwl_priv *priv,