b43: LCN-PHY: put tables functions in correct file
[deliverable/linux.git] / drivers / net / wireless / b43 / tables_phy_lcn.c
CommitLineData
1d738e64
RM
1/*
2
3 Broadcom B43 wireless driver
4 IEEE 802.11n LCN-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_lcn.h"
25#include "phy_common.h"
26#include "phy_lcn.h"
27
ba2d00e8
RM
28static const u16 b43_lcntab_0x02[] = {
29 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d,
30 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d,
31 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d,
32 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d,
33 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d,
34 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d,
35 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d,
36 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d,
37 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d,
38 0x014d, 0x014d, 0x014d, 0x014d, 0x014d, 0x014d,
39 0x014d, 0x014d, 0x014d, 0x014d,
40};
41
42static const u16 b43_lcntab_0x01[] = {
43 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
44 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
45 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
46 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
47 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
48 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
49 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
50 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
51 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
52 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
53 0x0000, 0x0000, 0x0000, 0x0000,
54};
55
56static const u32 b43_lcntab_0x0b[] = {
57 0x000141f8, 0x000021f8, 0x000021fb, 0x000041fb,
58 0x0001fedb, 0x0000217b, 0x00002133, 0x000040eb,
59 0x0001fea3, 0x0000024b,
60};
61
62static const u32 b43_lcntab_0x0c[] = {
63 0x00100001, 0x00200010, 0x00300001, 0x00400010,
64 0x00500022, 0x00600122, 0x00700222, 0x00800322,
65 0x00900422, 0x00a00522, 0x00b00622, 0x00c00722,
66 0x00d00822, 0x00f00922, 0x00100a22, 0x00200b22,
67 0x00300c22, 0x00400d22, 0x00500e22, 0x00600f22,
68};
69
70static const u32 b43_lcntab_0x0d[] = {
71 0x00000000, 0x00000000, 0x10000000, 0x00000000,
72 0x20000000, 0x00000000, 0x30000000, 0x00000000,
73 0x40000000, 0x00000000, 0x50000000, 0x00000000,
74 0x60000000, 0x00000000, 0x70000000, 0x00000000,
75 0x80000000, 0x00000000, 0x90000000, 0x00000008,
76 0xa0000000, 0x00000008, 0xb0000000, 0x00000008,
77 0xc0000000, 0x00000008, 0xd0000000, 0x00000008,
78 0xe0000000, 0x00000008, 0xf0000000, 0x00000008,
79 0x00000000, 0x00000009, 0x10000000, 0x00000009,
80 0x20000000, 0x00000019, 0x30000000, 0x00000019,
81 0x40000000, 0x00000019, 0x50000000, 0x00000019,
82 0x60000000, 0x00000019, 0x70000000, 0x00000019,
83 0x80000000, 0x00000019, 0x90000000, 0x00000019,
84 0xa0000000, 0x00000019, 0xb0000000, 0x00000019,
85 0xc0000000, 0x00000019, 0xd0000000, 0x00000019,
86 0xe0000000, 0x00000019, 0xf0000000, 0x00000019,
87 0x00000000, 0x0000001a, 0x10000000, 0x0000001a,
88 0x20000000, 0x0000001a, 0x30000000, 0x0000001a,
89 0x40000000, 0x0000001a, 0x50000000, 0x00000002,
90 0x60000000, 0x00000002, 0x70000000, 0x00000002,
91 0x80000000, 0x00000002, 0x90000000, 0x00000002,
92 0xa0000000, 0x00000002, 0xb0000000, 0x00000002,
93 0xc0000000, 0x0000000a, 0xd0000000, 0x0000000a,
94 0xe0000000, 0x0000000a, 0xf0000000, 0x0000000a,
95 0x00000000, 0x0000000b, 0x10000000, 0x0000000b,
96 0x20000000, 0x0000000b, 0x30000000, 0x0000000b,
97 0x40000000, 0x0000000b, 0x50000000, 0x0000001b,
98 0x60000000, 0x0000001b, 0x70000000, 0x0000001b,
99 0x80000000, 0x0000001b, 0x90000000, 0x0000001b,
100 0xa0000000, 0x0000001b, 0xb0000000, 0x0000001b,
101 0xc0000000, 0x0000001b, 0xd0000000, 0x0000001b,
102 0xe0000000, 0x0000001b, 0xf0000000, 0x0000001b,
103 0x00000000, 0x0000001c, 0x10000000, 0x0000001c,
104 0x20000000, 0x0000001c, 0x30000000, 0x0000001c,
105 0x40000000, 0x0000001c, 0x50000000, 0x0000001c,
106 0x60000000, 0x0000001c, 0x70000000, 0x0000001c,
107 0x80000000, 0x0000001c, 0x90000000, 0x0000001c,
108};
109
110static const u16 b43_lcntab_0x0e[] = {
111 0x0401, 0x0402, 0x0403, 0x0404, 0x0405, 0x0406,
112 0x0407, 0x0408, 0x0409, 0x040a, 0x058b, 0x058c,
113 0x058d, 0x058e, 0x058f, 0x0090, 0x0091, 0x0092,
114 0x0193, 0x0194, 0x0195, 0x0196, 0x0197, 0x0198,
115 0x0199, 0x019a, 0x019b, 0x019c, 0x019d, 0x019e,
116 0x019f, 0x01a0, 0x01a1, 0x01a2, 0x01a3, 0x01a4,
117 0x01a5, 0x0000,
118};
119
120static const u16 b43_lcntab_0x0f[] = {
121 0x000a, 0x0009, 0x0006, 0x0005, 0x000a, 0x0009,
122 0x0006, 0x0005, 0x000a, 0x0009, 0x0006, 0x0005,
123 0x000a, 0x0009, 0x0006, 0x0005, 0x000a, 0x0009,
124 0x0006, 0x0005, 0x000a, 0x0009, 0x0006, 0x0005,
125 0x000a, 0x0009, 0x0006, 0x0005, 0x000a, 0x0009,
126 0x0006, 0x0005, 0x000a, 0x0009, 0x0006, 0x0005,
127 0x000a, 0x0009, 0x0006, 0x0005, 0x000a, 0x0009,
128 0x0006, 0x0005, 0x000a, 0x0009, 0x0006, 0x0005,
129 0x000a, 0x0009, 0x0006, 0x0005, 0x000a, 0x0009,
130 0x0006, 0x0005, 0x000a, 0x0009, 0x0006, 0x0005,
131 0x000a, 0x0009, 0x0006, 0x0005,
132};
133
134static const u16 b43_lcntab_0x10[] = {
135 0x005f, 0x0036, 0x0029, 0x001f, 0x005f, 0x0036,
136 0x0029, 0x001f, 0x005f, 0x0036, 0x0029, 0x001f,
137 0x005f, 0x0036, 0x0029, 0x001f,
138};
139
140static const u16 b43_lcntab_0x11[] = {
141 0x0009, 0x000f, 0x0014, 0x0018, 0x00fe, 0x0007,
142 0x000b, 0x000f, 0x00fb, 0x00fe, 0x0001, 0x0005,
143 0x0008, 0x000b, 0x000e, 0x0011, 0x0014, 0x0017,
144 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
145 0x0000, 0x0003, 0x0006, 0x0009, 0x000c, 0x000f,
146 0x0012, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
147 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0003,
148 0x0006, 0x0009, 0x000c, 0x000f, 0x0012, 0x0015,
149 0x0018, 0x001b, 0x0000, 0x0000, 0x0000, 0x0000,
150 0x0000, 0x0000, 0x0003, 0x00eb, 0x0000, 0x0000,
151};
152
153static const u32 b43_lcntab_0x12[] = {
154 0x00000000, 0x00000000, 0x00000000, 0x00000000,
155 0x00000000, 0x00000000, 0x00000000, 0x00000000,
156 0x00000004, 0x00000000, 0x00000004, 0x00000008,
157 0x00000001, 0x00000005, 0x00000009, 0x0000000d,
158 0x0000004d, 0x0000008d, 0x0000000d, 0x0000004d,
159 0x0000008d, 0x000000cd, 0x0000004f, 0x0000008f,
160 0x000000cf, 0x000000d3, 0x00000113, 0x00000513,
161 0x00000913, 0x00000953, 0x00000d53, 0x00001153,
162 0x00001193, 0x00005193, 0x00009193, 0x0000d193,
163 0x00011193, 0x00000000, 0x00000000, 0x00000000,
164 0x00000000, 0x00000000, 0x00000000, 0x00000004,
165 0x00000000, 0x00000004, 0x00000008, 0x00000001,
166 0x00000005, 0x00000009, 0x0000000d, 0x0000004d,
167 0x0000008d, 0x0000000d, 0x0000004d, 0x0000008d,
168 0x000000cd, 0x0000004f, 0x0000008f, 0x000000cf,
169 0x000000d3, 0x00000113, 0x00000513, 0x00000913,
170 0x00000953, 0x00000d53, 0x00001153, 0x00005153,
171 0x00009153, 0x0000d153, 0x00011153, 0x00015153,
172 0x00019153, 0x0001d153, 0x00000000, 0x00000000,
173 0x00000000, 0x00000000, 0x00000000, 0x00000000,
174 0x00000000, 0x00000000, 0x00000000, 0x00000000,
175 0x00000000, 0x00000000, 0x00000000, 0x00000000,
176 0x00000000, 0x00000000, 0x00000000, 0x00000000,
177 0x00000000, 0x00000000, 0x00000000, 0x00000000,
178};
179
180static const u16 b43_lcntab_0x14[] = {
181 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
182 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
183 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
184 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
185 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
186 0x0002, 0x0003, 0x0001, 0x0003, 0x0002, 0x0001,
187 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
188 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
189 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
190 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
191 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
192 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
193 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
194 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
195 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
196 0x0001, 0x0001, 0x0001, 0x0001, 0x0002, 0x0003,
197 0x0001, 0x0003, 0x0002, 0x0001, 0x0001, 0x0001,
198 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
199 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
200 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
201 0x0001, 0x0001, 0x0001, 0x0001, 0x0001, 0x0001,
202 0x0001, 0x0001,
203};
204
205static const u16 b43_lcntab_0x17[] = {
206 0x001a, 0x0034, 0x004e, 0x0068, 0x009c, 0x00d0,
207 0x00ea, 0x0104, 0x0034, 0x0068, 0x009c, 0x00d0,
208 0x0138, 0x01a0, 0x01d4, 0x0208, 0x004e, 0x009c,
209 0x00ea, 0x0138, 0x01d4, 0x0270, 0x02be, 0x030c,
210 0x0068, 0x00d0, 0x0138, 0x01a0, 0x0270, 0x0340,
211 0x03a8, 0x0410, 0x0018, 0x009c, 0x00d0, 0x0104,
212 0x00ea, 0x0138, 0x0186, 0x00d0, 0x0104, 0x0104,
213 0x0138, 0x016c, 0x016c, 0x01a0, 0x0138, 0x0186,
214 0x0186, 0x01d4, 0x0222, 0x0222, 0x0270, 0x0104,
215 0x0138, 0x016c, 0x0138, 0x016c, 0x01a0, 0x01d4,
216 0x01a0, 0x01d4, 0x0208, 0x0208, 0x023c, 0x0186,
217 0x01d4, 0x0222, 0x01d4, 0x0222, 0x0270, 0x02be,
218 0x0270, 0x02be, 0x030c, 0x030c, 0x035a, 0x0036,
219 0x006c, 0x00a2, 0x00d8, 0x0144, 0x01b0, 0x01e6,
220 0x021c, 0x006c, 0x00d8, 0x0144, 0x01b0, 0x0288,
221 0x0360, 0x03cc, 0x0438, 0x00a2, 0x0144, 0x01e6,
222 0x0288, 0x03cc, 0x0510, 0x05b2, 0x0654, 0x00d8,
223 0x01b0, 0x0288, 0x0360, 0x0510, 0x06c0, 0x0798,
224 0x0870, 0x0018, 0x0144, 0x01b0, 0x021c, 0x01e6,
225 0x0288, 0x032a, 0x01b0, 0x021c, 0x021c, 0x0288,
226 0x02f4, 0x02f4, 0x0360, 0x0288, 0x032a, 0x032a,
227 0x03cc, 0x046e, 0x046e, 0x0510, 0x021c, 0x0288,
228 0x02f4, 0x0288, 0x02f4, 0x0360, 0x03cc, 0x0360,
229 0x03cc, 0x0438, 0x0438, 0x04a4, 0x032a, 0x03cc,
230 0x046e, 0x03cc, 0x046e, 0x0510, 0x05b2, 0x0510,
231 0x05b2, 0x0654, 0x0654, 0x06f6,
232};
233
234static const u16 b43_lcntab_0x00[] = {
235 0x0200, 0x0300, 0x0400, 0x0600, 0x0800, 0x0b00,
236 0x1000, 0x1001, 0x1002, 0x1003, 0x1004, 0x1005,
237 0x1006, 0x1007, 0x1707, 0x2007, 0x2d07, 0x4007,
238 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
239 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
240 0x0000, 0x0000, 0x0200, 0x0300, 0x0400, 0x0600,
241 0x0800, 0x0b00, 0x1000, 0x1001, 0x1002, 0x1003,
242 0x1004, 0x1005, 0x1006, 0x1007, 0x1707, 0x2007,
243 0x2d07, 0x4007, 0x0000, 0x0000, 0x0000, 0x0000,
244 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
245 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
246 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
247 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
248 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
249 0x0000, 0x0000, 0x0000, 0x4000, 0x0000, 0x0000,
250 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
251 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
252 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000,
253};
254
255static const u32 b43_lcntab_0x18[] = {
256 0x00080000, 0x00080000, 0x00080000, 0x00080000,
257 0x00080000, 0x00080000, 0x00080000, 0x00080000,
258 0x00080000, 0x00080000, 0x00080000, 0x00080000,
259 0x00080000, 0x00080000, 0x00080000, 0x00080000,
260 0x00080000, 0x00080000, 0x00080000, 0x00080000,
261 0x00080000, 0x00080000, 0x00080000, 0x00080000,
262 0x00080000, 0x00080000, 0x00080000, 0x00080000,
263 0x00080000, 0x00080000, 0x00080000, 0x00080000,
264 0x00080000, 0x00080000, 0x00080000, 0x00080000,
265 0x00080000, 0x00080000, 0x00080000, 0x00080000,
266 0x00080000, 0x00080000, 0x00080000, 0x00080000,
267 0x00080000, 0x00080000, 0x00080000, 0x00080000,
268 0x00080000, 0x00080000, 0x00080000, 0x00080000,
269 0x00080000, 0x00080000, 0x00080000, 0x00080000,
270 0x00080000, 0x00080000, 0x00080000, 0x00080000,
271 0x00080000, 0x00080000, 0x00080000, 0x00080000,
272 0x00080000, 0x00080000, 0x00080000, 0x00080000,
273 0x00080000, 0x00080000, 0x00080000, 0x00080000,
274 0x00080000, 0x00080000, 0x00080000, 0x00080000,
275 0x00080000, 0x00080000, 0x00080000, 0x00080000,
276 0x00080000, 0x00080000, 0x00080000, 0x00080000,
277 0x00080000, 0x00080000, 0x00080000, 0x00080000,
278 0x00080000, 0x00080000, 0x00080000, 0x00080000,
279 0x00080000, 0x00080000, 0x00080000, 0x00080000,
280 0x00080000, 0x00080000, 0x00080000, 0x00080000,
281 0x00080000, 0x00080000, 0x00080000, 0x00080000,
282 0x00080000, 0x00080000, 0x00080000, 0x00080000,
283 0x00080000, 0x00080000, 0x00080000, 0x00080000,
284 0x00080000, 0x00080000, 0x00080000, 0x00080000,
285 0x00080000, 0x00080000, 0x00080000, 0x00080000,
286 0x00080000, 0x00080000, 0x00080000, 0x00080000,
287 0x00080000, 0x00080000, 0x00080000, 0x00080000,
288 0x00080000, 0x00080000, 0x00080000, 0x00080000,
289 0x00080000, 0x00080000, 0x00080000, 0x00080000,
290 0x00080000, 0x00080000, 0x00080000, 0x00080000,
291 0x00080000, 0x00080000, 0x00080000, 0x00080000,
292 0x00080000, 0x00080000, 0x00080000, 0x00080000,
293 0x00080000, 0x00080000, 0x00080000, 0x00080000,
294 0x00080000, 0x00080000, 0x00080000, 0x00080000,
295 0x00080000, 0x00080000, 0x00080000, 0x00080000,
296};
297
298/**************************************************
299 * R/W ops.
300 **************************************************/
301
302u32 b43_lcntab_read(struct b43_wldev *dev, u32 offset)
303{
304 u32 type, value;
305
306 type = offset & B43_LCNTAB_TYPEMASK;
307 offset &= ~B43_LCNTAB_TYPEMASK;
308 B43_WARN_ON(offset > 0xFFFF);
309
310 switch (type) {
311 case B43_LCNTAB_8BIT:
312 b43_phy_write(dev, B43_PHY_LCN_TABLE_ADDR, offset);
313 value = b43_phy_read(dev, B43_PHY_LCN_TABLE_DATALO) & 0xFF;
314 break;
315 case B43_LCNTAB_16BIT:
316 b43_phy_write(dev, B43_PHY_LCN_TABLE_ADDR, offset);
317 value = b43_phy_read(dev, B43_PHY_LCN_TABLE_DATALO);
318 break;
319 case B43_LCNTAB_32BIT:
320 b43_phy_write(dev, B43_PHY_LCN_TABLE_ADDR, offset);
0b4ff45d
RM
321 value = b43_phy_read(dev, B43_PHY_LCN_TABLE_DATALO);
322 value |= (b43_phy_read(dev, B43_PHY_LCN_TABLE_DATAHI) << 16);
ba2d00e8
RM
323 break;
324 default:
325 B43_WARN_ON(1);
326 value = 0;
327 }
328
329 return value;
330}
331
332void b43_lcntab_read_bulk(struct b43_wldev *dev, u32 offset,
333 unsigned int nr_elements, void *_data)
334{
335 u32 type;
336 u8 *data = _data;
337 unsigned int i;
338
339 type = offset & B43_LCNTAB_TYPEMASK;
340 offset &= ~B43_LCNTAB_TYPEMASK;
341 B43_WARN_ON(offset > 0xFFFF);
342
343 b43_phy_write(dev, B43_PHY_LCN_TABLE_ADDR, offset);
344
345 for (i = 0; i < nr_elements; i++) {
346 switch (type) {
347 case B43_LCNTAB_8BIT:
348 *data = b43_phy_read(dev,
349 B43_PHY_LCN_TABLE_DATALO) & 0xFF;
350 data++;
351 break;
352 case B43_LCNTAB_16BIT:
353 *((u16 *)data) = b43_phy_read(dev,
354 B43_PHY_LCN_TABLE_DATALO);
355 data += 2;
356 break;
357 case B43_LCNTAB_32BIT:
358 *((u32 *)data) = b43_phy_read(dev,
ba2d00e8 359 B43_PHY_LCN_TABLE_DATALO);
0b4ff45d
RM
360 *((u32 *)data) |= (b43_phy_read(dev,
361 B43_PHY_LCN_TABLE_DATAHI) << 16);
ba2d00e8
RM
362 data += 4;
363 break;
364 default:
365 B43_WARN_ON(1);
366 }
367 }
368}
369
370void b43_lcntab_write(struct b43_wldev *dev, u32 offset, u32 value)
371{
372 u32 type;
373
374 type = offset & B43_LCNTAB_TYPEMASK;
375 offset &= 0xFFFF;
376
377 switch (type) {
378 case B43_LCNTAB_8BIT:
379 B43_WARN_ON(value & ~0xFF);
380 b43_phy_write(dev, B43_PHY_LCN_TABLE_ADDR, offset);
381 b43_phy_write(dev, B43_PHY_LCN_TABLE_DATALO, value);
382 break;
383 case B43_LCNTAB_16BIT:
384 B43_WARN_ON(value & ~0xFFFF);
385 b43_phy_write(dev, B43_PHY_LCN_TABLE_ADDR, offset);
386 b43_phy_write(dev, B43_PHY_LCN_TABLE_DATALO, value);
387 break;
388 case B43_LCNTAB_32BIT:
389 b43_phy_write(dev, B43_PHY_LCN_TABLE_ADDR, offset);
390 b43_phy_write(dev, B43_PHY_LCN_TABLE_DATAHI, value >> 16);
391 b43_phy_write(dev, B43_PHY_LCN_TABLE_DATALO, value & 0xFFFF);
392 break;
393 default:
394 B43_WARN_ON(1);
395 }
396
397 return;
398}
399
400void b43_lcntab_write_bulk(struct b43_wldev *dev, u32 offset,
401 unsigned int nr_elements, const void *_data)
402{
403 u32 type, value;
404 const u8 *data = _data;
405 unsigned int i;
406
407 type = offset & B43_LCNTAB_TYPEMASK;
408 offset &= ~B43_LCNTAB_TYPEMASK;
409 B43_WARN_ON(offset > 0xFFFF);
410
411 b43_phy_write(dev, B43_PHY_LCN_TABLE_ADDR, offset);
412
413 for (i = 0; i < nr_elements; i++) {
414 switch (type) {
415 case B43_LCNTAB_8BIT:
416 value = *data;
417 data++;
418 B43_WARN_ON(value & ~0xFF);
419 b43_phy_write(dev, B43_PHY_LCN_TABLE_DATALO, value);
420 break;
421 case B43_LCNTAB_16BIT:
422 value = *((u16 *)data);
423 data += 2;
424 B43_WARN_ON(value & ~0xFFFF);
425 b43_phy_write(dev, B43_PHY_LCN_TABLE_DATALO, value);
426 break;
427 case B43_LCNTAB_32BIT:
428 value = *((u32 *)data);
429 data += 4;
430 b43_phy_write(dev, B43_PHY_LCN_TABLE_DATAHI,
431 value >> 16);
432 b43_phy_write(dev, B43_PHY_LCN_TABLE_DATALO,
433 value & 0xFFFF);
434 break;
435 default:
436 B43_WARN_ON(1);
437 }
438 }
439}
440
1d738e64
RM
441/**************************************************
442 * Tables ops.
443 **************************************************/
444
ba2d00e8
RM
445#define lcntab_upload(dev, offset, data) do { \
446 b43_lcntab_write_bulk(dev, offset, ARRAY_SIZE(data), data); \
447 } while (0)
b35e6d9a 448static void b43_phy_lcn_upload_static_tables(struct b43_wldev *dev)
1d738e64 449{
ba2d00e8
RM
450 lcntab_upload(dev, B43_LCNTAB16(0x02, 0), b43_lcntab_0x02);
451 lcntab_upload(dev, B43_LCNTAB16(0x01, 0), b43_lcntab_0x01);
452 lcntab_upload(dev, B43_LCNTAB32(0x0b, 0), b43_lcntab_0x0b);
453 lcntab_upload(dev, B43_LCNTAB32(0x0c, 0), b43_lcntab_0x0c);
454 lcntab_upload(dev, B43_LCNTAB32(0x0d, 0), b43_lcntab_0x0d);
455 lcntab_upload(dev, B43_LCNTAB16(0x0e, 0), b43_lcntab_0x0e);
456 lcntab_upload(dev, B43_LCNTAB16(0x0f, 0), b43_lcntab_0x0f);
457 lcntab_upload(dev, B43_LCNTAB16(0x10, 0), b43_lcntab_0x10);
458 lcntab_upload(dev, B43_LCNTAB16(0x11, 0), b43_lcntab_0x11);
459 lcntab_upload(dev, B43_LCNTAB32(0x12, 0), b43_lcntab_0x12);
460 lcntab_upload(dev, B43_LCNTAB16(0x14, 0), b43_lcntab_0x14);
461 lcntab_upload(dev, B43_LCNTAB16(0x17, 0), b43_lcntab_0x17);
462 lcntab_upload(dev, B43_LCNTAB16(0x00, 0), b43_lcntab_0x00);
463 lcntab_upload(dev, B43_LCNTAB32(0x18, 0), b43_lcntab_0x18);
1d738e64 464}
b35e6d9a
RM
465
466static void b43_phy_lcn_clean_0x18_table(struct b43_wldev *dev)
467{
468 u8 i;
469
470 for (i = 0; i < 0x80; i++)
471 b43_lcntab_write(dev, B43_LCNTAB32(0x18, i), 0x80000);
472}
473
474void b43_phy_lcn_tables_init(struct b43_wldev *dev)
475{
476 b43_phy_lcn_upload_static_tables(dev);
477 /* TODO: various tables ops here */
478 b43_phy_lcn_clean_0x18_table(dev);
479}
This page took 0.06895 seconds and 5 git commands to generate.