From patchwork Tue Oct 6 13:23:49 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ike Panhc X-Patchwork-Id: 35112 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from chlorine.canonical.com (chlorine.canonical.com [91.189.94.204]) by ozlabs.org (Postfix) with ESMTP id 98F50B7B68 for ; Wed, 7 Oct 2009 00:24:16 +1100 (EST) Received: from localhost ([127.0.0.1] helo=chlorine.canonical.com) by chlorine.canonical.com with esmtp (Exim 4.60) (envelope-from ) id 1MvA1S-0003Aj-Q4; Tue, 06 Oct 2009 14:24:10 +0100 Received: from adelie.canonical.com ([91.189.90.139]) by chlorine.canonical.com with esmtp (Exim 4.60) (envelope-from ) id 1MvA1N-0003Ac-7Z for kernel-team@lists.ubuntu.com; Tue, 06 Oct 2009 14:24:05 +0100 Received: from hutte.canonical.com ([91.189.90.181]) by adelie.canonical.com with esmtp (Exim 4.69 #1 (Debian)) id 1MvA1N-00089A-3V for ; Tue, 06 Oct 2009 14:24:05 +0100 Received: from 61-229-184-190.dynamic.hinet.net ([61.229.184.190] helo=canonical.com) by hutte.canonical.com with esmtpsa (TLS-1.0:DHE_RSA_AES_128_CBC_SHA1:16) (Exim 4.69) (envelope-from ) id 1MvA1H-0007ZZ-1z for kernel-team@lists.ubuntu.com; Tue, 06 Oct 2009 14:24:05 +0100 From: Ike Panhc To: kernel-team@lists.ubuntu.com Subject: [PATCH 1/2] rt2x00: Hardcode TX ack timeout and consume time Date: Tue, 6 Oct 2009 21:23:49 +0800 Message-Id: <1254835429-9839-1-git-send-email-ike.pan@canonical.com> X-Mailer: git-send-email 1.6.0.4 In-Reply-To: <1254835274-9774-1-git-send-email-ike.pan@canonical.com> References: <1254835274-9774-1-git-send-email-ike.pan@canonical.com> X-BeenThere: kernel-team@lists.ubuntu.com X-Mailman-Version: 2.1.8 Precedence: list List-Id: Kernel team discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Sender: kernel-team-bounces@lists.ubuntu.com Errors-To: kernel-team-bounces@lists.ubuntu.com 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 Signed-off-by: Ike Panhc Acked-by: Stefan Bader --- .../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, ®);