Loading...
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
28static 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
53static 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
62static 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
87static 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
122static 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
131static 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
145static 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
159static 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
173static 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
208static 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
243static 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
278static 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
313static 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
338static 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
363static 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
388static 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
413static 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
438static 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
463static 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
482static 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
501static 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
520static 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
539static 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
558static 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/**************************************************
578 * R/W ops.
579 **************************************************/
580
581u32 b43_httab_read(struct b43_wldev *dev, u32 offset)
582{
583 u32 type, value;
584
585 type = offset & B43_HTTAB_TYPEMASK;
586 offset &= ~B43_HTTAB_TYPEMASK;
587 B43_WARN_ON(offset > 0xFFFF);
588
589 switch (type) {
590 case B43_HTTAB_8BIT:
591 b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
592 value = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO) & 0xFF;
593 break;
594 case B43_HTTAB_16BIT:
595 b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
596 value = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
597 break;
598 case B43_HTTAB_32BIT:
599 b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
600 value = b43_phy_read(dev, B43_PHY_HT_TABLE_DATAHI);
601 value <<= 16;
602 value |= b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
603 break;
604 default:
605 B43_WARN_ON(1);
606 value = 0;
607 }
608
609 return value;
610}
611
612void b43_httab_read_bulk(struct b43_wldev *dev, u32 offset,
613 unsigned int nr_elements, void *_data)
614{
615 u32 type;
616 u8 *data = _data;
617 unsigned int i;
618
619 type = offset & B43_HTTAB_TYPEMASK;
620 offset &= ~B43_HTTAB_TYPEMASK;
621 B43_WARN_ON(offset > 0xFFFF);
622
623 b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
624
625 for (i = 0; i < nr_elements; i++) {
626 switch (type) {
627 case B43_HTTAB_8BIT:
628 *data = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO) & 0xFF;
629 data++;
630 break;
631 case B43_HTTAB_16BIT:
632 *((u16 *)data) = b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
633 data += 2;
634 break;
635 case B43_HTTAB_32BIT:
636 *((u32 *)data) = b43_phy_read(dev, B43_PHY_HT_TABLE_DATAHI);
637 *((u32 *)data) <<= 16;
638 *((u32 *)data) |= b43_phy_read(dev, B43_PHY_HT_TABLE_DATALO);
639 data += 4;
640 break;
641 default:
642 B43_WARN_ON(1);
643 }
644 }
645}
646
647void b43_httab_write(struct b43_wldev *dev, u32 offset, u32 value)
648{
649 u32 type;
650
651 type = offset & B43_HTTAB_TYPEMASK;
652 offset &= 0xFFFF;
653
654 switch (type) {
655 case B43_HTTAB_8BIT:
656 B43_WARN_ON(value & ~0xFF);
657 b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
658 b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
659 break;
660 case B43_HTTAB_16BIT:
661 B43_WARN_ON(value & ~0xFFFF);
662 b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
663 b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
664 break;
665 case B43_HTTAB_32BIT:
666 b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
667 b43_phy_write(dev, B43_PHY_HT_TABLE_DATAHI, value >> 16);
668 b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value & 0xFFFF);
669 break;
670 default:
671 B43_WARN_ON(1);
672 }
673
674 return;
675}
676
677void b43_httab_write_bulk(struct b43_wldev *dev, u32 offset,
678 unsigned int nr_elements, const void *_data)
679{
680 u32 type, value;
681 const u8 *data = _data;
682 unsigned int i;
683
684 type = offset & B43_HTTAB_TYPEMASK;
685 offset &= ~B43_HTTAB_TYPEMASK;
686 B43_WARN_ON(offset > 0xFFFF);
687
688 b43_phy_write(dev, B43_PHY_HT_TABLE_ADDR, offset);
689
690 for (i = 0; i < nr_elements; i++) {
691 switch (type) {
692 case B43_HTTAB_8BIT:
693 value = *data;
694 data++;
695 B43_WARN_ON(value & ~0xFF);
696 b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
697 break;
698 case B43_HTTAB_16BIT:
699 value = *((u16 *)data);
700 data += 2;
701 B43_WARN_ON(value & ~0xFFFF);
702 b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO, value);
703 break;
704 case B43_HTTAB_32BIT:
705 value = *((u32 *)data);
706 data += 4;
707 b43_phy_write(dev, B43_PHY_HT_TABLE_DATAHI, value >> 16);
708 b43_phy_write(dev, B43_PHY_HT_TABLE_DATALO,
709 value & 0xFFFF);
710 break;
711 default:
712 B43_WARN_ON(1);
713 }
714 }
715}
716
717/**************************************************
718 * Tables ops.
719 **************************************************/
720
721#define httab_upload(dev, offset, data) do { \
722 b43_httab_write_bulk(dev, offset, ARRAY_SIZE(data), data); \
723 } while (0)
724void b43_phy_ht_tables_init(struct b43_wldev *dev)
725{
726 httab_upload(dev, B43_HTTAB16(0x12, 0), b43_httab_0x12);
727 httab_upload(dev, B43_HTTAB16(0x27, 0), b43_httab_0x27);
728 httab_upload(dev, B43_HTTAB16(0x26, 0), b43_httab_0x26);
729 httab_upload(dev, B43_HTTAB32(0x25, 0), b43_httab_0x25);
730 httab_upload(dev, B43_HTTAB32(0x2f, 0), b43_httab_0x2f);
731 httab_upload(dev, B43_HTTAB16(0x1a, 0), b43_httab_0x1a);
732 httab_upload(dev, B43_HTTAB16(0x1b, 0), b43_httab_0x1b);
733 httab_upload(dev, B43_HTTAB16(0x1c, 0), b43_httab_0x1c);
734 httab_upload(dev, B43_HTTAB32(0x1a, 0x0c0), b43_httab_0x1a_0xc0);
735 httab_upload(dev, B43_HTTAB32(0x1a, 0x140), b43_httab_0x1a_0x140);
736 httab_upload(dev, B43_HTTAB32(0x1b, 0x140), b43_httab_0x1b_0x140);
737 httab_upload(dev, B43_HTTAB32(0x1c, 0x140), b43_httab_0x1c_0x140);
738 httab_upload(dev, B43_HTTAB16(0x1a, 0x1c0), b43_httab_0x1a_0x1c0);
739 httab_upload(dev, B43_HTTAB16(0x1b, 0x1c0), b43_httab_0x1b_0x1c0);
740 httab_upload(dev, B43_HTTAB16(0x1c, 0x1c0), b43_httab_0x1c_0x1c0);
741 httab_upload(dev, B43_HTTAB16(0x1a, 0x240), b43_httab_0x1a_0x240);
742 httab_upload(dev, B43_HTTAB16(0x1b, 0x240), b43_httab_0x1b_0x240);
743 httab_upload(dev, B43_HTTAB16(0x1c, 0x240), b43_httab_0x1c_0x240);
744 httab_upload(dev, B43_HTTAB32(0x1f, 0), b43_httab_0x1f);
745 httab_upload(dev, B43_HTTAB32(0x21, 0), b43_httab_0x21);
746 httab_upload(dev, B43_HTTAB32(0x23, 0), b43_httab_0x23);
747 httab_upload(dev, B43_HTTAB32(0x20, 0), b43_httab_0x20);
748 httab_upload(dev, B43_HTTAB32(0x22, 0), b43_httab_0x22);
749 httab_upload(dev, B43_HTTAB32(0x24, 0), b43_httab_0x24);
750}
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
30static 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
55static 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
64static 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
89static 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
124static 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
133static 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
147static 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
161static 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
175static 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
210static 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
245static 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
280static 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
315static 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
340static 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
365static 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
390static 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
415static 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
440static 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
465static 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
484static 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
503static 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
522static 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
541static 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
560static 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 */
580const 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
619u32 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
650void 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
685void 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
715void 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
760void 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)
807void 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}