diff options
author | Gabor Juhos <juhosg@openwrt.org> | 2009-01-22 14:52:27 +0000 |
---|---|---|
committer | Gabor Juhos <juhosg@openwrt.org> | 2009-01-22 14:52:27 +0000 |
commit | a0c3da6d61efd0c39c4728f710e2037b2f60faff (patch) | |
tree | ef7465220fe9d7f4a3b9c48182cd104fb12241e3 /package/mac80211/patches/318-rt2x00-conf_tx-only-need-register-access-for-WMM.patch | |
parent | cfd684128b77f48e33030a8bd40a6073149f24ba (diff) | |
download | upstream-a0c3da6d61efd0c39c4728f710e2037b2f60faff.tar.gz upstream-a0c3da6d61efd0c39c4728f710e2037b2f60faff.tar.bz2 upstream-a0c3da6d61efd0c39c4728f710e2037b2f60faff.zip |
mac80211: update compat-wireless to 2009-01-19
SVN-Revision: 14145
Diffstat (limited to 'package/mac80211/patches/318-rt2x00-conf_tx-only-need-register-access-for-WMM.patch')
-rw-r--r-- | package/mac80211/patches/318-rt2x00-conf_tx-only-need-register-access-for-WMM.patch | 116 |
1 files changed, 116 insertions, 0 deletions
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 0000000000..c454165182 --- /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 <IvDoorn@gmail.com> +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 <IvDoorn@gmail.com> +--- + 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; |