~ubuntu-branches/ubuntu/precise/linux-ti-omap4/precise

« back to all changes in this revision

Viewing changes to drivers/net/wireless/ath/ath5k/qcu.c

  • Committer: Bazaar Package Importer
  • Author(s): Paolo Pisati
  • Date: 2011-06-29 15:23:51 UTC
  • mfrom: (26.1.1 natty-proposed)
  • Revision ID: james.westby@ubuntu.com-20110629152351-xs96tm303d95rpbk
Tags: 3.0.0-1200.2
* Rebased against 3.0.0-6.7
* BSP from TI based on 3.0.0

Show diffs side-by-side

added added

removed removed

Lines of Context:
228
228
/*
229
229
 * Set tx retry limits on DCU
230
230
 */
231
 
static void ath5k_hw_set_tx_retry_limits(struct ath5k_hw *ah,
232
 
                                        unsigned int queue)
 
231
void ath5k_hw_set_tx_retry_limits(struct ath5k_hw *ah,
 
232
                                  unsigned int queue)
233
233
{
234
 
        u32 retry_lg, retry_sh;
235
 
 
236
 
        /*
237
 
         * Calculate and set retry limits
238
 
         */
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;
244
 
        } else {
245
 
                retry_lg = AR5K_INIT_LG_RETRY;
246
 
                retry_sh = AR5K_INIT_SH_RETRY;
247
 
        }
248
 
 
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];
255
240
 
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+ */
266
253
        } else {
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));
275
262
        }
276
 
        return;
277
263
}
278
264
 
279
265
/**
533
519
                return -EINVAL;
534
520
 
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);
537
523
 
538
524
        /* EIFS
539
525
         * Txtime of ack at lowest rate + SIFS + DIFS
564
550
        else
565
551
                rate = &sc->sbands[IEEE80211_BAND_2GHZ].bitrates[0];
566
552
 
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);
568
554
 
569
555
        /* ack_tx_time includes an SIFS already */
570
556
        eifs = ack_tx_time + sifs + 2 * slot_time;