iwlwifi: trans: add a new op for getting DMA data
Op mode will need this data in order to feed FW with it. Signed-off-by: Sara Sharon <sara.sharon@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
1b4bbe8bf2
commit
92536c9615
|
@ -439,6 +439,20 @@ struct iwl_trans_txq_scd_cfg {
|
|||
int frame_limit;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iwl_trans_rxq_dma_data - RX queue DMA data
|
||||
* @fr_bd_cb: DMA address of free BD cyclic buffer
|
||||
* @fr_bd_wid: Initial write index of the free BD cyclic buffer
|
||||
* @urbd_stts_wrptr: DMA address of urbd_stts_wrptr
|
||||
* @ur_bd_cb: DMA address of used BD cyclic buffer
|
||||
*/
|
||||
struct iwl_trans_rxq_dma_data {
|
||||
u64 fr_bd_cb;
|
||||
u32 fr_bd_wid;
|
||||
u64 urbd_stts_wrptr;
|
||||
u64 ur_bd_cb;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct iwl_trans_ops - transport specific operations
|
||||
*
|
||||
|
@ -559,6 +573,8 @@ struct iwl_trans_ops {
|
|||
int cmd_id, int size,
|
||||
unsigned int queue_wdg_timeout);
|
||||
void (*txq_free)(struct iwl_trans *trans, int queue);
|
||||
int (*rxq_dma_data)(struct iwl_trans *trans, int queue,
|
||||
struct iwl_trans_rxq_dma_data *data);
|
||||
|
||||
void (*txq_set_shared_mode)(struct iwl_trans *trans, u32 txq_id,
|
||||
bool shared);
|
||||
|
@ -947,6 +963,16 @@ iwl_trans_txq_enable_cfg(struct iwl_trans *trans, int queue, u16 ssn,
|
|||
cfg, queue_wdg_timeout);
|
||||
}
|
||||
|
||||
static inline int
|
||||
iwl_trans_get_rxq_dma_data(struct iwl_trans *trans, int queue,
|
||||
struct iwl_trans_rxq_dma_data *data)
|
||||
{
|
||||
if (WARN_ON_ONCE(!trans->ops->rxq_dma_data))
|
||||
return -ENOTSUPP;
|
||||
|
||||
return trans->ops->rxq_dma_data(trans, queue, data);
|
||||
}
|
||||
|
||||
static inline void
|
||||
iwl_trans_txq_free(struct iwl_trans *trans, int queue)
|
||||
{
|
||||
|
|
|
@ -2265,6 +2265,22 @@ void iwl_trans_pcie_log_scd_error(struct iwl_trans *trans, struct iwl_txq *txq)
|
|||
iwl_read_direct32(trans, FH_TX_TRB_REG(fifo)));
|
||||
}
|
||||
|
||||
static int iwl_trans_pcie_rxq_dma_data(struct iwl_trans *trans, int queue,
|
||||
struct iwl_trans_rxq_dma_data *data)
|
||||
{
|
||||
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||
|
||||
if (queue >= trans->num_rx_queues || !trans_pcie->rxq)
|
||||
return -EINVAL;
|
||||
|
||||
data->fr_bd_cb = trans_pcie->rxq[queue].bd_dma;
|
||||
data->urbd_stts_wrptr = trans_pcie->rxq[queue].rb_stts_dma;
|
||||
data->ur_bd_cb = trans_pcie->rxq[queue].used_bd_dma;
|
||||
data->fr_bd_wid = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int iwl_trans_pcie_wait_txq_empty(struct iwl_trans *trans, int txq_idx)
|
||||
{
|
||||
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||
|
@ -3212,6 +3228,7 @@ static const struct iwl_trans_ops trans_ops_pcie_gen2 = {
|
|||
.txq_alloc = iwl_trans_pcie_dyn_txq_alloc,
|
||||
.txq_free = iwl_trans_pcie_dyn_txq_free,
|
||||
.wait_txq_empty = iwl_trans_pcie_wait_txq_empty,
|
||||
.rxq_dma_data = iwl_trans_pcie_rxq_dma_data,
|
||||
};
|
||||
|
||||
struct iwl_trans *iwl_trans_pcie_alloc(struct pci_dev *pdev,
|
||||
|
|
Loading…
Reference in New Issue