mirror of https://gitee.com/openkylin/linux.git
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: Mordechay Goodstein <mordechay.goodstein@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com> Link: https://lore.kernel.org/r/iwlwifi.20200924162105.f6469c62665d.Id920f1ae8f70886b66a98956a6412726d29a9481@changeid Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
fda1bd0d4a
commit
a26014e2de
|
@ -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,
|
||||||
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 {
|
||||||
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 {
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
|
|
||||||
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,
|
||||||
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,
|
||||||
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");
|
||||||
|
|
Loading…
Reference in New Issue