mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-07-06 14:31:46 +00:00
iwlwifi: trans: refactor txq_enable arguments
Instead of having all arguments passed to the function, add a struct to hold them and only pass some directly. This will make future work in this area cleaner. Signed-off-by: Johannes Berg <johannes.berg@intel.com> Signed-off-by: Emmanuel Grumbach <emmanuel.grumbach@intel.com>
This commit is contained in:
parent
680073b78a
commit
fea7795f1c
3 changed files with 26 additions and 12 deletions
|
@ -401,6 +401,13 @@ struct iwl_trans_dump_data {
|
||||||
|
|
||||||
struct iwl_trans;
|
struct iwl_trans;
|
||||||
|
|
||||||
|
struct iwl_trans_txq_scd_cfg {
|
||||||
|
u8 fifo;
|
||||||
|
s8 sta_id;
|
||||||
|
u8 tid;
|
||||||
|
int frame_limit;
|
||||||
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct iwl_trans_ops - transport specific operations
|
* struct iwl_trans_ops - transport specific operations
|
||||||
*
|
*
|
||||||
|
@ -492,8 +499,8 @@ struct iwl_trans_ops {
|
||||||
void (*reclaim)(struct iwl_trans *trans, int queue, int ssn,
|
void (*reclaim)(struct iwl_trans *trans, int queue, int ssn,
|
||||||
struct sk_buff_head *skbs);
|
struct sk_buff_head *skbs);
|
||||||
|
|
||||||
void (*txq_enable)(struct iwl_trans *trans, int queue, int fifo,
|
void (*txq_enable)(struct iwl_trans *trans, int queue, u16 ssn,
|
||||||
int sta_id, int tid, int frame_limit, u16 ssn);
|
const struct iwl_trans_txq_scd_cfg *cfg);
|
||||||
void (*txq_disable)(struct iwl_trans *trans, int queue);
|
void (*txq_disable)(struct iwl_trans *trans, int queue);
|
||||||
|
|
||||||
int (*dbgfs_register)(struct iwl_trans *trans, struct dentry* dir);
|
int (*dbgfs_register)(struct iwl_trans *trans, struct dentry* dir);
|
||||||
|
@ -775,13 +782,19 @@ static inline void iwl_trans_txq_enable(struct iwl_trans *trans, int queue,
|
||||||
int fifo, int sta_id, int tid,
|
int fifo, int sta_id, int tid,
|
||||||
int frame_limit, u16 ssn)
|
int frame_limit, u16 ssn)
|
||||||
{
|
{
|
||||||
|
struct iwl_trans_txq_scd_cfg cfg = {
|
||||||
|
.fifo = fifo,
|
||||||
|
.sta_id = sta_id,
|
||||||
|
.tid = tid,
|
||||||
|
.frame_limit = frame_limit,
|
||||||
|
};
|
||||||
|
|
||||||
might_sleep();
|
might_sleep();
|
||||||
|
|
||||||
if (unlikely((trans->state != IWL_TRANS_FW_ALIVE)))
|
if (unlikely((trans->state != IWL_TRANS_FW_ALIVE)))
|
||||||
IWL_ERR(trans, "%s bad state = %d\n", __func__, trans->state);
|
IWL_ERR(trans, "%s bad state = %d\n", __func__, trans->state);
|
||||||
|
|
||||||
trans->ops->txq_enable(trans, queue, fifo, sta_id, tid,
|
trans->ops->txq_enable(trans, queue, ssn, &cfg);
|
||||||
frame_limit, ssn);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void iwl_trans_ac_txq_enable(struct iwl_trans *trans, int queue,
|
static inline void iwl_trans_ac_txq_enable(struct iwl_trans *trans, int queue,
|
||||||
|
|
|
@ -364,8 +364,8 @@ int iwl_pcie_tx_init(struct iwl_trans *trans);
|
||||||
void iwl_pcie_tx_start(struct iwl_trans *trans, u32 scd_base_addr);
|
void iwl_pcie_tx_start(struct iwl_trans *trans, u32 scd_base_addr);
|
||||||
int iwl_pcie_tx_stop(struct iwl_trans *trans);
|
int iwl_pcie_tx_stop(struct iwl_trans *trans);
|
||||||
void iwl_pcie_tx_free(struct iwl_trans *trans);
|
void iwl_pcie_tx_free(struct iwl_trans *trans);
|
||||||
void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, int fifo,
|
void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int queue, u16 ssn,
|
||||||
int sta_id, int tid, int frame_limit, u16 ssn);
|
const struct iwl_trans_txq_scd_cfg *cfg);
|
||||||
void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int queue);
|
void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int queue);
|
||||||
int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
|
int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
|
||||||
struct iwl_device_cmd *dev_cmd, int txq_id);
|
struct iwl_device_cmd *dev_cmd, int txq_id);
|
||||||
|
|
|
@ -1066,10 +1066,11 @@ static int iwl_pcie_txq_set_ratid_map(struct iwl_trans *trans, u16 ra_tid,
|
||||||
* combined with Traffic ID (QOS priority), in format used by Tx Scheduler */
|
* combined with Traffic ID (QOS priority), in format used by Tx Scheduler */
|
||||||
#define BUILD_RAxTID(sta_id, tid) (((sta_id) << 4) + (tid))
|
#define BUILD_RAxTID(sta_id, tid) (((sta_id) << 4) + (tid))
|
||||||
|
|
||||||
void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, int fifo,
|
void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, u16 ssn,
|
||||||
int sta_id, int tid, int frame_limit, u16 ssn)
|
const struct iwl_trans_txq_scd_cfg *cfg)
|
||||||
{
|
{
|
||||||
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
struct iwl_trans_pcie *trans_pcie = IWL_TRANS_GET_PCIE_TRANS(trans);
|
||||||
|
u8 frame_limit = cfg->frame_limit;
|
||||||
|
|
||||||
if (test_and_set_bit(txq_id, trans_pcie->queue_used))
|
if (test_and_set_bit(txq_id, trans_pcie->queue_used))
|
||||||
WARN_ONCE(1, "queue %d already used - expect issues", txq_id);
|
WARN_ONCE(1, "queue %d already used - expect issues", txq_id);
|
||||||
|
@ -1082,8 +1083,8 @@ void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, int fifo,
|
||||||
iwl_scd_txq_set_chain(trans, txq_id);
|
iwl_scd_txq_set_chain(trans, txq_id);
|
||||||
|
|
||||||
/* If this queue is mapped to a certain station: it is an AGG queue */
|
/* If this queue is mapped to a certain station: it is an AGG queue */
|
||||||
if (sta_id >= 0) {
|
if (cfg->sta_id >= 0) {
|
||||||
u16 ra_tid = BUILD_RAxTID(sta_id, tid);
|
u16 ra_tid = BUILD_RAxTID(cfg->sta_id, cfg->tid);
|
||||||
|
|
||||||
/* Map receiver-address / traffic-ID to this queue */
|
/* Map receiver-address / traffic-ID to this queue */
|
||||||
iwl_pcie_txq_set_ratid_map(trans, ra_tid, txq_id);
|
iwl_pcie_txq_set_ratid_map(trans, ra_tid, txq_id);
|
||||||
|
@ -1124,12 +1125,12 @@ void iwl_trans_pcie_txq_enable(struct iwl_trans *trans, int txq_id, int fifo,
|
||||||
/* Set up Status area in SRAM, map to Tx DMA/FIFO, activate the queue */
|
/* Set up Status area in SRAM, map to Tx DMA/FIFO, activate the queue */
|
||||||
iwl_write_prph(trans, SCD_QUEUE_STATUS_BITS(txq_id),
|
iwl_write_prph(trans, SCD_QUEUE_STATUS_BITS(txq_id),
|
||||||
(1 << SCD_QUEUE_STTS_REG_POS_ACTIVE) |
|
(1 << SCD_QUEUE_STTS_REG_POS_ACTIVE) |
|
||||||
(fifo << SCD_QUEUE_STTS_REG_POS_TXF) |
|
(cfg->fifo << SCD_QUEUE_STTS_REG_POS_TXF) |
|
||||||
(1 << SCD_QUEUE_STTS_REG_POS_WSL) |
|
(1 << SCD_QUEUE_STTS_REG_POS_WSL) |
|
||||||
SCD_QUEUE_STTS_REG_MSK);
|
SCD_QUEUE_STTS_REG_MSK);
|
||||||
trans_pcie->txq[txq_id].active = true;
|
trans_pcie->txq[txq_id].active = true;
|
||||||
IWL_DEBUG_TX_QUEUES(trans, "Activate queue %d on FIFO %d WrPtr: %d\n",
|
IWL_DEBUG_TX_QUEUES(trans, "Activate queue %d on FIFO %d WrPtr: %d\n",
|
||||||
txq_id, fifo, ssn & 0xff);
|
txq_id, cfg->fifo, ssn & 0xff);
|
||||||
}
|
}
|
||||||
|
|
||||||
void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int txq_id)
|
void iwl_trans_pcie_txq_disable(struct iwl_trans *trans, int txq_id)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue