mac80211: update compat-wireless to 2009-01-19
[openwrt/staging/mkresin.git] / package / mac80211 / patches / 318-rt2x00-conf_tx-only-need-register-access-for-WMM.patch
1 From bbb27190d504b453625d1a663124b2b1cec0fe8b Mon Sep 17 00:00:00 2001
2 From: Ivo van Doorn <IvDoorn@gmail.com>
3 Date: Sat, 17 Jan 2009 20:25:27 +0100
4 Subject: [PATCH] rt2x00: conf_tx() only need register access for WMM queues
5
6 conf_tx() in rt61pci and rt73usb only have to check once
7 if the queue_idx indicates a non-WMM queue and break of
8 the function immediately if that is the case.
9
10 Only the WMM queues need to have the TX configuration written
11 to the registers.
12
13 Signed-off-by: Ivo van Doorn <IvDoorn@gmail.com>
14 ---
15 drivers/net/wireless/rt2x00/rt61pci.c | 30 +++++++++++++++---------------
16 drivers/net/wireless/rt2x00/rt73usb.c | 30 +++++++++++++++---------------
17 2 files changed, 30 insertions(+), 30 deletions(-)
18
19 --- a/drivers/net/wireless/rt2x00/rt61pci.c
20 +++ b/drivers/net/wireless/rt2x00/rt61pci.c
21 @@ -2657,6 +2657,7 @@ static int rt61pci_conf_tx(struct ieee80
22 struct rt2x00_field32 field;
23 int retval;
24 u32 reg;
25 + u32 offset;
26
27 /*
28 * First pass the configuration through rt2x00lib, that will
29 @@ -2668,24 +2669,23 @@ static int rt61pci_conf_tx(struct ieee80
30 if (retval)
31 return retval;
32
33 + /*
34 + * We only need to perform additional register initialization
35 + * for WMM queues/
36 + */
37 + if (queue_idx >= 4)
38 + return 0;
39 +
40 queue = rt2x00queue_get_queue(rt2x00dev, queue_idx);
41
42 /* Update WMM TXOP register */
43 - if (queue_idx < 2) {
44 - field.bit_offset = queue_idx * 16;
45 - field.bit_mask = 0xffff << field.bit_offset;
46 -
47 - rt2x00pci_register_read(rt2x00dev, AC_TXOP_CSR0, &reg);
48 - rt2x00_set_field32(&reg, field, queue->txop);
49 - rt2x00pci_register_write(rt2x00dev, AC_TXOP_CSR0, reg);
50 - } else if (queue_idx < 4) {
51 - field.bit_offset = (queue_idx - 2) * 16;
52 - field.bit_mask = 0xffff << field.bit_offset;
53 -
54 - rt2x00pci_register_read(rt2x00dev, AC_TXOP_CSR1, &reg);
55 - rt2x00_set_field32(&reg, field, queue->txop);
56 - rt2x00pci_register_write(rt2x00dev, AC_TXOP_CSR1, reg);
57 - }
58 + offset = AC_TXOP_CSR0 + (sizeof(u32) * (!!(queue_idx & 2)));
59 + field.bit_offset = (queue_idx & 1) * 16;
60 + field.bit_mask = 0xffff << field.bit_offset;
61 +
62 + rt2x00pci_register_read(rt2x00dev, offset, &reg);
63 + rt2x00_set_field32(&reg, field, queue->txop);
64 + rt2x00pci_register_write(rt2x00dev, offset, reg);
65
66 /* Update WMM registers */
67 field.bit_offset = queue_idx * 4;
68 --- a/drivers/net/wireless/rt2x00/rt73usb.c
69 +++ b/drivers/net/wireless/rt2x00/rt73usb.c
70 @@ -2180,6 +2180,7 @@ static int rt73usb_conf_tx(struct ieee80
71 struct rt2x00_field32 field;
72 int retval;
73 u32 reg;
74 + u32 offset;
75
76 /*
77 * First pass the configuration through rt2x00lib, that will
78 @@ -2191,24 +2192,23 @@ static int rt73usb_conf_tx(struct ieee80
79 if (retval)
80 return retval;
81
82 + /*
83 + * We only need to perform additional register initialization
84 + * for WMM queues/
85 + */
86 + if (queue_idx >= 4)
87 + return 0;
88 +
89 queue = rt2x00queue_get_queue(rt2x00dev, queue_idx);
90
91 /* Update WMM TXOP register */
92 - if (queue_idx < 2) {
93 - field.bit_offset = queue_idx * 16;
94 - field.bit_mask = 0xffff << field.bit_offset;
95 -
96 - rt2x00usb_register_read(rt2x00dev, AC_TXOP_CSR0, &reg);
97 - rt2x00_set_field32(&reg, field, queue->txop);
98 - rt2x00usb_register_write(rt2x00dev, AC_TXOP_CSR0, reg);
99 - } else if (queue_idx < 4) {
100 - field.bit_offset = (queue_idx - 2) * 16;
101 - field.bit_mask = 0xffff << field.bit_offset;
102 -
103 - rt2x00usb_register_read(rt2x00dev, AC_TXOP_CSR1, &reg);
104 - rt2x00_set_field32(&reg, field, queue->txop);
105 - rt2x00usb_register_write(rt2x00dev, AC_TXOP_CSR1, reg);
106 - }
107 + offset = AC_TXOP_CSR0 + (sizeof(u32) * (!!(queue_idx & 2)));
108 + field.bit_offset = (queue_idx & 1) * 16;
109 + field.bit_mask = 0xffff << field.bit_offset;
110 +
111 + rt2x00usb_register_read(rt2x00dev, offset, &reg);
112 + rt2x00_set_field32(&reg, field, queue->txop);
113 + rt2x00usb_register_write(rt2x00dev, offset, reg);
114
115 /* Update WMM registers */
116 field.bit_offset = queue_idx * 4;