Linux Kernel  3.7.1
 All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Groups Pages
tables_phy_ht.c
Go to the documentation of this file.
1 /*
2 
3  Broadcom B43 wireless driver
4  IEEE 802.11n HT-PHY data tables
5 
6  Copyright (c) 2011 Rafał Miłecki <[email protected]>
7 
8  This program is free software; you can redistribute it and/or modify
9  it under the terms of the GNU General Public License as published by
10  the Free Software Foundation; either version 2 of the License, or
11  (at your option) any later version.
12 
13  This program is distributed in the hope that it will be useful,
14  but WITHOUT ANY WARRANTY; without even the implied warranty of
15  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16  GNU General Public License for more details.
17 
18  You should have received a copy of the GNU General Public License
19  along with this program; see the file COPYING. If not, write to
20  the Free Software Foundation, Inc., 51 Franklin Steet, Fifth Floor,
21  Boston, MA 02110-1301, USA.
22 
23 */
24 
25 #include "b43.h"
26 #include "tables_phy_ht.h"
27 #include "phy_common.h"
28 #include "phy_ht.h"
29 
30 static const u16 b43_httab_0x12[] = {
31  0x0000, 0x0008, 0x000a, 0x0010, 0x0012, 0x0019,
32  0x001a, 0x001c, 0x0080, 0x0088, 0x008a, 0x0090,
33  0x0092, 0x0099, 0x009a, 0x009c, 0x0100, 0x0108,
34  0x010a, 0x0110, 0x0112, 0x0119, 0x011a, 0x011c,
35  0x0180, 0x0188, 0x018a, 0x0190, 0x0192, 0x0199,
36  0x019a, 0x019c, 0x0000, 0x0098, 0x00a0, 0x00a8,
37  0x009a, 0x00a2, 0x00aa, 0x0120, 0x0128, 0x0128,
38  0x0130, 0x0138, 0x0138, 0x0140, 0x0122, 0x012a,
39  0x012a, 0x0132, 0x013a, 0x013a, 0x0142, 0x01a8,
40  0x01b0, 0x01b8, 0x01b0, 0x01b8, 0x01c0, 0x01c8,
41  0x01c0, 0x01c8, 0x01d0, 0x01d0, 0x01d8, 0x01aa,
42  0x01b2, 0x01ba, 0x01b2, 0x01ba, 0x01c2, 0x01ca,
43  0x01c2, 0x01ca, 0x01d2, 0x01d2, 0x01da, 0x0001,
44  0x0002, 0x0004, 0x0009, 0x000c, 0x0011, 0x0014,
45  0x0018, 0x0020, 0x0021, 0x0022, 0x0024, 0x0081,
46  0x0082, 0x0084, 0x0089, 0x008c, 0x0091, 0x0094,
47  0x0098, 0x00a0, 0x00a1, 0x00a2, 0x00a4, 0x0007,
48  0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
49  0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
50  0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
51  0x0007, 0x0007, 0x0007, 0x0007, 0x0007, 0x0007,
52  0x0007, 0x0007,
53 };
54 
55 static const u16 b43_httab_0x27[] = {
56  0x0009, 0x000e, 0x0011, 0x0014, 0x0017, 0x001a,
57  0x001d, 0x0020, 0x0009, 0x000e, 0x0011, 0x0014,
58  0x0017, 0x001a, 0x001d, 0x0020, 0x0009, 0x000e,
59  0x0011, 0x0014, 0x0017, 0x001a, 0x001d, 0x0020,
60  0x0009, 0x000e, 0x0011, 0x0014, 0x0017, 0x001a,
61  0x001d, 0x0020,
62 };
63 
64 static const u16 b43_httab_0x26[] = {
65  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
66  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
67  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
68  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
69  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
70  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
71  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
72  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
73  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
74  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
75  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
76  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
77  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
78  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
79  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
80  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
81  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
82  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
83  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
84  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
85  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
86  0x0000, 0x0000,
87 };
88 
89 static const u32 b43_httab_0x25[] = {
90  0x00000000, 0x00000000, 0x00000000, 0x00000000,
91  0x00000000, 0x00000000, 0x00000000, 0x00000000,
92  0x00000000, 0x00000000, 0x00000000, 0x00000000,
93  0x00000000, 0x00000000, 0x00000000, 0x00000000,
94  0x00000000, 0x00000000, 0x00000000, 0x00000000,
95  0x00000000, 0x00000000, 0x00000000, 0x00000000,
96  0x00000000, 0x00000000, 0x00000000, 0x00000000,
97  0x00000000, 0x00000000, 0x00000000, 0x00000000,
98  0x00000000, 0x00000000, 0x00000000, 0x00000000,
99  0x00000000, 0x00000000, 0x00000000, 0x00000000,
100  0x00000000, 0x00000000, 0x00000000, 0x00000000,
101  0x00000000, 0x00000000, 0x00000000, 0x00000000,
102  0x00000000, 0x00000000, 0x00000000, 0x00000000,
103  0x00000000, 0x00000000, 0x00000000, 0x00000000,
104  0x00000000, 0x00000000, 0x00000000, 0x00000000,
105  0x00000000, 0x00000000, 0x00000000, 0x00000000,
106  0x00000000, 0x00000000, 0x00000000, 0x00000000,
107  0x00000000, 0x00000000, 0x00000000, 0x00000000,
108  0x00000000, 0x00000000, 0x00000000, 0x00000000,
109  0x00000000, 0x00000000, 0x00000000, 0x00000000,
110  0x00000000, 0x00000000, 0x00000000, 0x00000000,
111  0x00000000, 0x00000000, 0x00000000, 0x00000000,
112  0x00000000, 0x00000000, 0x00000000, 0x00000000,
113  0x00000000, 0x00000000, 0x00000000, 0x00000000,
114  0x00000000, 0x00000000, 0x00000000, 0x00000000,
115  0x00000000, 0x00000000, 0x00000000, 0x00000000,
116  0x00000000, 0x00000000, 0x00000000, 0x00000000,
117  0x00000000, 0x00000000, 0x00000000, 0x00000000,
118  0x00000000, 0x00000000, 0x00000000, 0x00000000,
119  0x00000000, 0x00000000, 0x00000000, 0x00000000,
120  0x00000000, 0x00000000, 0x00000000, 0x00000000,
121  0x00000000, 0x00000000, 0x00000000, 0x00000000,
122 };
123 
124 static const u32 b43_httab_0x2f[] = {
125  0x00035700, 0x0002cc9a, 0x00026666, 0x0001581f,
126  0x0001581f, 0x0001581f, 0x0001581f, 0x0001581f,
127  0x0001581f, 0x0001581f, 0x0001581f, 0x00035700,
128  0x0002cc9a, 0x00026666, 0x0001581f, 0x0001581f,
129  0x0001581f, 0x0001581f, 0x0001581f, 0x0001581f,
130  0x0001581f, 0x0001581f,
131 };
132 
133 static const u16 b43_httab_0x1a[] = {
134  0x0055, 0x0054, 0x0054, 0x0053, 0x0052, 0x0052,
135  0x0051, 0x0051, 0x0050, 0x004f, 0x004f, 0x004e,
136  0x004e, 0x004d, 0x004c, 0x004c, 0x004b, 0x004a,
137  0x0049, 0x0049, 0x0048, 0x0047, 0x0046, 0x0046,
138  0x0045, 0x0044, 0x0043, 0x0042, 0x0041, 0x0040,
139  0x0040, 0x003f, 0x003e, 0x003d, 0x003c, 0x003a,
140  0x0039, 0x0038, 0x0037, 0x0036, 0x0035, 0x0033,
141  0x0032, 0x0031, 0x002f, 0x002e, 0x002c, 0x002b,
142  0x0029, 0x0027, 0x0025, 0x0023, 0x0021, 0x001f,
143  0x001d, 0x001a, 0x0018, 0x0015, 0x0012, 0x000e,
144  0x000b, 0x0007, 0x0002, 0x00fd,
145 };
146 
147 static const u16 b43_httab_0x1b[] = {
148  0x0055, 0x0054, 0x0054, 0x0053, 0x0052, 0x0052,
149  0x0051, 0x0051, 0x0050, 0x004f, 0x004f, 0x004e,
150  0x004e, 0x004d, 0x004c, 0x004c, 0x004b, 0x004a,
151  0x0049, 0x0049, 0x0048, 0x0047, 0x0046, 0x0046,
152  0x0045, 0x0044, 0x0043, 0x0042, 0x0041, 0x0040,
153  0x0040, 0x003f, 0x003e, 0x003d, 0x003c, 0x003a,
154  0x0039, 0x0038, 0x0037, 0x0036, 0x0035, 0x0033,
155  0x0032, 0x0031, 0x002f, 0x002e, 0x002c, 0x002b,
156  0x0029, 0x0027, 0x0025, 0x0023, 0x0021, 0x001f,
157  0x001d, 0x001a, 0x0018, 0x0015, 0x0012, 0x000e,
158  0x000b, 0x0007, 0x0002, 0x00fd,
159 };
160 
161 static const u16 b43_httab_0x1c[] = {
162  0x0055, 0x0054, 0x0054, 0x0053, 0x0052, 0x0052,
163  0x0051, 0x0051, 0x0050, 0x004f, 0x004f, 0x004e,
164  0x004e, 0x004d, 0x004c, 0x004c, 0x004b, 0x004a,
165  0x0049, 0x0049, 0x0048, 0x0047, 0x0046, 0x0046,
166  0x0045, 0x0044, 0x0043, 0x0042, 0x0041, 0x0040,
167  0x0040, 0x003f, 0x003e, 0x003d, 0x003c, 0x003a,
168  0x0039, 0x0038, 0x0037, 0x0036, 0x0035, 0x0033,
169  0x0032, 0x0031, 0x002f, 0x002e, 0x002c, 0x002b,
170  0x0029, 0x0027, 0x0025, 0x0023, 0x0021, 0x001f,
171  0x001d, 0x001a, 0x0018, 0x0015, 0x0012, 0x000e,
172  0x000b, 0x0007, 0x0002, 0x00fd,
173 };
174 
175 static const u32 b43_httab_0x1a_0xc0[] = {
176  0x5bf70044, 0x5bf70042, 0x5bf70040, 0x5bf7003e,
177  0x5bf7003c, 0x5bf7003b, 0x5bf70039, 0x5bf70037,
178  0x5bf70036, 0x5bf70034, 0x5bf70033, 0x5bf70031,
179  0x5bf70030, 0x5ba70044, 0x5ba70042, 0x5ba70040,
180  0x5ba7003e, 0x5ba7003c, 0x5ba7003b, 0x5ba70039,
181  0x5ba70037, 0x5ba70036, 0x5ba70034, 0x5ba70033,
182  0x5b770044, 0x5b770042, 0x5b770040, 0x5b77003e,
183  0x5b77003c, 0x5b77003b, 0x5b770039, 0x5b770037,
184  0x5b770036, 0x5b770034, 0x5b770033, 0x5b770031,
185  0x5b770030, 0x5b77002f, 0x5b77002d, 0x5b77002c,
186  0x5b470044, 0x5b470042, 0x5b470040, 0x5b47003e,
187  0x5b47003c, 0x5b47003b, 0x5b470039, 0x5b470037,
188  0x5b470036, 0x5b470034, 0x5b470033, 0x5b470031,
189  0x5b470030, 0x5b47002f, 0x5b47002d, 0x5b47002c,
190  0x5b47002b, 0x5b47002a, 0x5b270044, 0x5b270042,
191  0x5b270040, 0x5b27003e, 0x5b27003c, 0x5b27003b,
192  0x5b270039, 0x5b270037, 0x5b270036, 0x5b270034,
193  0x5b270033, 0x5b270031, 0x5b270030, 0x5b27002f,
194  0x5b170044, 0x5b170042, 0x5b170040, 0x5b17003e,
195  0x5b17003c, 0x5b17003b, 0x5b170039, 0x5b170037,
196  0x5b170036, 0x5b170034, 0x5b170033, 0x5b170031,
197  0x5b170030, 0x5b17002f, 0x5b17002d, 0x5b17002c,
198  0x5b17002b, 0x5b17002a, 0x5b170028, 0x5b170027,
199  0x5b170026, 0x5b170025, 0x5b170024, 0x5b170023,
200  0x5b070044, 0x5b070042, 0x5b070040, 0x5b07003e,
201  0x5b07003c, 0x5b07003b, 0x5b070039, 0x5b070037,
202  0x5b070036, 0x5b070034, 0x5b070033, 0x5b070031,
203  0x5b070030, 0x5b07002f, 0x5b07002d, 0x5b07002c,
204  0x5b07002b, 0x5b07002a, 0x5b070028, 0x5b070027,
205  0x5b070026, 0x5b070025, 0x5b070024, 0x5b070023,
206  0x5b070022, 0x5b070021, 0x5b070020, 0x5b07001f,
207  0x5b07001e, 0x5b07001d, 0x5b07001d, 0x5b07001c,
208 };
209 
210 static const u32 b43_httab_0x1a_0x140[] = {
211  0x00000000, 0x00000000, 0x00000000, 0x00000000,
212  0x00000000, 0x00000000, 0x00000000, 0x00000000,
213  0x00000000, 0x00000000, 0x00000000, 0x00000000,
214  0x00000000, 0x00000000, 0x00000000, 0x00000000,
215  0x00000000, 0x00000000, 0x00000000, 0x00000000,
216  0x00000000, 0x00000000, 0x00000000, 0x00000000,
217  0x00000000, 0x00000000, 0x00000000, 0x00000000,
218  0x00000000, 0x00000000, 0x00000000, 0x00000000,
219  0x00000000, 0x00000000, 0x00000000, 0x00000000,
220  0x00000000, 0x00000000, 0x00000000, 0x00000000,
221  0x00000000, 0x00000000, 0x00000000, 0x00000000,
222  0x00000000, 0x00000000, 0x00000000, 0x00000000,
223  0x00000000, 0x00000000, 0x00000000, 0x00000000,
224  0x00000000, 0x00000000, 0x00000000, 0x00000000,
225  0x00000000, 0x00000000, 0x00000000, 0x00000000,
226  0x00000000, 0x00000000, 0x00000000, 0x00000000,
227  0x00000000, 0x00000000, 0x00000000, 0x00000000,
228  0x00000000, 0x00000000, 0x00000000, 0x00000000,
229  0x00000000, 0x00000000, 0x00000000, 0x00000000,
230  0x00000000, 0x00000000, 0x00000000, 0x00000000,
231  0x00000000, 0x00000000, 0x00000000, 0x00000000,
232  0x00000000, 0x00000000, 0x00000000, 0x00000000,
233  0x00000000, 0x00000000, 0x00000000, 0x00000000,
234  0x00000000, 0x00000000, 0x00000000, 0x00000000,
235  0x00000000, 0x00000000, 0x00000000, 0x00000000,
236  0x00000000, 0x00000000, 0x00000000, 0x00000000,
237  0x00000000, 0x00000000, 0x00000000, 0x00000000,
238  0x00000000, 0x00000000, 0x00000000, 0x00000000,
239  0x00000000, 0x00000000, 0x00000000, 0x00000000,
240  0x00000000, 0x00000000, 0x00000000, 0x00000000,
241  0x00000000, 0x00000000, 0x00000000, 0x00000000,
242  0x00000000, 0x00000000, 0x00000000, 0x00000000,
243 };
244 
245 static const u32 b43_httab_0x1b_0x140[] = {
246  0x00000000, 0x00000000, 0x00000000, 0x00000000,
247  0x00000000, 0x00000000, 0x00000000, 0x00000000,
248  0x00000000, 0x00000000, 0x00000000, 0x00000000,
249  0x00000000, 0x00000000, 0x00000000, 0x00000000,
250  0x00000000, 0x00000000, 0x00000000, 0x00000000,
251  0x00000000, 0x00000000, 0x00000000, 0x00000000,
252  0x00000000, 0x00000000, 0x00000000, 0x00000000,
253  0x00000000, 0x00000000, 0x00000000, 0x00000000,
254  0x00000000, 0x00000000, 0x00000000, 0x00000000,
255  0x00000000, 0x00000000, 0x00000000, 0x00000000,
256  0x00000000, 0x00000000, 0x00000000, 0x00000000,
257  0x00000000, 0x00000000, 0x00000000, 0x00000000,
258  0x00000000, 0x00000000, 0x00000000, 0x00000000,
259  0x00000000, 0x00000000, 0x00000000, 0x00000000,
260  0x00000000, 0x00000000, 0x00000000, 0x00000000,
261  0x00000000, 0x00000000, 0x00000000, 0x00000000,
262  0x00000000, 0x00000000, 0x00000000, 0x00000000,
263  0x00000000, 0x00000000, 0x00000000, 0x00000000,
264  0x00000000, 0x00000000, 0x00000000, 0x00000000,
265  0x00000000, 0x00000000, 0x00000000, 0x00000000,
266  0x00000000, 0x00000000, 0x00000000, 0x00000000,
267  0x00000000, 0x00000000, 0x00000000, 0x00000000,
268  0x00000000, 0x00000000, 0x00000000, 0x00000000,
269  0x00000000, 0x00000000, 0x00000000, 0x00000000,
270  0x00000000, 0x00000000, 0x00000000, 0x00000000,
271  0x00000000, 0x00000000, 0x00000000, 0x00000000,
272  0x00000000, 0x00000000, 0x00000000, 0x00000000,
273  0x00000000, 0x00000000, 0x00000000, 0x00000000,
274  0x00000000, 0x00000000, 0x00000000, 0x00000000,
275  0x00000000, 0x00000000, 0x00000000, 0x00000000,
276  0x00000000, 0x00000000, 0x00000000, 0x00000000,
277  0x00000000, 0x00000000, 0x00000000, 0x00000000,
278 };
279 
280 static const u32 b43_httab_0x1c_0x140[] = {
281  0x00000000, 0x00000000, 0x00000000, 0x00000000,
282  0x00000000, 0x00000000, 0x00000000, 0x00000000,
283  0x00000000, 0x00000000, 0x00000000, 0x00000000,
284  0x00000000, 0x00000000, 0x00000000, 0x00000000,
285  0x00000000, 0x00000000, 0x00000000, 0x00000000,
286  0x00000000, 0x00000000, 0x00000000, 0x00000000,
287  0x00000000, 0x00000000, 0x00000000, 0x00000000,
288  0x00000000, 0x00000000, 0x00000000, 0x00000000,
289  0x00000000, 0x00000000, 0x00000000, 0x00000000,
290  0x00000000, 0x00000000, 0x00000000, 0x00000000,
291  0x00000000, 0x00000000, 0x00000000, 0x00000000,
292  0x00000000, 0x00000000, 0x00000000, 0x00000000,
293  0x00000000, 0x00000000, 0x00000000, 0x00000000,
294  0x00000000, 0x00000000, 0x00000000, 0x00000000,
295  0x00000000, 0x00000000, 0x00000000, 0x00000000,
296  0x00000000, 0x00000000, 0x00000000, 0x00000000,
297  0x00000000, 0x00000000, 0x00000000, 0x00000000,
298  0x00000000, 0x00000000, 0x00000000, 0x00000000,
299  0x00000000, 0x00000000, 0x00000000, 0x00000000,
300  0x00000000, 0x00000000, 0x00000000, 0x00000000,
301  0x00000000, 0x00000000, 0x00000000, 0x00000000,
302  0x00000000, 0x00000000, 0x00000000, 0x00000000,
303  0x00000000, 0x00000000, 0x00000000, 0x00000000,
304  0x00000000, 0x00000000, 0x00000000, 0x00000000,
305  0x00000000, 0x00000000, 0x00000000, 0x00000000,
306  0x00000000, 0x00000000, 0x00000000, 0x00000000,
307  0x00000000, 0x00000000, 0x00000000, 0x00000000,
308  0x00000000, 0x00000000, 0x00000000, 0x00000000,
309  0x00000000, 0x00000000, 0x00000000, 0x00000000,
310  0x00000000, 0x00000000, 0x00000000, 0x00000000,
311  0x00000000, 0x00000000, 0x00000000, 0x00000000,
312  0x00000000, 0x00000000, 0x00000000, 0x00000000,
313 };
314 
315 static const u16 b43_httab_0x1a_0x1c0[] = {
316  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
317  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
318  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
319  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
320  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
321  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
322  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
323  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
324  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
325  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
326  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
327  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
328  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
329  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
330  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
331  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
332  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
333  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
334  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
335  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
336  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
337  0x0000, 0x0000,
338 };
339 
340 static const u16 b43_httab_0x1b_0x1c0[] = {
341  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
342  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
343  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
344  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
345  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
346  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
347  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
348  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
349  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
350  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
351  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
352  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
353  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
354  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
355  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
356  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
357  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
358  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
359  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
360  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
361  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
362  0x0000, 0x0000,
363 };
364 
365 static const u16 b43_httab_0x1c_0x1c0[] = {
366  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
367  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
368  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
369  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
370  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
371  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
372  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
373  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
374  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
375  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
376  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
377  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
378  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
379  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
380  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
381  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
382  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
383  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
384  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
385  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
386  0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
387  0x0000, 0x0000,
388 };
389 
390 static const u16 b43_httab_0x1a_0x240[] = {
391  0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
392  0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
393  0x0036, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
394  0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
395  0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
396  0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
397  0x001e, 0x001e, 0x001e, 0x001e, 0x000e, 0x000e,
398  0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
399  0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
400  0x000e, 0x000e, 0x000e, 0x000e, 0x01fc, 0x01fc,
401  0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
402  0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
403  0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
404  0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
405  0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
406  0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
407  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
408  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
409  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
410  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
411  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
412  0x01d6, 0x01d6,
413 };
414 
415 static const u16 b43_httab_0x1b_0x240[] = {
416  0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
417  0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
418  0x0036, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
419  0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
420  0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
421  0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
422  0x001e, 0x001e, 0x001e, 0x001e, 0x000e, 0x000e,
423  0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
424  0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
425  0x000e, 0x000e, 0x000e, 0x000e, 0x01fc, 0x01fc,
426  0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
427  0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
428  0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
429  0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
430  0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
431  0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
432  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
433  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
434  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
435  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
436  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
437  0x01d6, 0x01d6,
438 };
439 
440 static const u16 b43_httab_0x1c_0x240[] = {
441  0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
442  0x0036, 0x0036, 0x0036, 0x0036, 0x0036, 0x0036,
443  0x0036, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
444  0x002a, 0x002a, 0x002a, 0x002a, 0x002a, 0x002a,
445  0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
446  0x001e, 0x001e, 0x001e, 0x001e, 0x001e, 0x001e,
447  0x001e, 0x001e, 0x001e, 0x001e, 0x000e, 0x000e,
448  0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
449  0x000e, 0x000e, 0x000e, 0x000e, 0x000e, 0x000e,
450  0x000e, 0x000e, 0x000e, 0x000e, 0x01fc, 0x01fc,
451  0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
452  0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc, 0x01fc,
453  0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
454  0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
455  0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
456  0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee, 0x01ee,
457  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
458  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
459  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
460  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
461  0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6, 0x01d6,
462  0x01d6, 0x01d6,
463 };
464 
465 static const u32 b43_httab_0x1f[] = {
466  0x00000000, 0x00000000, 0x00016023, 0x00006028,
467  0x00034036, 0x0003402e, 0x0007203c, 0x0006e037,
468  0x00070030, 0x0009401f, 0x0009a00f, 0x000b600d,
469  0x000c8007, 0x000ce007, 0x00101fff, 0x00121ff9,
470  0x0012e004, 0x0014dffc, 0x0016dff6, 0x0018dfe9,
471  0x001b3fe5, 0x001c5fd0, 0x001ddfc2, 0x001f1fb6,
472  0x00207fa4, 0x00219f8f, 0x0022ff7d, 0x00247f6c,
473  0x0024df5b, 0x00267f4b, 0x0027df3b, 0x0029bf3b,
474  0x002b5f2f, 0x002d3f2e, 0x002f5f2a, 0x002fff15,
475  0x00315f0b, 0x0032defa, 0x0033beeb, 0x0034fed9,
476  0x00353ec5, 0x00361eb0, 0x00363e9b, 0x0036be87,
477  0x0036be70, 0x0038fe67, 0x0044beb2, 0x00513ef3,
478  0x00595f11, 0x00669f3d, 0x0078dfdf, 0x00a143aa,
479  0x01642fff, 0x0162afff, 0x01620fff, 0x0160cfff,
480  0x015f0fff, 0x015dafff, 0x015bcfff, 0x015bcfff,
481  0x015b4fff, 0x015acfff, 0x01590fff, 0x0156cfff,
482 };
483 
484 static const u32 b43_httab_0x21[] = {
485  0x00000000, 0x00000000, 0x00016023, 0x00006028,
486  0x00034036, 0x0003402e, 0x0007203c, 0x0006e037,
487  0x00070030, 0x0009401f, 0x0009a00f, 0x000b600d,
488  0x000c8007, 0x000ce007, 0x00101fff, 0x00121ff9,
489  0x0012e004, 0x0014dffc, 0x0016dff6, 0x0018dfe9,
490  0x001b3fe5, 0x001c5fd0, 0x001ddfc2, 0x001f1fb6,
491  0x00207fa4, 0x00219f8f, 0x0022ff7d, 0x00247f6c,
492  0x0024df5b, 0x00267f4b, 0x0027df3b, 0x0029bf3b,
493  0x002b5f2f, 0x002d3f2e, 0x002f5f2a, 0x002fff15,
494  0x00315f0b, 0x0032defa, 0x0033beeb, 0x0034fed9,
495  0x00353ec5, 0x00361eb0, 0x00363e9b, 0x0036be87,
496  0x0036be70, 0x0038fe67, 0x0044beb2, 0x00513ef3,
497  0x00595f11, 0x00669f3d, 0x0078dfdf, 0x00a143aa,
498  0x01642fff, 0x0162afff, 0x01620fff, 0x0160cfff,
499  0x015f0fff, 0x015dafff, 0x015bcfff, 0x015bcfff,
500  0x015b4fff, 0x015acfff, 0x01590fff, 0x0156cfff,
501 };
502 
503 static const u32 b43_httab_0x23[] = {
504  0x00000000, 0x00000000, 0x00016023, 0x00006028,
505  0x00034036, 0x0003402e, 0x0007203c, 0x0006e037,
506  0x00070030, 0x0009401f, 0x0009a00f, 0x000b600d,
507  0x000c8007, 0x000ce007, 0x00101fff, 0x00121ff9,
508  0x0012e004, 0x0014dffc, 0x0016dff6, 0x0018dfe9,
509  0x001b3fe5, 0x001c5fd0, 0x001ddfc2, 0x001f1fb6,
510  0x00207fa4, 0x00219f8f, 0x0022ff7d, 0x00247f6c,
511  0x0024df5b, 0x00267f4b, 0x0027df3b, 0x0029bf3b,
512  0x002b5f2f, 0x002d3f2e, 0x002f5f2a, 0x002fff15,
513  0x00315f0b, 0x0032defa, 0x0033beeb, 0x0034fed9,
514  0x00353ec5, 0x00361eb0, 0x00363e9b, 0x0036be87,
515  0x0036be70, 0x0038fe67, 0x0044beb2, 0x00513ef3,
516  0x00595f11, 0x00669f3d, 0x0078dfdf, 0x00a143aa,
517  0x01642fff, 0x0162afff, 0x01620fff, 0x0160cfff,
518  0x015f0fff, 0x015dafff, 0x015bcfff, 0x015bcfff,
519  0x015b4fff, 0x015acfff, 0x01590fff, 0x0156cfff,
520 };
521 
522 static const u32 b43_httab_0x20[] = {
523  0x0b5e002d, 0x0ae2002f, 0x0a3b0032, 0x09a70035,
524  0x09220038, 0x08ab003b, 0x081f003f, 0x07a20043,
525  0x07340047, 0x06d2004b, 0x067a004f, 0x06170054,
526  0x05bf0059, 0x0571005e, 0x051e0064, 0x04d3006a,
527  0x04910070, 0x044c0077, 0x040f007e, 0x03d90085,
528  0x03a1008d, 0x036f0095, 0x033d009e, 0x030b00a8,
529  0x02e000b2, 0x02b900bc, 0x029200c7, 0x026d00d3,
530  0x024900e0, 0x022900ed, 0x020a00fb, 0x01ec010a,
531  0x01d20119, 0x01b7012a, 0x019e013c, 0x0188014e,
532  0x01720162, 0x015d0177, 0x0149018e, 0x013701a5,
533  0x012601be, 0x011501d8, 0x010601f4, 0x00f70212,
534  0x00e90231, 0x00dc0253, 0x00d00276, 0x00c4029b,
535  0x00b902c3, 0x00af02ed, 0x00a50319, 0x009c0348,
536  0x0093037a, 0x008b03af, 0x008303e6, 0x007c0422,
537  0x00750460, 0x006e04a3, 0x006804e9, 0x00620533,
538  0x005d0582, 0x005805d6, 0x0053062e, 0x004e068c,
539 };
540 
541 static const u32 b43_httab_0x22[] = {
542  0x0b5e002d, 0x0ae2002f, 0x0a3b0032, 0x09a70035,
543  0x09220038, 0x08ab003b, 0x081f003f, 0x07a20043,
544  0x07340047, 0x06d2004b, 0x067a004f, 0x06170054,
545  0x05bf0059, 0x0571005e, 0x051e0064, 0x04d3006a,
546  0x04910070, 0x044c0077, 0x040f007e, 0x03d90085,
547  0x03a1008d, 0x036f0095, 0x033d009e, 0x030b00a8,
548  0x02e000b2, 0x02b900bc, 0x029200c7, 0x026d00d3,
549  0x024900e0, 0x022900ed, 0x020a00fb, 0x01ec010a,
550  0x01d20119, 0x01b7012a, 0x019e013c, 0x0188014e,
551  0x01720162, 0x015d0177, 0x0149018e, 0x013701a5,
552  0x012601be, 0x011501d8, 0x010601f4, 0x00f70212,
553  0x00e90231, 0x00dc0253, 0x00d00276, 0x00c4029b,
554  0x00b902c3, 0x00af02ed, 0x00a50319, 0x009c0348,
555  0x0093037a, 0x008b03af, 0x008303e6, 0x007c0422,
556  0x00750460, 0x006e04a3, 0x006804e9, 0x00620533,
557  0x005d0582, 0x005805d6, 0x0053062e, 0x004e068c,
558 };
559 
560 static const u32 b43_httab_0x24[] = {
561  0x0b5e002d, 0x0ae2002f, 0x0a3b0032, 0x09a70035,
562  0x09220038, 0x08ab003b, 0x081f003f, 0x07a20043,
563  0x07340047, 0x06d2004b, 0x067a004f, 0x06170054,
564  0x05bf0059, 0x0571005e, 0x051e0064, 0x04d3006a,
565  0x04910070, 0x044c0077, 0x040f007e, 0x03d90085,
566  0x03a1008d, 0x036f0095, 0x033d009e, 0x030b00a8,
567  0x02e000b2, 0x02b900bc, 0x029200c7, 0x026d00d3,
568  0x024900e0, 0x022900ed, 0x020a00fb, 0x01ec010a,
569  0x01d20119, 0x01b7012a, 0x019e013c, 0x0188014e,
570  0x01720162, 0x015d0177, 0x0149018e, 0x013701a5,
571  0x012601be, 0x011501d8, 0x010601f4, 0x00f70212,
572  0x00e90231, 0x00dc0253, 0x00d00276, 0x00c4029b,
573  0x00b902c3, 0x00af02ed, 0x00a50319, 0x009c0348,
574  0x0093037a, 0x008b03af, 0x008303e6, 0x007c0422,
575  0x00750460, 0x006e04a3, 0x006804e9, 0x00620533,
576  0x005d0582, 0x005805d6, 0x0053062e, 0x004e068c,
577 };
578 
579 /* Some late-init table */
581  0x10f90040, 0x10e10040, 0x10e1003c, 0x10c9003d,
582  0x10b9003c, 0x10a9003d, 0x10a1003c, 0x1099003b,
583  0x1091003b, 0x1089003a, 0x1081003a, 0x10790039,
584  0x10710039, 0x1069003a, 0x1061003b, 0x1059003d,
585  0x1051003f, 0x10490042, 0x1049003e, 0x1049003b,
586  0x1041003e, 0x1041003b, 0x1039003e, 0x1039003b,
587  0x10390038, 0x10390035, 0x1031003a, 0x10310036,
588  0x10310033, 0x1029003a, 0x10290037, 0x10290034,
589  0x10290031, 0x10210039, 0x10210036, 0x10210033,
590  0x10210030, 0x1019003c, 0x10190039, 0x10190036,
591  0x10190033, 0x10190030, 0x1019002d, 0x1019002b,
592  0x10190028, 0x1011003a, 0x10110036, 0x10110033,
593  0x10110030, 0x1011002e, 0x1011002b, 0x10110029,
594  0x10110027, 0x10110024, 0x10110022, 0x10110020,
595  0x1011001f, 0x1011001d, 0x1009003a, 0x10090037,
596  0x10090034, 0x10090031, 0x1009002e, 0x1009002c,
597  0x10090029, 0x10090027, 0x10090025, 0x10090023,
598  0x10090021, 0x1009001f, 0x1009001d, 0x1009001b,
599  0x1009001a, 0x10090018, 0x10090017, 0x10090016,
600  0x10090015, 0x10090013, 0x10090012, 0x10090011,
601  0x10090010, 0x1009000f, 0x1009000f, 0x1009000e,
602  0x1009000d, 0x1009000c, 0x1009000c, 0x1009000b,
603  0x1009000a, 0x1009000a, 0x10090009, 0x10090009,
604  0x10090008, 0x10090008, 0x10090007, 0x10090007,
605  0x10090007, 0x10090006, 0x10090006, 0x10090005,
606  0x10090005, 0x10090005, 0x10090005, 0x10090004,
607  0x10090004, 0x10090004, 0x10090004, 0x10090003,
608  0x10090003, 0x10090003, 0x10090003, 0x10090003,
609  0x10090003, 0x10090002, 0x10090002, 0x10090002,
610  0x10090002, 0x10090002, 0x10090002, 0x10090002,
611  0x10090002, 0x10090002, 0x10090001, 0x10090001,
612  0x10090001, 0x10090001, 0x10090001, 0x10090001,
613 };
614 
615 /**************************************************
616  * R/W ops.
617  **************************************************/
618 
620 {
621  u32 type, value;
622 
623  type = offset & B43_HTTAB_TYPEMASK;
624  offset &= ~B43_HTTAB_TYPEMASK;
625  B43_WARN_ON(offset > 0xFFFF);
626 
627  switch (type) {
628  case B43_HTTAB_8BIT:
629  b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
630  value = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO) & 0xFF;
631  break;
632  case B43_HTTAB_16BIT:
633  b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
635  break;
636  case B43_HTTAB_32BIT:
637  b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
639  value <<= 16;
640  value |= b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
641  break;
642  default:
643  B43_WARN_ON(1);
644  value = 0;
645  }
646 
647  return value;
648 }
649 
651  unsigned int nr_elements, void *_data)
652 {
653  u32 type;
654  u8 *data = _data;
655  unsigned int i;
656 
657  type = offset & B43_HTTAB_TYPEMASK;
658  offset &= ~B43_HTTAB_TYPEMASK;
659  B43_WARN_ON(offset > 0xFFFF);
660 
661  b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
662 
663  for (i = 0; i < nr_elements; i++) {
664  switch (type) {
665  case B43_HTTAB_8BIT:
666  *data = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO) & 0xFF;
667  data++;
668  break;
669  case B43_HTTAB_16BIT:
670  *((u16 *)data) = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
671  data += 2;
672  break;
673  case B43_HTTAB_32BIT:
674  *((u32 *)data) = b43_phy_read(dev, B43_PHY_HT_TABLE_DATAHI);
675  *((u32 *)data) <<= 16;
676  *((u32 *)data) |= b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
677  data += 4;
678  break;
679  default:
680  B43_WARN_ON(1);
681  }
682  }
683 }
684 
686 {
687  u32 type;
688 
689  type = offset & B43_HTTAB_TYPEMASK;
690  offset &= 0xFFFF;
691 
692  switch (type) {
693  case B43_HTTAB_8BIT:
694  B43_WARN_ON(value & ~0xFF);
695  b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
697  break;
698  case B43_HTTAB_16BIT:
699  B43_WARN_ON(value & ~0xFFFF);
700  b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
702  break;
703  case B43_HTTAB_32BIT:
704  b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
705  b43_phy_write(dev, B43_PHY_HT_TABLE_DATAHI, value >> 16);
706  b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value & 0xFFFF);
707  break;
708  default:
709  B43_WARN_ON(1);
710  }
711 
712  return;
713 }
714 
715 void b43_httab_write_few(struct b43_wldev *dev, u32 offset, size_t num, ...)
716 {
717  va_list args;
718  u32 type, value;
719  unsigned int i;
720 
721  type = offset & B43_HTTAB_TYPEMASK;
722  offset &= 0xFFFF;
723 
724  va_start(args, num);
725  switch (type) {
726  case B43_HTTAB_8BIT:
727  b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
728  for (i = 0; i < num; i++) {
729  value = va_arg(args, int);
730  B43_WARN_ON(value & ~0xFF);
732  }
733  break;
734  case B43_HTTAB_16BIT:
735  b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
736  for (i = 0; i < num; i++) {
737  value = va_arg(args, int);
738  B43_WARN_ON(value & ~0xFFFF);
740  }
741  break;
742  case B43_HTTAB_32BIT:
743  b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
744  for (i = 0; i < num; i++) {
745  value = va_arg(args, int);
747  value >> 16);
749  value & 0xFFFF);
750  }
751  break;
752  default:
753  B43_WARN_ON(1);
754  }
755  va_end(args);
756 
757  return;
758 }
759 
761  unsigned int nr_elements, const void *_data)
762 {
763  u32 type, value;
764  const u8 *data = _data;
765  unsigned int i;
766 
767  type = offset & B43_HTTAB_TYPEMASK;
768  offset &= ~B43_HTTAB_TYPEMASK;
769  B43_WARN_ON(offset > 0xFFFF);
770 
771  b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
772 
773  for (i = 0; i < nr_elements; i++) {
774  switch (type) {
775  case B43_HTTAB_8BIT:
776  value = *data;
777  data++;
778  B43_WARN_ON(value & ~0xFF);
780  break;
781  case B43_HTTAB_16BIT:
782  value = *((u16 *)data);
783  data += 2;
784  B43_WARN_ON(value & ~0xFFFF);
786  break;
787  case B43_HTTAB_32BIT:
788  value = *((u32 *)data);
789  data += 4;
790  b43_phy_write(dev, B43_PHY_HT_TABLE_DATAHI, value >> 16);
792  value & 0xFFFF);
793  break;
794  default:
795  B43_WARN_ON(1);
796  }
797  }
798 }
799 
800 /**************************************************
801  * Tables ops.
802  **************************************************/
803 
804 #define httab_upload(dev, offset, data) do { \
805  b43_httab_write_bulk(dev, offset, ARRAY_SIZE(data), data); \
806  } while (0)
808 {
811 
812  httab_upload(dev, B43_HTTAB16(0x12, 0), b43_httab_0x12);
813  httab_upload(dev, B43_HTTAB16(0x27, 0), b43_httab_0x27);
814  httab_upload(dev, B43_HTTAB16(0x26, 0), b43_httab_0x26);
815  httab_upload(dev, B43_HTTAB32(0x25, 0), b43_httab_0x25);
816  httab_upload(dev, B43_HTTAB32(0x2f, 0), b43_httab_0x2f);
817  httab_upload(dev, B43_HTTAB16(0x1a, 0), b43_httab_0x1a);
818  httab_upload(dev, B43_HTTAB16(0x1b, 0), b43_httab_0x1b);
819  httab_upload(dev, B43_HTTAB16(0x1c, 0), b43_httab_0x1c);
820  httab_upload(dev, B43_HTTAB32(0x1a, 0x0c0), b43_httab_0x1a_0xc0);
821  httab_upload(dev, B43_HTTAB32(0x1a, 0x140), b43_httab_0x1a_0x140);
822  httab_upload(dev, B43_HTTAB32(0x1b, 0x140), b43_httab_0x1b_0x140);
823  httab_upload(dev, B43_HTTAB32(0x1c, 0x140), b43_httab_0x1c_0x140);
824  httab_upload(dev, B43_HTTAB16(0x1a, 0x1c0), b43_httab_0x1a_0x1c0);
825  httab_upload(dev, B43_HTTAB16(0x1b, 0x1c0), b43_httab_0x1b_0x1c0);
826  httab_upload(dev, B43_HTTAB16(0x1c, 0x1c0), b43_httab_0x1c_0x1c0);
827  httab_upload(dev, B43_HTTAB16(0x1a, 0x240), b43_httab_0x1a_0x240);
828  httab_upload(dev, B43_HTTAB16(0x1b, 0x240), b43_httab_0x1b_0x240);
829  httab_upload(dev, B43_HTTAB16(0x1c, 0x240), b43_httab_0x1c_0x240);
830  httab_upload(dev, B43_HTTAB32(0x1f, 0), b43_httab_0x1f);
831  httab_upload(dev, B43_HTTAB32(0x21, 0), b43_httab_0x21);
832  httab_upload(dev, B43_HTTAB32(0x23, 0), b43_httab_0x23);
833  httab_upload(dev, B43_HTTAB32(0x20, 0), b43_httab_0x20);
834  httab_upload(dev, B43_HTTAB32(0x22, 0), b43_httab_0x22);
835  httab_upload(dev, B43_HTTAB32(0x24, 0), b43_httab_0x24);
836 }