GNU Linux-libre 6.8.7-gnu
[releases.git] / drivers / staging / wlan-ng / hfa384x.h
1 /* SPDX-License-Identifier: (GPL-2.0 OR MPL-1.1) */
2 /*
3  *
4  * Defines the constants and data structures for the hfa384x
5  *
6  * Copyright (C) 1999 AbsoluteValue Systems, Inc.  All Rights Reserved.
7  * --------------------------------------------------------------------
8  *
9  * linux-wlan
10  *
11  * --------------------------------------------------------------------
12  *
13  * Inquiries regarding the linux-wlan Open Source project can be
14  * made directly to:
15  *
16  * AbsoluteValue Systems Inc.
17  * info@linux-wlan.com
18  * http://www.linux-wlan.com
19  *
20  * --------------------------------------------------------------------
21  *
22  * Portions of the development of this software were funded by
23  * Intersil Corporation as part of PRISM(R) chipset product development.
24  *
25  * --------------------------------------------------------------------
26  *
27  *   [Implementation and usage notes]
28  *
29  *   [References]
30  *      CW10 Programmer's Manual v1.5
31  *      IEEE 802.11 D10.0
32  *
33  * --------------------------------------------------------------------
34  */
35
36 #ifndef _HFA384x_H
37 #define _HFA384x_H
38
39 #define HFA384x_FIRMWARE_VERSION(a, b, c) (((a) << 16) + ((b) << 8) + (c))
40
41 #include <linux/if_ether.h>
42 #include <linux/usb.h>
43
44 /*--- Mins & Maxs -----------------------------------*/
45 #define HFA384x_PORTID_MAX              ((u16)7)
46 #define HFA384x_NUMPORTS_MAX            ((u16)(HFA384x_PORTID_MAX + 1))
47 #define HFA384x_PDR_LEN_MAX             ((u16)512) /* in bytes, from EK */
48 #define HFA384x_PDA_RECS_MAX            ((u16)200) /* a guess */
49 #define HFA384x_PDA_LEN_MAX             ((u16)1024) /* in bytes, from EK*/
50 #define HFA384x_SCANRESULT_MAX          ((u16)31)
51 #define HFA384x_HSCANRESULT_MAX         ((u16)31)
52 #define HFA384x_CHINFORESULT_MAX        ((u16)16)
53 #define HFA384x_RID_GUESSING_MAXLEN     2048    /* I'm not really sure */
54 #define HFA384x_RIDDATA_MAXLEN          HFA384x_RID_GUESSING_MAXLEN
55 #define HFA384x_USB_RWMEM_MAXLEN        2048
56
57 /*--- Support Constants -----------------------------*/
58 #define         HFA384x_PORTTYPE_IBSS                   ((u16)0)
59 #define         HFA384x_PORTTYPE_BSS                    ((u16)1)
60 #define         HFA384x_PORTTYPE_PSUEDOIBSS             ((u16)3)
61 #define         HFA384x_WEPFLAGS_PRIVINVOKED            ((u16)BIT(0))
62 #define         HFA384x_WEPFLAGS_EXCLUDE                ((u16)BIT(1))
63 #define         HFA384x_WEPFLAGS_DISABLE_TXCRYPT        ((u16)BIT(4))
64 #define         HFA384x_WEPFLAGS_DISABLE_RXCRYPT        ((u16)BIT(7))
65 #define         HFA384x_ROAMMODE_HOSTSCAN_HOSTROAM      ((u16)3)
66 #define         HFA384x_PORTSTATUS_DISABLED             ((u16)1)
67 #define         HFA384x_RATEBIT_1                       ((u16)1)
68 #define         HFA384x_RATEBIT_2                       ((u16)2)
69 #define         HFA384x_RATEBIT_5dot5                   ((u16)4)
70 #define         HFA384x_RATEBIT_11                      ((u16)8)
71
72 /*--- MAC Internal memory constants and macros ------*/
73 /* masks and macros used to manipulate MAC internal memory addresses. */
74 /* MAC internal memory addresses are 23 bit quantities.  The MAC uses
75  * a paged address space where the upper 16 bits are the page number
76  * and the lower 7 bits are the offset.  There are various Host API
77  * elements that require two 16-bit quantities to specify a MAC
78  * internal memory address.  Unfortunately, some of the API's use a
79  * page/offset format where the offset value is JUST the lower seven
80  * bits and the page is  the remaining 16 bits.  Some of the API's
81  * assume that the 23 bit address has been split at the 16th bit.  We
82  * refer to these two formats as AUX format and CMD format.  The
83  * macros below help handle some of this.
84  */
85
86 /* Mask bits for discarding unwanted pieces in a flat address */
87 #define         HFA384x_ADDR_FLAT_AUX_PAGE_MASK (0x007fff80)
88 #define         HFA384x_ADDR_FLAT_AUX_OFF_MASK  (0x0000007f)
89 #define         HFA384x_ADDR_FLAT_CMD_PAGE_MASK (0xffff0000)
90 #define         HFA384x_ADDR_FLAT_CMD_OFF_MASK  (0x0000ffff)
91
92 /* Mask bits for discarding unwanted pieces in AUX format
93  * 16-bit address parts
94  */
95 #define         HFA384x_ADDR_AUX_PAGE_MASK      (0xffff)
96 #define         HFA384x_ADDR_AUX_OFF_MASK       (0x007f)
97
98 /* Make a 32-bit flat address from AUX format 16-bit page and offset */
99 #define         HFA384x_ADDR_AUX_MKFLAT(p, o)   \
100                 ((((u32)(((u16)(p)) & HFA384x_ADDR_AUX_PAGE_MASK)) << 7) | \
101                 ((u32)(((u16)(o)) & HFA384x_ADDR_AUX_OFF_MASK)))
102
103 /* Make CMD format offset and page from a 32-bit flat address */
104 #define         HFA384x_ADDR_CMD_MKPAGE(f) \
105                 ((u16)((((u32)(f)) & HFA384x_ADDR_FLAT_CMD_PAGE_MASK) >> 16))
106 #define         HFA384x_ADDR_CMD_MKOFF(f) \
107                 ((u16)(((u32)(f)) & HFA384x_ADDR_FLAT_CMD_OFF_MASK))
108
109 /*--- Controller Memory addresses -------------------*/
110 #define         HFA3842_PDA_BASE        (0x007f0000UL)
111 #define         HFA3841_PDA_BASE        (0x003f0000UL)
112 #define         HFA3841_PDA_BOGUS_BASE  (0x00390000UL)
113
114 /*--- Driver Download states  -----------------------*/
115 #define         HFA384x_DLSTATE_DISABLED                0
116 #define         HFA384x_DLSTATE_RAMENABLED              1
117 #define         HFA384x_DLSTATE_FLASHENABLED            2
118
119 /*--- Register Field Masks --------------------------*/
120 #define         HFA384x_CMD_AINFO               ((u16)GENMASK(14, 8))
121 #define         HFA384x_CMD_MACPORT             ((u16)GENMASK(10, 8))
122 #define         HFA384x_CMD_PROGMODE            ((u16)GENMASK(9, 8))
123 #define         HFA384x_CMD_CMDCODE             ((u16)GENMASK(5, 0))
124 #define         HFA384x_STATUS_RESULT           ((u16)GENMASK(14, 8))
125
126 /*--- Command Code Constants --------------------------*/
127 /*--- Controller Commands --------------------------*/
128 #define         HFA384x_CMDCODE_INIT            ((u16)0x00)
129 #define         HFA384x_CMDCODE_ENABLE          ((u16)0x01)
130 #define         HFA384x_CMDCODE_DISABLE         ((u16)0x02)
131
132 /*--- Regulate Commands --------------------------*/
133 #define         HFA384x_CMDCODE_INQ             ((u16)0x11)
134
135 /*--- Configure Commands --------------------------*/
136 #define         HFA384x_CMDCODE_DOWNLD          ((u16)0x22)
137
138 /*--- Debugging Commands -----------------------------*/
139 #define         HFA384x_CMDCODE_MONITOR         ((u16)(0x38))
140 #define         HFA384x_MONITOR_ENABLE          ((u16)(0x0b))
141 #define         HFA384x_MONITOR_DISABLE         ((u16)(0x0f))
142
143 /*--- Result Codes --------------------------*/
144 #define         HFA384x_CMD_ERR                 ((u16)(0x7F))
145
146 /*--- Programming Modes --------------------------
147  *      MODE 0: Disable programming
148  *      MODE 1: Enable volatile memory programming
149  *      MODE 2: Enable non-volatile memory programming
150  *      MODE 3: Program non-volatile memory section
151  *-------------------------------------------------
152  */
153 #define         HFA384x_PROGMODE_DISABLE        ((u16)0x00)
154 #define         HFA384x_PROGMODE_RAM            ((u16)0x01)
155 #define         HFA384x_PROGMODE_NV             ((u16)0x02)
156 #define         HFA384x_PROGMODE_NVWRITE        ((u16)0x03)
157
158 /*--- Record ID Constants --------------------------*/
159 /*--------------------------------------------------------------------
160  * Configuration RIDs: Network Parameters, Static Configuration Entities
161  *--------------------------------------------------------------------
162  */
163 #define         HFA384x_RID_CNFPORTTYPE         ((u16)0xFC00)
164 #define         HFA384x_RID_CNFOWNMACADDR       ((u16)0xFC01)
165 #define         HFA384x_RID_CNFDESIREDSSID      ((u16)0xFC02)
166 #define         HFA384x_RID_CNFOWNCHANNEL       ((u16)0xFC03)
167 #define         HFA384x_RID_CNFOWNSSID          ((u16)0xFC04)
168 #define         HFA384x_RID_CNFMAXDATALEN       ((u16)0xFC07)
169
170 /*--------------------------------------------------------------------
171  * Configuration RID lengths: Network Params, Static Config Entities
172  * This is the length of JUST the DATA part of the RID (does not
173  * include the len or code fields)
174  *--------------------------------------------------------------------
175  */
176 #define         HFA384x_RID_CNFOWNMACADDR_LEN   ((u16)6)
177 #define         HFA384x_RID_CNFDESIREDSSID_LEN  ((u16)34)
178 #define         HFA384x_RID_CNFOWNSSID_LEN      ((u16)34)
179
180 /*--------------------------------------------------------------------
181  * Configuration RIDs: Network Parameters, Dynamic Configuration Entities
182  *--------------------------------------------------------------------
183  */
184 #define         HFA384x_RID_CREATEIBSS          ((u16)0xFC81)
185 #define         HFA384x_RID_FRAGTHRESH          ((u16)0xFC82)
186 #define         HFA384x_RID_RTSTHRESH           ((u16)0xFC83)
187 #define         HFA384x_RID_TXRATECNTL          ((u16)0xFC84)
188 #define         HFA384x_RID_PROMISCMODE         ((u16)0xFC85)
189
190 /*----------------------------------------------------------------------
191  * Information RIDs: NIC Information
192  *----------------------------------------------------------------------
193  */
194 #define         HFA384x_RID_MAXLOADTIME         ((u16)0xFD00)
195 #define         HFA384x_RID_DOWNLOADBUFFER      ((u16)0xFD01)
196 #define         HFA384x_RID_PRIIDENTITY         ((u16)0xFD02)
197 #define         HFA384x_RID_PRISUPRANGE         ((u16)0xFD03)
198 #define         HFA384x_RID_PRI_CFIACTRANGES    ((u16)0xFD04)
199 #define         HFA384x_RID_NICSERIALNUMBER     ((u16)0xFD0A)
200 #define         HFA384x_RID_NICIDENTITY         ((u16)0xFD0B)
201 #define         HFA384x_RID_MFISUPRANGE         ((u16)0xFD0C)
202 #define         HFA384x_RID_CFISUPRANGE         ((u16)0xFD0D)
203 #define         HFA384x_RID_STAIDENTITY         ((u16)0xFD20)
204 #define         HFA384x_RID_STASUPRANGE         ((u16)0xFD21)
205 #define         HFA384x_RID_STA_MFIACTRANGES    ((u16)0xFD22)
206 #define         HFA384x_RID_STA_CFIACTRANGES    ((u16)0xFD23)
207
208 /*----------------------------------------------------------------------
209  * Information RID Lengths: NIC Information
210  * This is the length of JUST the DATA part of the RID (does not
211  * include the len or code fields)
212  *---------------------------------------------------------------------
213  */
214 #define         HFA384x_RID_NICSERIALNUMBER_LEN         ((u16)12)
215
216 /*--------------------------------------------------------------------
217  * Information RIDs:  MAC Information
218  *--------------------------------------------------------------------
219  */
220 #define         HFA384x_RID_PORTSTATUS          ((u16)0xFD40)
221 #define         HFA384x_RID_CURRENTSSID         ((u16)0xFD41)
222 #define         HFA384x_RID_CURRENTBSSID        ((u16)0xFD42)
223 #define         HFA384x_RID_CURRENTTXRATE       ((u16)0xFD44)
224 #define         HFA384x_RID_SHORTRETRYLIMIT     ((u16)0xFD48)
225 #define         HFA384x_RID_LONGRETRYLIMIT      ((u16)0xFD49)
226 #define         HFA384x_RID_MAXTXLIFETIME       ((u16)0xFD4A)
227 #define         HFA384x_RID_PRIVACYOPTIMP       ((u16)0xFD4F)
228 #define         HFA384x_RID_DBMCOMMSQUALITY     ((u16)0xFD51)
229
230 /*--------------------------------------------------------------------
231  * Information RID Lengths:  MAC Information
232  * This is the length of JUST the DATA part of the RID (does not
233  * include the len or code fields)
234  *--------------------------------------------------------------------
235  */
236 #define         HFA384x_RID_DBMCOMMSQUALITY_LEN  \
237         ((u16)sizeof(struct hfa384x_dbmcommsquality))
238 #define         HFA384x_RID_JOINREQUEST_LEN \
239         ((u16)sizeof(struct hfa384x_join_request_data))
240
241 /*--------------------------------------------------------------------
242  * Information RIDs:  Modem Information
243  *--------------------------------------------------------------------
244  */
245 #define         HFA384x_RID_CURRENTCHANNEL      ((u16)0xFDC1)
246
247 /*--------------------------------------------------------------------
248  * API ENHANCEMENTS (NOT ALREADY IMPLEMENTED)
249  *--------------------------------------------------------------------
250  */
251 #define         HFA384x_RID_CNFWEPDEFAULTKEYID  ((u16)0xFC23)
252 #define         HFA384x_RID_CNFWEPDEFAULTKEY0   ((u16)0xFC24)
253 #define         HFA384x_RID_CNFWEPDEFAULTKEY1   ((u16)0xFC25)
254 #define         HFA384x_RID_CNFWEPDEFAULTKEY2   ((u16)0xFC26)
255 #define         HFA384x_RID_CNFWEPDEFAULTKEY3   ((u16)0xFC27)
256 #define         HFA384x_RID_CNFWEPFLAGS         ((u16)0xFC28)
257 #define         HFA384x_RID_CNFAUTHENTICATION   ((u16)0xFC2A)
258 #define         HFA384x_RID_CNFROAMINGMODE      ((u16)0xFC2D)
259 #define         HFA384x_RID_CNFAPBCNINT         ((u16)0xFC33)
260 #define         HFA384x_RID_CNFDBMADJUST        ((u16)0xFC46)
261 #define         HFA384x_RID_CNFWPADATA          ((u16)0xFC48)
262 #define         HFA384x_RID_CNFBASICRATES       ((u16)0xFCB3)
263 #define         HFA384x_RID_CNFSUPPRATES        ((u16)0xFCB4)
264 #define         HFA384x_RID_CNFPASSIVESCANCTRL  ((u16)0xFCBA)
265 #define         HFA384x_RID_TXPOWERMAX          ((u16)0xFCBE)
266 #define         HFA384x_RID_JOINREQUEST         ((u16)0xFCE2)
267 #define         HFA384x_RID_AUTHENTICATESTA     ((u16)0xFCE3)
268 #define         HFA384x_RID_HOSTSCAN            ((u16)0xFCE5)
269
270 #define         HFA384x_RID_CNFWEPDEFAULTKEY_LEN        ((u16)6)
271 #define         HFA384x_RID_CNFWEP128DEFAULTKEY_LEN     ((u16)14)
272
273 /*--------------------------------------------------------------------
274  * PD Record codes
275  *--------------------------------------------------------------------
276  */
277 #define HFA384x_PDR_PCB_PARTNUM         ((u16)0x0001)
278 #define HFA384x_PDR_PDAVER              ((u16)0x0002)
279 #define HFA384x_PDR_NIC_SERIAL          ((u16)0x0003)
280 #define HFA384x_PDR_MKK_MEASUREMENTS    ((u16)0x0004)
281 #define HFA384x_PDR_NIC_RAMSIZE         ((u16)0x0005)
282 #define HFA384x_PDR_MFISUPRANGE         ((u16)0x0006)
283 #define HFA384x_PDR_CFISUPRANGE         ((u16)0x0007)
284 #define HFA384x_PDR_NICID               ((u16)0x0008)
285 #define HFA384x_PDR_MAC_ADDRESS         ((u16)0x0101)
286 #define HFA384x_PDR_REGDOMAIN           ((u16)0x0103)
287 #define HFA384x_PDR_ALLOWED_CHANNEL     ((u16)0x0104)
288 #define HFA384x_PDR_DEFAULT_CHANNEL     ((u16)0x0105)
289 #define HFA384x_PDR_TEMPTYPE            ((u16)0x0107)
290 #define HFA384x_PDR_IFR_SETTING         ((u16)0x0200)
291 #define HFA384x_PDR_RFR_SETTING         ((u16)0x0201)
292 #define HFA384x_PDR_HFA3861_BASELINE    ((u16)0x0202)
293 #define HFA384x_PDR_HFA3861_SHADOW      ((u16)0x0203)
294 #define HFA384x_PDR_HFA3861_IFRF        ((u16)0x0204)
295 #define HFA384x_PDR_HFA3861_CHCALSP     ((u16)0x0300)
296 #define HFA384x_PDR_HFA3861_CHCALI      ((u16)0x0301)
297 #define HFA384x_PDR_MAX_TX_POWER        ((u16)0x0302)
298 #define HFA384x_PDR_MASTER_CHAN_LIST    ((u16)0x0303)
299 #define HFA384x_PDR_3842_NIC_CONFIG     ((u16)0x0400)
300 #define HFA384x_PDR_USB_ID              ((u16)0x0401)
301 #define HFA384x_PDR_PCI_ID              ((u16)0x0402)
302 #define HFA384x_PDR_PCI_IFCONF          ((u16)0x0403)
303 #define HFA384x_PDR_PCI_PMCONF          ((u16)0x0404)
304 #define HFA384x_PDR_RFENRGY             ((u16)0x0406)
305 #define HFA384x_PDR_USB_POWER_TYPE      ((u16)0x0407)
306 #define HFA384x_PDR_USB_MAX_POWER       ((u16)0x0409)
307 #define HFA384x_PDR_USB_MANUFACTURER    ((u16)0x0410)
308 #define HFA384x_PDR_USB_PRODUCT         ((u16)0x0411)
309 #define HFA384x_PDR_ANT_DIVERSITY       ((u16)0x0412)
310 #define HFA384x_PDR_HFO_DELAY           ((u16)0x0413)
311 #define HFA384x_PDR_SCALE_THRESH        ((u16)0x0414)
312
313 #define HFA384x_PDR_HFA3861_MANF_TESTSP ((u16)0x0900)
314 #define HFA384x_PDR_HFA3861_MANF_TESTI  ((u16)0x0901)
315 #define HFA384x_PDR_END_OF_PDA          ((u16)0x0000)
316
317 /*--- Register Test/Get/Set Field macros ------------------------*/
318
319 #define         HFA384x_CMD_AINFO_SET(value)    ((u16)((u16)(value) << 8))
320 #define         HFA384x_CMD_MACPORT_SET(value)  \
321                         ((u16)HFA384x_CMD_AINFO_SET(value))
322 #define         HFA384x_CMD_PROGMODE_SET(value) \
323                         ((u16)HFA384x_CMD_AINFO_SET((u16)value))
324 #define         HFA384x_CMD_CMDCODE_SET(value)          ((u16)(value))
325
326 #define         HFA384x_STATUS_RESULT_SET(value)        (((u16)(value)) << 8)
327
328 /* Host Maintained State Info */
329 #define HFA384x_STATE_PREINIT   0
330 #define HFA384x_STATE_INIT      1
331 #define HFA384x_STATE_RUNNING   2
332
333 /*-------------------------------------------------------------*/
334 /* Commonly used basic types */
335 struct hfa384x_bytestr {
336         __le16 len;
337         u8 data[];
338 } __packed;
339
340 struct hfa384x_bytestr32 {
341         __le16 len;
342         u8 data[32];
343 } __packed;
344
345 /*--------------------------------------------------------------------
346  * Configuration Record Structures:
347  *      Network Parameters, Static Configuration Entities
348  *--------------------------------------------------------------------
349  */
350
351 /*-- Hardware/Firmware Component Information ----------*/
352 struct hfa384x_compident {
353         u16 id;
354         u16 variant;
355         u16 major;
356         u16 minor;
357 } __packed;
358
359 struct hfa384x_caplevel {
360         u16 role;
361         u16 id;
362         u16 variant;
363         u16 bottom;
364         u16 top;
365 } __packed;
366
367 /*-- Configuration Record: cnfAuthentication --*/
368 #define HFA384x_CNFAUTHENTICATION_OPENSYSTEM    0x0001
369 #define HFA384x_CNFAUTHENTICATION_SHAREDKEY     0x0002
370 #define HFA384x_CNFAUTHENTICATION_LEAP          0x0004
371
372 /*--------------------------------------------------------------------
373  * Configuration Record Structures:
374  *      Network Parameters, Dynamic Configuration Entities
375  *--------------------------------------------------------------------
376  */
377
378 #define HFA384x_CREATEIBSS_JOINCREATEIBSS          0
379
380 /*-- Configuration Record: HostScanRequest (data portion only) --*/
381 struct hfa384x_host_scan_request_data {
382         __le16 channel_list;
383         __le16 tx_rate;
384         struct hfa384x_bytestr32 ssid;
385 } __packed;
386
387 /*-- Configuration Record: JoinRequest (data portion only) --*/
388 struct hfa384x_join_request_data {
389         u8 bssid[WLAN_BSSID_LEN];
390         u16 channel;
391 } __packed;
392
393 /*-- Configuration Record: authenticateStation (data portion only) --*/
394 struct hfa384x_authenticate_station_data {
395         u8 address[ETH_ALEN];
396         __le16 status;
397         __le16 algorithm;
398 } __packed;
399
400 /*-- Configuration Record: WPAData       (data portion only) --*/
401 struct hfa384x_wpa_data {
402         __le16 datalen;
403         u8 data[];              /* max 80 */
404 } __packed;
405
406 /*--------------------------------------------------------------------
407  * Information Record Structures: NIC Information
408  *--------------------------------------------------------------------
409  */
410
411 /*-- Information Record: DownLoadBuffer --*/
412 /* NOTE: The page and offset are in AUX format */
413 struct hfa384x_downloadbuffer {
414         u16 page;
415         u16 offset;
416         u16 len;
417 } __packed;
418
419 /*--------------------------------------------------------------------
420  * Information Record Structures: NIC Information
421  *--------------------------------------------------------------------
422  */
423
424 #define HFA384x_PSTATUS_CONN_IBSS       ((u16)3)
425
426 /*-- Information Record: commsquality --*/
427 struct hfa384x_commsquality {
428         __le16 cq_curr_bss;
429         __le16 asl_curr_bss;
430         __le16 anl_curr_fc;
431 } __packed;
432
433 /*-- Information Record: dmbcommsquality --*/
434 struct hfa384x_dbmcommsquality {
435         u16 cq_dbm_curr_bss;
436         u16 asl_dbm_curr_bss;
437         u16 anl_dbm_curr_fc;
438 } __packed;
439
440 /*--------------------------------------------------------------------
441  * FRAME STRUCTURES: Communication Frames
442  *--------------------------------------------------------------------
443  * Communication Frames: Transmit Frames
444  *--------------------------------------------------------------------
445  */
446 /*-- Communication Frame: Transmit Frame Structure --*/
447 struct hfa384x_tx_frame {
448         u16 status;
449         u16 reserved1;
450         u16 reserved2;
451         u32 sw_support;
452         u8 tx_retrycount;
453         u8 tx_rate;
454         u16 tx_control;
455
456         /*-- 802.11 Header Information --*/
457         struct p80211_hdr hdr;
458         __le16 data_len;                /* little endian format */
459
460         /*-- 802.3 Header Information --*/
461
462         u8 dest_addr[6];
463         u8 src_addr[6];
464         u16 data_length;        /* big endian format */
465 } __packed;
466 /*--------------------------------------------------------------------
467  * Communication Frames: Field Masks for Transmit Frames
468  *--------------------------------------------------------------------
469  */
470 /*-- Status Field --*/
471 #define         HFA384x_TXSTATUS_ACKERR                 ((u16)BIT(5))
472 #define         HFA384x_TXSTATUS_FORMERR                ((u16)BIT(3))
473 #define         HFA384x_TXSTATUS_DISCON                 ((u16)BIT(2))
474 #define         HFA384x_TXSTATUS_AGEDERR                ((u16)BIT(1))
475 #define         HFA384x_TXSTATUS_RETRYERR               ((u16)BIT(0))
476 /*-- Transmit Control Field --*/
477 #define         HFA384x_TX_MACPORT                      ((u16)GENMASK(10, 8))
478 #define         HFA384x_TX_STRUCTYPE                    ((u16)GENMASK(4, 3))
479 #define         HFA384x_TX_TXEX                         ((u16)BIT(2))
480 #define         HFA384x_TX_TXOK                         ((u16)BIT(1))
481 /*--------------------------------------------------------------------
482  * Communication Frames: Test/Get/Set Field Values for Transmit Frames
483  *--------------------------------------------------------------------
484  */
485 /*-- Status Field --*/
486 #define HFA384x_TXSTATUS_ISERROR(v)     \
487         (((u16)(v)) & \
488         (HFA384x_TXSTATUS_ACKERR | HFA384x_TXSTATUS_FORMERR | \
489         HFA384x_TXSTATUS_DISCON | HFA384x_TXSTATUS_AGEDERR | \
490         HFA384x_TXSTATUS_RETRYERR))
491
492 #define HFA384x_TX_SET(v, m, s)         ((((u16)(v)) << ((u16)(s))) & ((u16)(m)))
493
494 #define HFA384x_TX_MACPORT_SET(v)       HFA384x_TX_SET(v, HFA384x_TX_MACPORT, 8)
495 #define HFA384x_TX_STRUCTYPE_SET(v)     HFA384x_TX_SET(v, \
496                                                 HFA384x_TX_STRUCTYPE, 3)
497 #define HFA384x_TX_TXEX_SET(v)          HFA384x_TX_SET(v, HFA384x_TX_TXEX, 2)
498 #define HFA384x_TX_TXOK_SET(v)          HFA384x_TX_SET(v, HFA384x_TX_TXOK, 1)
499 /*--------------------------------------------------------------------
500  * Communication Frames: Receive Frames
501  *--------------------------------------------------------------------
502  */
503 /*-- Communication Frame: Receive Frame Structure --*/
504 struct hfa384x_rx_frame {
505         /*-- MAC rx descriptor (hfa384x byte order) --*/
506         u16 status;
507         u32 time;
508         u8 silence;
509         u8 signal;
510         u8 rate;
511         u8 rx_flow;
512         u16 reserved1;
513         u16 reserved2;
514
515         /*-- 802.11 Header Information (802.11 byte order) --*/
516         struct p80211_hdr hdr;
517         __le16 data_len;                /* hfa384x (little endian) format */
518
519         /*-- 802.3 Header Information --*/
520         u8 dest_addr[6];
521         u8 src_addr[6];
522         u16 data_length;        /* IEEE? (big endian) format */
523 } __packed;
524 /*--------------------------------------------------------------------
525  * Communication Frames: Field Masks for Receive Frames
526  *--------------------------------------------------------------------
527  */
528
529 /*-- Status Fields --*/
530 #define         HFA384x_RXSTATUS_MACPORT                ((u16)GENMASK(10, 8))
531 #define         HFA384x_RXSTATUS_FCSERR                 ((u16)BIT(0))
532 /*--------------------------------------------------------------------
533  * Communication Frames: Test/Get/Set Field Values for Receive Frames
534  *--------------------------------------------------------------------
535  */
536 #define         HFA384x_RXSTATUS_MACPORT_GET(value)     ((u16)((((u16)(value)) \
537                                             & HFA384x_RXSTATUS_MACPORT) >> 8))
538 #define         HFA384x_RXSTATUS_ISFCSERR(value)        ((u16)(((u16)(value)) \
539                                                   & HFA384x_RXSTATUS_FCSERR))
540 /*--------------------------------------------------------------------
541  * FRAME STRUCTURES: Information Types and Information Frame Structures
542  *--------------------------------------------------------------------
543  * Information Types
544  *--------------------------------------------------------------------
545  */
546 #define         HFA384x_IT_HANDOVERADDR                 ((u16)0xF000UL)
547 #define         HFA384x_IT_COMMTALLIES                  ((u16)0xF100UL)
548 #define         HFA384x_IT_SCANRESULTS                  ((u16)0xF101UL)
549 #define         HFA384x_IT_CHINFORESULTS                ((u16)0xF102UL)
550 #define         HFA384x_IT_HOSTSCANRESULTS              ((u16)0xF103UL)
551 #define         HFA384x_IT_LINKSTATUS                   ((u16)0xF200UL)
552 #define         HFA384x_IT_ASSOCSTATUS                  ((u16)0xF201UL)
553 #define         HFA384x_IT_AUTHREQ                      ((u16)0xF202UL)
554 #define         HFA384x_IT_PSUSERCNT                    ((u16)0xF203UL)
555 #define         HFA384x_IT_KEYIDCHANGED                 ((u16)0xF204UL)
556 #define         HFA384x_IT_ASSOCREQ                     ((u16)0xF205UL)
557 #define         HFA384x_IT_MICFAILURE                   ((u16)0xF206UL)
558
559 /*--------------------------------------------------------------------
560  * Information Frames Structures
561  *--------------------------------------------------------------------
562  * Information Frames: Notification Frame Structures
563  *--------------------------------------------------------------------
564  */
565
566 /*--  Inquiry Frame, Diagnose: Communication Tallies --*/
567 struct hfa384x_comm_tallies_16 {
568         __le16 txunicastframes;
569         __le16 txmulticastframes;
570         __le16 txfragments;
571         __le16 txunicastoctets;
572         __le16 txmulticastoctets;
573         __le16 txdeferredtrans;
574         __le16 txsingleretryframes;
575         __le16 txmultipleretryframes;
576         __le16 txretrylimitexceeded;
577         __le16 txdiscards;
578         __le16 rxunicastframes;
579         __le16 rxmulticastframes;
580         __le16 rxfragments;
581         __le16 rxunicastoctets;
582         __le16 rxmulticastoctets;
583         __le16 rxfcserrors;
584         __le16 rxdiscardsnobuffer;
585         __le16 txdiscardswrongsa;
586         __le16 rxdiscardswepundecr;
587         __le16 rxmsginmsgfrag;
588         __le16 rxmsginbadmsgfrag;
589 } __packed;
590
591 struct hfa384x_comm_tallies_32 {
592         __le32 txunicastframes;
593         __le32 txmulticastframes;
594         __le32 txfragments;
595         __le32 txunicastoctets;
596         __le32 txmulticastoctets;
597         __le32 txdeferredtrans;
598         __le32 txsingleretryframes;
599         __le32 txmultipleretryframes;
600         __le32 txretrylimitexceeded;
601         __le32 txdiscards;
602         __le32 rxunicastframes;
603         __le32 rxmulticastframes;
604         __le32 rxfragments;
605         __le32 rxunicastoctets;
606         __le32 rxmulticastoctets;
607         __le32 rxfcserrors;
608         __le32 rxdiscardsnobuffer;
609         __le32 txdiscardswrongsa;
610         __le32 rxdiscardswepundecr;
611         __le32 rxmsginmsgfrag;
612         __le32 rxmsginbadmsgfrag;
613 } __packed;
614
615 /*--  Inquiry Frame, Diagnose: Scan Results & Subfields--*/
616 struct hfa384x_scan_result_sub {
617         u16 chid;
618         u16 anl;
619         u16 sl;
620         u8 bssid[WLAN_BSSID_LEN];
621         u16 bcnint;
622         u16 capinfo;
623         struct hfa384x_bytestr32 ssid;
624         u8 supprates[10];       /* 802.11 info element */
625         u16 proberesp_rate;
626 } __packed;
627
628 struct hfa384x_scan_result {
629         u16 rsvd;
630         u16 scanreason;
631         struct hfa384x_scan_result_sub result[HFA384x_SCANRESULT_MAX];
632 } __packed;
633
634 /*--  Inquiry Frame, Diagnose: ChInfo Results & Subfields--*/
635 struct hfa384x_ch_info_result_sub {
636         u16 chid;
637         u16 anl;
638         u16 pnl;
639         u16 active;
640 } __packed;
641
642 #define HFA384x_CHINFORESULT_BSSACTIVE  BIT(0)
643 #define HFA384x_CHINFORESULT_PCFACTIVE  BIT(1)
644
645 struct hfa384x_ch_info_result {
646         u16 scanchannels;
647         struct hfa384x_ch_info_result_sub result[HFA384x_CHINFORESULT_MAX];
648 } __packed;
649
650 /*--  Inquiry Frame, Diagnose: Host Scan Results & Subfields--*/
651 struct hfa384x_hscan_result_sub {
652         __le16 chid;
653         __le16 anl;
654         __le16 sl;
655         u8 bssid[WLAN_BSSID_LEN];
656         __le16 bcnint;
657         __le16 capinfo;
658         struct hfa384x_bytestr32 ssid;
659         u8 supprates[10];       /* 802.11 info element */
660         u16 proberesp_rate;
661         __le16 atim;
662 } __packed;
663
664 struct hfa384x_hscan_result {
665         u16 nresult;
666         u16 rsvd;
667         struct hfa384x_hscan_result_sub result[HFA384x_HSCANRESULT_MAX];
668 } __packed;
669
670 /*--  Unsolicited Frame, MAC Mgmt: LinkStatus --*/
671
672 #define HFA384x_LINK_NOTCONNECTED       ((u16)0)
673 #define HFA384x_LINK_CONNECTED          ((u16)1)
674 #define HFA384x_LINK_DISCONNECTED       ((u16)2)
675 #define HFA384x_LINK_AP_CHANGE          ((u16)3)
676 #define HFA384x_LINK_AP_OUTOFRANGE      ((u16)4)
677 #define HFA384x_LINK_AP_INRANGE         ((u16)5)
678 #define HFA384x_LINK_ASSOCFAIL          ((u16)6)
679
680 struct hfa384x_link_status {
681         __le16 linkstatus;
682 } __packed;
683
684 /*--  Unsolicited Frame, MAC Mgmt: AssociationStatus (--*/
685
686 #define HFA384x_ASSOCSTATUS_STAASSOC    ((u16)1)
687 #define HFA384x_ASSOCSTATUS_REASSOC     ((u16)2)
688 #define HFA384x_ASSOCSTATUS_AUTHFAIL    ((u16)5)
689
690 struct hfa384x_assoc_status {
691         u16 assocstatus;
692         u8 sta_addr[ETH_ALEN];
693         /* old_ap_addr is only valid if assocstatus == 2 */
694         u8 old_ap_addr[ETH_ALEN];
695         u16 reason;
696         u16 reserved;
697 } __packed;
698
699 /*--  Unsolicited Frame, MAC Mgmt: AuthRequest (AP Only) --*/
700
701 struct hfa384x_auth_request {
702         u8 sta_addr[ETH_ALEN];
703         __le16 algorithm;
704 } __packed;
705
706 /*--  Unsolicited Frame, MAC Mgmt: PSUserCount (AP Only) --*/
707
708 struct hfa384x_ps_user_count {
709         __le16 usercnt;
710 } __packed;
711
712 struct hfa384x_key_id_changed {
713         u8 sta_addr[ETH_ALEN];
714         u16 keyid;
715 } __packed;
716
717 /*--  Collection of all Inf frames ---------------*/
718 union hfa384x_infodata {
719         struct hfa384x_comm_tallies_16 commtallies16;
720         struct hfa384x_comm_tallies_32 commtallies32;
721         struct hfa384x_scan_result scanresult;
722         struct hfa384x_ch_info_result chinforesult;
723         struct hfa384x_hscan_result hscanresult;
724         struct hfa384x_link_status linkstatus;
725         struct hfa384x_assoc_status assocstatus;
726         struct hfa384x_auth_request authreq;
727         struct hfa384x_ps_user_count psusercnt;
728         struct hfa384x_key_id_changed keyidchanged;
729 } __packed;
730
731 struct hfa384x_inf_frame {
732         u16 framelen;
733         u16 infotype;
734         union hfa384x_infodata info;
735 } __packed;
736
737 /*--------------------------------------------------------------------
738  * USB Packet structures and constants.
739  *--------------------------------------------------------------------
740  */
741
742 /* Should be sent to the bulkout endpoint */
743 #define HFA384x_USB_TXFRM       0
744 #define HFA384x_USB_CMDREQ      1
745 #define HFA384x_USB_WRIDREQ     2
746 #define HFA384x_USB_RRIDREQ     3
747 #define HFA384x_USB_WMEMREQ     4
748 #define HFA384x_USB_RMEMREQ     5
749
750 /* Received from the bulkin endpoint */
751 #define HFA384x_USB_ISTXFRM(a)  (((a) & 0x9000) == 0x1000)
752 #define HFA384x_USB_ISRXFRM(a)  (!((a) & 0x9000))
753 #define HFA384x_USB_INFOFRM     0x8000
754 #define HFA384x_USB_CMDRESP     0x8001
755 #define HFA384x_USB_WRIDRESP    0x8002
756 #define HFA384x_USB_RRIDRESP    0x8003
757 #define HFA384x_USB_WMEMRESP    0x8004
758 #define HFA384x_USB_RMEMRESP    0x8005
759 #define HFA384x_USB_BUFAVAIL    0x8006
760 #define HFA384x_USB_ERROR       0x8007
761
762 /*------------------------------------*/
763 /* Request (bulk OUT) packet contents */
764
765 struct hfa384x_usb_txfrm {
766         struct hfa384x_tx_frame desc;
767         u8 data[WLAN_DATA_MAXLEN];
768 } __packed;
769
770 struct hfa384x_usb_cmdreq {
771         __le16 type;
772         __le16 cmd;
773         __le16 parm0;
774         __le16 parm1;
775         __le16 parm2;
776         u8 pad[54];
777 } __packed;
778
779 struct hfa384x_usb_wridreq {
780         __le16 type;
781         __le16 frmlen;
782         __le16 rid;
783         u8 data[HFA384x_RIDDATA_MAXLEN];
784 } __packed;
785
786 struct hfa384x_usb_rridreq {
787         __le16 type;
788         __le16 frmlen;
789         __le16 rid;
790         u8 pad[58];
791 } __packed;
792
793 struct hfa384x_usb_wmemreq {
794         __le16 type;
795         __le16 frmlen;
796         __le16 offset;
797         __le16 page;
798         u8 data[HFA384x_USB_RWMEM_MAXLEN];
799 } __packed;
800
801 struct hfa384x_usb_rmemreq {
802         __le16 type;
803         __le16 frmlen;
804         __le16 offset;
805         __le16 page;
806         u8 pad[56];
807 } __packed;
808
809 /*------------------------------------*/
810 /* Response (bulk IN) packet contents */
811
812 struct hfa384x_usb_rxfrm {
813         struct hfa384x_rx_frame desc;
814         u8 data[WLAN_DATA_MAXLEN];
815 } __packed;
816
817 struct hfa384x_usb_infofrm {
818         u16 type;
819         struct hfa384x_inf_frame info;
820 } __packed;
821
822 struct hfa384x_usb_statusresp {
823         u16 type;
824         __le16 status;
825         __le16 resp0;
826         __le16 resp1;
827         __le16 resp2;
828 } __packed;
829
830 struct hfa384x_usb_rridresp {
831         u16 type;
832         __le16 frmlen;
833         __le16 rid;
834         u8 data[HFA384x_RIDDATA_MAXLEN];
835 } __packed;
836
837 struct hfa384x_usb_rmemresp {
838         u16 type;
839         u16 frmlen;
840         u8 data[HFA384x_USB_RWMEM_MAXLEN];
841 } __packed;
842
843 struct hfa384x_usb_bufavail {
844         u16 type;
845         u16 frmlen;
846 } __packed;
847
848 struct hfa384x_usb_error {
849         u16 type;
850         u16 errortype;
851 } __packed;
852
853 /*----------------------------------------------------------*/
854 /* Unions for packaging all the known packet types together */
855
856 union hfa384x_usbout {
857         __le16 type;
858         struct hfa384x_usb_txfrm txfrm;
859         struct hfa384x_usb_cmdreq cmdreq;
860         struct hfa384x_usb_wridreq wridreq;
861         struct hfa384x_usb_rridreq rridreq;
862         struct hfa384x_usb_wmemreq wmemreq;
863         struct hfa384x_usb_rmemreq rmemreq;
864 } __packed;
865
866 union hfa384x_usbin {
867         __le16 type;
868         struct hfa384x_usb_rxfrm rxfrm;
869         struct hfa384x_usb_txfrm txfrm;
870         struct hfa384x_usb_infofrm infofrm;
871         struct hfa384x_usb_statusresp cmdresp;
872         struct hfa384x_usb_statusresp wridresp;
873         struct hfa384x_usb_rridresp rridresp;
874         struct hfa384x_usb_statusresp wmemresp;
875         struct hfa384x_usb_rmemresp rmemresp;
876         struct hfa384x_usb_bufavail bufavail;
877         struct hfa384x_usb_error usberror;
878         u8 boguspad[3000];
879 } __packed;
880
881 /*--------------------------------------------------------------------
882  * PD record structures.
883  *--------------------------------------------------------------------
884  */
885
886 struct hfa384x_pdr_mfisuprange {
887         u16 id;
888         u16 variant;
889         u16 bottom;
890         u16 top;
891 } __packed;
892
893 struct hfa384x_pdr_cfisuprange {
894         u16 id;
895         u16 variant;
896         u16 bottom;
897         u16 top;
898 } __packed;
899
900 struct hfa384x_pdr_nicid {
901         u16 id;
902         u16 variant;
903         u16 major;
904         u16 minor;
905 } __packed;
906
907 struct hfa384x_pdrec {
908         __le16 len;             /* in words */
909         __le16 code;
910         union pdr {
911                 struct hfa384x_pdr_mfisuprange mfisuprange;
912                 struct hfa384x_pdr_cfisuprange cfisuprange;
913                 struct hfa384x_pdr_nicid nicid;
914
915         } data;
916 } __packed;
917
918 #ifdef __KERNEL__
919 /*--------------------------------------------------------------------
920  * ---  MAC state structure, argument to all functions --
921  * ---  Also, a collection of support types --
922  *--------------------------------------------------------------------
923  */
924 struct hfa384x_cmdresult {
925         u16 status;
926         u16 resp0;
927         u16 resp1;
928         u16 resp2;
929 };
930
931 /* USB Control Exchange (CTLX):
932  *  A queue of the structure below is maintained for all of the
933  *  Request/Response type USB packets supported by Prism2.
934  */
935 /* The following hfa384x_* structures are arguments to
936  * the usercb() for the different CTLX types.
937  */
938 struct hfa384x_rridresult {
939         u16 rid;
940         const void *riddata;
941         unsigned int riddata_len;
942 };
943
944 enum ctlx_state {
945         CTLX_START = 0,         /* Start state, not queued */
946
947         CTLX_COMPLETE,          /* CTLX successfully completed */
948         CTLX_REQ_FAILED,        /* OUT URB completed w/ error */
949
950         CTLX_PENDING,           /* Queued, data valid */
951         CTLX_REQ_SUBMITTED,     /* OUT URB submitted */
952         CTLX_REQ_COMPLETE,      /* OUT URB complete */
953         CTLX_RESP_COMPLETE      /* IN URB received */
954 };
955
956 struct hfa384x_usbctlx;
957 struct hfa384x;
958
959 typedef void (*ctlx_cmdcb_t) (struct hfa384x *, const struct hfa384x_usbctlx *);
960
961 typedef void (*ctlx_usercb_t) (struct hfa384x *hw,
962                                void *ctlxresult, void *usercb_data);
963
964 struct hfa384x_usbctlx {
965         struct list_head list;
966
967         size_t outbufsize;
968         union hfa384x_usbout outbuf;    /* pkt buf for OUT */
969         union hfa384x_usbin inbuf;      /* pkt buf for IN(a copy) */
970
971         enum ctlx_state state;  /* Tracks running state */
972
973         struct completion done;
974         int reapable;           /* Food for the reaper task */
975
976         ctlx_cmdcb_t cmdcb;     /* Async command callback */
977         ctlx_usercb_t usercb;   /* Async user callback, */
978         void *usercb_data;      /*  at CTLX completion  */
979 };
980
981 struct hfa384x_usbctlxq {
982         spinlock_t lock;
983         struct list_head pending;
984         struct list_head active;
985         struct list_head completing;
986         struct list_head reapable;
987 };
988
989 struct hfa384x_metacmd {
990         u16 cmd;
991
992         u16 parm0;
993         u16 parm1;
994         u16 parm2;
995
996         struct hfa384x_cmdresult result;
997 };
998
999 #define MAX_GRP_ADDR            32
1000 #define WLAN_COMMENT_MAX        80  /* Max. length of user comment string. */
1001
1002 #define WLAN_AUTH_MAX           60  /* Max. # of authenticated stations. */
1003 #define WLAN_ACCESS_MAX         60  /* Max. # of stations in an access list. */
1004 #define WLAN_ACCESS_NONE        0   /* No stations may be authenticated. */
1005 #define WLAN_ACCESS_ALL         1   /* All stations may be authenticated. */
1006 #define WLAN_ACCESS_ALLOW       2   /* Authenticate only "allowed" stations. */
1007 #define WLAN_ACCESS_DENY        3   /* Do not authenticate "denied" stations. */
1008
1009 /* XXX These are going away ASAP */
1010 struct prism2sta_authlist {
1011         unsigned int cnt;
1012         u8 addr[WLAN_AUTH_MAX][ETH_ALEN];
1013         u8 assoc[WLAN_AUTH_MAX];
1014 };
1015
1016 struct prism2sta_accesslist {
1017         unsigned int modify;
1018         unsigned int cnt;
1019         u8 addr[WLAN_ACCESS_MAX][ETH_ALEN];
1020         unsigned int cnt1;
1021         u8 addr1[WLAN_ACCESS_MAX][ETH_ALEN];
1022 };
1023
1024 struct hfa384x {
1025         /* USB support data */
1026         struct usb_device *usb;
1027         struct urb rx_urb;
1028         struct sk_buff *rx_urb_skb;
1029         struct urb tx_urb;
1030         struct urb ctlx_urb;
1031         union hfa384x_usbout txbuff;
1032         struct hfa384x_usbctlxq ctlxq;
1033         struct timer_list reqtimer;
1034         struct timer_list resptimer;
1035
1036         struct timer_list throttle;
1037
1038         struct work_struct reaper_bh;
1039         struct work_struct completion_bh;
1040
1041         struct work_struct usb_work;
1042
1043         unsigned long usb_flags;
1044 #define THROTTLE_RX     0
1045 #define THROTTLE_TX     1
1046 #define WORK_RX_HALT    2
1047 #define WORK_TX_HALT    3
1048 #define WORK_RX_RESUME  4
1049 #define WORK_TX_RESUME  5
1050
1051         unsigned short req_timer_done:1;
1052         unsigned short resp_timer_done:1;
1053
1054         int endp_in;
1055         int endp_out;
1056
1057         int sniff_fcs;
1058         int sniff_channel;
1059         int sniff_truncate;
1060         int sniffhdr;
1061
1062         wait_queue_head_t cmdq; /* wait queue itself */
1063
1064         /* Controller state */
1065         u32 state;
1066         u32 isap;
1067         u8 port_enabled[HFA384x_NUMPORTS_MAX];
1068
1069         /* Download support */
1070         unsigned int dlstate;
1071         struct hfa384x_downloadbuffer bufinfo;
1072         u16 dltimeout;
1073
1074         int scanflag;           /* to signal scan complete */
1075         int join_ap;            /* are we joined to a specific ap */
1076         int join_retries;       /* number of join retries till we fail */
1077         struct hfa384x_join_request_data joinreq;/* join request saved data */
1078
1079         struct wlandevice *wlandev;
1080         /* Timer to allow for the deferred processing of linkstatus messages */
1081         struct work_struct link_bh;
1082
1083         struct work_struct commsqual_bh;
1084         struct hfa384x_commsquality qual;
1085         struct timer_list commsqual_timer;
1086
1087         u16 link_status;
1088         u16 link_status_new;
1089         struct sk_buff_head authq;
1090
1091         u32 txrate;
1092
1093         /* And here we have stuff that used to be in priv */
1094
1095         /* State variables */
1096         unsigned int presniff_port_type;
1097         u16 presniff_wepflags;
1098         u32 dot11_desired_bss_type;
1099
1100         int dbmadjust;
1101
1102         /* Group Addresses - right now, there are up to a total
1103          * of MAX_GRP_ADDR group addresses
1104          */
1105         u8 dot11_grp_addr[MAX_GRP_ADDR][ETH_ALEN];
1106         unsigned int dot11_grpcnt;
1107
1108         /* Component Identities */
1109         struct hfa384x_compident ident_nic;
1110         struct hfa384x_compident ident_pri_fw;
1111         struct hfa384x_compident ident_sta_fw;
1112         struct hfa384x_compident ident_ap_fw;
1113         u16 mm_mods;
1114
1115         /* Supplier compatibility ranges */
1116         struct hfa384x_caplevel cap_sup_mfi;
1117         struct hfa384x_caplevel cap_sup_cfi;
1118         struct hfa384x_caplevel cap_sup_pri;
1119         struct hfa384x_caplevel cap_sup_sta;
1120         struct hfa384x_caplevel cap_sup_ap;
1121
1122         /* Actor compatibility ranges */
1123         struct hfa384x_caplevel cap_act_pri_cfi; /*
1124                                                   * pri f/w to controller
1125                                                   * interface
1126                                                   */
1127
1128         struct hfa384x_caplevel cap_act_sta_cfi; /*
1129                                                   * sta f/w to controller
1130                                                   * interface
1131                                                   */
1132
1133         struct hfa384x_caplevel cap_act_sta_mfi; /*
1134                                                   * sta f/w to modem interface
1135                                                   */
1136
1137         struct hfa384x_caplevel cap_act_ap_cfi; /*
1138                                                  * ap f/w to controller
1139                                                  * interface
1140                                                  */
1141
1142         struct hfa384x_caplevel cap_act_ap_mfi; /* ap f/w to modem interface */
1143
1144         u32 psusercount;        /* Power save user count. */
1145         struct hfa384x_comm_tallies_32 tallies; /* Communication tallies. */
1146         u8 comment[WLAN_COMMENT_MAX + 1];       /* User comment */
1147
1148         /* Channel Info request results (AP only) */
1149         struct {
1150                 atomic_t done;
1151                 u8 count;
1152                 struct hfa384x_ch_info_result results;
1153         } channel_info;
1154
1155         struct hfa384x_inf_frame *scanresults;
1156
1157         struct prism2sta_authlist authlist;     /*
1158                                                  * Authenticated station list.
1159                                                  */
1160         unsigned int accessmode;                /* Access mode. */
1161         struct prism2sta_accesslist allow;      /* Allowed station list. */
1162         struct prism2sta_accesslist deny;       /* Denied station list. */
1163
1164 };
1165
1166 void hfa384x_create(struct hfa384x *hw, struct usb_device *usb);
1167 void hfa384x_destroy(struct hfa384x *hw);
1168
1169 int hfa384x_corereset(struct hfa384x *hw, int holdtime, int settletime,
1170                       int genesis);
1171 int hfa384x_drvr_disable(struct hfa384x *hw, u16 macport);
1172 int hfa384x_drvr_enable(struct hfa384x *hw, u16 macport);
1173 int hfa384x_drvr_flashdl_enable(struct hfa384x *hw);
1174 int hfa384x_drvr_flashdl_disable(struct hfa384x *hw);
1175 int hfa384x_drvr_flashdl_write(struct hfa384x *hw, u32 daddr, void *buf,
1176                                u32 len);
1177 int hfa384x_drvr_getconfig(struct hfa384x *hw, u16 rid, void *buf, u16 len);
1178 int hfa384x_drvr_ramdl_enable(struct hfa384x *hw, u32 exeaddr);
1179 int hfa384x_drvr_ramdl_disable(struct hfa384x *hw);
1180 int hfa384x_drvr_ramdl_write(struct hfa384x *hw, u32 daddr, void *buf, u32 len);
1181 int hfa384x_drvr_readpda(struct hfa384x *hw, void *buf, unsigned int len);
1182 int hfa384x_drvr_setconfig(struct hfa384x *hw, u16 rid, void *buf, u16 len);
1183
1184 static inline int
1185 hfa384x_drvr_getconfig16(struct hfa384x *hw, u16 rid, void *val)
1186 {
1187         int result = 0;
1188
1189         result = hfa384x_drvr_getconfig(hw, rid, val, sizeof(u16));
1190         if (result == 0)
1191                 le16_to_cpus(val);
1192         return result;
1193 }
1194
1195 static inline int hfa384x_drvr_setconfig16(struct hfa384x *hw, u16 rid, u16 val)
1196 {
1197         __le16 value = cpu_to_le16(val);
1198
1199         return hfa384x_drvr_setconfig(hw, rid, &value, sizeof(value));
1200 }
1201
1202 int
1203 hfa384x_drvr_setconfig_async(struct hfa384x *hw,
1204                              u16 rid,
1205                              void *buf,
1206                              u16 len, ctlx_usercb_t usercb, void *usercb_data);
1207
1208 static inline int
1209 hfa384x_drvr_setconfig16_async(struct hfa384x *hw, u16 rid, u16 val)
1210 {
1211         __le16 value = cpu_to_le16(val);
1212
1213         return hfa384x_drvr_setconfig_async(hw, rid, &value, sizeof(value),
1214                                             NULL, NULL);
1215 }
1216
1217 int hfa384x_drvr_start(struct hfa384x *hw);
1218 int hfa384x_drvr_stop(struct hfa384x *hw);
1219 int
1220 hfa384x_drvr_txframe(struct hfa384x *hw, struct sk_buff *skb,
1221                      struct p80211_hdr *p80211_hdr,
1222                      struct p80211_metawep *p80211_wep);
1223 void hfa384x_tx_timeout(struct wlandevice *wlandev);
1224
1225 int hfa384x_cmd_initialize(struct hfa384x *hw);
1226 int hfa384x_cmd_enable(struct hfa384x *hw, u16 macport);
1227 int hfa384x_cmd_disable(struct hfa384x *hw, u16 macport);
1228 int hfa384x_cmd_allocate(struct hfa384x *hw, u16 len);
1229 int hfa384x_cmd_monitor(struct hfa384x *hw, u16 enable);
1230 int
1231 hfa384x_cmd_download(struct hfa384x *hw,
1232                      u16 mode, u16 lowaddr, u16 highaddr, u16 codelen);
1233
1234 #endif /*__KERNEL__ */
1235
1236 #endif /*_HFA384x_H */