]> CyberLeo.Net >> Repos - FreeBSD/releng/7.2.git/blob - sys/dev/usb/if_zydreg.h
Create releng/7.2 from stable/7 in preparation for 7.2-RELEASE.
[FreeBSD/releng/7.2.git] / sys / dev / usb / if_zydreg.h
1 /*      $OpenBSD: if_zydreg.h,v 1.19 2006/11/30 19:28:07 damien Exp $   */
2 /*      $NetBSD: if_zydreg.h,v 1.2 2007/06/16 11:18:45 kiyohara Exp $   */
3 /*      $FreeBSD$       */
4
5 /*-
6  * Copyright (c) 2006 by Damien Bergamini <damien.bergamini@free.fr>
7  * Copyright (c) 2006 by Florian Stoehr <ich@florian-stoehr.de>
8  *
9  * Permission to use, copy, modify, and distribute this software for any
10  * purpose with or without fee is hereby granted, provided that the above
11  * copyright notice and this permission notice appear in all copies.
12  *
13  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
14  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
15  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
16  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
17  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
18  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
19  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
20  */
21
22 /*
23  * ZyDAS ZD1211/ZD1211B USB WLAN driver.
24  */
25
26 #define ZYD_CR_GPI_EN           0x9418
27 #define ZYD_CR_RADIO_PD         0x942c
28 #define ZYD_CR_RF2948_PD        0x942c
29 #define ZYD_CR_EN_PS_MANUAL_AGC 0x943c
30 #define ZYD_CR_CONFIG_PHILIPS   0x9440
31 #define ZYD_CR_I2C_WRITE        0x9444
32 #define ZYD_CR_SA2400_SER_RP    0x9448
33 #define ZYD_CR_RADIO_PE         0x9458
34 #define ZYD_CR_RST_BUS_MASTER   0x945c
35 #define ZYD_CR_RFCFG            0x9464
36 #define ZYD_CR_HSTSCHG          0x946c
37 #define ZYD_CR_PHY_ON           0x9474
38 #define ZYD_CR_RX_DELAY         0x9478
39 #define ZYD_CR_RX_PE_DELAY      0x947c
40 #define ZYD_CR_GPIO_1           0x9490
41 #define ZYD_CR_GPIO_2           0x9494
42 #define ZYD_CR_EnZYD_CRyBufMux  0x94a8
43 #define ZYD_CR_PS_CTRL          0x9500
44 #define ZYD_CR_ADDA_PWR_DWN     0x9504
45 #define ZYD_CR_ADDA_MBIAS_WT    0x9508
46 #define ZYD_CR_INTERRUPT        0x9510
47 #define ZYD_CR_MAC_PS_STATE     0x950c
48 #define ZYD_CR_ATIM_WND_PERIOD  0x951c
49 #define ZYD_CR_BCN_INTERVAL     0x9520
50 #define ZYD_CR_PRE_TBTT         0x9524
51
52 /*
53  * MAC registers.
54  */
55 #define ZYD_MAC_MACADRL         0x9610 /* MAC address (low) */
56 #define ZYD_MAC_MACADRH         0x9614 /* MAC address (high) */
57 #define ZYD_MAC_BSSADRL         0x9618 /* BSS address (low) */
58 #define ZYD_MAC_BSSADRH         0x961c /* BSS address (high) */
59 #define ZYD_MAC_BCNCFG          0x9620 /* BCN configuration */
60 #define ZYD_MAC_GHTBL           0x9624 /* Group hash table (low) */
61 #define ZYD_MAC_GHTBH           0x9628 /* Group hash table (high) */
62 #define ZYD_MAC_RX_TIMEOUT      0x962c /* Rx timeout value */
63 #define ZYD_MAC_BAS_RATE        0x9630 /* Basic rate setting */
64 #define ZYD_MAC_MAN_RATE        0x9634 /* Mandatory rate setting */
65 #define ZYD_MAC_RTSCTSRATE      0x9638 /* RTS CTS rate */
66 #define ZYD_MAC_BACKOFF_PROTECT 0x963c /* Backoff protection */
67 #define ZYD_MAC_RX_THRESHOLD    0x9640 /* Rx threshold */
68 #define ZYD_MAC_TX_PE_CONTROL   0x9644 /* Tx_PE control */
69 #define ZYD_MAC_AFTER_PNP       0x9648 /* After PnP */
70 #define ZYD_MAC_RX_PE_DELAY     0x964c /* Rx_pe delay */
71 #define ZYD_MAC_RX_ADDR2_L      0x9650 /* RX address2 (low)    */
72 #define ZYD_MAC_RX_ADDR2_H      0x9654 /* RX address2 (high) */
73 #define ZYD_MAC_SIFS_ACK_TIME   0x9658 /* Dynamic SIFS ack time */
74 #define ZYD_MAC_PHY_DELAY       0x9660 /* PHY delay */
75 #define ZYD_MAC_PHY_DELAY2      0x966c /* PHY delay */
76 #define ZYD_MAC_BCNFIFO         0x9670 /* Beacon FIFO I/O port */
77 #define ZYD_MAC_SNIFFER         0x9674 /* Sniffer on/off */
78 #define ZYD_MAC_ENCRYPTION_TYPE 0x9678 /* Encryption type */
79 #define ZYD_MAC_RETRY           0x967c /* Retry time */
80 #define ZYD_MAC_MISC            0x9680 /* Misc */
81 #define ZYD_MAC_STMACHINESTAT   0x9684 /* State machine status */
82 #define ZYD_MAC_TX_UNDERRUN_CNT 0x9688 /* TX underrun counter */
83 #define ZYD_MAC_RXFILTER        0x968c /* Send to host settings */
84 #define ZYD_MAC_ACK_EXT         0x9690 /* Acknowledge extension */
85 #define ZYD_MAC_BCNFIFOST       0x9694 /* BCN FIFO set and status */
86 #define ZYD_MAC_DIFS_EIFS_SIFS  0x9698 /* DIFS, EIFS & SIFS settings */
87 #define ZYD_MAC_RX_TIMEOUT_CNT  0x969c /* RX timeout count */
88 #define ZYD_MAC_RX_TOTAL_FRAME  0x96a0 /* RX total frame count */
89 #define ZYD_MAC_RX_CRC32_CNT    0x96a4 /* RX CRC32 frame count */
90 #define ZYD_MAC_RX_CRC16_CNT    0x96a8 /* RX CRC16 frame count */
91 #define ZYD_MAC_RX_UDEC         0x96ac /* RX unicast decr. error count */
92 #define ZYD_MAC_RX_OVERRUN_CNT  0x96b0 /* RX FIFO overrun count */
93 #define ZYD_MAC_RX_MDEC         0x96bc /* RX multicast decr. err. cnt. */
94 #define ZYD_MAC_NAV_TCR         0x96c4 /* NAV timer count read */
95 #define ZYD_MAC_BACKOFF_ST_RD   0x96c8 /* Backoff status read */
96 #define ZYD_MAC_DM_RETRY_CNT_RD 0x96cc /* DM retry count read */
97 #define ZYD_MAC_RX_ACR          0x96d0 /* RX arbitration count read    */
98 #define ZYD_MAC_TX_CCR          0x96d4 /* Tx complete count read */
99 #define ZYD_MAC_TCB_ADDR        0x96e8 /* Current PCI process TCP addr */
100 #define ZYD_MAC_RCB_ADDR        0x96ec /* Next RCB address */
101 #define ZYD_MAC_CONT_WIN_LIMIT  0x96f0 /* Contention window limit */
102 #define ZYD_MAC_TX_PKT          0x96f4 /* Tx total packet count read */
103 #define ZYD_MAC_DL_CTRL         0x96f8 /* Download control */
104 #define ZYD_MACB_TXPWR_CTL1     0x9b00
105 #define ZYD_MACB_TXPWR_CTL2     0x9b04
106 #define ZYD_MACB_TXPWR_CTL3     0x9b08
107 #define ZYD_MACB_TXPWR_CTL4     0x9b0c
108 #define ZYD_MACB_AIFS_CTL1      0x9b10
109 #define ZYD_MACB_AIFS_CTL2      0x9b14
110 #define ZYD_MACB_TXOP           0x9b20
111 #define ZYD_MACB_MAX_RETRY      0x9b28
112
113 /*
114  * Miscellanous registers.
115  */
116 #define ZYD_FIRMWARE_START_ADDR 0xee00
117 #define ZYD_FIRMWARE_BASE_ADDR  0xee1d /* Firmware base address */
118
119 /*
120  * EEPROM registers.
121  */
122 #define ZYD_EEPROM_START_HEAD   0xf800 /* EEPROM start */
123 #define ZYD_EEPROM_SUBID        0xf817
124 #define ZYD_EEPROM_POD          0xf819
125 #define ZYD_EEPROM_MAC_ADDR_P1  0xf81b /* Part 1 of the MAC address */
126 #define ZYD_EEPROM_MAC_ADDR_P2  0xf81d /* Part 2 of the MAC address */
127 #define ZYD_EEPROM_PWR_CAL      0xf81f /* Calibration */
128 #define ZYD_EEPROM_PWR_INT      0xf827 /* Calibration */
129 #define ZYD_EEPROM_ALLOWEDCHAN  0xf82f /* Allowed CH mask, 1 bit each */
130 #define ZYD_EEPROM_PHY_REG      0xf831 /* PHY registers */
131 #define ZYD_EEPROM_DEVICE_VER   0xf837 /* Device version */
132 #define ZYD_EEPROM_36M_CAL      0xf83f /* Calibration */
133 #define ZYD_EEPROM_11A_INT      0xf847 /* Interpolation */
134 #define ZYD_EEPROM_48M_CAL      0xf84f /* Calibration */
135 #define ZYD_EEPROM_48M_INT      0xf857 /* Interpolation */
136 #define ZYD_EEPROM_54M_CAL      0xf85f /* Calibration */
137 #define ZYD_EEPROM_54M_INT      0xf867 /* Interpolation */
138
139 /*
140  * Firmware registers offsets (relative to fwbase).
141  */
142 #define ZYD_FW_FIRMWARE_REV     0x0000 /* Firmware version */
143 #define ZYD_FW_USB_SPEED        0x0001 /* USB speed (!=0 if highspeed) */
144 #define ZYD_FW_FIX_TX_RATE      0x0002 /* Fixed TX rate */
145 #define ZYD_FW_LINK_STATUS      0x0003
146 #define ZYD_FW_SOFT_RESET       0x0004
147 #define ZYD_FW_FLASH_CHK        0x0005
148
149 /* possible flags for register ZYD_FW_LINK_STATUS */
150 #define ZYD_LED1        (1 << 8)
151 #define ZYD_LED2        (1 << 9)
152
153 /*
154  * RF IDs.
155  */
156 #define ZYD_RF_UW2451           0x2     /* not supported yet */
157 #define ZYD_RF_UCHIP            0x3     /* not supported yet */
158 #define ZYD_RF_AL2230           0x4
159 #define ZYD_RF_AL7230B          0x5
160 #define ZYD_RF_THETA            0x6     /* not supported yet */
161 #define ZYD_RF_AL2210           0x7
162 #define ZYD_RF_MAXIM_NEW        0x8
163 #define ZYD_RF_GCT              0x9
164 #define ZYD_RF_PV2000           0xa     /* not supported yet */
165 #define ZYD_RF_RALINK           0xb     /* not supported yet */
166 #define ZYD_RF_INTERSIL         0xc     /* not supported yet */
167 #define ZYD_RF_RFMD             0xd
168 #define ZYD_RF_MAXIM_NEW2       0xe
169 #define ZYD_RF_PHILIPS          0xf     /* not supported yet */
170
171 /*
172  * PHY registers (8 bits, not documented).
173  */
174 #define ZYD_CR0         0x9000
175 #define ZYD_CR1         0x9004
176 #define ZYD_CR2         0x9008
177 #define ZYD_CR3         0x900c
178 #define ZYD_CR5         0x9010
179 #define ZYD_CR6         0x9014
180 #define ZYD_CR7         0x9018
181 #define ZYD_CR8         0x901c
182 #define ZYD_CR4         0x9020
183 #define ZYD_CR9         0x9024
184 #define ZYD_CR10        0x9028
185 #define ZYD_CR11        0x902c
186 #define ZYD_CR12        0x9030
187 #define ZYD_CR13        0x9034
188 #define ZYD_CR14        0x9038
189 #define ZYD_CR15        0x903c
190 #define ZYD_CR16        0x9040
191 #define ZYD_CR17        0x9044
192 #define ZYD_CR18        0x9048
193 #define ZYD_CR19        0x904c
194 #define ZYD_CR20        0x9050
195 #define ZYD_CR21        0x9054
196 #define ZYD_CR22        0x9058
197 #define ZYD_CR23        0x905c
198 #define ZYD_CR24        0x9060
199 #define ZYD_CR25        0x9064
200 #define ZYD_CR26        0x9068
201 #define ZYD_CR27        0x906c
202 #define ZYD_CR28        0x9070
203 #define ZYD_CR29        0x9074
204 #define ZYD_CR30        0x9078
205 #define ZYD_CR31        0x907c
206 #define ZYD_CR32        0x9080
207 #define ZYD_CR33        0x9084
208 #define ZYD_CR34        0x9088
209 #define ZYD_CR35        0x908c
210 #define ZYD_CR36        0x9090
211 #define ZYD_CR37        0x9094
212 #define ZYD_CR38        0x9098
213 #define ZYD_CR39        0x909c
214 #define ZYD_CR40        0x90a0
215 #define ZYD_CR41        0x90a4
216 #define ZYD_CR42        0x90a8
217 #define ZYD_CR43        0x90ac
218 #define ZYD_CR44        0x90b0
219 #define ZYD_CR45        0x90b4
220 #define ZYD_CR46        0x90b8
221 #define ZYD_CR47        0x90bc
222 #define ZYD_CR48        0x90c0
223 #define ZYD_CR49        0x90c4
224 #define ZYD_CR50        0x90c8
225 #define ZYD_CR51        0x90cc
226 #define ZYD_CR52        0x90d0
227 #define ZYD_CR53        0x90d4
228 #define ZYD_CR54        0x90d8
229 #define ZYD_CR55        0x90dc
230 #define ZYD_CR56        0x90e0
231 #define ZYD_CR57        0x90e4
232 #define ZYD_CR58        0x90e8
233 #define ZYD_CR59        0x90ec
234 #define ZYD_CR60        0x90f0
235 #define ZYD_CR61        0x90f4
236 #define ZYD_CR62        0x90f8
237 #define ZYD_CR63        0x90fc
238 #define ZYD_CR64        0x9100
239 #define ZYD_CR65        0x9104
240 #define ZYD_CR66        0x9108
241 #define ZYD_CR67        0x910c
242 #define ZYD_CR68        0x9110
243 #define ZYD_CR69        0x9114
244 #define ZYD_CR70        0x9118
245 #define ZYD_CR71        0x911c
246 #define ZYD_CR72        0x9120
247 #define ZYD_CR73        0x9124
248 #define ZYD_CR74        0x9128
249 #define ZYD_CR75        0x912c
250 #define ZYD_CR76        0x9130
251 #define ZYD_CR77        0x9134
252 #define ZYD_CR78        0x9138
253 #define ZYD_CR79        0x913c
254 #define ZYD_CR80        0x9140
255 #define ZYD_CR81        0x9144
256 #define ZYD_CR82        0x9148
257 #define ZYD_CR83        0x914c
258 #define ZYD_CR84        0x9150
259 #define ZYD_CR85        0x9154
260 #define ZYD_CR86        0x9158
261 #define ZYD_CR87        0x915c
262 #define ZYD_CR88        0x9160
263 #define ZYD_CR89        0x9164
264 #define ZYD_CR90        0x9168
265 #define ZYD_CR91        0x916c
266 #define ZYD_CR92        0x9170
267 #define ZYD_CR93        0x9174
268 #define ZYD_CR94        0x9178
269 #define ZYD_CR95        0x917c
270 #define ZYD_CR96        0x9180
271 #define ZYD_CR97        0x9184
272 #define ZYD_CR98        0x9188
273 #define ZYD_CR99        0x918c
274 #define ZYD_CR100       0x9190
275 #define ZYD_CR101       0x9194
276 #define ZYD_CR102       0x9198
277 #define ZYD_CR103       0x919c
278 #define ZYD_CR104       0x91a0
279 #define ZYD_CR105       0x91a4
280 #define ZYD_CR106       0x91a8
281 #define ZYD_CR107       0x91ac
282 #define ZYD_CR108       0x91b0
283 #define ZYD_CR109       0x91b4
284 #define ZYD_CR110       0x91b8
285 #define ZYD_CR111       0x91bc
286 #define ZYD_CR112       0x91c0
287 #define ZYD_CR113       0x91c4
288 #define ZYD_CR114       0x91c8
289 #define ZYD_CR115       0x91cc
290 #define ZYD_CR116       0x91d0
291 #define ZYD_CR117       0x91d4
292 #define ZYD_CR118       0x91d8
293 #define ZYD_CR119       0x91dc
294 #define ZYD_CR120       0x91e0
295 #define ZYD_CR121       0x91e4
296 #define ZYD_CR122       0x91e8
297 #define ZYD_CR123       0x91ec
298 #define ZYD_CR124       0x91f0
299 #define ZYD_CR125       0x91f4
300 #define ZYD_CR126       0x91f8
301 #define ZYD_CR127       0x91fc
302 #define ZYD_CR128       0x9200
303 #define ZYD_CR129       0x9204
304 #define ZYD_CR130       0x9208
305 #define ZYD_CR131       0x920c
306 #define ZYD_CR132       0x9210
307 #define ZYD_CR133       0x9214
308 #define ZYD_CR134       0x9218
309 #define ZYD_CR135       0x921c
310 #define ZYD_CR136       0x9220
311 #define ZYD_CR137       0x9224
312 #define ZYD_CR138       0x9228
313 #define ZYD_CR139       0x922c
314 #define ZYD_CR140       0x9230
315 #define ZYD_CR141       0x9234
316 #define ZYD_CR142       0x9238
317 #define ZYD_CR143       0x923c
318 #define ZYD_CR144       0x9240
319 #define ZYD_CR145       0x9244
320 #define ZYD_CR146       0x9248
321 #define ZYD_CR147       0x924c
322 #define ZYD_CR148       0x9250
323 #define ZYD_CR149       0x9254
324 #define ZYD_CR150       0x9258
325 #define ZYD_CR151       0x925c
326 #define ZYD_CR152       0x9260
327 #define ZYD_CR153       0x9264
328 #define ZYD_CR154       0x9268
329 #define ZYD_CR155       0x926c
330 #define ZYD_CR156       0x9270
331 #define ZYD_CR157       0x9274
332 #define ZYD_CR158       0x9278
333 #define ZYD_CR159       0x927c
334 #define ZYD_CR160       0x9280
335 #define ZYD_CR161       0x9284
336 #define ZYD_CR162       0x9288
337 #define ZYD_CR163       0x928c
338 #define ZYD_CR164       0x9290
339 #define ZYD_CR165       0x9294
340 #define ZYD_CR166       0x9298
341 #define ZYD_CR167       0x929c
342 #define ZYD_CR168       0x92a0
343 #define ZYD_CR169       0x92a4
344 #define ZYD_CR170       0x92a8
345 #define ZYD_CR171       0x92ac
346 #define ZYD_CR172       0x92b0
347 #define ZYD_CR173       0x92b4
348 #define ZYD_CR174       0x92b8
349 #define ZYD_CR175       0x92bc
350 #define ZYD_CR176       0x92c0
351 #define ZYD_CR177       0x92c4
352 #define ZYD_CR178       0x92c8
353 #define ZYD_CR179       0x92cc
354 #define ZYD_CR180       0x92d0
355 #define ZYD_CR181       0x92d4
356 #define ZYD_CR182       0x92d8
357 #define ZYD_CR183       0x92dc
358 #define ZYD_CR184       0x92e0
359 #define ZYD_CR185       0x92e4
360 #define ZYD_CR186       0x92e8
361 #define ZYD_CR187       0x92ec
362 #define ZYD_CR188       0x92f0
363 #define ZYD_CR189       0x92f4
364 #define ZYD_CR190       0x92f8
365 #define ZYD_CR191       0x92fc
366 #define ZYD_CR192       0x9300
367 #define ZYD_CR193       0x9304
368 #define ZYD_CR194       0x9308
369 #define ZYD_CR195       0x930c
370 #define ZYD_CR196       0x9310
371 #define ZYD_CR197       0x9314
372 #define ZYD_CR198       0x9318
373 #define ZYD_CR199       0x931c
374 #define ZYD_CR200       0x9320
375 #define ZYD_CR201       0x9324
376 #define ZYD_CR202       0x9328
377 #define ZYD_CR203       0x932c
378 #define ZYD_CR204       0x9330
379 #define ZYD_CR205       0x9334
380 #define ZYD_CR206       0x9338
381 #define ZYD_CR207       0x933c
382 #define ZYD_CR208       0x9340
383 #define ZYD_CR209       0x9344
384 #define ZYD_CR210       0x9348
385 #define ZYD_CR211       0x934c
386 #define ZYD_CR212       0x9350
387 #define ZYD_CR213       0x9354
388 #define ZYD_CR214       0x9358
389 #define ZYD_CR215       0x935c
390 #define ZYD_CR216       0x9360
391 #define ZYD_CR217       0x9364
392 #define ZYD_CR218       0x9368
393 #define ZYD_CR219       0x936c
394 #define ZYD_CR220       0x9370
395 #define ZYD_CR221       0x9374
396 #define ZYD_CR222       0x9378
397 #define ZYD_CR223       0x937c
398 #define ZYD_CR224       0x9380
399 #define ZYD_CR225       0x9384
400 #define ZYD_CR226       0x9388
401 #define ZYD_CR227       0x938c
402 #define ZYD_CR228       0x9390
403 #define ZYD_CR229       0x9394
404 #define ZYD_CR230       0x9398
405 #define ZYD_CR231       0x939c
406 #define ZYD_CR232       0x93a0
407 #define ZYD_CR233       0x93a4
408 #define ZYD_CR234       0x93a8
409 #define ZYD_CR235       0x93ac
410 #define ZYD_CR236       0x93b0
411 #define ZYD_CR240       0x93c0
412 #define ZYD_CR241       0x93c4
413 #define ZYD_CR242       0x93c8
414 #define ZYD_CR243       0x93cc
415 #define ZYD_CR244       0x93d0
416 #define ZYD_CR245       0x93d4
417 #define ZYD_CR251       0x93ec
418 #define ZYD_CR252       0x93f0
419 #define ZYD_CR253       0x93f4
420 #define ZYD_CR254       0x93f8
421 #define ZYD_CR255       0x93fc
422
423 /* copied nearly verbatim from the Linux driver rewrite */
424 #define ZYD_DEF_PHY                                                     \
425 {                                                                       \
426         { ZYD_CR0,   0x0a }, { ZYD_CR1,   0x06 }, { ZYD_CR2,   0x26 },  \
427         { ZYD_CR3,   0x38 }, { ZYD_CR4,   0x80 }, { ZYD_CR9,   0xa0 },  \
428         { ZYD_CR10,  0x81 }, { ZYD_CR11,  0x00 }, { ZYD_CR12,  0x7f },  \
429         { ZYD_CR13,  0x8c }, { ZYD_CR14,  0x80 }, { ZYD_CR15,  0x3d },  \
430         { ZYD_CR16,  0x20 }, { ZYD_CR17,  0x1e }, { ZYD_CR18,  0x0a },  \
431         { ZYD_CR19,  0x48 }, { ZYD_CR20,  0x0c }, { ZYD_CR21,  0x0c },  \
432         { ZYD_CR22,  0x23 }, { ZYD_CR23,  0x90 }, { ZYD_CR24,  0x14 },  \
433         { ZYD_CR25,  0x40 }, { ZYD_CR26,  0x10 }, { ZYD_CR27,  0x19 },  \
434         { ZYD_CR28,  0x7f }, { ZYD_CR29,  0x80 }, { ZYD_CR30,  0x4b },  \
435         { ZYD_CR31,  0x60 }, { ZYD_CR32,  0x43 }, { ZYD_CR33,  0x08 },  \
436         { ZYD_CR34,  0x06 }, { ZYD_CR35,  0x0a }, { ZYD_CR36,  0x00 },  \
437         { ZYD_CR37,  0x00 }, { ZYD_CR38,  0x38 }, { ZYD_CR39,  0x0c },  \
438         { ZYD_CR40,  0x84 }, { ZYD_CR41,  0x2a }, { ZYD_CR42,  0x80 },  \
439         { ZYD_CR43,  0x10 }, { ZYD_CR44,  0x12 }, { ZYD_CR46,  0xff },  \
440         { ZYD_CR47,  0x08 }, { ZYD_CR48,  0x26 }, { ZYD_CR49,  0x5b },  \
441         { ZYD_CR64,  0xd0 }, { ZYD_CR65,  0x04 }, { ZYD_CR66,  0x58 },  \
442         { ZYD_CR67,  0xc9 }, { ZYD_CR68,  0x88 }, { ZYD_CR69,  0x41 },  \
443         { ZYD_CR70,  0x23 }, { ZYD_CR71,  0x10 }, { ZYD_CR72,  0xff },  \
444         { ZYD_CR73,  0x32 }, { ZYD_CR74,  0x30 }, { ZYD_CR75,  0x65 },  \
445         { ZYD_CR76,  0x41 }, { ZYD_CR77,  0x1b }, { ZYD_CR78,  0x30 },  \
446         { ZYD_CR79,  0x68 }, { ZYD_CR80,  0x64 }, { ZYD_CR81,  0x64 },  \
447         { ZYD_CR82,  0x00 }, { ZYD_CR83,  0x00 }, { ZYD_CR84,  0x00 },  \
448         { ZYD_CR85,  0x02 }, { ZYD_CR86,  0x00 }, { ZYD_CR87,  0x00 },  \
449         { ZYD_CR88,  0xff }, { ZYD_CR89,  0xfc }, { ZYD_CR90,  0x00 },  \
450         { ZYD_CR91,  0x00 }, { ZYD_CR92,  0x00 }, { ZYD_CR93,  0x08 },  \
451         { ZYD_CR94,  0x00 }, { ZYD_CR95,  0x00 }, { ZYD_CR96,  0xff },  \
452         { ZYD_CR97,  0xe7 }, { ZYD_CR98,  0x00 }, { ZYD_CR99,  0x00 },  \
453         { ZYD_CR100, 0x00 }, { ZYD_CR101, 0xae }, { ZYD_CR102, 0x02 },  \
454         { ZYD_CR103, 0x00 }, { ZYD_CR104, 0x03 }, { ZYD_CR105, 0x65 },  \
455         { ZYD_CR106, 0x04 }, { ZYD_CR107, 0x00 }, { ZYD_CR108, 0x0a },  \
456         { ZYD_CR109, 0xaa }, { ZYD_CR110, 0xaa }, { ZYD_CR111, 0x25 },  \
457         { ZYD_CR112, 0x25 }, { ZYD_CR113, 0x00 }, { ZYD_CR119, 0x1e },  \
458         { ZYD_CR125, 0x90 }, { ZYD_CR126, 0x00 }, { ZYD_CR127, 0x00 },  \
459         { ZYD_CR5,   0x00 }, { ZYD_CR6,   0x00 }, { ZYD_CR7,   0x00 },  \
460         { ZYD_CR8,   0x00 }, { ZYD_CR9,   0x20 }, { ZYD_CR12,  0xf0 },  \
461         { ZYD_CR20,  0x0e }, { ZYD_CR21,  0x0e }, { ZYD_CR27,  0x10 },  \
462         { ZYD_CR44,  0x33 }, { ZYD_CR47,  0x30 }, { ZYD_CR83,  0x24 },  \
463         { ZYD_CR84,  0x04 }, { ZYD_CR85,  0x00 }, { ZYD_CR86,  0x0C },  \
464         { ZYD_CR87,  0x12 }, { ZYD_CR88,  0x0C }, { ZYD_CR89,  0x00 },  \
465         { ZYD_CR90,  0x10 }, { ZYD_CR91,  0x08 }, { ZYD_CR93,  0x00 },  \
466         { ZYD_CR94,  0x01 }, { ZYD_CR95,  0x00 }, { ZYD_CR96,  0x50 },  \
467         { ZYD_CR97,  0x37 }, { ZYD_CR98,  0x35 }, { ZYD_CR101, 0x13 },  \
468         { ZYD_CR102, 0x27 }, { ZYD_CR103, 0x27 }, { ZYD_CR104, 0x18 },  \
469         { ZYD_CR105, 0x12 }, { ZYD_CR109, 0x27 }, { ZYD_CR110, 0x27 },  \
470         { ZYD_CR111, 0x27 }, { ZYD_CR112, 0x27 }, { ZYD_CR113, 0x27 },  \
471         { ZYD_CR114, 0x27 }, { ZYD_CR115, 0x26 }, { ZYD_CR116, 0x24 },  \
472         { ZYD_CR117, 0xfc }, { ZYD_CR118, 0xfa }, { ZYD_CR120, 0x4f },  \
473         { ZYD_CR123, 0x27 }, { ZYD_CR125, 0xaa }, { ZYD_CR127, 0x03 },  \
474         { ZYD_CR128, 0x14 }, { ZYD_CR129, 0x12 }, { ZYD_CR130, 0x10 },  \
475         { ZYD_CR131, 0x0C }, { ZYD_CR136, 0xdf }, { ZYD_CR137, 0x40 },  \
476         { ZYD_CR138, 0xa0 }, { ZYD_CR139, 0xb0 }, { ZYD_CR140, 0x99 },  \
477         { ZYD_CR141, 0x82 }, { ZYD_CR142, 0x54 }, { ZYD_CR143, 0x1c },  \
478         { ZYD_CR144, 0x6c }, { ZYD_CR147, 0x07 }, { ZYD_CR148, 0x4c },  \
479         { ZYD_CR149, 0x50 }, { ZYD_CR150, 0x0e }, { ZYD_CR151, 0x18 },  \
480         { ZYD_CR160, 0xfe }, { ZYD_CR161, 0xee }, { ZYD_CR162, 0xaa },  \
481         { ZYD_CR163, 0xfa }, { ZYD_CR164, 0xfa }, { ZYD_CR165, 0xea },  \
482         { ZYD_CR166, 0xbe }, { ZYD_CR167, 0xbe }, { ZYD_CR168, 0x6a },  \
483         { ZYD_CR169, 0xba }, { ZYD_CR170, 0xba }, { ZYD_CR171, 0xba },  \
484         { ZYD_CR204, 0x7d }, { ZYD_CR203, 0x30 },                       \
485         { 0, 0 }                                                        \
486 }
487
488 #define ZYD_DEF_PHYB                                                    \
489 {                                                                       \
490         { ZYD_CR0,   0x14 }, { ZYD_CR1,   0x06 }, { ZYD_CR2,   0x26 },  \
491         { ZYD_CR3,   0x38 }, { ZYD_CR4,   0x80 }, { ZYD_CR9,   0xe0 },  \
492         { ZYD_CR10,  0x81 }, { ZYD_CR11,  0x00 }, { ZYD_CR12,  0xf0 },  \
493         { ZYD_CR13,  0x8c }, { ZYD_CR14,  0x80 }, { ZYD_CR15,  0x3d },  \
494         { ZYD_CR16,  0x20 }, { ZYD_CR17,  0x1e }, { ZYD_CR18,  0x0a },  \
495         { ZYD_CR19,  0x48 }, { ZYD_CR20,  0x10 }, { ZYD_CR21,  0x0e },  \
496         { ZYD_CR22,  0x23 }, { ZYD_CR23,  0x90 }, { ZYD_CR24,  0x14 },  \
497         { ZYD_CR25,  0x40 }, { ZYD_CR26,  0x10 }, { ZYD_CR27,  0x10 },  \
498         { ZYD_CR28,  0x7f }, { ZYD_CR29,  0x80 }, { ZYD_CR30,  0x4b },  \
499         { ZYD_CR31,  0x60 }, { ZYD_CR32,  0x43 }, { ZYD_CR33,  0x08 },  \
500         { ZYD_CR34,  0x06 }, { ZYD_CR35,  0x0a }, { ZYD_CR36,  0x00 },  \
501         { ZYD_CR37,  0x00 }, { ZYD_CR38,  0x38 }, { ZYD_CR39,  0x0c },  \
502         { ZYD_CR40,  0x84 }, { ZYD_CR41,  0x2a }, { ZYD_CR42,  0x80 },  \
503         { ZYD_CR43,  0x10 }, { ZYD_CR44,  0x33 }, { ZYD_CR46,  0xff },  \
504         { ZYD_CR47,  0x1E }, { ZYD_CR48,  0x26 }, { ZYD_CR49,  0x5b },  \
505         { ZYD_CR64,  0xd0 }, { ZYD_CR65,  0x04 }, { ZYD_CR66,  0x58 },  \
506         { ZYD_CR67,  0xc9 }, { ZYD_CR68,  0x88 }, { ZYD_CR69,  0x41 },  \
507         { ZYD_CR70,  0x23 }, { ZYD_CR71,  0x10 }, { ZYD_CR72,  0xff },  \
508         { ZYD_CR73,  0x32 }, { ZYD_CR74,  0x30 }, { ZYD_CR75,  0x65 },  \
509         { ZYD_CR76,  0x41 }, { ZYD_CR77,  0x1b }, { ZYD_CR78,  0x30 },  \
510         { ZYD_CR79,  0xf0 }, { ZYD_CR80,  0x64 }, { ZYD_CR81,  0x64 },  \
511         { ZYD_CR82,  0x00 }, { ZYD_CR83,  0x24 }, { ZYD_CR84,  0x04 },  \
512         { ZYD_CR85,  0x00 }, { ZYD_CR86,  0x0c }, { ZYD_CR87,  0x12 },  \
513         { ZYD_CR88,  0x0c }, { ZYD_CR89,  0x00 }, { ZYD_CR90,  0x58 },  \
514         { ZYD_CR91,  0x04 }, { ZYD_CR92,  0x00 }, { ZYD_CR93,  0x00 },  \
515         { ZYD_CR94,  0x01 }, { ZYD_CR95,  0x20 }, { ZYD_CR96,  0x50 },  \
516         { ZYD_CR97,  0x37 }, { ZYD_CR98,  0x35 }, { ZYD_CR99,  0x00 },  \
517         { ZYD_CR100, 0x01 }, { ZYD_CR101, 0x13 }, { ZYD_CR102, 0x27 },  \
518         { ZYD_CR103, 0x27 }, { ZYD_CR104, 0x18 }, { ZYD_CR105, 0x12 },  \
519         { ZYD_CR106, 0x04 }, { ZYD_CR107, 0x00 }, { ZYD_CR108, 0x0a },  \
520         { ZYD_CR109, 0x27 }, { ZYD_CR110, 0x27 }, { ZYD_CR111, 0x27 },  \
521         { ZYD_CR112, 0x27 }, { ZYD_CR113, 0x27 }, { ZYD_CR114, 0x27 },  \
522         { ZYD_CR115, 0x26 }, { ZYD_CR116, 0x24 }, { ZYD_CR117, 0xfc },  \
523         { ZYD_CR118, 0xfa }, { ZYD_CR119, 0x1e }, { ZYD_CR125, 0x90 },  \
524         { ZYD_CR126, 0x00 }, { ZYD_CR127, 0x00 }, { ZYD_CR128, 0x14 },  \
525         { ZYD_CR129, 0x12 }, { ZYD_CR130, 0x10 }, { ZYD_CR131, 0x0c },  \
526         { ZYD_CR136, 0xdf }, { ZYD_CR137, 0xa0 }, { ZYD_CR138, 0xa8 },  \
527         { ZYD_CR139, 0xb4 }, { ZYD_CR140, 0x98 }, { ZYD_CR141, 0x82 },  \
528         { ZYD_CR142, 0x53 }, { ZYD_CR143, 0x1c }, { ZYD_CR144, 0x6c },  \
529         { ZYD_CR147, 0x07 }, { ZYD_CR148, 0x40 }, { ZYD_CR149, 0x40 },  \
530         { ZYD_CR150, 0x14 }, { ZYD_CR151, 0x18 }, { ZYD_CR159, 0x70 },  \
531         { ZYD_CR160, 0xfe }, { ZYD_CR161, 0xee }, { ZYD_CR162, 0xaa },  \
532         { ZYD_CR163, 0xfa }, { ZYD_CR164, 0xfa }, { ZYD_CR165, 0xea },  \
533         { ZYD_CR166, 0xbe }, { ZYD_CR167, 0xbe }, { ZYD_CR168, 0x6a },  \
534         { ZYD_CR169, 0xba }, { ZYD_CR170, 0xba }, { ZYD_CR171, 0xba },  \
535         { ZYD_CR204, 0x7d }, { ZYD_CR203, 0x30 },                       \
536         { 0, 0 }                                                        \
537 }
538
539 #define ZYD_RFMD_PHY                                                    \
540 {                                                                       \
541         { ZYD_CR2,   0x1e }, { ZYD_CR9,   0x20 }, { ZYD_CR10,  0x89 },  \
542         { ZYD_CR11,  0x00 }, { ZYD_CR15,  0xd0 }, { ZYD_CR17,  0x68 },  \
543         { ZYD_CR19,  0x4a }, { ZYD_CR20,  0x0c }, { ZYD_CR21,  0x0e },  \
544         { ZYD_CR23,  0x48 }, { ZYD_CR24,  0x14 }, { ZYD_CR26,  0x90 },  \
545         { ZYD_CR27,  0x30 }, { ZYD_CR29,  0x20 }, { ZYD_CR31,  0xb2 },  \
546         { ZYD_CR32,  0x43 }, { ZYD_CR33,  0x28 }, { ZYD_CR38,  0x30 },  \
547         { ZYD_CR34,  0x0f }, { ZYD_CR35,  0xf0 }, { ZYD_CR41,  0x2a },  \
548         { ZYD_CR46,  0x7f }, { ZYD_CR47,  0x1e }, { ZYD_CR51,  0xc5 },  \
549         { ZYD_CR52,  0xc5 }, { ZYD_CR53,  0xc5 }, { ZYD_CR79,  0x58 },  \
550         { ZYD_CR80,  0x30 }, { ZYD_CR81,  0x30 }, { ZYD_CR82,  0x00 },  \
551         { ZYD_CR83,  0x24 }, { ZYD_CR84,  0x04 }, { ZYD_CR85,  0x00 },  \
552         { ZYD_CR86,  0x10 }, { ZYD_CR87,  0x2a }, { ZYD_CR88,  0x10 },  \
553         { ZYD_CR89,  0x24 }, { ZYD_CR90,  0x18 }, { ZYD_CR91,  0x00 },  \
554         { ZYD_CR92,  0x0a }, { ZYD_CR93,  0x00 }, { ZYD_CR94,  0x01 },  \
555         { ZYD_CR95,  0x00 }, { ZYD_CR96,  0x40 }, { ZYD_CR97,  0x37 },  \
556         { ZYD_CR98,  0x05 }, { ZYD_CR99,  0x28 }, { ZYD_CR100, 0x00 },  \
557         { ZYD_CR101, 0x13 }, { ZYD_CR102, 0x27 }, { ZYD_CR103, 0x27 },  \
558         { ZYD_CR104, 0x18 }, { ZYD_CR105, 0x12 }, { ZYD_CR106, 0x1a },  \
559         { ZYD_CR107, 0x24 }, { ZYD_CR108, 0x0a }, { ZYD_CR109, 0x13 },  \
560         { ZYD_CR110, 0x2f }, { ZYD_CR111, 0x27 }, { ZYD_CR112, 0x27 },  \
561         { ZYD_CR113, 0x27 }, { ZYD_CR114, 0x27 }, { ZYD_CR115, 0x40 },  \
562         { ZYD_CR116, 0x40 }, { ZYD_CR117, 0xf0 }, { ZYD_CR118, 0xf0 },  \
563         { ZYD_CR119, 0x16 }, { ZYD_CR122, 0x00 }, { ZYD_CR127, 0x03 },  \
564         { ZYD_CR131, 0x08 }, { ZYD_CR138, 0x28 }, { ZYD_CR148, 0x44 },  \
565         { ZYD_CR150, 0x10 }, { ZYD_CR169, 0xbb }, { ZYD_CR170, 0xbb }   \
566 }
567
568 #define ZYD_RFMD_RF                                                     \
569 {                                                                       \
570         0x000007, 0x07dd43, 0x080959, 0x0e6666, 0x116a57, 0x17dd43,     \
571         0x1819f9, 0x1e6666, 0x214554, 0x25e7fa, 0x27fffa, 0x294128,     \
572         0x2c0000, 0x300000, 0x340000, 0x381e0f, 0x6c180f                \
573 }
574
575 #define ZYD_RFMD_CHANTABLE      \
576 {                               \
577         { 0x181979, 0x1e6666 }, \
578         { 0x181989, 0x1e6666 }, \
579         { 0x181999, 0x1e6666 }, \
580         { 0x1819a9, 0x1e6666 }, \
581         { 0x1819b9, 0x1e6666 }, \
582         { 0x1819c9, 0x1e6666 }, \
583         { 0x1819d9, 0x1e6666 }, \
584         { 0x1819e9, 0x1e6666 }, \
585         { 0x1819f9, 0x1e6666 }, \
586         { 0x181a09, 0x1e6666 }, \
587         { 0x181a19, 0x1e6666 }, \
588         { 0x181a29, 0x1e6666 }, \
589         { 0x181a39, 0x1e6666 }, \
590         { 0x181a60, 0x1c0000 }  \
591 }
592
593
594
595 #define ZYD_AL2230_PHY                                                  \
596 {                                                                       \
597         { ZYD_CR15,  0x20 }, { ZYD_CR23,  0x40 }, { ZYD_CR24,  0x20 },  \
598         { ZYD_CR26,  0x11 }, { ZYD_CR28,  0x3e }, { ZYD_CR29,  0x00 },  \
599         { ZYD_CR44,  0x33 }, { ZYD_CR106, 0x2a }, { ZYD_CR107, 0x1a },  \
600         { ZYD_CR109, 0x09 }, { ZYD_CR110, 0x27 }, { ZYD_CR111, 0x2b },  \
601         { ZYD_CR112, 0x2b }, { ZYD_CR119, 0x0a }, { ZYD_CR10,  0x89 },  \
602         { ZYD_CR17,  0x28 }, { ZYD_CR26,  0x93 }, { ZYD_CR34,  0x30 },  \
603         { ZYD_CR35,  0x3e }, { ZYD_CR41,  0x24 }, { ZYD_CR44,  0x32 },  \
604         { ZYD_CR46,  0x96 }, { ZYD_CR47,  0x1e }, { ZYD_CR79,  0x58 },  \
605         { ZYD_CR80,  0x30 }, { ZYD_CR81,  0x30 }, { ZYD_CR87,  0x0a },  \
606         { ZYD_CR89,  0x04 }, { ZYD_CR92,  0x0a }, { ZYD_CR99,  0x28 },  \
607         { ZYD_CR100, 0x00 }, { ZYD_CR101, 0x13 }, { ZYD_CR102, 0x27 },  \
608         { ZYD_CR106, 0x24 }, { ZYD_CR107, 0x2a }, { ZYD_CR109, 0x09 },  \
609         { ZYD_CR110, 0x13 }, { ZYD_CR111, 0x1f }, { ZYD_CR112, 0x1f },  \
610         { ZYD_CR113, 0x27 }, { ZYD_CR114, 0x27 }, { ZYD_CR115, 0x24 },  \
611         { ZYD_CR116, 0x24 }, { ZYD_CR117, 0xf4 }, { ZYD_CR118, 0xfc },  \
612         { ZYD_CR119, 0x10 }, { ZYD_CR120, 0x4f }, { ZYD_CR121, 0x77 },  \
613         { ZYD_CR122, 0xe0 }, { ZYD_CR137, 0x88 }, { ZYD_CR252, 0xff },  \
614         { ZYD_CR253, 0xff }, { ZYD_CR251, 0x2f }, { ZYD_CR251, 0x3f },  \
615         { ZYD_CR138, 0x28 }, { ZYD_CR203, 0x06 }                        \
616 }
617
618 #define ZYD_AL2230_PHY_B                                                \
619 {                                                                       \
620         { ZYD_CR10,  0x89 }, { ZYD_CR15,  0x20 }, { ZYD_CR17,  0x2b },  \
621         { ZYD_CR23,  0x40 }, { ZYD_CR24,  0x20 }, { ZYD_CR26,  0x93 },  \
622         { ZYD_CR28,  0x3e }, { ZYD_CR29,  0x00 }, { ZYD_CR33,  0x28 },  \
623         { ZYD_CR34,  0x30 }, { ZYD_CR35,  0x3e }, { ZYD_CR41,  0x24 },  \
624         { ZYD_CR44,  0x32 }, { ZYD_CR46,  0x99 }, { ZYD_CR47,  0x1e },  \
625         { ZYD_CR48,  0x00 }, { ZYD_CR49,  0x00 }, { ZYD_CR51,  0x01 },  \
626         { ZYD_CR52,  0x80 }, { ZYD_CR53,  0x7e }, { ZYD_CR65,  0x00 },  \
627         { ZYD_CR66,  0x00 }, { ZYD_CR67,  0x00 }, { ZYD_CR68,  0x00 },  \
628         { ZYD_CR69,  0x28 }, { ZYD_CR79,  0x58 }, { ZYD_CR80,  0x30 },  \
629         { ZYD_CR81,  0x30 }, { ZYD_CR87,  0x0a }, { ZYD_CR89,  0x04 },  \
630         { ZYD_CR91,  0x00 }, { ZYD_CR92,  0x0a }, { ZYD_CR98,  0x8d },  \
631         { ZYD_CR99,  0x00 }, { ZYD_CR101, 0x13 }, { ZYD_CR106, 0x24 },  \
632         { ZYD_CR107, 0x2a }, { ZYD_CR109, 0x13 }, { ZYD_CR110, 0x1f },  \
633         { ZYD_CR111, 0x1f }, { ZYD_CR114, 0x27 }, { ZYD_CR115, 0x26 },  \
634         { ZYD_CR116, 0x24 }, { ZYD_CR117, 0xfa }, { ZYD_CR118, 0xfa },  \
635         { ZYD_CR119, 0x10 }, { ZYD_CR120, 0x4f }, { ZYD_CR121, 0x6c },  \
636         { ZYD_CR122, 0xfc }, { ZYD_CR123, 0x57 }, { ZYD_CR125, 0xad },  \
637         { ZYD_CR126, 0x6c }, { ZYD_CR127, 0x03 }, { ZYD_CR137, 0x50 },  \
638         { ZYD_CR138, 0xa8 }, { ZYD_CR144, 0xac }, { ZYD_CR150, 0x0d },  \
639         { ZYD_CR252, 0x00 }, { ZYD_CR253, 0x00 }                        \
640 }
641
642 #define ZYD_AL2230_RF                                                   \
643 {                                                                       \
644         0x03f790, 0x033331, 0x00000d, 0x0b3331, 0x03b812, 0x00fff3,     \
645         0x000da4, 0x0f4dc5, 0x0805b6, 0x011687, 0x000688, 0x0403b9,     \
646         0x00dbba, 0x00099b, 0x0bdffc, 0x00000d, 0x00500f, 0x00d00f,     \
647         0x004c0f, 0x00540f, 0x00700f, 0x00500f                          \
648 }
649
650 #define ZYD_AL2230_RF_B                                                 \
651 {                                                                       \
652         0x03f790, 0x033331, 0x00000d, 0x0b3331, 0x03b812, 0x00fff3,     \
653         0x0005a4, 0x0f4dc5, 0x0805b6, 0x0146c7, 0x000688, 0x0403b9,     \
654         0x00dbba, 0x00099b, 0x0bdffc, 0x00000d, 0x00580f                \
655 }
656
657 #define ZYD_AL2230_CHANTABLE                    \
658 {                                               \
659         { 0x03f790, 0x033331, 0x00000d },       \
660         { 0x03f790, 0x0b3331, 0x00000d },       \
661         { 0x03e790, 0x033331, 0x00000d },       \
662         { 0x03e790, 0x0b3331, 0x00000d },       \
663         { 0x03f7a0, 0x033331, 0x00000d },       \
664         { 0x03f7a0, 0x0b3331, 0x00000d },       \
665         { 0x03e7a0, 0x033331, 0x00000d },       \
666         { 0x03e7a0, 0x0b3331, 0x00000d },       \
667         { 0x03f7b0, 0x033331, 0x00000d },       \
668         { 0x03f7b0, 0x0b3331, 0x00000d },       \
669         { 0x03e7b0, 0x033331, 0x00000d },       \
670         { 0x03e7b0, 0x0b3331, 0x00000d },       \
671         { 0x03f7c0, 0x033331, 0x00000d },       \
672         { 0x03e7c0, 0x066661, 0x00000d }        \
673 }
674
675
676
677 #define ZYD_AL7230B_PHY_1                                                       \
678 {                                                                       \
679         { ZYD_CR240, 0x57 }, { ZYD_CR15,  0x20 }, { ZYD_CR23,  0x40 },  \
680         { ZYD_CR24,  0x20 }, { ZYD_CR26,  0x11 }, { ZYD_CR28,  0x3e },  \
681         { ZYD_CR29,  0x00 }, { ZYD_CR44,  0x33 }, { ZYD_CR106, 0x22 },  \
682         { ZYD_CR107, 0x1a }, { ZYD_CR109, 0x09 }, { ZYD_CR110, 0x27 },  \
683         { ZYD_CR111, 0x2b }, { ZYD_CR112, 0x2b }, { ZYD_CR119, 0x0a },  \
684         { ZYD_CR122, 0xfc }, { ZYD_CR10,  0x89 }, { ZYD_CR17,  0x28 },  \
685         { ZYD_CR26,  0x93 }, { ZYD_CR34,  0x30 }, { ZYD_CR35,  0x3e },  \
686         { ZYD_CR41,  0x24 }, { ZYD_CR44,  0x32 }, { ZYD_CR46,  0x96 },  \
687         { ZYD_CR47,  0x1e }, { ZYD_CR79,  0x58 }, { ZYD_CR80,  0x30 },  \
688         { ZYD_CR81,  0x30 }, { ZYD_CR87,  0x0a }, { ZYD_CR89,  0x04 },  \
689         { ZYD_CR92,  0x0a }, { ZYD_CR99,  0x28 }, { ZYD_CR100, 0x02 },  \
690         { ZYD_CR101, 0x13 }, { ZYD_CR102, 0x27 }, { ZYD_CR106, 0x22 },  \
691         { ZYD_CR107, 0x3f }, { ZYD_CR109, 0x09 }, { ZYD_CR110, 0x1f },  \
692         { ZYD_CR111, 0x1f }, { ZYD_CR112, 0x1f }, { ZYD_CR113, 0x27 },  \
693         { ZYD_CR114, 0x27 }, { ZYD_CR115, 0x24 }, { ZYD_CR116, 0x3f },  \
694         { ZYD_CR117, 0xfa }, { ZYD_CR118, 0xfc }, { ZYD_CR119, 0x10 },  \
695         { ZYD_CR120, 0x4f }, { ZYD_CR121, 0x77 }, { ZYD_CR137, 0x88 },  \
696         { ZYD_CR138, 0xa8 }, { ZYD_CR252, 0x34 }, { ZYD_CR253, 0x34 },  \
697         { ZYD_CR251, 0x2f }                                             \
698 }
699
700 #define ZYD_AL7230B_PHY_2                                               \
701 {                                                                       \
702         { ZYD_CR251, 0x3f }, { ZYD_CR128, 0x14 }, { ZYD_CR129, 0x12 },  \
703         { ZYD_CR130, 0x10 }, { ZYD_CR38,  0x38 }, { ZYD_CR136, 0xdf }   \
704 }
705
706 #define ZYD_AL7230B_PHY_3                                               \
707 {                                                                       \
708         { ZYD_CR203, 0x06 }, { ZYD_CR240, 0x80 }                        \
709 }
710
711 #define ZYD_AL7230B_RF_1                                                \
712 {                                                                       \
713         0x09ec04, 0x8cccc8, 0x4ff821, 0xc5fbfc, 0x21ebfe, 0xafd401,     \
714         0x6cf56a, 0xe04073, 0x193d76, 0x9dd844, 0x500007, 0xd8c010,     \
715         0x3c9000, 0xbfffff, 0x700000, 0xf15d58                          \
716 }
717
718 #define ZYD_AL7230B_RF_2                                                \
719 {                                                                       \
720         0xf15d59, 0xf15d5c, 0xf15d58                                    \
721 }
722
723 #define ZYD_AL7230B_RF_SETCHANNEL                                       \
724 {                                                                       \
725         0x4ff821, 0xc5fbfc, 0x21ebfe, 0xafd401, 0x6cf56a, 0xe04073,     \
726         0x193d76, 0x9dd844, 0x500007, 0xd8c010, 0x3c9000, 0xf15d58      \
727 }
728
729 #define ZYD_AL7230B_CHANTABLE   \
730 {                               \
731         { 0x09ec00, 0x8cccc8 }, \
732         { 0x09ec00, 0x8cccd8 }, \
733         { 0x09ec00, 0x8cccc0 }, \
734         { 0x09ec00, 0x8cccd0 }, \
735         { 0x05ec00, 0x8cccc8 }, \
736         { 0x05ec00, 0x8cccd8 }, \
737         { 0x05ec00, 0x8cccc0 }, \
738         { 0x05ec00, 0x8cccd0 }, \
739         { 0x0dec00, 0x8cccc8 }, \
740         { 0x0dec00, 0x8cccd8 }, \
741         { 0x0dec00, 0x8cccc0 }, \
742         { 0x0dec00, 0x8cccd0 }, \
743         { 0x03ec00, 0x8cccc8 }, \
744         { 0x03ec00, 0x866660 }  \
745 }
746
747
748
749 #define ZYD_AL2210_PHY                                                  \
750 {                                                                       \
751         { ZYD_CR9,   0xe0 }, { ZYD_CR10, 0x91 }, { ZYD_CR12,  0x90 },   \
752         { ZYD_CR15,  0xd0 }, { ZYD_CR16, 0x40 }, { ZYD_CR17,  0x58 },   \
753         { ZYD_CR18,  0x04 }, { ZYD_CR23, 0x66 }, { ZYD_CR24,  0x14 },   \
754         { ZYD_CR26,  0x90 }, { ZYD_CR31, 0x80 }, { ZYD_CR34,  0x06 },   \
755         { ZYD_CR35,  0x3e }, { ZYD_CR38, 0x38 }, { ZYD_CR46,  0x90 },   \
756         { ZYD_CR47,  0x1e }, { ZYD_CR64, 0x64 }, { ZYD_CR79,  0xb5 },   \
757         { ZYD_CR80,  0x38 }, { ZYD_CR81, 0x30 }, { ZYD_CR113, 0xc0 },   \
758         { ZYD_CR127, 0x03 }                                             \
759 }
760
761 #define ZYD_AL2210_RF                                                   \
762 {                                                                       \
763         0x2396c0, 0x00fcb1, 0x358132, 0x0108b3, 0xc77804, 0x456415,     \
764         0xff2226, 0x806667, 0x7860f8, 0xbb01c9, 0x00000a, 0x00000b      \
765 }
766
767 #define ZYD_AL2210_CHANTABLE                                            \
768 {                                                                       \
769         0x0196c0, 0x019710, 0x019760, 0x0197b0, 0x019800, 0x019850,     \
770         0x0198a0, 0x0198f0, 0x019940, 0x019990, 0x0199e0, 0x019a30,     \
771         0x019a80, 0x019b40                                              \
772 }
773
774
775
776 #define ZYD_GCT_PHY                                                     \
777 {                                                                       \
778         { ZYD_CR47,  0x1e }, { ZYD_CR15, 0xdc }, { ZYD_CR113, 0xc0 },   \
779         { ZYD_CR20,  0x0c }, { ZYD_CR17, 0x65 }, { ZYD_CR34,  0x04 },   \
780         { ZYD_CR35,  0x35 }, { ZYD_CR24, 0x20 }, { ZYD_CR9,   0xe0 },   \
781         { ZYD_CR127, 0x02 }, { ZYD_CR10, 0x91 }, { ZYD_CR23,  0x7f },   \
782         { ZYD_CR27,  0x10 }, { ZYD_CR28, 0x7a }, { ZYD_CR79,  0xb5 },   \
783         { ZYD_CR64,  0x80 }, { ZYD_CR33, 0x28 }, { ZYD_CR38,  0x30 }    \
784 }
785
786 #define ZYD_GCT_RF                                                      \
787 {                                                                       \
788         0x1f0000, 0x1f0000, 0x1f0200, 0x1f0600, 0x1f8600, 0x1f8600,     \
789         0x002050, 0x1f8000, 0x1f8200, 0x1f8600, 0x1c0000, 0x10c458,     \
790         0x088e92, 0x187b82, 0x0401b4, 0x140816, 0x0c7000, 0x1c0000,     \
791         0x02ccae, 0x128023, 0x0a0000, 0x1a0000, 0x06e380, 0x16cb94,     \
792         0x0e1740, 0x014980, 0x116240, 0x090000, 0x192304, 0x05112f,     \
793         0x0d54a8, 0x0f8000, 0x1c0008, 0x1c0000, 0x1a0000, 0x1c0008,     \
794         0x150000, 0x0c7000, 0x150800, 0x150000                          \
795 }
796
797 #define ZYD_GCT_CHANTABLE                                               \
798 {                                                                       \
799         0x1a0000, 0x1a8000, 0x1a4000, 0x1ac000, 0x1a2000, 0x1aa000,     \
800         0x1a6000, 0x1ae000, 0x1a1000, 0x1a9000, 0x1a5000, 0x1ad000,     \
801         0x1a3000, 0x1ab000                                              \
802 }
803
804
805
806 #define ZYD_MAXIM_PHY                                                   \
807 {                                                                       \
808         { ZYD_CR23,  0x40 }, { ZYD_CR15,  0x20 }, { ZYD_CR28,  0x3e },  \
809         { ZYD_CR29,  0x00 }, { ZYD_CR26,  0x11 }, { ZYD_CR44,  0x33 },  \
810         { ZYD_CR106, 0x2a }, { ZYD_CR107, 0x1a }, { ZYD_CR109, 0x2b },  \
811         { ZYD_CR110, 0x2b }, { ZYD_CR111, 0x2b }, { ZYD_CR112, 0x2b },  \
812         { ZYD_CR10,  0x89 }, { ZYD_CR17,  0x20 }, { ZYD_CR26,  0x93 },  \
813         { ZYD_CR34,  0x30 }, { ZYD_CR35,  0x40 }, { ZYD_CR41,  0x24 },  \
814         { ZYD_CR44,  0x32 }, { ZYD_CR46,  0x90 }, { ZYD_CR89,  0x18 },  \
815         { ZYD_CR92,  0x0a }, { ZYD_CR101, 0x13 }, { ZYD_CR102, 0x27 },  \
816         { ZYD_CR106, 0x20 }, { ZYD_CR107, 0x24 }, { ZYD_CR109, 0x09 },  \
817         { ZYD_CR110, 0x13 }, { ZYD_CR111, 0x13 }, { ZYD_CR112, 0x13 },  \
818         { ZYD_CR113, 0x27 }, { ZYD_CR114, 0x27 }, { ZYD_CR115, 0x24 },  \
819         { ZYD_CR116, 0x24 }, { ZYD_CR117, 0xf4 }, { ZYD_CR118, 0xfa },  \
820         { ZYD_CR120, 0x4f }, { ZYD_CR121, 0x77 }, { ZYD_CR122, 0xfe },  \
821         { ZYD_CR10,  0x89 }, { ZYD_CR17,  0x20 }, { ZYD_CR26,  0x93 },  \
822         { ZYD_CR34,  0x30 }, { ZYD_CR35,  0x40 }, { ZYD_CR41,  0x24 },  \
823         { ZYD_CR44,  0x32 }, { ZYD_CR46,  0x90 }, { ZYD_CR89,  0x18 },  \
824         { ZYD_CR92,  0x0a }, { ZYD_CR101, 0x13 }, { ZYD_CR102, 0x27 },  \
825         { ZYD_CR106, 0x20 }, { ZYD_CR107, 0x24 }, { ZYD_CR109, 0x13 },  \
826         { ZYD_CR110, 0x27 }, { ZYD_CR111, 0x27 }, { ZYD_CR112, 0x13 },  \
827         { ZYD_CR113, 0x27 }, { ZYD_CR114, 0x27 }, { ZYD_CR115, 0x24 },  \
828         { ZYD_CR116, 0x24 }, { ZYD_CR117, 0xf4 }, { ZYD_CR118, 0x00 },  \
829         { ZYD_CR120, 0x4f }, { ZYD_CR121, 0x06 }, { ZYD_CR122, 0xfe },  \
830         { ZYD_CR150, 0x0d }                                             \
831 }
832
833 #define ZYD_MAXIM_RF                                                    \
834 {                                                                       \
835         0x00ccd4, 0x030a03, 0x000400, 0x000ca1, 0x010072, 0x018645,     \
836         0x004006, 0x0000a7, 0x008258, 0x003fc9, 0x00040a, 0x00000b,     \
837         0x00026c                                                        \
838 }
839
840 #define ZYD_MAXIM_CHANTABLE     \
841 {                               \
842         { 0x0ccd4, 0x30a03 },   \
843         { 0x22224, 0x00a13 },   \
844         { 0x37774, 0x10a13 },   \
845         { 0x0ccd4, 0x30a13 },   \
846         { 0x22224, 0x00a23 },   \
847         { 0x37774, 0x10a23 },   \
848         { 0x0ccd4, 0x30a23 },   \
849         { 0x22224, 0x00a33 },   \
850         { 0x37774, 0x10a33 },   \
851         { 0x0ccd4, 0x30a33 },   \
852         { 0x22224, 0x00a43 },   \
853         { 0x37774, 0x10a43 },   \
854         { 0x0ccd4, 0x30a43 },   \
855         { 0x199a4, 0x20a53 }    \
856 }
857
858
859
860 #define ZYD_MAXIM2_PHY                                                  \
861 {                                                                       \
862         { ZYD_CR23,  0x40 }, { ZYD_CR15,  0x20 }, { ZYD_CR28,  0x3e },  \
863         { ZYD_CR29,  0x00 }, { ZYD_CR26,  0x11 }, { ZYD_CR44,  0x33 },  \
864         { ZYD_CR106, 0x2a }, { ZYD_CR107, 0x1a }, { ZYD_CR109, 0x2b },  \
865         { ZYD_CR110, 0x2b }, { ZYD_CR111, 0x2b }, { ZYD_CR112, 0x2b },  \
866         { ZYD_CR10,  0x89 }, { ZYD_CR17,  0x20 }, { ZYD_CR26,  0x93 },  \
867         { ZYD_CR34,  0x30 }, { ZYD_CR35,  0x40 }, { ZYD_CR41,  0x24 },  \
868         { ZYD_CR44,  0x32 }, { ZYD_CR46,  0x90 }, { ZYD_CR89,  0x18 },  \
869         { ZYD_CR92,  0x0a }, { ZYD_CR101, 0x13 }, { ZYD_CR102, 0x27 },  \
870         { ZYD_CR106, 0x20 }, { ZYD_CR107, 0x24 }, { ZYD_CR109, 0x09 },  \
871         { ZYD_CR110, 0x13 }, { ZYD_CR111, 0x13 }, { ZYD_CR112, 0x13 },  \
872         { ZYD_CR113, 0x27 }, { ZYD_CR114, 0x27 }, { ZYD_CR115, 0x24 },  \
873         { ZYD_CR116, 0x24 }, { ZYD_CR117, 0xf4 }, { ZYD_CR118, 0xfa },  \
874         { ZYD_CR120, 0x4f }, { ZYD_CR121, 0x77 }, { ZYD_CR122, 0xfe },  \
875         { ZYD_CR10,  0x89 }, { ZYD_CR17,  0x20 }, { ZYD_CR26,  0x93 },  \
876         { ZYD_CR34,  0x30 }, { ZYD_CR35,  0x40 }, { ZYD_CR41,  0x24 },  \
877         { ZYD_CR44,  0x32 }, { ZYD_CR46,  0x90 }, { ZYD_CR79,  0x58 },  \
878         { ZYD_CR80,  0x30 }, { ZYD_CR81,  0x30 }, { ZYD_CR89,  0x18 },  \
879         { ZYD_CR92,  0x0a }, { ZYD_CR101, 0x13 }, { ZYD_CR102, 0x27 },  \
880         { ZYD_CR106, 0x20 }, { ZYD_CR107, 0x24 }, { ZYD_CR109, 0x09 },  \
881         { ZYD_CR110, 0x13 }, { ZYD_CR111, 0x13 }, { ZYD_CR112, 0x13 },  \
882         { ZYD_CR113, 0x27 }, { ZYD_CR114, 0x27 }, { ZYD_CR115, 0x24 },  \
883         { ZYD_CR116, 0x24 }, { ZYD_CR117, 0xf4 }, { ZYD_CR118, 0x00 },  \
884         { ZYD_CR120, 0x4f }, { ZYD_CR121, 0x06 }, { ZYD_CR122, 0xfe }   \
885 }
886
887 #define ZYD_MAXIM2_RF                                                   \
888 {                                                                       \
889         0x33334, 0x10a03, 0x00400, 0x00ca1, 0x10072, 0x18645, 0x04006,  \
890         0x000a7, 0x08258, 0x03fc9, 0x0040a, 0x0000b, 0x0026c            \
891 }
892
893 #define ZYD_MAXIM2_CHANTABLE_F                                          \
894 {                                                                       \
895         0x33334, 0x08884, 0x1ddd4, 0x33334, 0x08884, 0x1ddd4, 0x33334,  \
896         0x08884, 0x1ddd4, 0x33334, 0x08884, 0x1ddd4, 0x33334, 0x26664   \
897 }
898
899 #define ZYD_MAXIM2_CHANTABLE    \
900 {                               \
901         { 0x33334, 0x10a03 },   \
902         { 0x08884, 0x20a13 },   \
903         { 0x1ddd4, 0x30a13 },   \
904         { 0x33334, 0x10a13 },   \
905         { 0x08884, 0x20a23 },   \
906         { 0x1ddd4, 0x30a23 },   \
907         { 0x33334, 0x10a23 },   \
908         { 0x08884, 0x20a33 },   \
909         { 0x1ddd4, 0x30a33 },   \
910         { 0x33334, 0x10a33 },   \
911         { 0x08884, 0x20a43 },   \
912         { 0x1ddd4, 0x30a43 },   \
913         { 0x33334, 0x10a43 },   \
914         { 0x26664, 0x20a53 }    \
915 }
916
917 /*
918  * Control pipe requests.
919  */
920 #define ZYD_DOWNLOADREQ 0x30
921 #define ZYD_DOWNLOADSTS 0x31
922
923 /* possible values for register ZYD_CR_INTERRUPT */
924 #define ZYD_HWINT_MASK  0x004f0000
925
926 /* possible values for register ZYD_MAC_MISC */
927 #define ZYD_UNLOCK_PHY_REGS     0x80
928
929 /* possible values for register ZYD_MAC_ENCRYPTION_TYPE */
930 #define ZYD_ENC_SNIFFER 8
931
932 /* flags for register ZYD_MAC_RXFILTER */
933 #define ZYD_FILTER_ASS_REQ      (1 << 0)
934 #define ZYD_FILTER_ASS_RSP      (1 << 1)
935 #define ZYD_FILTER_REASS_REQ    (1 << 2)
936 #define ZYD_FILTER_REASS_RSP    (1 << 3)
937 #define ZYD_FILTER_PRB_REQ      (1 << 4)
938 #define ZYD_FILTER_PRB_RSP      (1 << 5)
939 #define ZYD_FILTER_BCN          (1 << 8)
940 #define ZYD_FILTER_ATIM         (1 << 9)
941 #define ZYD_FILTER_DEASS        (1 << 10)
942 #define ZYD_FILTER_AUTH         (1 << 11)
943 #define ZYD_FILTER_DEAUTH       (1 << 12)
944 #define ZYD_FILTER_PS_POLL      (1 << 26)
945 #define ZYD_FILTER_RTS          (1 << 27)
946 #define ZYD_FILTER_CTS          (1 << 28)
947 #define ZYD_FILTER_ACK          (1 << 29)
948 #define ZYD_FILTER_CFE          (1 << 30)
949 #define ZYD_FILTER_CFE_A        (1 << 31)
950
951 /* helpers for register ZYD_MAC_RXFILTER */
952 #define ZYD_FILTER_MONITOR      0xffffffff
953 #define ZYD_FILTER_BSS                                                  \
954         (ZYD_FILTER_ASS_RSP | ZYD_FILTER_REASS_RSP |                    \
955          ZYD_FILTER_PRB_RSP | ZYD_FILTER_BCN | ZYD_FILTER_DEASS |       \
956          ZYD_FILTER_AUTH | ZYD_FILTER_DEAUTH)
957 #define ZYD_FILTER_HOSTAP                                               \
958         (ZYD_FILTER_ASS_REQ | ZYD_FILTER_REASS_REQ |                    \
959          ZYD_FILTER_PRB_REQ | ZYD_FILTER_DEASS | ZYD_FILTER_AUTH |      \
960          ZYD_FILTER_DEAUTH | ZYD_FILTER_PS_POLL)
961
962 struct zyd_tx_desc {
963         uint8_t         phy;
964 #define ZYD_TX_PHY_SIGNAL(x)    ((x) & 0xf)
965 #define ZYD_TX_PHY_OFDM         (1 << 4)
966 #define ZYD_TX_PHY_SHPREAMBLE   (1 << 5)        /* CCK */
967 #define ZYD_TX_PHY_5GHZ         (1 << 5)        /* OFDM */
968
969         uint16_t        len;
970         uint8_t         flags;
971 #define ZYD_TX_FLAG_BACKOFF     (1 << 0)
972 #define ZYD_TX_FLAG_MULTICAST   (1 << 1)
973 #define ZYD_TX_FLAG_TYPE(x)     (((x) & 0x3) << 2)
974 #define ZYD_TX_TYPE_DATA        0
975 #define ZYD_TX_TYPE_PS_POLL     1
976 #define ZYD_TX_TYPE_MGMT        2
977 #define ZYD_TX_TYPE_CTL         3
978 #define ZYD_TX_FLAG_WAKEUP      (1 << 4)
979 #define ZYD_TX_FLAG_RTS         (1 << 5)
980 #define ZYD_TX_FLAG_ENCRYPT     (1 << 6)
981 #define ZYD_TX_FLAG_CTS_TO_SELF (1 << 7)
982
983         uint16_t        pktlen;
984         uint16_t        plcp_length;
985         uint8_t         plcp_service;
986 #define ZYD_PLCP_LENGEXT        0x80
987
988         uint16_t        nextlen;
989 } __packed;
990
991 struct zyd_plcphdr {
992         uint8_t         signal;
993         uint8_t         reserved[2];
994         uint16_t        service;        /* unaligned! */
995 } __packed;
996
997 struct zyd_rx_stat {
998         uint8_t signal_cck;
999         uint8_t rssi;
1000         uint8_t signal_ofdm;
1001         uint8_t cipher;
1002 #define ZYD_RX_CIPHER_WEP64     1
1003 #define ZYD_RX_CIPHER_TKIP      2
1004 #define ZYD_RX_CIPHER_AES       4
1005 #define ZYD_RX_CIPHER_WEP128    5
1006 #define ZYD_RX_CIPHER_WEP256    6
1007 #define ZYD_RX_CIPHER_WEP       \
1008         (ZYD_RX_CIPHER_WEP64 | ZYD_RX_CIPHER_WEP128 | ZYD_RX_CIPHER_WEP256)
1009
1010         uint8_t flags;
1011 #define ZYD_RX_OFDM             (1 << 0)
1012 #define ZYD_RX_TIMEOUT          (1 << 1)
1013 #define ZYD_RX_OVERRUN          (1 << 2)
1014 #define ZYD_RX_DECRYPTERR       (1 << 3)
1015 #define ZYD_RX_BADCRC32         (1 << 4)
1016 #define ZYD_RX_NOT2ME           (1 << 5)
1017 #define ZYD_RX_BADCRC16         (1 << 6)
1018 #define ZYD_RX_ERROR            (1 << 7)
1019 } __packed;
1020
1021 /* this structure may be unaligned */
1022 struct zyd_rx_desc {
1023 #define ZYD_MAX_RXFRAMECNT      3
1024         uWord   len[ZYD_MAX_RXFRAMECNT];
1025         uWord   tag;
1026 #define ZYD_TAG_MULTIFRAME      0x697e
1027 } __packed;
1028
1029 /* I2C bus alike */
1030 struct zyd_rfwrite {
1031         uint16_t        code;
1032         uint16_t        width;
1033         uint16_t        bit[32];
1034 #define ZYD_RF_IF_LE    (1 << 1)
1035 #define ZYD_RF_CLK      (1 << 2)
1036 #define ZYD_RF_DATA     (1 << 3)
1037 } __packed;
1038
1039 struct zyd_cmd {
1040         uint16_t        code;
1041 #define ZYD_CMD_IOWR            0x0021  /* write HMAC or PHY register */
1042 #define ZYD_CMD_IORD            0x0022  /* read HMAC or PHY register */
1043 #define ZYD_CMD_RFCFG           0x0023  /* write RF register */
1044 #define ZYD_NOTIF_IORD          0x9001  /* response for ZYD_CMD_IORD */
1045 #define ZYD_NOTIF_MACINTR       0x9001  /* interrupt notification */
1046 #define ZYD_NOTIF_RETRYSTATUS   0xa001  /* Tx retry notification */
1047
1048         uint8_t         data[64];
1049 } __packed;
1050
1051 /* structure for command ZYD_CMD_IOWR */
1052 struct zyd_pair {
1053         uint16_t        reg;
1054 /* helpers macros to read/write 32-bit registers */
1055 #define ZYD_REG32_LO(reg)       (reg)
1056 #define ZYD_REG32_HI(reg)       \
1057         ((reg) + ((((reg) & 0xf000) == 0x9000) ? 2 : 1))
1058
1059         uint16_t        val;
1060 } __packed;
1061
1062 /* structure for notification ZYD_NOTIF_RETRYSTATUS */
1063 struct zyd_notif_retry {
1064         uint16_t        rate;
1065         uint8_t         macaddr[IEEE80211_ADDR_LEN];
1066         uint16_t        count;
1067 } __packed;
1068
1069
1070 #define ZYD_RX_LIST_CNT 1
1071 #define ZYD_TX_LIST_CNT 1
1072
1073 #define ZYD_CONFIG_NO           1
1074 #define ZYD_IFACE_INDEX         0
1075
1076 #define ZYD_INTR_TIMEOUT        1000
1077 #define ZYD_TX_TIMEOUT          10000
1078
1079 #define ZYD_MAX_TXBUFSZ \
1080         (sizeof(struct zyd_tx_desc) + MCLBYTES)
1081
1082 #define ZYD_MIN_FRAGSZ                                                  \
1083         (sizeof(struct zyd_plcphdr) + IEEE80211_MIN_LEN +               \
1084          sizeof(struct zyd_rx_stat))
1085 #define ZYD_MIN_RXBUFSZ ZYD_MIN_FRAGSZ
1086 #define ZYX_MAX_RXBUFSZ                                                 \
1087         ((sizeof (struct zyd_plcphdr) + IEEE80211_MAX_LEN +             \
1088           sizeof (struct zyd_rx_stat)) * ZYD_MAX_RXFRAMECNT +           \
1089          sizeof (struct zyd_rx_desc))
1090  
1091
1092 #define ZYD_CMD_FLAG_READ       (1 << 0)
1093
1094 /* quickly determine if a given rate is CCK or OFDM */
1095 #define ZYD_RATE_IS_OFDM(rate)  ((rate) >= 12 && (rate) != 22)
1096
1097 struct zyd_phy_pair {
1098         uint16_t        reg;
1099         uint8_t         val;
1100 };
1101
1102 struct zyd_mac_pair {
1103         uint16_t        reg;
1104         uint32_t        val;
1105 };
1106
1107 struct zyd_tx_data {
1108         struct zyd_softc        *sc;
1109         usbd_xfer_handle        xfer;
1110         uint8_t                 *buf;
1111         struct ieee80211_node   *ni;
1112         struct mbuf             *m;
1113 };
1114
1115 struct zyd_rx_data {
1116         struct zyd_softc        *sc;
1117         usbd_xfer_handle        xfer;
1118         const uint8_t           *buf;
1119 };
1120
1121 struct zyd_node {
1122         struct ieee80211_node           ni;     /* must be the first */
1123         struct ieee80211_amrr_node      amn;
1124 };
1125
1126 struct zyd_rx_radiotap_header {
1127         struct ieee80211_radiotap_header wr_ihdr;
1128         uint8_t         wr_flags;
1129         uint8_t         wr_rate;
1130         uint16_t        wr_chan_freq;
1131         uint16_t        wr_chan_flags;
1132         int8_t          wr_antsignal;
1133         int8_t          wr_antnoise;
1134 } __packed;
1135
1136 #define ZYD_RX_RADIOTAP_PRESENT                                         \
1137         ((1 << IEEE80211_RADIOTAP_FLAGS) |                              \
1138          (1 << IEEE80211_RADIOTAP_RATE) |                               \
1139          (1 << IEEE80211_RADIOTAP_DBM_ANTSIGNAL) |                      \
1140          (1 << IEEE80211_RADIOTAP_DBM_ANTNOISE) |                       \
1141          (1 << IEEE80211_RADIOTAP_CHANNEL))
1142
1143 struct zyd_tx_radiotap_header {
1144         struct ieee80211_radiotap_header wt_ihdr;
1145         uint8_t         wt_flags;
1146         uint8_t         wt_rate;
1147         uint16_t        wt_chan_freq;
1148         uint16_t        wt_chan_flags;
1149 } __packed;
1150
1151 #define ZYD_TX_RADIOTAP_PRESENT                                         \
1152         ((1 << IEEE80211_RADIOTAP_FLAGS) |                              \
1153          (1 << IEEE80211_RADIOTAP_RATE) |                               \
1154          (1 << IEEE80211_RADIOTAP_CHANNEL))
1155
1156 struct zyd_softc;       /* forward declaration */
1157
1158 struct zyd_rf {
1159         /* RF methods */
1160         int     (*init)(struct zyd_rf *);
1161         int     (*switch_radio)(struct zyd_rf *, int);
1162         int     (*set_channel)(struct zyd_rf *, uint8_t);
1163
1164         /* RF attributes */
1165         struct  zyd_softc *rf_sc;       /* back-pointer */
1166         int     width;
1167 };
1168
1169 struct rq {
1170         const uint16_t *idata;
1171         struct zyd_pair *odata;
1172         int len;
1173         STAILQ_ENTRY(rq) rq;
1174 };
1175
1176 struct zyd_softc {
1177         device_t                        sc_dev;
1178         struct ifnet                    *sc_ifp;
1179         struct ieee80211com             sc_ic;
1180         int                             (*sc_newstate)(struct ieee80211com *,
1181                                             enum ieee80211_state, int);
1182         struct zyd_rf                   sc_rf;
1183
1184         struct usb_task                 sc_task;
1185         struct usb_task                 sc_scantask;
1186         int                             sc_scan_action;
1187 #define ZYD_SCAN_START  0
1188 #define ZYD_SCAN_END    1
1189 #define ZYD_SET_CHANNEL 2
1190         usbd_device_handle              sc_udev;
1191         usbd_interface_handle           sc_iface;
1192         int                             sc_flags;
1193         int                             sc_if_flags;
1194 #define ZD1211_FWLOADED (1 << 0)
1195
1196
1197         enum ieee80211_state            sc_state;
1198         int                             sc_arg;
1199
1200         struct mtx                      sc_mtx;
1201         struct callout                  sc_amrr_ch;
1202         struct callout                  sc_watchdog_ch;
1203
1204         struct ieee80211_amrr           amrr;
1205
1206         STAILQ_HEAD(rqh, rq) sc_rqh;
1207
1208         uint16_t                        fwbase;
1209         uint8_t                         regdomain;
1210         uint8_t                         mac_rev;
1211         uint16_t                        fw_rev;
1212         uint8_t                         rf_rev;
1213         uint8_t                         pa_rev;
1214         uint8_t                         fix_cr47;
1215         uint8_t                         fix_cr157;
1216         uint8_t                         pwr_cal[14];
1217         uint8_t                         pwr_int[14];
1218         uint8_t                         ofdm36_cal[14];
1219         uint8_t                         ofdm48_cal[14];
1220         uint8_t                         ofdm54_cal[14];
1221
1222 #define ZYD_ENDPT_BOUT  0
1223 #define ZYD_ENDPT_BIN   1
1224 #define ZYD_ENDPT_IIN   2
1225 #define ZYD_ENDPT_IOUT  3
1226 #define ZYD_ENDPT_CNT   4
1227         usbd_pipe_handle                zyd_ep[ZYD_ENDPT_CNT];
1228         uint8_t                         *ibuf;
1229
1230         struct zyd_rx_data              rx_data[ZYD_RX_LIST_CNT];
1231         struct zyd_tx_data              tx_data[ZYD_TX_LIST_CNT];
1232         int                             tx_queued;
1233
1234         int                             tx_timer;
1235
1236         struct bpf_if                   *sc_drvbpf;
1237
1238         struct zyd_rx_radiotap_header   sc_rxtap;
1239         int                             sc_rxtap_len;
1240
1241         struct zyd_tx_radiotap_header   sc_txtap;
1242         int                             sc_txtap_len;
1243 };
1244
1245 #if 0
1246 #define ZYD_LOCK(sc)    mtx_lock(&(sc)->sc_mtx)
1247 #define ZYD_UNLOCK(sc)  mtx_unlock(&(sc)->sc_mtx)
1248 #else
1249 #define ZYD_LOCK(sc)    do { ((sc) = (sc)); mtx_lock(&Giant); } while (0)
1250 #define ZYD_UNLOCK(sc)  mtx_unlock(&Giant)
1251 #endif
1252