aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rt2x00/rt61pci.c
diff options
context:
space:
mode:
authorIvo van Doorn <ivdoorn@gmail.com>2009-01-17 14:42:58 -0500
committerJohn W. Linville <linville@tuxdriver.com>2009-01-29 16:00:46 -0500
commit5e790023620ee02486fd64c7e5a6115ce004495d (patch)
treeb2cf06ad1b846c191fd2cf240c7f35cd4cb5ad55 /drivers/net/wireless/rt2x00/rt61pci.c
parent4e54c711b42c3cc8da8a3fdcde3407b86d67ebcc (diff)
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> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/rt2x00/rt61pci.c')
-rw-r--r--drivers/net/wireless/rt2x00/rt61pci.c30
1 files changed, 15 insertions, 15 deletions
diff --git a/drivers/net/wireless/rt2x00/rt61pci.c b/drivers/net/wireless/rt2x00/rt61pci.c
index 8a8753e29308..3a7eccac8856 100644
--- a/drivers/net/wireless/rt2x00/rt61pci.c
+++ b/drivers/net/wireless/rt2x00/rt61pci.c
@@ -2657,6 +2657,7 @@ static int rt61pci_conf_tx(struct ieee80211_hw *hw, u16 queue_idx,
2657 struct rt2x00_field32 field; 2657 struct rt2x00_field32 field;
2658 int retval; 2658 int retval;
2659 u32 reg; 2659 u32 reg;
2660 u32 offset;
2660 2661
2661 /* 2662 /*
2662 * First pass the configuration through rt2x00lib, that will 2663 * First pass the configuration through rt2x00lib, that will
@@ -2668,24 +2669,23 @@ static int rt61pci_conf_tx(struct ieee80211_hw *hw, u16 queue_idx,
2668 if (retval) 2669 if (retval)
2669 return retval; 2670 return retval;
2670 2671
2672 /*
2673 * We only need to perform additional register initialization
2674 * for WMM queues/
2675 */
2676 if (queue_idx >= 4)
2677 return 0;
2678
2671 queue = rt2x00queue_get_queue(rt2x00dev, queue_idx); 2679 queue = rt2x00queue_get_queue(rt2x00dev, queue_idx);
2672 2680
2673 /* Update WMM TXOP register */ 2681 /* Update WMM TXOP register */
2674 if (queue_idx < 2) { 2682 offset = AC_TXOP_CSR0 + (sizeof(u32) * (!!(queue_idx & 2)));
2675 field.bit_offset = queue_idx * 16; 2683 field.bit_offset = (queue_idx & 1) * 16;
2676 field.bit_mask = 0xffff << field.bit_offset; 2684 field.bit_mask = 0xffff << field.bit_offset;
2677 2685
2678 rt2x00pci_register_read(rt2x00dev, AC_TXOP_CSR0, &reg); 2686 rt2x00pci_register_read(rt2x00dev, offset, &reg);
2679 rt2x00_set_field32(&reg, field, queue->txop); 2687 rt2x00_set_field32(&reg, field, queue->txop);
2680 rt2x00pci_register_write(rt2x00dev, AC_TXOP_CSR0, reg); 2688 rt2x00pci_register_write(rt2x00dev, offset, reg);
2681 } else if (queue_idx < 4) {
2682 field.bit_offset = (queue_idx - 2) * 16;
2683 field.bit_mask = 0xffff << field.bit_offset;
2684
2685 rt2x00pci_register_read(rt2x00dev, AC_TXOP_CSR1, &reg);
2686 rt2x00_set_field32(&reg, field, queue->txop);
2687 rt2x00pci_register_write(rt2x00dev, AC_TXOP_CSR1, reg);
2688 }
2689 2689
2690 /* Update WMM registers */ 2690 /* Update WMM registers */
2691 field.bit_offset = queue_idx * 4; 2691 field.bit_offset = queue_idx * 4;