diff options
author | Winkler, Tomas <tomas.winkler@intel.com> | 2008-11-19 18:32:26 -0500 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2008-11-26 09:47:39 -0500 |
commit | 31a73fe4f3284d94d52774c285e9e98a5f441d21 (patch) | |
tree | 0b0b706bd575a83ea835ade19b730a0acd7118f0 | |
parent | 25e35a56d5f4795cf52cdd0830a91e3103396cfe (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.c | 10 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-5000.c | 9 | ||||
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-tx.c | 5 |
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[] = { | |||
692 | static int iwl4965_alive_notify(struct iwl_priv *priv) | 692 | static 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) | |||
700 | static int iwl5000_alive_notify(struct iwl_priv *priv) | 700 | static 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 | ||