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