aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWinkler, Tomas <tomas.winkler@intel.com>2008-11-19 18:32:26 -0500
committerJohn W. Linville <linville@tuxdriver.com>2008-11-26 09:47:39 -0500
commit31a73fe4f3284d94d52774c285e9e98a5f441d21 (patch)
tree0b0b706bd575a83ea835ade19b730a0acd7118f0
parent25e35a56d5f4795cf52cdd0830a91e3103396cfe (diff)
iwlwifi: TX setup fix confusion between TX queue and TX DMA channel
This patch configures correctly TX DMA channel. It is not the same as TX queue. Signed-off-by: Tomas Winkler <tomas.winkler@intel.com> Acked-by: Zhu Yi <yi.zhu@intel.com> Signed-off-by: Reinette Chatre <reinette.chatre@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-4965.c10
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-5000.c9
-rw-r--r--drivers/net/wireless/iwlwifi/iwl-tx.c5
3 files changed, 16 insertions, 8 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-4965.c b/drivers/net/wireless/iwlwifi/iwl-4965.c
index b96f55341384..60769b12b685 100644
--- a/drivers/net/wireless/iwlwifi/iwl-4965.c
+++ b/drivers/net/wireless/iwlwifi/iwl-4965.c
@@ -692,9 +692,9 @@ static const u16 default_queue_to_tx_fifo[] = {
692static int iwl4965_alive_notify(struct iwl_priv *priv) 692static int iwl4965_alive_notify(struct iwl_priv *priv)
693{ 693{
694 u32 a; 694 u32 a;
695 int i = 0;
696 unsigned long flags; 695 unsigned long flags;
697 int ret; 696 int ret;
697 int i, chan;
698 698
699 spin_lock_irqsave(&priv->lock, flags); 699 spin_lock_irqsave(&priv->lock, flags);
700 700
@@ -718,6 +718,12 @@ static int iwl4965_alive_notify(struct iwl_priv *priv)
718 iwl_write_prph(priv, IWL49_SCD_DRAM_BASE_ADDR, 718 iwl_write_prph(priv, IWL49_SCD_DRAM_BASE_ADDR,
719 priv->scd_bc_tbls.dma >> 10); 719 priv->scd_bc_tbls.dma >> 10);
720 720
721 /* Enable DMA channel */
722 for (chan = 0; chan < FH49_TCSR_CHNL_NUM ; chan++)
723 iwl_write_direct32(priv, FH_TCSR_CHNL_TX_CONFIG_REG(chan),
724 FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_ENABLE |
725 FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_ENABLE);
726
721 /* Disable chain mode for all queues */ 727 /* Disable chain mode for all queues */
722 iwl_write_prph(priv, IWL49_SCD_QUEUECHAIN_SEL, 0); 728 iwl_write_prph(priv, IWL49_SCD_QUEUECHAIN_SEL, 0);
723 729
@@ -748,7 +754,7 @@ static int iwl4965_alive_notify(struct iwl_priv *priv)
748 (1 << priv->hw_params.max_txq_num) - 1); 754 (1 << priv->hw_params.max_txq_num) - 1);
749 755
750 /* Activate all Tx DMA/FIFO channels */ 756 /* Activate all Tx DMA/FIFO channels */
751 priv->cfg->ops->lib->txq_set_sched(priv, IWL_MASK(0, 7)); 757 priv->cfg->ops->lib->txq_set_sched(priv, IWL_MASK(0, 6));
752 758
753 iwl4965_set_wr_ptrs(priv, IWL_CMD_QUEUE_NUM, 0); 759 iwl4965_set_wr_ptrs(priv, IWL_CMD_QUEUE_NUM, 0);
754 760
diff --git a/drivers/net/wireless/iwlwifi/iwl-5000.c b/drivers/net/wireless/iwlwifi/iwl-5000.c
index 478c5c3674e4..d73760c3f769 100644
--- a/drivers/net/wireless/iwlwifi/iwl-5000.c
+++ b/drivers/net/wireless/iwlwifi/iwl-5000.c
@@ -700,9 +700,9 @@ static int iwl5000_send_wimax_coex(struct iwl_priv *priv)
700static int iwl5000_alive_notify(struct iwl_priv *priv) 700static int iwl5000_alive_notify(struct iwl_priv *priv)
701{ 701{
702 u32 a; 702 u32 a;
703 int i = 0;
704 unsigned long flags; 703 unsigned long flags;
705 int ret; 704 int ret;
705 int i, chan;
706 706
707 spin_lock_irqsave(&priv->lock, flags); 707 spin_lock_irqsave(&priv->lock, flags);
708 708
@@ -725,6 +725,13 @@ static int iwl5000_alive_notify(struct iwl_priv *priv)
725 725
726 iwl_write_prph(priv, IWL50_SCD_DRAM_BASE_ADDR, 726 iwl_write_prph(priv, IWL50_SCD_DRAM_BASE_ADDR,
727 priv->scd_bc_tbls.dma >> 10); 727 priv->scd_bc_tbls.dma >> 10);
728
729 /* Enable DMA channel */
730 for (chan = 0; chan < FH50_TCSR_CHNL_NUM ; chan++)
731 iwl_write_direct32(priv, FH_TCSR_CHNL_TX_CONFIG_REG(chan),
732 FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_ENABLE |
733 FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_ENABLE);
734
728 iwl_write_prph(priv, IWL50_SCD_QUEUECHAIN_SEL, 735 iwl_write_prph(priv, IWL50_SCD_QUEUECHAIN_SEL,
729 IWL50_SCD_QUEUECHAIN_SEL_ALL(priv->hw_params.max_txq_num)); 736 IWL50_SCD_QUEUECHAIN_SEL_ALL(priv->hw_params.max_txq_num));
730 iwl_write_prph(priv, IWL50_SCD_AGGR_SEL, 0); 737 iwl_write_prph(priv, IWL50_SCD_AGGR_SEL, 0);
diff --git a/drivers/net/wireless/iwlwifi/iwl-tx.c b/drivers/net/wireless/iwlwifi/iwl-tx.c
index 9f0705bcd03a..e045dfeaa1fe 100644
--- a/drivers/net/wireless/iwlwifi/iwl-tx.c
+++ b/drivers/net/wireless/iwlwifi/iwl-tx.c
@@ -449,11 +449,6 @@ static int iwl_hw_tx_queue_init(struct iwl_priv *priv,
449 iwl_write_direct32(priv, FH_MEM_CBBC_QUEUE(txq_id), 449 iwl_write_direct32(priv, FH_MEM_CBBC_QUEUE(txq_id),
450 txq->q.dma_addr >> 8); 450 txq->q.dma_addr >> 8);
451 451
452 /* Enable DMA channel, using same id as for TFD queue */
453 iwl_write_direct32(priv, FH_TCSR_CHNL_TX_CONFIG_REG(txq_id),
454 FH_TCSR_TX_CONFIG_REG_VAL_DMA_CHNL_ENABLE |
455 FH_TCSR_TX_CONFIG_REG_VAL_DMA_CREDIT_ENABLE);
456
457 iwl_release_nic_access(priv); 452 iwl_release_nic_access(priv);
458 spin_unlock_irqrestore(&priv->lock, flags); 453 spin_unlock_irqrestore(&priv->lock, flags);
459 454