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