aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/iwl-rx.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-rx.c')
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-rx.c31
1 files changed, 0 insertions, 31 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-rx.c b/drivers/net/wireless/iwlwifi/iwl-rx.c
index 73739cfd8047..7a432829e79f 100644
--- a/drivers/net/wireless/iwlwifi/iwl-rx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-rx.c
@@ -145,13 +145,7 @@ int iwl_rx_queue_update_write_ptr(struct iwl_priv *priv, struct iwl_rx_queue *q)
145 goto exit_unlock; 145 goto exit_unlock;
146 } 146 }
147 147
148 ret = iwl_grab_nic_access(priv);
149 if (ret)
150 goto exit_unlock;
151
152 /* Device expects a multiple of 8 */
153 iwl_write_direct32(priv, rx_wrt_ptr_reg, q->write & ~0x7); 148 iwl_write_direct32(priv, rx_wrt_ptr_reg, q->write & ~0x7);
154 iwl_release_nic_access(priv);
155 149
156 /* Else device is assumed to be awake */ 150 /* Else device is assumed to be awake */
157 } else { 151 } else {
@@ -403,19 +397,10 @@ EXPORT_SYMBOL(iwl_rx_queue_reset);
403 397
404int iwl_rx_init(struct iwl_priv *priv, struct iwl_rx_queue *rxq) 398int iwl_rx_init(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
405{ 399{
406 int ret;
407 unsigned long flags;
408 u32 rb_size; 400 u32 rb_size;
409 const u32 rfdnlog = RX_QUEUE_SIZE_LOG; /* 256 RBDs */ 401 const u32 rfdnlog = RX_QUEUE_SIZE_LOG; /* 256 RBDs */
410 const u32 rb_timeout = 0; /* FIXME: RX_RB_TIMEOUT why this stalls RX */ 402 const u32 rb_timeout = 0; /* FIXME: RX_RB_TIMEOUT why this stalls RX */
411 403
412 spin_lock_irqsave(&priv->lock, flags);
413 ret = iwl_grab_nic_access(priv);
414 if (ret) {
415 spin_unlock_irqrestore(&priv->lock, flags);
416 return ret;
417 }
418
419 if (priv->cfg->mod_params->amsdu_size_8K) 404 if (priv->cfg->mod_params->amsdu_size_8K)
420 rb_size = FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_8K; 405 rb_size = FH_RCSR_RX_CONFIG_REG_VAL_RB_SIZE_8K;
421 else 406 else
@@ -452,35 +437,19 @@ int iwl_rx_init(struct iwl_priv *priv, struct iwl_rx_queue *rxq)
452 (rb_timeout << FH_RCSR_RX_CONFIG_REG_IRQ_RBTH_POS)| 437 (rb_timeout << FH_RCSR_RX_CONFIG_REG_IRQ_RBTH_POS)|
453 (rfdnlog << FH_RCSR_RX_CONFIG_RBDCB_SIZE_POS)); 438 (rfdnlog << FH_RCSR_RX_CONFIG_RBDCB_SIZE_POS));
454 439
455 iwl_release_nic_access(priv);
456
457 iwl_write32(priv, CSR_INT_COALESCING, 0x40); 440 iwl_write32(priv, CSR_INT_COALESCING, 0x40);
458 441
459 spin_unlock_irqrestore(&priv->lock, flags);
460
461 return 0; 442 return 0;
462} 443}
463 444
464int iwl_rxq_stop(struct iwl_priv *priv) 445int iwl_rxq_stop(struct iwl_priv *priv)
465{ 446{
466 int ret;
467 unsigned long flags;
468
469 spin_lock_irqsave(&priv->lock, flags);
470 ret = iwl_grab_nic_access(priv);
471 if (unlikely(ret)) {
472 spin_unlock_irqrestore(&priv->lock, flags);
473 return ret;
474 }
475 447
476 /* stop Rx DMA */ 448 /* stop Rx DMA */
477 iwl_write_direct32(priv, FH_MEM_RCSR_CHNL0_CONFIG_REG, 0); 449 iwl_write_direct32(priv, FH_MEM_RCSR_CHNL0_CONFIG_REG, 0);
478 iwl_poll_direct_bit(priv, FH_MEM_RSSR_RX_STATUS_REG, 450 iwl_poll_direct_bit(priv, FH_MEM_RSSR_RX_STATUS_REG,
479 FH_RSSR_CHNL0_RX_STATUS_CHNL_IDLE, 1000); 451 FH_RSSR_CHNL0_RX_STATUS_CHNL_IDLE, 1000);
480 452
481 iwl_release_nic_access(priv);
482 spin_unlock_irqrestore(&priv->lock, flags);
483
484 return 0; 453 return 0;
485} 454}
486EXPORT_SYMBOL(iwl_rxq_stop); 455EXPORT_SYMBOL(iwl_rxq_stop);