|
@@ -228,24 +228,9 @@ int ath5k_hw_setup_tx_queue(struct ath5k_hw *ah, enum ath5k_tx_queue queue_type,
|
|
/*
|
|
/*
|
|
* Set tx retry limits on DCU
|
|
* Set tx retry limits on DCU
|
|
*/
|
|
*/
|
|
-static void ath5k_hw_set_tx_retry_limits(struct ath5k_hw *ah,
|
|
|
|
- unsigned int queue)
|
|
|
|
|
|
+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 */
|
|
/* Single data queue on AR5210 */
|
|
if (ah->ah_version == AR5K_AR5210) {
|
|
if (ah->ah_version == AR5K_AR5210) {
|
|
struct ath5k_txq_info *tq = &ah->ah_txq[queue];
|
|
struct ath5k_txq_info *tq = &ah->ah_txq[queue];
|
|
@@ -255,25 +240,26 @@ static void ath5k_hw_set_tx_retry_limits(struct ath5k_hw *ah,
|
|
|
|
|
|
ath5k_hw_reg_write(ah,
|
|
ath5k_hw_reg_write(ah,
|
|
(tq->tqi_cw_min << AR5K_NODCU_RETRY_LMT_CW_MIN_S)
|
|
(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_REG_SM(ah->ah_retry_long,
|
|
|
|
+ AR5K_NODCU_RETRY_LMT_SLG_RETRY)
|
|
|
|
+ | AR5K_REG_SM(ah->ah_retry_short,
|
|
|
|
+ AR5K_NODCU_RETRY_LMT_SSH_RETRY)
|
|
|
|
+ | AR5K_REG_SM(ah->ah_retry_long,
|
|
|
|
+ AR5K_NODCU_RETRY_LMT_LG_RETRY)
|
|
|
|
+ | AR5K_REG_SM(ah->ah_retry_short,
|
|
|
|
+ AR5K_NODCU_RETRY_LMT_SH_RETRY),
|
|
AR5K_NODCU_RETRY_LMT);
|
|
AR5K_NODCU_RETRY_LMT);
|
|
/* DCU on AR5211+ */
|
|
/* DCU on AR5211+ */
|
|
} else {
|
|
} else {
|
|
ath5k_hw_reg_write(ah,
|
|
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_REG_SM(ah->ah_retry_long,
|
|
|
|
+ AR5K_DCU_RETRY_LMT_RTS)
|
|
|
|
+ | AR5K_REG_SM(ah->ah_retry_long,
|
|
|
|
+ AR5K_DCU_RETRY_LMT_STA_RTS)
|
|
|
|
+ | AR5K_REG_SM(max(ah->ah_retry_long, ah->ah_retry_short),
|
|
|
|
+ AR5K_DCU_RETRY_LMT_STA_DATA),
|
|
AR5K_QUEUE_DFS_RETRY_LIMIT(queue));
|
|
AR5K_QUEUE_DFS_RETRY_LIMIT(queue));
|
|
}
|
|
}
|
|
- return;
|
|
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
/**
|