Linux Audio

Check our new training course

Loading...
v4.6
 
  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}
v6.2
  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
 17static 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
 42static 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
 51static 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
 76static 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
111static 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
120static 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
134static 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
148static 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
162static 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
197static 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
232static 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
267static 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
302static 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
327static 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
352static 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
377static 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
402static 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
427static 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
452static 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
471static 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
490static 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
509static 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
528static 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
547static 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 */
567const 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
606u32 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
637void 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
672void 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
702void 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
747void 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)
794void 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}