mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-05 02:19:51 +00:00
ath5k: Move tx retries setting outside reset_tx_queue
* Move setting of tx retry limits on a separate function (we 'll clean up this AR5210 mess later) Signed-off-by: Nick Kossifidis <mickflemm@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
b405086ba4
commit
25ddfa1957
1 changed files with 56 additions and 36 deletions
|
@ -225,12 +225,62 @@ int ath5k_hw_setup_tx_queue(struct ath5k_hw *ah, enum ath5k_tx_queue queue_type,
|
|||
* Single QCU/DCU initialization *
|
||||
\*******************************/
|
||||
|
||||
/*
|
||||
* Set tx retry limits on DCU
|
||||
*/
|
||||
static void ath5k_hw_set_tx_retry_limits(struct ath5k_hw *ah,
|
||||
unsigned int queue)
|
||||
{
|
||||
u32 retry_lg, retry_sh;
|
||||
|
||||
/*
|
||||
* Calculate and set retry limits
|
||||
*/
|
||||
if (ah->ah_software_retry) {
|
||||
/* XXX Need to test this */
|
||||
retry_lg = ah->ah_limit_tx_retries;
|
||||
retry_sh = retry_lg = retry_lg > AR5K_DCU_RETRY_LMT_SH_RETRY ?
|
||||
AR5K_DCU_RETRY_LMT_SH_RETRY : retry_lg;
|
||||
} else {
|
||||
retry_lg = AR5K_INIT_LG_RETRY;
|
||||
retry_sh = AR5K_INIT_SH_RETRY;
|
||||
}
|
||||
|
||||
/* Single data queue on AR5210 */
|
||||
if (ah->ah_version == AR5K_AR5210) {
|
||||
struct ath5k_txq_info *tq = &ah->ah_txq[queue];
|
||||
|
||||
if (queue > 0)
|
||||
return;
|
||||
|
||||
ath5k_hw_reg_write(ah,
|
||||
(tq->tqi_cw_min << AR5K_NODCU_RETRY_LMT_CW_MIN_S)
|
||||
| AR5K_REG_SM(AR5K_INIT_SLG_RETRY,
|
||||
AR5K_NODCU_RETRY_LMT_SLG_RETRY)
|
||||
| AR5K_REG_SM(AR5K_INIT_SSH_RETRY,
|
||||
AR5K_NODCU_RETRY_LMT_SSH_RETRY)
|
||||
| AR5K_REG_SM(retry_lg, AR5K_NODCU_RETRY_LMT_LG_RETRY)
|
||||
| AR5K_REG_SM(retry_sh, AR5K_NODCU_RETRY_LMT_SH_RETRY),
|
||||
AR5K_NODCU_RETRY_LMT);
|
||||
/* DCU on AR5211+ */
|
||||
} else {
|
||||
ath5k_hw_reg_write(ah,
|
||||
AR5K_REG_SM(AR5K_INIT_SLG_RETRY,
|
||||
AR5K_DCU_RETRY_LMT_SLG_RETRY) |
|
||||
AR5K_REG_SM(AR5K_INIT_SSH_RETRY,
|
||||
AR5K_DCU_RETRY_LMT_SSH_RETRY) |
|
||||
AR5K_REG_SM(retry_lg, AR5K_DCU_RETRY_LMT_LG_RETRY) |
|
||||
AR5K_REG_SM(retry_sh, AR5K_DCU_RETRY_LMT_SH_RETRY),
|
||||
AR5K_QUEUE_DFS_RETRY_LIMIT(queue));
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
/*
|
||||
* Set DFS properties for a transmit queue on DCU
|
||||
*/
|
||||
int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah, unsigned int queue)
|
||||
{
|
||||
u32 retry_lg, retry_sh;
|
||||
struct ath5k_txq_info *tq = &ah->ah_txq[queue];
|
||||
|
||||
AR5K_ASSERT_ENTRY(queue, ah->ah_capabilities.cap_queues.q_tx_num);
|
||||
|
@ -271,42 +321,7 @@ int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah, unsigned int queue)
|
|||
ath5k_hw_reg_write(ah, (ah->ah_bwmode == AR5K_BWMODE_40MHZ) ?
|
||||
AR5K_INIT_PROTO_TIME_CNTRL_TURBO :
|
||||
AR5K_INIT_PROTO_TIME_CNTRL, AR5K_IFS1);
|
||||
}
|
||||
|
||||
/*
|
||||
* Calculate and set retry limits
|
||||
*/
|
||||
if (ah->ah_software_retry) {
|
||||
/* XXX Need to test this */
|
||||
retry_lg = ah->ah_limit_tx_retries;
|
||||
retry_sh = retry_lg = retry_lg > AR5K_DCU_RETRY_LMT_SH_RETRY ?
|
||||
AR5K_DCU_RETRY_LMT_SH_RETRY : retry_lg;
|
||||
} else {
|
||||
retry_lg = AR5K_INIT_LG_RETRY;
|
||||
retry_sh = AR5K_INIT_SH_RETRY;
|
||||
}
|
||||
|
||||
/*No QCU/DCU [5210]*/
|
||||
if (ah->ah_version == AR5K_AR5210) {
|
||||
ath5k_hw_reg_write(ah,
|
||||
(tq->tqi_cw_min << AR5K_NODCU_RETRY_LMT_CW_MIN_S)
|
||||
| AR5K_REG_SM(AR5K_INIT_SLG_RETRY,
|
||||
AR5K_NODCU_RETRY_LMT_SLG_RETRY)
|
||||
| AR5K_REG_SM(AR5K_INIT_SSH_RETRY,
|
||||
AR5K_NODCU_RETRY_LMT_SSH_RETRY)
|
||||
| AR5K_REG_SM(retry_lg, AR5K_NODCU_RETRY_LMT_LG_RETRY)
|
||||
| AR5K_REG_SM(retry_sh, AR5K_NODCU_RETRY_LMT_SH_RETRY),
|
||||
AR5K_NODCU_RETRY_LMT);
|
||||
} else {
|
||||
/*QCU/DCU [5211+]*/
|
||||
ath5k_hw_reg_write(ah,
|
||||
AR5K_REG_SM(AR5K_INIT_SLG_RETRY,
|
||||
AR5K_DCU_RETRY_LMT_SLG_RETRY) |
|
||||
AR5K_REG_SM(AR5K_INIT_SSH_RETRY,
|
||||
AR5K_DCU_RETRY_LMT_SSH_RETRY) |
|
||||
AR5K_REG_SM(retry_lg, AR5K_DCU_RETRY_LMT_LG_RETRY) |
|
||||
AR5K_REG_SM(retry_sh, AR5K_DCU_RETRY_LMT_SH_RETRY),
|
||||
AR5K_QUEUE_DFS_RETRY_LIMIT(queue));
|
||||
|
||||
/*===Rest is also for QCU/DCU only [5211+]===*/
|
||||
|
||||
|
@ -320,6 +335,11 @@ int ath5k_hw_reset_tx_queue(struct ath5k_hw *ah, unsigned int queue)
|
|||
AR5K_REG_SM(tq->tqi_aifs, AR5K_DCU_LCL_IFS_AIFS),
|
||||
AR5K_QUEUE_DFS_LOCAL_IFS(queue));
|
||||
|
||||
/*
|
||||
* Set tx retry limits for this queue
|
||||
*/
|
||||
ath5k_hw_set_tx_retry_limits(ah, queue);
|
||||
|
||||
/*
|
||||
* Set misc registers
|
||||
*/
|
||||
|
|
Loading…
Reference in a new issue