[PATCH 1/2] rt2x00: Hardcode TX ack timeout and consume time
Ike Panhc
ike.pan at canonical.com
Tue Oct 6 13:23:49 UTC 2009
BugLink: https://bugs.launchpad.net/bugs/444377
Impact:
With the original TX-Ack-Timeout register settings, the performance will hold
at <3Mbps once we have some very weak signal (which signal level < -80dbm) in
and out. If we override the register with the value in legacy driver, it will
not.
Fix:
Set the Tx-Ack-Timeout register to the same value in legacy driver.
Test:
Test result shows the performance better when signal level is about -80dbm.
This patch is based on mainline kernel commit 4789666e13fb0b2d45feb1b4a5119a1b997ec84c
and its original author is Ivo van Doorn <ivdoorn at gmail.com>
Signed-off-by: Ike Panhc <ike.pan at canonical.com>
---
.../drivers/net/wireless/rt2x00/rt2400pci.c | 6 ++----
.../drivers/net/wireless/rt2x00/rt2500pci.c | 6 ++----
.../drivers/net/wireless/rt2x00/rt2500usb.c | 4 ----
.../drivers/net/wireless/rt2x00/rt2x00.h | 3 ---
.../drivers/net/wireless/rt2x00/rt2x00config.c | 16 ----------------
.../drivers/net/wireless/rt2x00/rt61pci.c | 2 +-
.../drivers/net/wireless/rt2x00/rt73usb.c | 2 +-
7 files changed, 6 insertions(+), 33 deletions(-)
diff --git a/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2400pci.c b/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2400pci.c
index 4c0538d..2d49e68 100644
--- a/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2400pci.c
+++ b/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2400pci.c
@@ -367,10 +367,8 @@ static void rt2400pci_config_erp(struct rt2x00_dev *rt2x00dev,
preamble_mask = erp->short_preamble << 3;
rt2x00pci_register_read(rt2x00dev, TXCSR1, ®);
- rt2x00_set_field32(®, TXCSR1_ACK_TIMEOUT,
- erp->ack_timeout);
- rt2x00_set_field32(®, TXCSR1_ACK_CONSUME_TIME,
- erp->ack_consume_time);
+ rt2x00_set_field32(®, TXCSR1_ACK_TIMEOUT, 0x1ff);
+ rt2x00_set_field32(®, TXCSR1_ACK_CONSUME_TIME, 0x13a);
rt2x00pci_register_write(rt2x00dev, TXCSR1, reg);
rt2x00pci_register_read(rt2x00dev, ARCSR2, ®);
diff --git a/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2500pci.c b/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2500pci.c
index aa6dfb8..0dd6387 100644
--- a/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2500pci.c
+++ b/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2500pci.c
@@ -373,10 +373,8 @@ static void rt2500pci_config_erp(struct rt2x00_dev *rt2x00dev,
preamble_mask = erp->short_preamble << 3;
rt2x00pci_register_read(rt2x00dev, TXCSR1, ®);
- rt2x00_set_field32(®, TXCSR1_ACK_TIMEOUT,
- erp->ack_timeout);
- rt2x00_set_field32(®, TXCSR1_ACK_CONSUME_TIME,
- erp->ack_consume_time);
+ rt2x00_set_field32(®, TXCSR1_ACK_TIMEOUT, 0x162);
+ rt2x00_set_field32(®, TXCSR1_ACK_CONSUME_TIME, 0xa2);
rt2x00pci_register_write(rt2x00dev, TXCSR1, reg);
rt2x00pci_register_read(rt2x00dev, ARCSR2, ®);
diff --git a/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2500usb.c b/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2500usb.c
index 2547467..8c23b21 100644
--- a/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2500usb.c
+++ b/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2500usb.c
@@ -415,10 +415,6 @@ static void rt2500usb_config_erp(struct rt2x00_dev *rt2x00dev,
{
u16 reg;
- rt2500usb_register_read(rt2x00dev, TXRX_CSR1, ®);
- rt2x00_set_field16(®, TXRX_CSR1_ACK_TIMEOUT, erp->ack_timeout);
- rt2500usb_register_write(rt2x00dev, TXRX_CSR1, reg);
-
rt2500usb_register_read(rt2x00dev, TXRX_CSR10, ®);
rt2x00_set_field16(®, TXRX_CSR10_AUTORESPOND_PREAMBLE,
!!erp->short_preamble);
diff --git a/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2x00.h b/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2x00.h
index 345b7d1..427d01e 100644
--- a/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2x00.h
+++ b/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2x00.h
@@ -437,9 +437,6 @@ struct rt2x00lib_conf {
struct rt2x00lib_erp {
int short_preamble;
int cts_protection;
-
- int ack_timeout;
- int ack_consume_time;
};
/*
diff --git a/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2x00config.c b/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2x00config.c
index e7ce8c4..36a0345 100644
--- a/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2x00config.c
+++ b/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt2x00config.c
@@ -86,22 +86,6 @@ void rt2x00lib_config_erp(struct rt2x00_dev *rt2x00dev,
erp.short_preamble = bss_conf->use_short_preamble;
erp.cts_protection = bss_conf->use_cts_prot;
- erp.ack_timeout = PLCP + get_duration(ACK_SIZE, 10);
- erp.ack_consume_time = SIFS + PLCP + get_duration(ACK_SIZE, 10);
-
- if (rt2x00dev->hw->conf.flags & IEEE80211_CONF_SHORT_SLOT_TIME)
- erp.ack_timeout += SHORT_DIFS;
- else
- erp.ack_timeout += DIFS;
-
- if (bss_conf->use_short_preamble) {
- erp.ack_timeout += SHORT_PREAMBLE;
- erp.ack_consume_time += SHORT_PREAMBLE;
- } else {
- erp.ack_timeout += PREAMBLE;
- erp.ack_consume_time += PREAMBLE;
- }
-
rt2x00dev->ops->lib->config_erp(rt2x00dev, &erp);
}
diff --git a/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt61pci.c b/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt61pci.c
index 70ef7bf..63ed430 100644
--- a/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt61pci.c
+++ b/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt61pci.c
@@ -431,7 +431,7 @@ static void rt61pci_config_erp(struct rt2x00_dev *rt2x00dev,
u32 reg;
rt2x00pci_register_read(rt2x00dev, TXRX_CSR0, ®);
- rt2x00_set_field32(®, TXRX_CSR0_RX_ACK_TIMEOUT, erp->ack_timeout);
+ rt2x00_set_field32(®, TXRX_CSR0_RX_ACK_TIMEOUT, 0x32);
rt2x00pci_register_write(rt2x00dev, TXRX_CSR0, reg);
rt2x00pci_register_read(rt2x00dev, TXRX_CSR4, ®);
diff --git a/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt73usb.c b/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt73usb.c
index a797405..2521a08 100644
--- a/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt73usb.c
+++ b/updates/compat-wireless-2.6/drivers/net/wireless/rt2x00/rt73usb.c
@@ -453,7 +453,7 @@ static void rt73usb_config_erp(struct rt2x00_dev *rt2x00dev,
u32 reg;
rt73usb_register_read(rt2x00dev, TXRX_CSR0, ®);
- rt2x00_set_field32(®, TXRX_CSR0_RX_ACK_TIMEOUT, erp->ack_timeout);
+ rt2x00_set_field32(®, TXRX_CSR0_RX_ACK_TIMEOUT, 0x32);
rt73usb_register_write(rt2x00dev, TXRX_CSR0, reg);
rt73usb_register_read(rt2x00dev, TXRX_CSR4, ®);
--
1.6.0.4
More information about the kernel-team
mailing list