[package] mac80211: update compat-wireless to 2009-01-19
[openwrt.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;