aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/iwlwifi/pcie/trans.c
diff options
context:
space:
mode:
authorJohn W. Linville <linville@tuxdriver.com>2012-07-12 13:44:50 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-07-12 13:44:50 -0400
commit38a00840638b4932152bca48098dbfa069d942a2 (patch)
treedd12897854f6df8aac237d5fd46551c74be8153a /drivers/net/wireless/iwlwifi/pcie/trans.c
parent391e5c22f5f4e55817f8ba18a08ea717ed2d4a1f (diff)
parent2f8684ce7a47c91da7e0ccba2686277c103d02b6 (diff)
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
Diffstat (limited to 'drivers/net/wireless/iwlwifi/pcie/trans.c')
-rw-r--r--drivers/net/wireless/iwlwifi/pcie/trans.c36
1 files changed, 12 insertions, 24 deletions
diff --git a/drivers/net/wireless/iwlwifi/pcie/trans.c b/drivers/net/wireless/iwlwifi/pcie/trans.c
index d1950838f17f..09795afccb23 100644
--- a/drivers/net/wireless/iwlwifi/pcie/trans.c
+++ b/drivers/net/wireless/iwlwifi/pcie/trans.c
@@ -1059,7 +1059,7 @@ static void iwl_tx_start(struct iwl_trans *trans)
1059{ 1059{
1060 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); 1060 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
1061 u32 a; 1061 u32 a;
1062 int i, chan; 1062 int chan;
1063 u32 reg_val; 1063 u32 reg_val;
1064 1064
1065 /* make sure all queue are not stopped/used */ 1065 /* make sure all queue are not stopped/used */
@@ -1091,12 +1091,8 @@ static void iwl_tx_start(struct iwl_trans *trans)
1091 */ 1091 */
1092 iwl_write_prph(trans, SCD_CHAINEXT_EN, 0); 1092 iwl_write_prph(trans, SCD_CHAINEXT_EN, 0);
1093 1093
1094 for (i = 0; i < trans_pcie->n_q_to_fifo; i++) { 1094 iwl_trans_ac_txq_enable(trans, trans_pcie->cmd_queue,
1095 int fifo = trans_pcie->setup_q_to_fifo[i]; 1095 trans_pcie->cmd_fifo);
1096
1097 iwl_trans_pcie_txq_enable(trans, i, fifo, IWL_INVALID_STATION,
1098 IWL_TID_NON_QOS, SCD_FRAME_LIMIT, 0);
1099 }
1100 1096
1101 /* Activate all Tx DMA/FIFO channels */ 1097 /* Activate all Tx DMA/FIFO channels */
1102 iwl_trans_txq_set_sched(trans, IWL_MASK(0, 7)); 1098 iwl_trans_txq_set_sched(trans, IWL_MASK(0, 7));
@@ -1145,7 +1141,7 @@ static int iwl_trans_tx_stop(struct iwl_trans *trans)
1145 FH_TSSR_TX_STATUS_REG_MSK_CHNL_IDLE(ch), 1000); 1141 FH_TSSR_TX_STATUS_REG_MSK_CHNL_IDLE(ch), 1000);
1146 if (ret < 0) 1142 if (ret < 0)
1147 IWL_ERR(trans, 1143 IWL_ERR(trans,
1148 "Failing on timeout while stopping DMA channel %d [0x%08x]", 1144 "Failing on timeout while stopping DMA channel %d [0x%08x]\n",
1149 ch, 1145 ch,
1150 iwl_read_direct32(trans, 1146 iwl_read_direct32(trans,
1151 FH_TSSR_TX_STATUS_REG)); 1147 FH_TSSR_TX_STATUS_REG));
@@ -1153,7 +1149,8 @@ static int iwl_trans_tx_stop(struct iwl_trans *trans)
1153 spin_unlock_irqrestore(&trans_pcie->irq_lock, flags); 1149 spin_unlock_irqrestore(&trans_pcie->irq_lock, flags);
1154 1150
1155 if (!trans_pcie->txq) { 1151 if (!trans_pcie->txq) {
1156 IWL_WARN(trans, "Stopping tx queues that aren't allocated..."); 1152 IWL_WARN(trans,
1153 "Stopping tx queues that aren't allocated...\n");
1157 return 0; 1154 return 0;
1158 } 1155 }
1159 1156
@@ -1430,7 +1427,7 @@ static int iwl_trans_pcie_start_hw(struct iwl_trans *trans)
1430 1427
1431 err = iwl_prepare_card_hw(trans); 1428 err = iwl_prepare_card_hw(trans);
1432 if (err) { 1429 if (err) {
1433 IWL_ERR(trans, "Error while preparing HW: %d", err); 1430 IWL_ERR(trans, "Error while preparing HW: %d\n", err);
1434 goto err_free_irq; 1431 goto err_free_irq;
1435 } 1432 }
1436 1433
@@ -1528,6 +1525,7 @@ static void iwl_trans_pcie_configure(struct iwl_trans *trans,
1528 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans); 1525 struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
1529 1526
1530 trans_pcie->cmd_queue = trans_cfg->cmd_queue; 1527 trans_pcie->cmd_queue = trans_cfg->cmd_queue;
1528 trans_pcie->cmd_fifo = trans_cfg->cmd_fifo;
1531 if (WARN_ON(trans_cfg->n_no_reclaim_cmds > MAX_NO_RECLAIM_CMDS)) 1529 if (WARN_ON(trans_cfg->n_no_reclaim_cmds > MAX_NO_RECLAIM_CMDS))
1532 trans_pcie->n_no_reclaim_cmds = 0; 1530 trans_pcie->n_no_reclaim_cmds = 0;
1533 else 1531 else
@@ -1536,17 +1534,6 @@ static void iwl_trans_pcie_configure(struct iwl_trans *trans,
1536 memcpy(trans_pcie->no_reclaim_cmds, trans_cfg->no_reclaim_cmds, 1534 memcpy(trans_pcie->no_reclaim_cmds, trans_cfg->no_reclaim_cmds,
1537 trans_pcie->n_no_reclaim_cmds * sizeof(u8)); 1535 trans_pcie->n_no_reclaim_cmds * sizeof(u8));
1538 1536
1539 trans_pcie->n_q_to_fifo = trans_cfg->n_queue_to_fifo;
1540
1541 if (WARN_ON(trans_pcie->n_q_to_fifo > IWL_MAX_HW_QUEUES))
1542 trans_pcie->n_q_to_fifo = IWL_MAX_HW_QUEUES;
1543
1544 /* at least the command queue must be mapped */
1545 WARN_ON(!trans_pcie->n_q_to_fifo);
1546
1547 memcpy(trans_pcie->setup_q_to_fifo, trans_cfg->queue_to_fifo,
1548 trans_pcie->n_q_to_fifo * sizeof(u8));
1549
1550 trans_pcie->rx_buf_size_8k = trans_cfg->rx_buf_size_8k; 1537 trans_pcie->rx_buf_size_8k = trans_cfg->rx_buf_size_8k;
1551 if (trans_pcie->rx_buf_size_8k) 1538 if (trans_pcie->rx_buf_size_8k)
1552 trans_pcie->rx_page_order = get_order(8 * 1024); 1539 trans_pcie->rx_page_order = get_order(8 * 1024);
@@ -2141,13 +2128,14 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
2141 2128
2142 err = pci_request_regions(pdev, DRV_NAME); 2129 err = pci_request_regions(pdev, DRV_NAME);
2143 if (err) { 2130 if (err) {
2144 dev_printk(KERN_ERR, &pdev->dev, "pci_request_regions failed"); 2131 dev_printk(KERN_ERR, &pdev->dev,
2132 "pci_request_regions failed\n");
2145 goto out_pci_disable_device; 2133 goto out_pci_disable_device;
2146 } 2134 }
2147 2135
2148 trans_pcie->hw_base = pci_ioremap_bar(pdev, 0); 2136 trans_pcie->hw_base = pci_ioremap_bar(pdev, 0);
2149 if (!trans_pcie->hw_base) { 2137 if (!trans_pcie->hw_base) {
2150 dev_printk(KERN_ERR, &pdev->dev, "pci_ioremap_bar failed"); 2138 dev_printk(KERN_ERR, &pdev->dev, "pci_ioremap_bar failed\n");
2151 err = -ENODEV; 2139 err = -ENODEV;
2152 goto out_pci_release_regions; 2140 goto out_pci_release_regions;
2153 } 2141 }
@@ -2168,7 +2156,7 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
2168 err = pci_enable_msi(pdev); 2156 err = pci_enable_msi(pdev);
2169 if (err) 2157 if (err)
2170 dev_printk(KERN_ERR, &pdev->dev, 2158 dev_printk(KERN_ERR, &pdev->dev,
2171 "pci_enable_msi failed(0X%x)", err); 2159 "pci_enable_msi failed(0X%x)\n", err);
2172 2160
2173 trans->dev = &pdev->dev; 2161 trans->dev = &pdev->dev;
2174 trans_pcie->irq = pdev->irq; 2162 trans_pcie->irq = pdev->irq;