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