1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28#include "b43.h"
29#include "tables.h"
30#include "phy_g.h"
31
32
33const u32 b43_tab_rotor[] = {
34 0xFEB93FFD, 0xFEC63FFD,
35 0xFED23FFD, 0xFEDF3FFD,
36 0xFEEC3FFE, 0xFEF83FFE,
37 0xFF053FFE, 0xFF113FFE,
38 0xFF1E3FFE, 0xFF2A3FFF,
39 0xFF373FFF, 0xFF443FFF,
40 0xFF503FFF, 0xFF5D3FFF,
41 0xFF693FFF, 0xFF763FFF,
42 0xFF824000, 0xFF8F4000,
43 0xFF9B4000, 0xFFA84000,
44 0xFFB54000, 0xFFC14000,
45 0xFFCE4000, 0xFFDA4000,
46 0xFFE74000, 0xFFF34000,
47 0x00004000, 0x000D4000,
48 0x00194000, 0x00264000,
49 0x00324000, 0x003F4000,
50 0x004B4000, 0x00584000,
51 0x00654000, 0x00714000,
52 0x007E4000, 0x008A3FFF,
53 0x00973FFF, 0x00A33FFF,
54 0x00B03FFF, 0x00BC3FFF,
55 0x00C93FFF, 0x00D63FFF,
56 0x00E23FFE, 0x00EF3FFE,
57 0x00FB3FFE, 0x01083FFE,
58 0x01143FFE, 0x01213FFD,
59 0x012E3FFD, 0x013A3FFD,
60 0x01473FFD,
61};
62
63const u32 b43_tab_retard[] = {
64 0xDB93CB87, 0xD666CF64,
65 0xD1FDD358, 0xCDA6D826,
66 0xCA38DD9F, 0xC729E2B4,
67 0xC469E88E, 0xC26AEE2B,
68 0xC0DEF46C, 0xC073FA62,
69 0xC01D00D5, 0xC0760743,
70 0xC1560D1E, 0xC2E51369,
71 0xC4ED18FF, 0xC7AC1ED7,
72 0xCB2823B2, 0xCEFA28D9,
73 0xD2F62D3F, 0xD7BB3197,
74 0xDCE53568, 0xE1FE3875,
75 0xE7D13B35, 0xED663D35,
76 0xF39B3EC4, 0xF98E3FA7,
77 0x00004000, 0x06723FA7,
78 0x0C653EC4, 0x129A3D35,
79 0x182F3B35, 0x1E023875,
80 0x231B3568, 0x28453197,
81 0x2D0A2D3F, 0x310628D9,
82 0x34D823B2, 0x38541ED7,
83 0x3B1318FF, 0x3D1B1369,
84 0x3EAA0D1E, 0x3F8A0743,
85 0x3FE300D5, 0x3F8DFA62,
86 0x3F22F46C, 0x3D96EE2B,
87 0x3B97E88E, 0x38D7E2B4,
88 0x35C8DD9F, 0x325AD826,
89 0x2E03D358, 0x299ACF64,
90 0x246DCB87,
91};
92
93const u16 b43_tab_finefreqa[] = {
94 0x0082, 0x0082, 0x0102, 0x0182,
95 0x0202, 0x0282, 0x0302, 0x0382,
96 0x0402, 0x0482, 0x0502, 0x0582,
97 0x05E2, 0x0662, 0x06E2, 0x0762,
98 0x07E2, 0x0842, 0x08C2, 0x0942,
99 0x09C2, 0x0A22, 0x0AA2, 0x0B02,
100 0x0B82, 0x0BE2, 0x0C62, 0x0CC2,
101 0x0D42, 0x0DA2, 0x0E02, 0x0E62,
102 0x0EE2, 0x0F42, 0x0FA2, 0x1002,
103 0x1062, 0x10C2, 0x1122, 0x1182,
104 0x11E2, 0x1242, 0x12A2, 0x12E2,
105 0x1342, 0x13A2, 0x1402, 0x1442,
106 0x14A2, 0x14E2, 0x1542, 0x1582,
107 0x15E2, 0x1622, 0x1662, 0x16C1,
108 0x1701, 0x1741, 0x1781, 0x17E1,
109 0x1821, 0x1861, 0x18A1, 0x18E1,
110 0x1921, 0x1961, 0x19A1, 0x19E1,
111 0x1A21, 0x1A61, 0x1AA1, 0x1AC1,
112 0x1B01, 0x1B41, 0x1B81, 0x1BA1,
113 0x1BE1, 0x1C21, 0x1C41, 0x1C81,
114 0x1CA1, 0x1CE1, 0x1D01, 0x1D41,
115 0x1D61, 0x1DA1, 0x1DC1, 0x1E01,
116 0x1E21, 0x1E61, 0x1E81, 0x1EA1,
117 0x1EE1, 0x1F01, 0x1F21, 0x1F41,
118 0x1F81, 0x1FA1, 0x1FC1, 0x1FE1,
119 0x2001, 0x2041, 0x2061, 0x2081,
120 0x20A1, 0x20C1, 0x20E1, 0x2101,
121 0x2121, 0x2141, 0x2161, 0x2181,
122 0x21A1, 0x21C1, 0x21E1, 0x2201,
123 0x2221, 0x2241, 0x2261, 0x2281,
124 0x22A1, 0x22C1, 0x22C1, 0x22E1,
125 0x2301, 0x2321, 0x2341, 0x2361,
126 0x2361, 0x2381, 0x23A1, 0x23C1,
127 0x23E1, 0x23E1, 0x2401, 0x2421,
128 0x2441, 0x2441, 0x2461, 0x2481,
129 0x2481, 0x24A1, 0x24C1, 0x24C1,
130 0x24E1, 0x2501, 0x2501, 0x2521,
131 0x2541, 0x2541, 0x2561, 0x2561,
132 0x2581, 0x25A1, 0x25A1, 0x25C1,
133 0x25C1, 0x25E1, 0x2601, 0x2601,
134 0x2621, 0x2621, 0x2641, 0x2641,
135 0x2661, 0x2661, 0x2681, 0x2681,
136 0x26A1, 0x26A1, 0x26C1, 0x26C1,
137 0x26E1, 0x26E1, 0x2701, 0x2701,
138 0x2721, 0x2721, 0x2740, 0x2740,
139 0x2760, 0x2760, 0x2780, 0x2780,
140 0x2780, 0x27A0, 0x27A0, 0x27C0,
141 0x27C0, 0x27E0, 0x27E0, 0x27E0,
142 0x2800, 0x2800, 0x2820, 0x2820,
143 0x2820, 0x2840, 0x2840, 0x2840,
144 0x2860, 0x2860, 0x2880, 0x2880,
145 0x2880, 0x28A0, 0x28A0, 0x28A0,
146 0x28C0, 0x28C0, 0x28C0, 0x28E0,
147 0x28E0, 0x28E0, 0x2900, 0x2900,
148 0x2900, 0x2920, 0x2920, 0x2920,
149 0x2940, 0x2940, 0x2940, 0x2960,
150 0x2960, 0x2960, 0x2960, 0x2980,
151 0x2980, 0x2980, 0x29A0, 0x29A0,
152 0x29A0, 0x29A0, 0x29C0, 0x29C0,
153 0x29C0, 0x29E0, 0x29E0, 0x29E0,
154 0x29E0, 0x2A00, 0x2A00, 0x2A00,
155 0x2A00, 0x2A20, 0x2A20, 0x2A20,
156 0x2A20, 0x2A40, 0x2A40, 0x2A40,
157 0x2A40, 0x2A60, 0x2A60, 0x2A60,
158};
159
160const u16 b43_tab_finefreqg[] = {
161 0x0089, 0x02E9, 0x0409, 0x04E9,
162 0x05A9, 0x0669, 0x0709, 0x0789,
163 0x0829, 0x08A9, 0x0929, 0x0989,
164 0x0A09, 0x0A69, 0x0AC9, 0x0B29,
165 0x0BA9, 0x0BE9, 0x0C49, 0x0CA9,
166 0x0D09, 0x0D69, 0x0DA9, 0x0E09,
167 0x0E69, 0x0EA9, 0x0F09, 0x0F49,
168 0x0FA9, 0x0FE9, 0x1029, 0x1089,
169 0x10C9, 0x1109, 0x1169, 0x11A9,
170 0x11E9, 0x1229, 0x1289, 0x12C9,
171 0x1309, 0x1349, 0x1389, 0x13C9,
172 0x1409, 0x1449, 0x14A9, 0x14E9,
173 0x1529, 0x1569, 0x15A9, 0x15E9,
174 0x1629, 0x1669, 0x16A9, 0x16E8,
175 0x1728, 0x1768, 0x17A8, 0x17E8,
176 0x1828, 0x1868, 0x18A8, 0x18E8,
177 0x1928, 0x1968, 0x19A8, 0x19E8,
178 0x1A28, 0x1A68, 0x1AA8, 0x1AE8,
179 0x1B28, 0x1B68, 0x1BA8, 0x1BE8,
180 0x1C28, 0x1C68, 0x1CA8, 0x1CE8,
181 0x1D28, 0x1D68, 0x1DC8, 0x1E08,
182 0x1E48, 0x1E88, 0x1EC8, 0x1F08,
183 0x1F48, 0x1F88, 0x1FE8, 0x2028,
184 0x2068, 0x20A8, 0x2108, 0x2148,
185 0x2188, 0x21C8, 0x2228, 0x2268,
186 0x22C8, 0x2308, 0x2348, 0x23A8,
187 0x23E8, 0x2448, 0x24A8, 0x24E8,
188 0x2548, 0x25A8, 0x2608, 0x2668,
189 0x26C8, 0x2728, 0x2787, 0x27E7,
190 0x2847, 0x28C7, 0x2947, 0x29A7,
191 0x2A27, 0x2AC7, 0x2B47, 0x2BE7,
192 0x2CA7, 0x2D67, 0x2E47, 0x2F67,
193 0x3247, 0x3526, 0x3646, 0x3726,
194 0x3806, 0x38A6, 0x3946, 0x39E6,
195 0x3A66, 0x3AE6, 0x3B66, 0x3BC6,
196 0x3C45, 0x3CA5, 0x3D05, 0x3D85,
197 0x3DE5, 0x3E45, 0x3EA5, 0x3EE5,
198 0x3F45, 0x3FA5, 0x4005, 0x4045,
199 0x40A5, 0x40E5, 0x4145, 0x4185,
200 0x41E5, 0x4225, 0x4265, 0x42C5,
201 0x4305, 0x4345, 0x43A5, 0x43E5,
202 0x4424, 0x4464, 0x44C4, 0x4504,
203 0x4544, 0x4584, 0x45C4, 0x4604,
204 0x4644, 0x46A4, 0x46E4, 0x4724,
205 0x4764, 0x47A4, 0x47E4, 0x4824,
206 0x4864, 0x48A4, 0x48E4, 0x4924,
207 0x4964, 0x49A4, 0x49E4, 0x4A24,
208 0x4A64, 0x4AA4, 0x4AE4, 0x4B23,
209 0x4B63, 0x4BA3, 0x4BE3, 0x4C23,
210 0x4C63, 0x4CA3, 0x4CE3, 0x4D23,
211 0x4D63, 0x4DA3, 0x4DE3, 0x4E23,
212 0x4E63, 0x4EA3, 0x4EE3, 0x4F23,
213 0x4F63, 0x4FC3, 0x5003, 0x5043,
214 0x5083, 0x50C3, 0x5103, 0x5143,
215 0x5183, 0x51E2, 0x5222, 0x5262,
216 0x52A2, 0x52E2, 0x5342, 0x5382,
217 0x53C2, 0x5402, 0x5462, 0x54A2,
218 0x5502, 0x5542, 0x55A2, 0x55E2,
219 0x5642, 0x5682, 0x56E2, 0x5722,
220 0x5782, 0x57E1, 0x5841, 0x58A1,
221 0x5901, 0x5961, 0x59C1, 0x5A21,
222 0x5AA1, 0x5B01, 0x5B81, 0x5BE1,
223 0x5C61, 0x5D01, 0x5D80, 0x5E20,
224 0x5EE0, 0x5FA0, 0x6080, 0x61C0,
225};
226
227const u16 b43_tab_noisea2[] = {
228 0x0001, 0x0001, 0x0001, 0xFFFE,
229 0xFFFE, 0x3FFF, 0x1000, 0x0393,
230};
231
232const u16 b43_tab_noisea3[] = {
233 0x5E5E, 0x5E5E, 0x5E5E, 0x3F48,
234 0x4C4C, 0x4C4C, 0x4C4C, 0x2D36,
235};
236
237const u16 b43_tab_noiseg1[] = {
238 0x013C, 0x01F5, 0x031A, 0x0631,
239 0x0001, 0x0001, 0x0001, 0x0001,
240};
241
242const u16 b43_tab_noiseg2[] = {
243 0x5484, 0x3C40, 0x0000, 0x0000,
244 0x0000, 0x0000, 0x0000, 0x0000,
245};
246
247const u16 b43_tab_noisescalea2[] = {
248 0x6767, 0x6767, 0x6767, 0x6767,
249 0x6767, 0x6767, 0x6767, 0x6767,
250 0x6767, 0x6767, 0x6767, 0x6767,
251 0x6767, 0x6700, 0x6767, 0x6767,
252 0x6767, 0x6767, 0x6767, 0x6767,
253 0x6767, 0x6767, 0x6767, 0x6767,
254 0x6767, 0x6767, 0x0067,
255};
256
257const u16 b43_tab_noisescalea3[] = {
258 0x2323, 0x2323, 0x2323, 0x2323,
259 0x2323, 0x2323, 0x2323, 0x2323,
260 0x2323, 0x2323, 0x2323, 0x2323,
261 0x2323, 0x2300, 0x2323, 0x2323,
262 0x2323, 0x2323, 0x2323, 0x2323,
263 0x2323, 0x2323, 0x2323, 0x2323,
264 0x2323, 0x2323, 0x0023,
265};
266
267const u16 b43_tab_noisescaleg1[] = {
268 0x6C77, 0x5162, 0x3B40, 0x3335,
269 0x2F2D, 0x2A2A, 0x2527, 0x1F21,
270 0x1A1D, 0x1719, 0x1616, 0x1414,
271 0x1414, 0x1400, 0x1414, 0x1614,
272 0x1716, 0x1A19, 0x1F1D, 0x2521,
273 0x2A27, 0x2F2A, 0x332D, 0x3B35,
274 0x5140, 0x6C62, 0x0077,
275};
276
277const u16 b43_tab_noisescaleg2[] = {
278 0xD8DD, 0xCBD4, 0xBCC0, 0xB6B7,
279 0xB2B0, 0xADAD, 0xA7A9, 0x9FA1,
280 0x969B, 0x9195, 0x8F8F, 0x8A8A,
281 0x8A8A, 0x8A00, 0x8A8A, 0x8F8A,
282 0x918F, 0x9695, 0x9F9B, 0xA7A1,
283 0xADA9, 0xB2AD, 0xB6B0, 0xBCB7,
284 0xCBC0, 0xD8D4, 0x00DD,
285};
286
287const u16 b43_tab_noisescaleg3[] = {
288 0xA4A4, 0xA4A4, 0xA4A4, 0xA4A4,
289 0xA4A4, 0xA4A4, 0xA4A4, 0xA4A4,
290 0xA4A4, 0xA4A4, 0xA4A4, 0xA4A4,
291 0xA4A4, 0xA400, 0xA4A4, 0xA4A4,
292 0xA4A4, 0xA4A4, 0xA4A4, 0xA4A4,
293 0xA4A4, 0xA4A4, 0xA4A4, 0xA4A4,
294 0xA4A4, 0xA4A4, 0x00A4,
295};
296
297const u16 b43_tab_sigmasqr1[] = {
298 0x007A, 0x0075, 0x0071, 0x006C,
299 0x0067, 0x0063, 0x005E, 0x0059,
300 0x0054, 0x0050, 0x004B, 0x0046,
301 0x0042, 0x003D, 0x003D, 0x003D,
302 0x003D, 0x003D, 0x003D, 0x003D,
303 0x003D, 0x003D, 0x003D, 0x003D,
304 0x003D, 0x003D, 0x0000, 0x003D,
305 0x003D, 0x003D, 0x003D, 0x003D,
306 0x003D, 0x003D, 0x003D, 0x003D,
307 0x003D, 0x003D, 0x003D, 0x003D,
308 0x0042, 0x0046, 0x004B, 0x0050,
309 0x0054, 0x0059, 0x005E, 0x0063,
310 0x0067, 0x006C, 0x0071, 0x0075,
311 0x007A,
312};
313
314const u16 b43_tab_sigmasqr2[] = {
315 0x00DE, 0x00DC, 0x00DA, 0x00D8,
316 0x00D6, 0x00D4, 0x00D2, 0x00CF,
317 0x00CD, 0x00CA, 0x00C7, 0x00C4,
318 0x00C1, 0x00BE, 0x00BE, 0x00BE,
319 0x00BE, 0x00BE, 0x00BE, 0x00BE,
320 0x00BE, 0x00BE, 0x00BE, 0x00BE,
321 0x00BE, 0x00BE, 0x0000, 0x00BE,
322 0x00BE, 0x00BE, 0x00BE, 0x00BE,
323 0x00BE, 0x00BE, 0x00BE, 0x00BE,
324 0x00BE, 0x00BE, 0x00BE, 0x00BE,
325 0x00C1, 0x00C4, 0x00C7, 0x00CA,
326 0x00CD, 0x00CF, 0x00D2, 0x00D4,
327 0x00D6, 0x00D8, 0x00DA, 0x00DC,
328 0x00DE,
329};
330
331const u16 b43_tab_rssiagc1[] = {
332 0xFFF8, 0xFFF8, 0xFFF8, 0xFFF8,
333 0xFFF8, 0xFFF9, 0xFFFC, 0xFFFE,
334 0xFFF8, 0xFFF8, 0xFFF8, 0xFFF8,
335 0xFFF8, 0xFFF8, 0xFFF8, 0xFFF8,
336};
337
338const u16 b43_tab_rssiagc2[] = {
339 0x0820, 0x0820, 0x0920, 0x0C38,
340 0x0820, 0x0820, 0x0820, 0x0820,
341 0x0820, 0x0820, 0x0920, 0x0A38,
342 0x0820, 0x0820, 0x0820, 0x0820,
343 0x0820, 0x0820, 0x0920, 0x0A38,
344 0x0820, 0x0820, 0x0820, 0x0820,
345 0x0820, 0x0820, 0x0920, 0x0A38,
346 0x0820, 0x0820, 0x0820, 0x0820,
347 0x0820, 0x0820, 0x0920, 0x0A38,
348 0x0820, 0x0820, 0x0820, 0x0820,
349 0x0820, 0x0820, 0x0920, 0x0A38,
350 0x0820, 0x0820, 0x0820, 0x0820,
351};
352
353static inline void assert_sizes(void)
354{
355 BUILD_BUG_ON(B43_TAB_ROTOR_SIZE != ARRAY_SIZE(b43_tab_rotor));
356 BUILD_BUG_ON(B43_TAB_RETARD_SIZE != ARRAY_SIZE(b43_tab_retard));
357 BUILD_BUG_ON(B43_TAB_FINEFREQA_SIZE != ARRAY_SIZE(b43_tab_finefreqa));
358 BUILD_BUG_ON(B43_TAB_FINEFREQG_SIZE != ARRAY_SIZE(b43_tab_finefreqg));
359 BUILD_BUG_ON(B43_TAB_NOISEA2_SIZE != ARRAY_SIZE(b43_tab_noisea2));
360 BUILD_BUG_ON(B43_TAB_NOISEA3_SIZE != ARRAY_SIZE(b43_tab_noisea3));
361 BUILD_BUG_ON(B43_TAB_NOISEG1_SIZE != ARRAY_SIZE(b43_tab_noiseg1));
362 BUILD_BUG_ON(B43_TAB_NOISEG2_SIZE != ARRAY_SIZE(b43_tab_noiseg2));
363 BUILD_BUG_ON(B43_TAB_NOISESCALE_SIZE !=
364 ARRAY_SIZE(b43_tab_noisescalea2));
365 BUILD_BUG_ON(B43_TAB_NOISESCALE_SIZE !=
366 ARRAY_SIZE(b43_tab_noisescalea3));
367 BUILD_BUG_ON(B43_TAB_NOISESCALE_SIZE !=
368 ARRAY_SIZE(b43_tab_noisescaleg1));
369 BUILD_BUG_ON(B43_TAB_NOISESCALE_SIZE !=
370 ARRAY_SIZE(b43_tab_noisescaleg2));
371 BUILD_BUG_ON(B43_TAB_NOISESCALE_SIZE !=
372 ARRAY_SIZE(b43_tab_noisescaleg3));
373 BUILD_BUG_ON(B43_TAB_SIGMASQR_SIZE != ARRAY_SIZE(b43_tab_sigmasqr1));
374 BUILD_BUG_ON(B43_TAB_SIGMASQR_SIZE != ARRAY_SIZE(b43_tab_sigmasqr2));
375 BUILD_BUG_ON(B43_TAB_RSSIAGC1_SIZE != ARRAY_SIZE(b43_tab_rssiagc1));
376 BUILD_BUG_ON(B43_TAB_RSSIAGC2_SIZE != ARRAY_SIZE(b43_tab_rssiagc2));
377}
378
379u16 b43_ofdmtab_read16(struct b43_wldev *dev, u16 table, u16 offset)
380{
381 struct b43_phy_g *gphy = dev->phy.g;
382 u16 addr;
383
384 addr = table + offset;
385 if ((gphy->ofdmtab_addr_direction != B43_OFDMTAB_DIRECTION_READ) ||
386 (addr - 1 != gphy->ofdmtab_addr)) {
387
388 b43_phy_write(dev, B43_PHY_OTABLECTL, addr);
389 gphy->ofdmtab_addr_direction = B43_OFDMTAB_DIRECTION_READ;
390 }
391 gphy->ofdmtab_addr = addr;
392
393 return b43_phy_read(dev, B43_PHY_OTABLEI);
394
395
396 assert_sizes();
397}
398
399void b43_ofdmtab_write16(struct b43_wldev *dev, u16 table,
400 u16 offset, u16 value)
401{
402 struct b43_phy_g *gphy = dev->phy.g;
403 u16 addr;
404
405 addr = table + offset;
406 if ((gphy->ofdmtab_addr_direction != B43_OFDMTAB_DIRECTION_WRITE) ||
407 (addr - 1 != gphy->ofdmtab_addr)) {
408
409 b43_phy_write(dev, B43_PHY_OTABLECTL, addr);
410 gphy->ofdmtab_addr_direction = B43_OFDMTAB_DIRECTION_WRITE;
411 }
412 gphy->ofdmtab_addr = addr;
413 b43_phy_write(dev, B43_PHY_OTABLEI, value);
414}
415
416u32 b43_ofdmtab_read32(struct b43_wldev *dev, u16 table, u16 offset)
417{
418 struct b43_phy_g *gphy = dev->phy.g;
419 u32 ret;
420 u16 addr;
421
422 addr = table + offset;
423 if ((gphy->ofdmtab_addr_direction != B43_OFDMTAB_DIRECTION_READ) ||
424 (addr - 1 != gphy->ofdmtab_addr)) {
425
426 b43_phy_write(dev, B43_PHY_OTABLECTL, addr);
427 gphy->ofdmtab_addr_direction = B43_OFDMTAB_DIRECTION_READ;
428 }
429 gphy->ofdmtab_addr = addr;
430 ret = b43_phy_read(dev, B43_PHY_OTABLEQ);
431 ret <<= 16;
432 ret |= b43_phy_read(dev, B43_PHY_OTABLEI);
433
434 return ret;
435}
436
437void b43_ofdmtab_write32(struct b43_wldev *dev, u16 table,
438 u16 offset, u32 value)
439{
440 struct b43_phy_g *gphy = dev->phy.g;
441 u16 addr;
442
443 addr = table + offset;
444 if ((gphy->ofdmtab_addr_direction != B43_OFDMTAB_DIRECTION_WRITE) ||
445 (addr - 1 != gphy->ofdmtab_addr)) {
446
447 b43_phy_write(dev, B43_PHY_OTABLECTL, addr);
448 gphy->ofdmtab_addr_direction = B43_OFDMTAB_DIRECTION_WRITE;
449 }
450 gphy->ofdmtab_addr = addr;
451
452 b43_phy_write(dev, B43_PHY_OTABLEI, value);
453 b43_phy_write(dev, B43_PHY_OTABLEQ, (value >> 16));
454}
455
456u16 b43_gtab_read(struct b43_wldev *dev, u16 table, u16 offset)
457{
458 b43_phy_write(dev, B43_PHY_GTABCTL, table + offset);
459 return b43_phy_read(dev, B43_PHY_GTABDATA);
460}
461
462void b43_gtab_write(struct b43_wldev *dev, u16 table, u16 offset, u16 value)
463{
464 b43_phy_write(dev, B43_PHY_GTABCTL, table + offset);
465 b43_phy_write(dev, B43_PHY_GTABDATA, value);
466}
467