forked from luck/tmp_suning_uos_patched
rt2x00: Enable fallback rates for rt61pci and rt73usb
Explicitly enable the usage of fallback rates for the transmission of frames with rt61pci and rt73usb hardware. Note that for txdone reporting, only rt61pci is capable of reporting the fallback rates, for USB it is not possible to determine the number of retries. However the device will use the fallback rates, so it might still help in the performance. Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com> Acked-by: Gertjan van Wingerde <gwingerde@gmail.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
3d2bc1036a
commit
e1b4d7b735
@ -931,6 +931,9 @@ static void rt61pci_config_retry_limit(struct rt2x00_dev *rt2x00dev,
|
||||
u32 reg;
|
||||
|
||||
rt2x00pci_register_read(rt2x00dev, TXRX_CSR4, ®);
|
||||
rt2x00_set_field32(®, TXRX_CSR4_OFDM_TX_RATE_DOWN, 1);
|
||||
rt2x00_set_field32(®, TXRX_CSR4_OFDM_TX_RATE_STEP, 0);
|
||||
rt2x00_set_field32(®, TXRX_CSR4_OFDM_TX_FALLBACK_CCK, 0);
|
||||
rt2x00_set_field32(®, TXRX_CSR4_LONG_RETRY_LIMIT,
|
||||
libconf->conf->long_frame_max_tx_count);
|
||||
rt2x00_set_field32(®, TXRX_CSR4_SHORT_RETRY_LIMIT,
|
||||
@ -2130,6 +2133,13 @@ static void rt61pci_txdone(struct rt2x00_dev *rt2x00dev)
|
||||
}
|
||||
txdesc.retry = rt2x00_get_field32(reg, STA_CSR4_RETRY_COUNT);
|
||||
|
||||
/*
|
||||
* the frame was retried at least once
|
||||
* -> hw used fallback rates
|
||||
*/
|
||||
if (txdesc.retry)
|
||||
__set_bit(TXDONE_FALLBACK, &txdesc.flags);
|
||||
|
||||
rt2x00pci_txdone(entry, &txdesc);
|
||||
}
|
||||
}
|
||||
@ -2586,6 +2596,18 @@ static int rt61pci_probe_hw_mode(struct rt2x00_dev *rt2x00dev)
|
||||
rt2x00_eeprom_addr(rt2x00dev,
|
||||
EEPROM_MAC_ADDR_0));
|
||||
|
||||
/*
|
||||
* As rt61 has a global fallback table we cannot specify
|
||||
* more then one tx rate per frame but since the hw will
|
||||
* try several rates (based on the fallback table) we should
|
||||
* still initialize max_rates to the maximum number of rates
|
||||
* we are going to try. Otherwise mac80211 will truncate our
|
||||
* reported tx rates and the rc algortihm will end up with
|
||||
* incorrect data.
|
||||
*/
|
||||
rt2x00dev->hw->max_rates = 7;
|
||||
rt2x00dev->hw->max_rate_tries = 1;
|
||||
|
||||
/*
|
||||
* Initialize hw_mode information.
|
||||
*/
|
||||
|
@ -816,6 +816,9 @@ static void rt73usb_config_retry_limit(struct rt2x00_dev *rt2x00dev,
|
||||
u32 reg;
|
||||
|
||||
rt2x00usb_register_read(rt2x00dev, TXRX_CSR4, ®);
|
||||
rt2x00_set_field32(®, TXRX_CSR4_OFDM_TX_RATE_DOWN, 1);
|
||||
rt2x00_set_field32(®, TXRX_CSR4_OFDM_TX_RATE_STEP, 0);
|
||||
rt2x00_set_field32(®, TXRX_CSR4_OFDM_TX_FALLBACK_CCK, 0);
|
||||
rt2x00_set_field32(®, TXRX_CSR4_LONG_RETRY_LIMIT,
|
||||
libconf->conf->long_frame_max_tx_count);
|
||||
rt2x00_set_field32(®, TXRX_CSR4_SHORT_RETRY_LIMIT,
|
||||
|
Loading…
Reference in New Issue
Block a user