diff options
author | Emmanuel Grumbach <emmanuel.grumbach@intel.com> | 2011-08-26 02:11:02 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2011-08-29 15:25:34 -0400 |
commit | 105183b156b7c220b47c3162e087101a0a6abc9f (patch) | |
tree | 08da9b6643bd8aac810deb8a2c9fa0f5fbc34dc6 /drivers/net/wireless/iwlwifi/iwl-trans.c | |
parent | 04e1cabe4294fdf744489deb1e91edb1ec02e9a4 (diff) |
iwlagn: move scd_bc_tbls and scd_base_addr to iwl_trans_pcie
Needed for PCIe only
Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/iwlwifi/iwl-trans.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/iwl-trans.c | 33 |
1 files changed, 21 insertions, 12 deletions
diff --git a/drivers/net/wireless/iwlwifi/iwl-trans.c b/drivers/net/wireless/iwlwifi/iwl-trans.c index 06cec8268c6c..0e04b51e7f79 100644 --- a/drivers/net/wireless/iwlwifi/iwl-trans.c +++ b/drivers/net/wireless/iwlwifi/iwl-trans.c | |||
@@ -469,6 +469,9 @@ static void iwl_tx_queue_free(struct iwl_priv *priv, int txq_id) | |||
469 | static void iwl_trans_pcie_tx_free(struct iwl_priv *priv) | 469 | static void iwl_trans_pcie_tx_free(struct iwl_priv *priv) |
470 | { | 470 | { |
471 | int txq_id; | 471 | int txq_id; |
472 | struct iwl_trans *trans = trans(priv); | ||
473 | struct iwl_trans_pcie *trans_pcie = | ||
474 | IWL_TRANS_GET_PCIE_TRANS(trans); | ||
472 | 475 | ||
473 | /* Tx queues */ | 476 | /* Tx queues */ |
474 | if (priv->txq) { | 477 | if (priv->txq) { |
@@ -482,7 +485,7 @@ static void iwl_trans_pcie_tx_free(struct iwl_priv *priv) | |||
482 | 485 | ||
483 | iwlagn_free_dma_ptr(priv, &priv->kw); | 486 | iwlagn_free_dma_ptr(priv, &priv->kw); |
484 | 487 | ||
485 | iwlagn_free_dma_ptr(priv, &priv->scd_bc_tbls); | 488 | iwlagn_free_dma_ptr(priv, &trans_pcie->scd_bc_tbls); |
486 | } | 489 | } |
487 | 490 | ||
488 | /** | 491 | /** |
@@ -496,6 +499,9 @@ static int iwl_trans_tx_alloc(struct iwl_priv *priv) | |||
496 | { | 499 | { |
497 | int ret; | 500 | int ret; |
498 | int txq_id, slots_num; | 501 | int txq_id, slots_num; |
502 | struct iwl_trans *trans = trans(priv); | ||
503 | struct iwl_trans_pcie *trans_pcie = | ||
504 | IWL_TRANS_GET_PCIE_TRANS(trans); | ||
499 | 505 | ||
500 | /*It is not allowed to alloc twice, so warn when this happens. | 506 | /*It is not allowed to alloc twice, so warn when this happens. |
501 | * We cannot rely on the previous allocation, so free and fail */ | 507 | * We cannot rely on the previous allocation, so free and fail */ |
@@ -504,7 +510,7 @@ static int iwl_trans_tx_alloc(struct iwl_priv *priv) | |||
504 | goto error; | 510 | goto error; |
505 | } | 511 | } |
506 | 512 | ||
507 | ret = iwlagn_alloc_dma_ptr(priv, &priv->scd_bc_tbls, | 513 | ret = iwlagn_alloc_dma_ptr(priv, &trans_pcie->scd_bc_tbls, |
508 | hw_params(priv).scd_bc_tbls_size); | 514 | hw_params(priv).scd_bc_tbls_size); |
509 | if (ret) { | 515 | if (ret) { |
510 | IWL_ERR(priv, "Scheduler BC Table allocation failed\n"); | 516 | IWL_ERR(priv, "Scheduler BC Table allocation failed\n"); |
@@ -785,30 +791,33 @@ static void iwl_trans_pcie_tx_start(struct iwl_priv *priv) | |||
785 | { | 791 | { |
786 | const struct queue_to_fifo_ac *queue_to_fifo; | 792 | const struct queue_to_fifo_ac *queue_to_fifo; |
787 | struct iwl_rxon_context *ctx; | 793 | struct iwl_rxon_context *ctx; |
794 | struct iwl_trans *trans = trans(priv); | ||
795 | struct iwl_trans_pcie *trans_pcie = | ||
796 | IWL_TRANS_GET_PCIE_TRANS(trans); | ||
788 | u32 a; | 797 | u32 a; |
789 | unsigned long flags; | 798 | unsigned long flags; |
790 | int i, chan; | 799 | int i, chan; |
791 | u32 reg_val; | 800 | u32 reg_val; |
792 | 801 | ||
793 | spin_lock_irqsave(&priv->shrd->lock, flags); | 802 | spin_lock_irqsave(&trans->shrd->lock, flags); |
794 | 803 | ||
795 | priv->scd_base_addr = iwl_read_prph(priv, SCD_SRAM_BASE_ADDR); | 804 | trans_pcie->scd_base_addr = iwl_read_prph(priv, SCD_SRAM_BASE_ADDR); |
796 | a = priv->scd_base_addr + SCD_CONTEXT_MEM_LOWER_BOUND; | 805 | a = trans_pcie->scd_base_addr + SCD_CONTEXT_MEM_LOWER_BOUND; |
797 | /* reset conext data memory */ | 806 | /* reset conext data memory */ |
798 | for (; a < priv->scd_base_addr + SCD_CONTEXT_MEM_UPPER_BOUND; | 807 | for (; a < trans_pcie->scd_base_addr + SCD_CONTEXT_MEM_UPPER_BOUND; |
799 | a += 4) | 808 | a += 4) |
800 | iwl_write_targ_mem(priv, a, 0); | 809 | iwl_write_targ_mem(priv, a, 0); |
801 | /* reset tx status memory */ | 810 | /* reset tx status memory */ |
802 | for (; a < priv->scd_base_addr + SCD_TX_STTS_MEM_UPPER_BOUND; | 811 | for (; a < trans_pcie->scd_base_addr + SCD_TX_STTS_MEM_UPPER_BOUND; |
803 | a += 4) | 812 | a += 4) |
804 | iwl_write_targ_mem(priv, a, 0); | 813 | iwl_write_targ_mem(priv, a, 0); |
805 | for (; a < priv->scd_base_addr + | 814 | for (; a < trans_pcie->scd_base_addr + |
806 | SCD_TRANS_TBL_OFFSET_QUEUE(hw_params(priv).max_txq_num); | 815 | SCD_TRANS_TBL_OFFSET_QUEUE(hw_params(priv).max_txq_num); |
807 | a += 4) | 816 | a += 4) |
808 | iwl_write_targ_mem(priv, a, 0); | 817 | iwl_write_targ_mem(priv, a, 0); |
809 | 818 | ||
810 | iwl_write_prph(priv, SCD_DRAM_BASE_ADDR, | 819 | iwl_write_prph(priv, SCD_DRAM_BASE_ADDR, |
811 | priv->scd_bc_tbls.dma >> 10); | 820 | trans_pcie->scd_bc_tbls.dma >> 10); |
812 | 821 | ||
813 | /* Enable DMA channel */ | 822 | /* Enable DMA channel */ |
814 | for (chan = 0; chan < FH_TCSR_CHNL_NUM ; chan++) | 823 | for (chan = 0; chan < FH_TCSR_CHNL_NUM ; chan++) |
@@ -829,9 +838,9 @@ static void iwl_trans_pcie_tx_start(struct iwl_priv *priv) | |||
829 | for (i = 0; i < hw_params(priv).max_txq_num; i++) { | 838 | for (i = 0; i < hw_params(priv).max_txq_num; i++) { |
830 | iwl_write_prph(priv, SCD_QUEUE_RDPTR(i), 0); | 839 | iwl_write_prph(priv, SCD_QUEUE_RDPTR(i), 0); |
831 | iwl_write_direct32(priv, HBUS_TARG_WRPTR, 0 | (i << 8)); | 840 | iwl_write_direct32(priv, HBUS_TARG_WRPTR, 0 | (i << 8)); |
832 | iwl_write_targ_mem(priv, priv->scd_base_addr + | 841 | iwl_write_targ_mem(priv, trans_pcie->scd_base_addr + |
833 | SCD_CONTEXT_QUEUE_OFFSET(i), 0); | 842 | SCD_CONTEXT_QUEUE_OFFSET(i), 0); |
834 | iwl_write_targ_mem(priv, priv->scd_base_addr + | 843 | iwl_write_targ_mem(priv, trans_pcie->scd_base_addr + |
835 | SCD_CONTEXT_QUEUE_OFFSET(i) + | 844 | SCD_CONTEXT_QUEUE_OFFSET(i) + |
836 | sizeof(u32), | 845 | sizeof(u32), |
837 | ((SCD_WIN_SIZE << | 846 | ((SCD_WIN_SIZE << |
@@ -843,7 +852,7 @@ static void iwl_trans_pcie_tx_start(struct iwl_priv *priv) | |||
843 | } | 852 | } |
844 | 853 | ||
845 | iwl_write_prph(priv, SCD_INTERRUPT_MASK, | 854 | iwl_write_prph(priv, SCD_INTERRUPT_MASK, |
846 | IWL_MASK(0, hw_params(priv).max_txq_num)); | 855 | IWL_MASK(0, hw_params(trans).max_txq_num)); |
847 | 856 | ||
848 | /* Activate all Tx DMA/FIFO channels */ | 857 | /* Activate all Tx DMA/FIFO channels */ |
849 | iwl_trans_txq_set_sched(priv, IWL_MASK(0, 7)); | 858 | iwl_trans_txq_set_sched(priv, IWL_MASK(0, 7)); |