iwlagn: move Keep Warm to transport layer
It is relevant 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>
This commit is contained in:
parent
dda61a4482
commit
9d6b2cb1cc
|
@ -1239,7 +1239,6 @@ struct iwl_priv {
|
||||||
/* Tx DMA processing queues */
|
/* Tx DMA processing queues */
|
||||||
struct iwl_tx_queue *txq;
|
struct iwl_tx_queue *txq;
|
||||||
unsigned long txq_ctx_active_msk;
|
unsigned long txq_ctx_active_msk;
|
||||||
struct iwl_dma_ptr kw; /* keep warm address */
|
|
||||||
|
|
||||||
/* counts mgmt, ctl, and data packets */
|
/* counts mgmt, ctl, and data packets */
|
||||||
struct traffic_stats tx_stats;
|
struct traffic_stats tx_stats;
|
||||||
|
|
|
@ -95,6 +95,7 @@ struct iwl_rx_queue {
|
||||||
* @trans: pointer to the generic transport area
|
* @trans: pointer to the generic transport area
|
||||||
* @scd_base_addr: scheduler sram base address in SRAM
|
* @scd_base_addr: scheduler sram base address in SRAM
|
||||||
* @scd_bc_tbls: pointer to the byte count table of the scheduler
|
* @scd_bc_tbls: pointer to the byte count table of the scheduler
|
||||||
|
* @kw: keep warm address
|
||||||
*/
|
*/
|
||||||
struct iwl_trans_pcie {
|
struct iwl_trans_pcie {
|
||||||
struct iwl_rx_queue rxq;
|
struct iwl_rx_queue rxq;
|
||||||
|
@ -115,6 +116,7 @@ struct iwl_trans_pcie {
|
||||||
u32 inta_mask;
|
u32 inta_mask;
|
||||||
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;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define IWL_TRANS_GET_PCIE_TRANS(_iwl_trans) \
|
#define IWL_TRANS_GET_PCIE_TRANS(_iwl_trans) \
|
||||||
|
|
|
@ -489,7 +489,7 @@ static void iwl_trans_pcie_tx_free(struct iwl_trans *trans)
|
||||||
kfree(priv->txq);
|
kfree(priv->txq);
|
||||||
priv->txq = NULL;
|
priv->txq = NULL;
|
||||||
|
|
||||||
iwlagn_free_dma_ptr(trans, &priv->kw);
|
iwlagn_free_dma_ptr(trans, &trans_pcie->kw);
|
||||||
|
|
||||||
iwlagn_free_dma_ptr(trans, &trans_pcie->scd_bc_tbls);
|
iwlagn_free_dma_ptr(trans, &trans_pcie->scd_bc_tbls);
|
||||||
}
|
}
|
||||||
|
@ -527,7 +527,7 @@ static int iwl_trans_tx_alloc(struct iwl_trans *trans)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Alloc keep-warm buffer */
|
/* Alloc keep-warm buffer */
|
||||||
ret = iwlagn_alloc_dma_ptr(trans, &priv->kw, IWL_KW_SIZE);
|
ret = iwlagn_alloc_dma_ptr(trans, &trans_pcie->kw, IWL_KW_SIZE);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
IWL_ERR(trans, "Keep Warm allocation failed\n");
|
IWL_ERR(trans, "Keep Warm allocation failed\n");
|
||||||
goto error;
|
goto error;
|
||||||
|
@ -567,6 +567,8 @@ static int iwl_tx_init(struct iwl_trans *trans)
|
||||||
unsigned long flags;
|
unsigned long flags;
|
||||||
bool alloc = false;
|
bool alloc = false;
|
||||||
struct iwl_priv *priv = priv(trans);
|
struct iwl_priv *priv = priv(trans);
|
||||||
|
struct iwl_trans_pcie *trans_pcie =
|
||||||
|
IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||||
|
|
||||||
if (!priv->txq) {
|
if (!priv->txq) {
|
||||||
ret = iwl_trans_tx_alloc(trans);
|
ret = iwl_trans_tx_alloc(trans);
|
||||||
|
@ -581,7 +583,7 @@ static int iwl_tx_init(struct iwl_trans *trans)
|
||||||
iwl_write_prph(priv, SCD_TXFACT, 0);
|
iwl_write_prph(priv, SCD_TXFACT, 0);
|
||||||
|
|
||||||
/* Tell NIC where to find the "keep warm" buffer */
|
/* Tell NIC where to find the "keep warm" buffer */
|
||||||
iwl_write_direct32(priv, FH_KW_MEM_ADDR_REG, priv->kw.dma >> 4);
|
iwl_write_direct32(priv, FH_KW_MEM_ADDR_REG, trans_pcie->kw.dma >> 4);
|
||||||
|
|
||||||
spin_unlock_irqrestore(&trans->shrd->lock, flags);
|
spin_unlock_irqrestore(&trans->shrd->lock, flags);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue