mirror of
git://projects.qi-hardware.com/openwrt-xburst.git
synced 2024-11-05 17:11:33 +02:00
117 lines
3.8 KiB
Diff
117 lines
3.8 KiB
Diff
|
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;
|