提交 a26014e2 编写于 作者: M Mordechay Goodstein 提交者: Luca Coelho

iwlwifi: move bc_pool to a common trans header

The bc_pool code is not directly related to the PCIe transport,
so move the structures it uses to the common iwl-trans.h header.
Signed-off-by: NMordechay Goodstein <mordechay.goodstein@intel.com>
Signed-off-by: NLuca Coelho <luciano.coelho@intel.com>
Link: https://lore.kernel.org/r/iwlwifi.20200924162105.f6469c62665d.Id920f1ae8f70886b66a98956a6412726d29a9481@changeidSigned-off-by: NLuca Coelho <luciano.coelho@intel.com>
上级 fda1bd0d
...@@ -66,6 +66,7 @@ ...@@ -66,6 +66,7 @@
#include "iwl-trans.h" #include "iwl-trans.h"
#include "iwl-drv.h" #include "iwl-drv.h"
#include "iwl-fh.h" #include "iwl-fh.h"
#include <linux/dmapool.h>
struct iwl_trans *iwl_trans_alloc(unsigned int priv_size, struct iwl_trans *iwl_trans_alloc(unsigned int priv_size,
struct device *dev, struct device *dev,
...@@ -110,6 +111,22 @@ struct iwl_trans *iwl_trans_alloc(unsigned int priv_size, ...@@ -110,6 +111,22 @@ struct iwl_trans *iwl_trans_alloc(unsigned int priv_size,
trans->ops = ops; trans->ops = ops;
trans->num_rx_queues = 1; trans->num_rx_queues = 1;
if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210)
trans->txqs.bc_tbl_size = sizeof(struct iwl_gen3_bc_tbl);
else
trans->txqs.bc_tbl_size = sizeof(struct iwlagn_scd_bc_tbl);
/*
* For gen2 devices, we use a single allocation for each byte-count
* table, but they're pretty small (1k) so use a DMA pool that we
* allocate here.
*/
if (trans->trans_cfg->gen2) {
trans->txqs.bc_pool = dmam_pool_create("iwlwifi:bc", dev,
trans->txqs.bc_tbl_size,
256, 0);
if (!trans->txqs.bc_pool)
return NULL;
}
snprintf(trans->dev_cmd_pool_name, sizeof(trans->dev_cmd_pool_name), snprintf(trans->dev_cmd_pool_name, sizeof(trans->dev_cmd_pool_name),
"iwl_cmd_pool:%s", dev_name(trans->dev)); "iwl_cmd_pool:%s", dev_name(trans->dev));
trans->dev_cmd_pool = trans->dev_cmd_pool =
......
...@@ -914,6 +914,8 @@ struct iwl_trans_txqs { ...@@ -914,6 +914,8 @@ struct iwl_trans_txqs {
unsigned long queue_used[BITS_TO_LONGS(IWL_MAX_TVQM_QUEUES)]; unsigned long queue_used[BITS_TO_LONGS(IWL_MAX_TVQM_QUEUES)];
unsigned long queue_stopped[BITS_TO_LONGS(IWL_MAX_TVQM_QUEUES)]; unsigned long queue_stopped[BITS_TO_LONGS(IWL_MAX_TVQM_QUEUES)];
struct iwl_txq *txq[IWL_MAX_TVQM_QUEUES]; struct iwl_txq *txq[IWL_MAX_TVQM_QUEUES];
struct dma_pool *bc_pool;
size_t bc_tbl_size;
struct { struct {
u8 fifo; u8 fifo;
u8 q_id; u8 q_id;
......
...@@ -451,7 +451,6 @@ struct iwl_trans_pcie { ...@@ -451,7 +451,6 @@ struct iwl_trans_pcie {
u32 scd_base_addr; u32 scd_base_addr;
struct iwl_dma_ptr scd_bc_tbls; struct iwl_dma_ptr scd_bc_tbls;
struct iwl_dma_ptr kw; struct iwl_dma_ptr kw;
struct dma_pool *bc_pool;
struct iwl_txq *txq_memory; struct iwl_txq *txq_memory;
......
...@@ -3649,24 +3649,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev, ...@@ -3649,24 +3649,6 @@ struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
init_waitqueue_head(&trans_pcie->sx_waitq); init_waitqueue_head(&trans_pcie->sx_waitq);
/*
* For gen2 devices, we use a single allocation for each byte-count
* table, but they're pretty small (1k) so use a DMA pool that we
* allocate here.
*/
if (cfg_trans->gen2) {
size_t bc_tbl_size;
if (cfg_trans->device_family >= IWL_DEVICE_FAMILY_AX210)
bc_tbl_size = sizeof(struct iwl_gen3_bc_tbl);
else
bc_tbl_size = sizeof(struct iwlagn_scd_bc_tbl);
trans_pcie->bc_pool = dmam_pool_create("iwlwifi:bc", &pdev->dev,
bc_tbl_size, 256, 0);
if (!trans_pcie->bc_pool)
goto out_no_pci;
}
if (trans_pcie->msix_enabled) { if (trans_pcie->msix_enabled) {
ret = iwl_pcie_init_msix_handler(pdev, trans_pcie); ret = iwl_pcie_init_msix_handler(pdev, trans_pcie);
......
...@@ -1225,7 +1225,7 @@ void iwl_pcie_gen2_txq_free_memory(struct iwl_trans *trans, ...@@ -1225,7 +1225,7 @@ void iwl_pcie_gen2_txq_free_memory(struct iwl_trans *trans,
kfree(txq->entries); kfree(txq->entries);
if (txq->bc_tbl.addr) if (txq->bc_tbl.addr)
dma_pool_free(trans_pcie->bc_pool, txq->bc_tbl.addr, dma_pool_free(trans->txqs.bc_pool, txq->bc_tbl.addr,
txq->bc_tbl.dma); txq->bc_tbl.dma);
kfree(txq); kfree(txq);
} }
...@@ -1273,18 +1273,14 @@ int iwl_trans_pcie_dyn_txq_alloc_dma(struct iwl_trans *trans, ...@@ -1273,18 +1273,14 @@ int iwl_trans_pcie_dyn_txq_alloc_dma(struct iwl_trans *trans,
struct iwl_txq **intxq, int size, struct iwl_txq **intxq, int size,
unsigned int timeout) unsigned int timeout)
{ {
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
size_t bc_tbl_size, bc_tbl_entries; size_t bc_tbl_size, bc_tbl_entries;
struct iwl_txq *txq; struct iwl_txq *txq;
int ret; int ret;
if (trans->trans_cfg->device_family >= IWL_DEVICE_FAMILY_AX210) { WARN_ON(!trans->txqs.bc_tbl_size);
bc_tbl_size = sizeof(struct iwl_gen3_bc_tbl);
bc_tbl_entries = bc_tbl_size / sizeof(u16); bc_tbl_size = trans->txqs.bc_tbl_size;
} else { bc_tbl_entries = bc_tbl_size / sizeof(u16);
bc_tbl_size = sizeof(struct iwlagn_scd_bc_tbl);
bc_tbl_entries = bc_tbl_size / sizeof(u16);
}
if (WARN_ON(size > bc_tbl_entries)) if (WARN_ON(size > bc_tbl_entries))
return -EINVAL; return -EINVAL;
...@@ -1293,7 +1289,7 @@ int iwl_trans_pcie_dyn_txq_alloc_dma(struct iwl_trans *trans, ...@@ -1293,7 +1289,7 @@ int iwl_trans_pcie_dyn_txq_alloc_dma(struct iwl_trans *trans,
if (!txq) if (!txq)
return -ENOMEM; return -ENOMEM;
txq->bc_tbl.addr = dma_pool_alloc(trans_pcie->bc_pool, GFP_KERNEL, txq->bc_tbl.addr = dma_pool_alloc(trans->txqs.bc_pool, GFP_KERNEL,
&txq->bc_tbl.dma); &txq->bc_tbl.dma);
if (!txq->bc_tbl.addr) { if (!txq->bc_tbl.addr) {
IWL_ERR(trans, "Scheduler BC Table allocation failed\n"); IWL_ERR(trans, "Scheduler BC Table allocation failed\n");
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册