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