Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / 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   Copyright (c) 2011 Rafał Miłecki <zajec5@gmail.com>
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 */
580 const u32 b43_httab_0x1a_0xc0_late[] = {
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
619 u32 b43_httab_read(struct b43_wldev *dev, u32 offset)
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);
634                 value = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
635                 break;
636         case B43_HTTAB_32BIT:
637                 b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
638                 value = b43_phy_read(dev, B43_PHY_HT_TABLE_DATAHI);
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
650 void b43_httab_read_bulk(struct b43_wldev *dev, u32 offset,
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
685 void b43_httab_write(struct b43_wldev *dev, u32 offset, u32 value)
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);
696                 b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
697                 break;
698         case B43_HTTAB_16BIT:
699                 B43_WARN_ON(value & ~0xFFFF);
700                 b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
701                 b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
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);
731                         b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
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);
739                         b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
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);
746                         b43_phy_write(dev, B43_PHY_HT_TABLE_DATAHI,
747                                       value >> 16);
748                         b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO,
749                                       value & 0xFFFF);
750                 }
751                 break;
752         default:
753                 B43_WARN_ON(1);
754         }
755         va_end(args);
756
757         return;
758 }
759
760 void b43_httab_write_bulk(struct b43_wldev *dev, u32 offset,
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);
779                         b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
780                         break;
781                 case B43_HTTAB_16BIT:
782                         value = *((u16 *)data);
783                         data += 2;
784                         B43_WARN_ON(value & ~0xFFFF);
785                         b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
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);
791                         b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO,
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)
807 void b43_phy_ht_tables_init(struct b43_wldev *dev)
808 {
809         BUILD_BUG_ON(ARRAY_SIZE(b43_httab_0x1a_0xc0_late) !=
810                         B43_HTTAB_1A_C0_LATE_SIZE);
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 }