From 4e2184ff3c011205e79ed353c0efdf99d84b4918 Mon Sep 17 00:00:00 2001 From: juhosg Date: Thu, 22 Jan 2009 14:52:27 +0000 Subject: [package] mac80211: update compat-wireless to 2009-01-19 git-svn-id: svn://svn.openwrt.org/openwrt/trunk@14145 3c298f89-4303-0410-b956-a3cf2f4a3e73 --- ...conf_tx-only-need-register-access-for-WMM.patch | 116 +++++++++++++++++++++ 1 file changed, 116 insertions(+) create mode 100644 package/mac80211/patches/318-rt2x00-conf_tx-only-need-register-access-for-WMM.patch (limited to 'package/mac80211/patches/318-rt2x00-conf_tx-only-need-register-access-for-WMM.patch') diff --git a/package/mac80211/patches/318-rt2x00-conf_tx-only-need-register-access-for-WMM.patch b/package/mac80211/patches/318-rt2x00-conf_tx-only-need-register-access-for-WMM.patch new file mode 100644 index 000000000..c45416518 --- /dev/null +++ b/package/mac80211/patches/318-rt2x00-conf_tx-only-need-register-access-for-WMM.patch @@ -0,0 +1,116 @@ +From bbb27190d504b453625d1a663124b2b1cec0fe8b Mon Sep 17 00:00:00 2001 +From: Ivo van Doorn +Date: Sat, 17 Jan 2009 20:25:27 +0100 +Subject: [PATCH] rt2x00: conf_tx() only need register access for WMM queues + +conf_tx() in rt61pci and rt73usb only have to check once +if the queue_idx indicates a non-WMM queue and break of +the function immediately if that is the case. + +Only the WMM queues need to have the TX configuration written +to the registers. + +Signed-off-by: Ivo van Doorn +--- + drivers/net/wireless/rt2x00/rt61pci.c | 30 +++++++++++++++--------------- + drivers/net/wireless/rt2x00/rt73usb.c | 30 +++++++++++++++--------------- + 2 files changed, 30 insertions(+), 30 deletions(-) + +--- a/drivers/net/wireless/rt2x00/rt61pci.c ++++ b/drivers/net/wireless/rt2x00/rt61pci.c +@@ -2657,6 +2657,7 @@ static int rt61pci_conf_tx(struct ieee80 + struct rt2x00_field32 field; + int retval; + u32 reg; ++ u32 offset; + + /* + * First pass the configuration through rt2x00lib, that will +@@ -2668,24 +2669,23 @@ static int rt61pci_conf_tx(struct ieee80 + if (retval) + return retval; + ++ /* ++ * We only need to perform additional register initialization ++ * for WMM queues/ ++ */ ++ if (queue_idx >= 4) ++ return 0; ++ + queue = rt2x00queue_get_queue(rt2x00dev, queue_idx); + + /* Update WMM TXOP register */ +- if (queue_idx < 2) { +- field.bit_offset = queue_idx * 16; +- field.bit_mask = 0xffff << field.bit_offset; +- +- rt2x00pci_register_read(rt2x00dev, AC_TXOP_CSR0, ®); +- rt2x00_set_field32(®, field, queue->txop); +- rt2x00pci_register_write(rt2x00dev, AC_TXOP_CSR0, reg); +- } else if (queue_idx < 4) { +- field.bit_offset = (queue_idx - 2) * 16; +- field.bit_mask = 0xffff << field.bit_offset; +- +- rt2x00pci_register_read(rt2x00dev, AC_TXOP_CSR1, ®); +- rt2x00_set_field32(®, field, queue->txop); +- rt2x00pci_register_write(rt2x00dev, AC_TXOP_CSR1, reg); +- } ++ offset = AC_TXOP_CSR0 + (sizeof(u32) * (!!(queue_idx & 2))); ++ field.bit_offset = (queue_idx & 1) * 16; ++ field.bit_mask = 0xffff << field.bit_offset; ++ ++ rt2x00pci_register_read(rt2x00dev, offset, ®); ++ rt2x00_set_field32(®, field, queue->txop); ++ rt2x00pci_register_write(rt2x00dev, offset, reg); + + /* Update WMM registers */ + field.bit_offset = queue_idx * 4; +--- a/drivers/net/wireless/rt2x00/rt73usb.c ++++ b/drivers/net/wireless/rt2x00/rt73usb.c +@@ -2180,6 +2180,7 @@ static int rt73usb_conf_tx(struct ieee80 + struct rt2x00_field32 field; + int retval; + u32 reg; ++ u32 offset; + + /* + * First pass the configuration through rt2x00lib, that will +@@ -2191,24 +2192,23 @@ static int rt73usb_conf_tx(struct ieee80 + if (retval) + return retval; + ++ /* ++ * We only need to perform additional register initialization ++ * for WMM queues/ ++ */ ++ if (queue_idx >= 4) ++ return 0; ++ + queue = rt2x00queue_get_queue(rt2x00dev, queue_idx); + + /* Update WMM TXOP register */ +- if (queue_idx < 2) { +- field.bit_offset = queue_idx * 16; +- field.bit_mask = 0xffff << field.bit_offset; +- +- rt2x00usb_register_read(rt2x00dev, AC_TXOP_CSR0, ®); +- rt2x00_set_field32(®, field, queue->txop); +- rt2x00usb_register_write(rt2x00dev, AC_TXOP_CSR0, reg); +- } else if (queue_idx < 4) { +- field.bit_offset = (queue_idx - 2) * 16; +- field.bit_mask = 0xffff << field.bit_offset; +- +- rt2x00usb_register_read(rt2x00dev, AC_TXOP_CSR1, ®); +- rt2x00_set_field32(®, field, queue->txop); +- rt2x00usb_register_write(rt2x00dev, AC_TXOP_CSR1, reg); +- } ++ offset = AC_TXOP_CSR0 + (sizeof(u32) * (!!(queue_idx & 2))); ++ field.bit_offset = (queue_idx & 1) * 16; ++ field.bit_mask = 0xffff << field.bit_offset; ++ ++ rt2x00usb_register_read(rt2x00dev, offset, ®); ++ rt2x00_set_field32(®, field, queue->txop); ++ rt2x00usb_register_write(rt2x00dev, offset, reg); + + /* Update WMM registers */ + field.bit_offset = queue_idx * 4; -- cgit v1.2.3