aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.c3
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-agn.h2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h2
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c6
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans-pcie.c10
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-trans.h15
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-ucode.c2
7 files changed, 19 insertions, 21 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.c b/drivers/net/wireless/iwlwifi/iwl-agn.c
index 90315c69cdf6..9d9185ffc39c 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.c
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.c
@@ -1243,9 +1243,6 @@ int iwl_alive_start(struct iwl_priv *priv)
1243 int ret = 0; 1243 int ret = 0;
1244 struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS]; 1244 struct iwl_rxon_context *ctx = &priv->contexts[IWL_RXON_CTX_BSS];
1245 1245
1246 /*TODO: this should go to the transport layer */
1247 iwl_reset_ict(trans(priv));
1248
1249 IWL_DEBUG_INFO(priv, "Runtime Alive received.\n"); 1246 IWL_DEBUG_INFO(priv, "Runtime Alive received.\n");
1250 1247
1251 /* After the ALIVE response, we can send host commands to the uCode */ 1248 /* After the ALIVE response, we can send host commands to the uCode */
diff --git a/drivers/net/wireless/iwlwifi/iwl-agn.h b/drivers/net/wireless/iwlwifi/iwl-agn.h
index 39cbe1a1577c..0f5133ac3575 100644
--- a/drivers/net/wireless/iwlwifi/iwl-agn.h
+++ b/drivers/net/wireless/iwlwifi/iwl-agn.h
@@ -73,8 +73,6 @@ struct iwlagn_ucode_capabilities {
73 73
74extern struct ieee80211_ops iwlagn_hw_ops; 74extern struct ieee80211_ops iwlagn_hw_ops;
75 75
76int iwl_reset_ict(struct iwl_trans *trans);
77
78static inline void iwl_set_calib_hdr(struct iwl_calib_hdr *hdr, u8 cmd) 76static inline void iwl_set_calib_hdr(struct iwl_calib_hdr *hdr, u8 cmd)
79{ 77{
80 hdr->op_code = cmd; 78 hdr->op_code = cmd;
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
index 0ac9b4d30271..0f73778b73f7 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-int.h
@@ -258,7 +258,7 @@ void iwl_rx_queue_update_write_ptr(struct iwl_trans *trans,
258/***************************************************** 258/*****************************************************
259* ICT 259* ICT
260******************************************************/ 260******************************************************/
261int iwl_reset_ict(struct iwl_trans *trans); 261void iwl_reset_ict(struct iwl_trans *trans);
262void iwl_disable_ict(struct iwl_trans *trans); 262void iwl_disable_ict(struct iwl_trans *trans);
263int iwl_alloc_isr_ict(struct iwl_trans *trans); 263int iwl_alloc_isr_ict(struct iwl_trans *trans);
264void iwl_free_isr_ict(struct iwl_trans *trans); 264void iwl_free_isr_ict(struct iwl_trans *trans);
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
index 848c598bfadb..2822b7e8bcae 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie-rx.c
@@ -1213,7 +1213,7 @@ int iwl_alloc_isr_ict(struct iwl_trans *trans)
1213/* Device is going up inform it about using ICT interrupt table, 1213/* Device is going up inform it about using ICT interrupt table,
1214 * also we need to tell the driver to start using ICT interrupt. 1214 * also we need to tell the driver to start using ICT interrupt.
1215 */ 1215 */
1216int iwl_reset_ict(struct iwl_trans *trans) 1216void iwl_reset_ict(struct iwl_trans *trans)
1217{ 1217{
1218 u32 val; 1218 u32 val;
1219 unsigned long flags; 1219 unsigned long flags;
@@ -1221,7 +1221,7 @@ int iwl_reset_ict(struct iwl_trans *trans)
1221 IWL_TRANS_GET_PCIE_TRANS(trans); 1221 IWL_TRANS_GET_PCIE_TRANS(trans);
1222 1222
1223 if (!trans_pcie->ict_tbl) 1223 if (!trans_pcie->ict_tbl)
1224 return 0; 1224 return;
1225 1225
1226 spin_lock_irqsave(&trans->shrd->lock, flags); 1226 spin_lock_irqsave(&trans->shrd->lock, flags);
1227 iwl_disable_interrupts(trans); 1227 iwl_disable_interrupts(trans);
@@ -1241,8 +1241,6 @@ int iwl_reset_ict(struct iwl_trans *trans)
1241 iwl_write32(bus(trans), CSR_INT, trans_pcie->inta_mask); 1241 iwl_write32(bus(trans), CSR_INT, trans_pcie->inta_mask);
1242 iwl_enable_interrupts(trans); 1242 iwl_enable_interrupts(trans);
1243 spin_unlock_irqrestore(&trans->shrd->lock, flags); 1243 spin_unlock_irqrestore(&trans->shrd->lock, flags);
1244
1245 return 0;
1246} 1244}
1247 1245
1248/* Device is going down disable ict interrupt usage */ 1246/* Device is going down disable ict interrupt usage */
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
index 5e6af4ba9652..affa56fafdb8 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
+++ b/drivers/net/wireless/iwlwifi/iwl-trans-pcie.c
@@ -835,7 +835,7 @@ static void iwl_trans_txq_set_sched(struct iwl_trans *trans, u32 mask)
835 iwl_write_prph(bus(trans), SCD_TXFACT, mask); 835 iwl_write_prph(bus(trans), SCD_TXFACT, mask);
836} 836}
837 837
838static void iwl_trans_pcie_tx_start(struct iwl_trans *trans) 838static void iwl_tx_start(struct iwl_trans *trans)
839{ 839{
840 const struct queue_to_fifo_ac *queue_to_fifo; 840 const struct queue_to_fifo_ac *queue_to_fifo;
841 struct iwl_trans_pcie *trans_pcie = 841 struct iwl_trans_pcie *trans_pcie =
@@ -948,6 +948,12 @@ static void iwl_trans_pcie_tx_start(struct iwl_trans *trans)
948 APMG_PCIDEV_STT_VAL_L1_ACT_DIS); 948 APMG_PCIDEV_STT_VAL_L1_ACT_DIS);
949} 949}
950 950
951static void iwl_trans_pcie_fw_alive(struct iwl_trans *trans)
952{
953 iwl_reset_ict(trans);
954 iwl_tx_start(trans);
955}
956
951/** 957/**
952 * iwlagn_txq_ctx_stop - Stop all Tx DMA channels 958 * iwlagn_txq_ctx_stop - Stop all Tx DMA channels
953 */ 959 */
@@ -1903,11 +1909,11 @@ static int iwl_trans_pcie_dbgfs_register(struct iwl_trans *trans,
1903const struct iwl_trans_ops trans_ops_pcie = { 1909const struct iwl_trans_ops trans_ops_pcie = {
1904 .alloc = iwl_trans_pcie_alloc, 1910 .alloc = iwl_trans_pcie_alloc,
1905 .request_irq = iwl_trans_pcie_request_irq, 1911 .request_irq = iwl_trans_pcie_request_irq,
1912 .fw_alive = iwl_trans_pcie_fw_alive,
1906 .start_device = iwl_trans_pcie_start_device, 1913 .start_device = iwl_trans_pcie_start_device,
1907 .prepare_card_hw = iwl_trans_pcie_prepare_card_hw, 1914 .prepare_card_hw = iwl_trans_pcie_prepare_card_hw,
1908 .stop_device = iwl_trans_pcie_stop_device, 1915 .stop_device = iwl_trans_pcie_stop_device,
1909 1916
1910 .tx_start = iwl_trans_pcie_tx_start,
1911 .wake_any_queue = iwl_trans_pcie_wake_any_queue, 1917 .wake_any_queue = iwl_trans_pcie_wake_any_queue,
1912 1918
1913 .send_cmd = iwl_trans_pcie_send_cmd, 1919 .send_cmd = iwl_trans_pcie_send_cmd,
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.h b/drivers/net/wireless/iwlwifi/iwl-trans.h
index 42a9f303f543..9795a23ee949 100644
--- a/drivers/net/wireless/iwlwifi/iwl-trans.h
+++ b/drivers/net/wireless/iwlwifi/iwl-trans.h
@@ -139,8 +139,7 @@ struct iwl_host_cmd {
139 * layer. 139 * layer.
140 * @prepare_card_hw: claim the ownership on the HW. Will be called during 140 * @prepare_card_hw: claim the ownership on the HW. Will be called during
141 * probe. 141 * probe.
142 * @tx_start: starts and configures all the Tx fifo - usually done once the fw 142 * @fw_alive: called when the fw sends alive notification
143 * is alive.
144 * @wake_any_queue: wake all the queues of a specfic context IWL_RXON_CTX_* 143 * @wake_any_queue: wake all the queues of a specfic context IWL_RXON_CTX_*
145 * @stop_device:stops the whole device (embedded CPU put to reset) 144 * @stop_device:stops the whole device (embedded CPU put to reset)
146 * @send_cmd:send a host command 145 * @send_cmd:send a host command
@@ -166,9 +165,9 @@ struct iwl_trans_ops {
166 struct iwl_trans *(*alloc)(struct iwl_shared *shrd); 165 struct iwl_trans *(*alloc)(struct iwl_shared *shrd);
167 int (*request_irq)(struct iwl_trans *iwl_trans); 166 int (*request_irq)(struct iwl_trans *iwl_trans);
168 int (*start_device)(struct iwl_trans *trans); 167 int (*start_device)(struct iwl_trans *trans);
168 void (*fw_alive)(struct iwl_trans *trans);
169 int (*prepare_card_hw)(struct iwl_trans *trans); 169 int (*prepare_card_hw)(struct iwl_trans *trans);
170 void (*stop_device)(struct iwl_trans *trans); 170 void (*stop_device)(struct iwl_trans *trans);
171 void (*tx_start)(struct iwl_trans *trans);
172 171
173 void (*wake_any_queue)(struct iwl_trans *trans, 172 void (*wake_any_queue)(struct iwl_trans *trans,
174 enum iwl_rxon_context_id ctx, 173 enum iwl_rxon_context_id ctx,
@@ -264,6 +263,11 @@ static inline int iwl_trans_request_irq(struct iwl_trans *trans)
264 return trans->ops->request_irq(trans); 263 return trans->ops->request_irq(trans);
265} 264}
266 265
266static inline void iwl_trans_fw_alive(struct iwl_trans *trans)
267{
268 trans->ops->fw_alive(trans);
269}
270
267static inline int iwl_trans_start_device(struct iwl_trans *trans) 271static inline int iwl_trans_start_device(struct iwl_trans *trans)
268{ 272{
269 return trans->ops->start_device(trans); 273 return trans->ops->start_device(trans);
@@ -279,11 +283,6 @@ static inline void iwl_trans_stop_device(struct iwl_trans *trans)
279 trans->ops->stop_device(trans); 283 trans->ops->stop_device(trans);
280} 284}
281 285
282static inline void iwl_trans_tx_start(struct iwl_trans *trans)
283{
284 trans->ops->tx_start(trans);
285}
286
287static inline void iwl_trans_wake_any_queue(struct iwl_trans *trans, 286static inline void iwl_trans_wake_any_queue(struct iwl_trans *trans,
288 enum iwl_rxon_context_id ctx, 287 enum iwl_rxon_context_id ctx,
289 const char *msg) 288 const char *msg)
diff --git a/drivers/net/wireless/iwlwifi/iwl-ucode.c b/drivers/net/wireless/iwlwifi/iwl-ucode.c
index 2edf0ef65a5b..0d7f207ac611 100644
--- a/drivers/net/wireless/iwlwifi/iwl-ucode.c
+++ b/drivers/net/wireless/iwlwifi/iwl-ucode.c
@@ -447,7 +447,7 @@ static int iwl_alive_notify(struct iwl_trans *trans)
447 if (!priv->tx_cmd_pool) 447 if (!priv->tx_cmd_pool)
448 return -ENOMEM; 448 return -ENOMEM;
449 449
450 iwl_trans_tx_start(trans); 450 iwl_trans_fw_alive(trans);
451 for_each_context(priv, ctx) 451 for_each_context(priv, ctx)
452 ctx->last_tx_rejected = false; 452 ctx->last_tx_rejected = false;
453 453