229
229
* Set tx retry limits on DCU
231
static void ath5k_hw_set_tx_retry_limits(struct ath5k_hw *ah,
231
void ath5k_hw_set_tx_retry_limits(struct ath5k_hw *ah,
234
u32 retry_lg, retry_sh;
237
* Calculate and set retry limits
239
if (ah->ah_software_retry) {
240
/* XXX Need to test this */
241
retry_lg = ah->ah_limit_tx_retries;
242
retry_sh = retry_lg = retry_lg > AR5K_DCU_RETRY_LMT_SH_RETRY ?
243
AR5K_DCU_RETRY_LMT_SH_RETRY : retry_lg;
245
retry_lg = AR5K_INIT_LG_RETRY;
246
retry_sh = AR5K_INIT_SH_RETRY;
249
234
/* Single data queue on AR5210 */
250
235
if (ah->ah_version == AR5K_AR5210) {
251
236
struct ath5k_txq_info *tq = &ah->ah_txq[queue];
256
241
ath5k_hw_reg_write(ah,
257
242
(tq->tqi_cw_min << AR5K_NODCU_RETRY_LMT_CW_MIN_S)
258
| AR5K_REG_SM(AR5K_INIT_SLG_RETRY,
259
AR5K_NODCU_RETRY_LMT_SLG_RETRY)
260
| AR5K_REG_SM(AR5K_INIT_SSH_RETRY,
261
AR5K_NODCU_RETRY_LMT_SSH_RETRY)
262
| AR5K_REG_SM(retry_lg, AR5K_NODCU_RETRY_LMT_LG_RETRY)
263
| AR5K_REG_SM(retry_sh, AR5K_NODCU_RETRY_LMT_SH_RETRY),
243
| AR5K_REG_SM(ah->ah_retry_long,
244
AR5K_NODCU_RETRY_LMT_SLG_RETRY)
245
| AR5K_REG_SM(ah->ah_retry_short,
246
AR5K_NODCU_RETRY_LMT_SSH_RETRY)
247
| AR5K_REG_SM(ah->ah_retry_long,
248
AR5K_NODCU_RETRY_LMT_LG_RETRY)
249
| AR5K_REG_SM(ah->ah_retry_short,
250
AR5K_NODCU_RETRY_LMT_SH_RETRY),
264
251
AR5K_NODCU_RETRY_LMT);
265
252
/* DCU on AR5211+ */
267
254
ath5k_hw_reg_write(ah,
268
AR5K_REG_SM(AR5K_INIT_SLG_RETRY,
269
AR5K_DCU_RETRY_LMT_SLG_RETRY) |
270
AR5K_REG_SM(AR5K_INIT_SSH_RETRY,
271
AR5K_DCU_RETRY_LMT_SSH_RETRY) |
272
AR5K_REG_SM(retry_lg, AR5K_DCU_RETRY_LMT_LG_RETRY) |
273
AR5K_REG_SM(retry_sh, AR5K_DCU_RETRY_LMT_SH_RETRY),
255
AR5K_REG_SM(ah->ah_retry_long,
256
AR5K_DCU_RETRY_LMT_RTS)
257
| AR5K_REG_SM(ah->ah_retry_long,
258
AR5K_DCU_RETRY_LMT_STA_RTS)
259
| AR5K_REG_SM(max(ah->ah_retry_long, ah->ah_retry_short),
260
AR5K_DCU_RETRY_LMT_STA_DATA),
274
261
AR5K_QUEUE_DFS_RETRY_LIMIT(queue));
535
521
sifs = ath5k_hw_get_default_sifs(ah);
536
sifs_clock = ath5k_hw_htoclock(ah, sifs);
522
sifs_clock = ath5k_hw_htoclock(ah, sifs - 2);
539
525
* Txtime of ack at lowest rate + SIFS + DIFS
565
551
rate = &sc->sbands[IEEE80211_BAND_2GHZ].bitrates[0];
567
ack_tx_time = ath5k_hw_get_frame_duration(ah, 10, rate);
553
ack_tx_time = ath5k_hw_get_frame_duration(ah, 10, rate, false);
569
555
/* ack_tx_time includes an SIFS already */
570
556
eifs = ack_tx_time + sifs + 2 * slot_time;