source: bootcd/isolinux/syslinux-6.03/gpxe/src/drivers/net/hfa384x.h

Last change on this file was e16e8f2, checked in by Edwin Eefting <edwin@datux.nl>, 3 years ago

bootstuff

  • Property mode set to 100644
File size: 104.3 KB
RevLine 
[e16e8f2]1/* src/prism2/include/prism2/hfa384x.h
2*
3* Defines the constants and data structures for the hfa384x
4*
5* Copyright (C) 1999 AbsoluteValue Systems, Inc.  All Rights Reserved.
6* --------------------------------------------------------------------
7*
8* linux-wlan
9*
10*   The contents of this file are subject to the Mozilla Public
11*   License Version 1.1 (the "License"); you may not use this file
12*   except in compliance with the License. You may obtain a copy of
13*   the License at http://www.mozilla.org/MPL/
14*
15*   Software distributed under the License is distributed on an "AS
16*   IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
17*   implied. See the License for the specific language governing
18*   rights and limitations under the License.
19*
20*   Alternatively, the contents of this file may be used under the
21*   terms of the GNU Public License version 2 (the "GPL"), in which
22*   case the provisions of the GPL are applicable instead of the
23*   above.  If you wish to allow the use of your version of this file
24*   only under the terms of the GPL and not to allow others to use
25*   your version of this file under the MPL, indicate your decision
26*   by deleting the provisions above and replace them with the notice
27*   and other provisions required by the GPL.  If you do not delete
28*   the provisions above, a recipient may use your version of this
29*   file under either the MPL or the GPL.
30*
31* --------------------------------------------------------------------
32*
33* Inquiries regarding the linux-wlan Open Source project can be
34* made directly to:
35*
36* AbsoluteValue Systems Inc.
37* info@linux-wlan.com
38* http://www.linux-wlan.com
39*
40* --------------------------------------------------------------------
41*
42* Portions of the development of this software were funded by
43* Intersil Corporation as part of PRISM(R) chipset product development.
44*
45* --------------------------------------------------------------------
46*
47*   [Implementation and usage notes]
48*
49*   [References]
50*       CW10 Programmer's Manual v1.5
51*       IEEE 802.11 D10.0
52*
53* --------------------------------------------------------------------
54*/
55
56FILE_LICENCE ( GPL2_ONLY );
57
58#ifndef _HFA384x_H
59#define _HFA384x_H
60
61/*=============================================================*/
62#define HFA384x_FIRMWARE_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
63
64#define HFA384x_LEVEL_TO_dBm(v)   (0x100 + (v) * 100 / 255 - 100)
65
66/*------ Constants --------------------------------------------*/
67/*--- Mins & Maxs -----------------------------------*/
68#define         HFA384x_CMD_ALLOC_LEN_MIN       ((UINT16)4)
69#define         HFA384x_CMD_ALLOC_LEN_MAX       ((UINT16)2400)
70#define         HFA384x_BAP_DATALEN_MAX         ((UINT16)4096)
71#define         HFA384x_BAP_OFFSET_MAX          ((UINT16)4096)
72#define         HFA384x_PORTID_MAX              ((UINT16)7)
73#define         HFA384x_NUMPORTS_MAX            ((UINT16)(HFA384x_PORTID_MAX+1))
74#define         HFA384x_PDR_LEN_MAX             ((UINT16)512)   /* in bytes, from EK */
75#define         HFA384x_PDA_RECS_MAX            ((UINT16)200)   /* a guess */
76#define         HFA384x_PDA_LEN_MAX             ((UINT16)1024)  /* in bytes, from EK */
77#define         HFA384x_SCANRESULT_MAX          ((UINT16)31)
78#define         HFA384x_HSCANRESULT_MAX         ((UINT16)31)
79#define         HFA384x_CHINFORESULT_MAX        ((UINT16)16)
80#define         HFA384x_DRVR_FIDSTACKLEN_MAX    (10)
81#define         HFA384x_DRVR_TXBUF_MAX          (sizeof(hfa384x_tx_frame_t) + \
82                                                WLAN_DATA_MAXLEN - \
83                                                WLAN_WEP_IV_LEN - \
84                                                WLAN_WEP_ICV_LEN + 2)
85#define         HFA384x_DRVR_MAGIC              (0x4a2d)
86#define         HFA384x_INFODATA_MAXLEN         (sizeof(hfa384x_infodata_t))
87#define         HFA384x_INFOFRM_MAXLEN          (sizeof(hfa384x_InfFrame_t))
88#define         HFA384x_RID_GUESSING_MAXLEN     2048  /* I'm not really sure */
89#define         HFA384x_RIDDATA_MAXLEN          HFA384x_RID_GUESSING_MAXLEN     
90#define         HFA384x_USB_RWMEM_MAXLEN        2048
91
92/*--- Support Constants -----------------------------*/
93#define         HFA384x_BAP_PROC                        ((UINT16)0)
94#define         HFA384x_BAP_INT                         ((UINT16)1)
95#define         HFA384x_PORTTYPE_IBSS                   ((UINT16)0)
96#define         HFA384x_PORTTYPE_BSS                    ((UINT16)1)
97#define         HFA384x_PORTTYPE_WDS                    ((UINT16)2)
98#define         HFA384x_PORTTYPE_PSUEDOIBSS             ((UINT16)3)
99#define         HFA384x_PORTTYPE_HOSTAP                 ((UINT16)6)
100#define         HFA384x_WEPFLAGS_PRIVINVOKED            ((UINT16)BIT0)
101#define         HFA384x_WEPFLAGS_EXCLUDE                ((UINT16)BIT1)
102#define         HFA384x_WEPFLAGS_DISABLE_TXCRYPT        ((UINT16)BIT4)
103#define         HFA384x_WEPFLAGS_DISABLE_RXCRYPT        ((UINT16)BIT7)
104#define         HFA384x_WEPFLAGS_DISALLOW_MIXED         ((UINT16)BIT11)
105#define         HFA384x_WEPFLAGS_IV_INTERVAL1           ((UINT16)0)
106#define         HFA384x_WEPFLAGS_IV_INTERVAL10          ((UINT16)BIT5)
107#define         HFA384x_WEPFLAGS_IV_INTERVAL50          ((UINT16)BIT6)
108#define         HFA384x_WEPFLAGS_IV_INTERVAL100         ((UINT16)(BIT5 | BIT6))
109#define         HFA384x_WEPFLAGS_FIRMWARE_WPA           ((UINT16)BIT8)
110#define         HFA384x_WEPFLAGS_HOST_MIC               ((UINT16)BIT9)
111#define         HFA384x_ROAMMODE_FWSCAN_FWROAM          ((UINT16)1)
112#define         HFA384x_ROAMMODE_FWSCAN_HOSTROAM        ((UINT16)2)
113#define         HFA384x_ROAMMODE_HOSTSCAN_HOSTROAM      ((UINT16)3)
114#define         HFA384x_PORTSTATUS_DISABLED             ((UINT16)1)
115#define         HFA384x_PORTSTATUS_INITSRCH             ((UINT16)2)
116#define         HFA384x_PORTSTATUS_CONN_IBSS            ((UINT16)3)
117#define         HFA384x_PORTSTATUS_CONN_ESS             ((UINT16)4)
118#define         HFA384x_PORTSTATUS_OOR_ESS              ((UINT16)5)
119#define         HFA384x_PORTSTATUS_CONN_WDS             ((UINT16)6)
120#define         HFA384x_PORTSTATUS_HOSTAP               ((UINT16)8)
121#define         HFA384x_RATEBIT_1                       ((UINT16)1)
122#define         HFA384x_RATEBIT_2                       ((UINT16)2)
123#define         HFA384x_RATEBIT_5dot5                   ((UINT16)4)
124#define         HFA384x_RATEBIT_11                      ((UINT16)8)
125
126/*--- Just some symbolic names for legibility -------*/
127#define         HFA384x_TXCMD_NORECL            ((UINT16)0)
128#define         HFA384x_TXCMD_RECL              ((UINT16)1)
129
130/*--- MAC Internal memory constants and macros ------*/
131/* masks and macros used to manipulate MAC internal memory addresses. */
132/* MAC internal memory addresses are 23 bit quantities.  The MAC uses
133 * a paged address space where the upper 16 bits are the page number
134 * and the lower 7 bits are the offset.  There are various Host API
135 * elements that require two 16-bit quantities to specify a MAC
136 * internal memory address.  Unfortunately, some of the API's use a
137 * page/offset format where the offset value is JUST the lower seven
138 * bits and the page is  the remaining 16 bits.  Some of the API's
139 * assume that the 23 bit address has been split at the 16th bit.  We
140 * refer to these two formats as AUX format and CMD format.  The
141 * macros below help handle some of this.
142 */
143
144/* Handy constant */
145#define         HFA384x_ADDR_AUX_OFF_MAX        ((UINT16)0x007f)
146
147/* Mask bits for discarding unwanted pieces in a flat address */
148#define         HFA384x_ADDR_FLAT_AUX_PAGE_MASK (0x007fff80)
149#define         HFA384x_ADDR_FLAT_AUX_OFF_MASK  (0x0000007f)
150#define         HFA384x_ADDR_FLAT_CMD_PAGE_MASK (0xffff0000)
151#define         HFA384x_ADDR_FLAT_CMD_OFF_MASK  (0x0000ffff)
152
153/* Mask bits for discarding unwanted pieces in AUX format 16-bit address parts */
154#define         HFA384x_ADDR_AUX_PAGE_MASK      (0xffff)
155#define         HFA384x_ADDR_AUX_OFF_MASK       (0x007f)
156
157/* Mask bits for discarding unwanted pieces in CMD format 16-bit address parts */
158#define         HFA384x_ADDR_CMD_PAGE_MASK      (0x007f)
159#define         HFA384x_ADDR_CMD_OFF_MASK       (0xffff)
160
161/* Make a 32-bit flat address from AUX format 16-bit page and offset */
162#define         HFA384x_ADDR_AUX_MKFLAT(p,o)    \
163                (((UINT32)(((UINT16)(p))&HFA384x_ADDR_AUX_PAGE_MASK)) <<7) | \
164                ((UINT32)(((UINT16)(o))&HFA384x_ADDR_AUX_OFF_MASK))
165
166/* Make a 32-bit flat address from CMD format 16-bit page and offset */
167#define         HFA384x_ADDR_CMD_MKFLAT(p,o)    \
168                (((UINT32)(((UINT16)(p))&HFA384x_ADDR_CMD_PAGE_MASK)) <<16) | \
169                ((UINT32)(((UINT16)(o))&HFA384x_ADDR_CMD_OFF_MASK))
170
171/* Make AUX format offset and page from a 32-bit flat address */
172#define         HFA384x_ADDR_AUX_MKPAGE(f) \
173                ((UINT16)((((UINT32)(f))&HFA384x_ADDR_FLAT_AUX_PAGE_MASK)>>7))
174#define         HFA384x_ADDR_AUX_MKOFF(f) \
175                ((UINT16)(((UINT32)(f))&HFA384x_ADDR_FLAT_AUX_OFF_MASK))
176
177/* Make CMD format offset and page from a 32-bit flat address */
178#define         HFA384x_ADDR_CMD_MKPAGE(f) \
179                ((UINT16)((((UINT32)(f))&HFA384x_ADDR_FLAT_CMD_PAGE_MASK)>>16))
180#define         HFA384x_ADDR_CMD_MKOFF(f) \
181                ((UINT16)(((UINT32)(f))&HFA384x_ADDR_FLAT_CMD_OFF_MASK))
182
183/*--- Aux register masks/tests ----------------------*/
184/* Some of the upper bits of the AUX offset register are used to */
185/*  select address space. */
186#define         HFA384x_AUX_CTL_EXTDS   (0x00)
187#define         HFA384x_AUX_CTL_NV      (0x01)
188#define         HFA384x_AUX_CTL_PHY     (0x02)
189#define         HFA384x_AUX_CTL_ICSRAM  (0x03)
190
191/* Make AUX register offset and page values from a flat address */
192#define         HFA384x_AUX_MKOFF(f, c) \
193        (HFA384x_ADDR_AUX_MKOFF(f) | (((UINT16)(c))<<12))
194#define         HFA384x_AUX_MKPAGE(f)   HFA384x_ADDR_AUX_MKPAGE(f)
195
196
197/*--- Controller Memory addresses -------------------*/
198#define         HFA3842_PDA_BASE        (0x007f0000UL)
199#define         HFA3841_PDA_BASE        (0x003f0000UL)
200#define         HFA3841_PDA_BOGUS_BASE  (0x00390000UL)
201
202/*--- Driver Download states  -----------------------*/
203#define         HFA384x_DLSTATE_DISABLED                0
204#define         HFA384x_DLSTATE_RAMENABLED              1
205#define         HFA384x_DLSTATE_FLASHENABLED            2
206#define         HFA384x_DLSTATE_FLASHWRITTEN            3
207#define         HFA384x_DLSTATE_FLASHWRITEPENDING       4
208#define         HFA384x_DLSTATE_GENESIS                 5
209
210/*--- Register I/O offsets --------------------------*/
211#if ((WLAN_HOSTIF == WLAN_PCMCIA) || (WLAN_HOSTIF == WLAN_PLX))
212
213#define         HFA384x_CMD_OFF                 (0x00)
214#define         HFA384x_PARAM0_OFF              (0x02)
215#define         HFA384x_PARAM1_OFF              (0x04)
216#define         HFA384x_PARAM2_OFF              (0x06)
217#define         HFA384x_STATUS_OFF              (0x08)
218#define         HFA384x_RESP0_OFF               (0x0A)
219#define         HFA384x_RESP1_OFF               (0x0C)
220#define         HFA384x_RESP2_OFF               (0x0E)
221#define         HFA384x_INFOFID_OFF             (0x10)
222#define         HFA384x_RXFID_OFF               (0x20)
223#define         HFA384x_ALLOCFID_OFF            (0x22)
224#define         HFA384x_TXCOMPLFID_OFF          (0x24)
225#define         HFA384x_SELECT0_OFF             (0x18)
226#define         HFA384x_OFFSET0_OFF             (0x1C)
227#define         HFA384x_DATA0_OFF               (0x36)
228#define         HFA384x_SELECT1_OFF             (0x1A)
229#define         HFA384x_OFFSET1_OFF             (0x1E)
230#define         HFA384x_DATA1_OFF               (0x38)
231#define         HFA384x_EVSTAT_OFF              (0x30)
232#define         HFA384x_INTEN_OFF               (0x32)
233#define         HFA384x_EVACK_OFF               (0x34)
234#define         HFA384x_CONTROL_OFF             (0x14)
235#define         HFA384x_SWSUPPORT0_OFF          (0x28)
236#define         HFA384x_SWSUPPORT1_OFF          (0x2A)
237#define         HFA384x_SWSUPPORT2_OFF          (0x2C)
238#define         HFA384x_AUXPAGE_OFF             (0x3A)
239#define         HFA384x_AUXOFFSET_OFF           (0x3C)
240#define         HFA384x_AUXDATA_OFF             (0x3E)
241
242#elif (WLAN_HOSTIF == WLAN_PCI || WLAN_HOSTIF == WLAN_USB)
243
244#define         HFA384x_CMD_OFF                 (0x00)
245#define         HFA384x_PARAM0_OFF              (0x04)
246#define         HFA384x_PARAM1_OFF              (0x08)
247#define         HFA384x_PARAM2_OFF              (0x0c)
248#define         HFA384x_STATUS_OFF              (0x10)
249#define         HFA384x_RESP0_OFF               (0x14)
250#define         HFA384x_RESP1_OFF               (0x18)
251#define         HFA384x_RESP2_OFF               (0x1c)
252#define         HFA384x_INFOFID_OFF             (0x20)
253#define         HFA384x_RXFID_OFF               (0x40)
254#define         HFA384x_ALLOCFID_OFF            (0x44)
255#define         HFA384x_TXCOMPLFID_OFF          (0x48)
256#define         HFA384x_SELECT0_OFF             (0x30)
257#define         HFA384x_OFFSET0_OFF             (0x38)
258#define         HFA384x_DATA0_OFF               (0x6c)
259#define         HFA384x_SELECT1_OFF             (0x34)
260#define         HFA384x_OFFSET1_OFF             (0x3c)
261#define         HFA384x_DATA1_OFF               (0x70)
262#define         HFA384x_EVSTAT_OFF              (0x60)
263#define         HFA384x_INTEN_OFF               (0x64)
264#define         HFA384x_EVACK_OFF               (0x68)
265#define         HFA384x_CONTROL_OFF             (0x28)
266#define         HFA384x_SWSUPPORT0_OFF          (0x50)
267#define         HFA384x_SWSUPPORT1_OFF          (0x54)
268#define         HFA384x_SWSUPPORT2_OFF          (0x58)
269#define         HFA384x_AUXPAGE_OFF             (0x74)
270#define         HFA384x_AUXOFFSET_OFF           (0x78)
271#define         HFA384x_AUXDATA_OFF             (0x7c)
272#define         HFA384x_PCICOR_OFF              (0x4c)
273#define         HFA384x_PCIHCR_OFF              (0x5c)
274#define         HFA384x_PCI_M0_ADDRH_OFF        (0x80)
275#define         HFA384x_PCI_M0_ADDRL_OFF        (0x84)
276#define         HFA384x_PCI_M0_LEN_OFF          (0x88)
277#define         HFA384x_PCI_M0_CTL_OFF          (0x8c)
278#define         HFA384x_PCI_STATUS_OFF          (0x98)
279#define         HFA384x_PCI_M1_ADDRH_OFF        (0xa0)
280#define         HFA384x_PCI_M1_ADDRL_OFF        (0xa4)
281#define         HFA384x_PCI_M1_LEN_OFF          (0xa8)
282#define         HFA384x_PCI_M1_CTL_OFF          (0xac)
283
284#endif
285
286/*--- Register Field Masks --------------------------*/
287#define         HFA384x_CMD_BUSY                ((UINT16)BIT15)
288#define         HFA384x_CMD_AINFO               ((UINT16)(BIT14 | BIT13 | BIT12 | BIT11 | BIT10 | BIT9 | BIT8))
289#define         HFA384x_CMD_MACPORT             ((UINT16)(BIT10 | BIT9 | BIT8))
290#define         HFA384x_CMD_RECL                ((UINT16)BIT8)
291#define         HFA384x_CMD_WRITE               ((UINT16)BIT8)
292#define         HFA384x_CMD_PROGMODE            ((UINT16)(BIT9 | BIT8))
293#define         HFA384x_CMD_CMDCODE             ((UINT16)(BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0))
294
295#define         HFA384x_STATUS_RESULT           ((UINT16)(BIT14 | BIT13 | BIT12 | BIT11 | BIT10 | BIT9 | BIT8))
296#define         HFA384x_STATUS_CMDCODE          ((UINT16)(BIT5 | BIT4 | BIT3 | BIT2 | BIT1 | BIT0))
297
298#define         HFA384x_OFFSET_BUSY             ((UINT16)BIT15)
299#define         HFA384x_OFFSET_ERR              ((UINT16)BIT14)
300#define         HFA384x_OFFSET_DATAOFF          ((UINT16)(BIT11 | BIT10 | BIT9 | BIT8 | BIT7 | BIT6 | BIT5 | BIT4 | BIT3 | BIT2 | BIT1))
301
302#define         HFA384x_EVSTAT_TICK             ((UINT16)BIT15)
303#define         HFA384x_EVSTAT_WTERR            ((UINT16)BIT14)
304#define         HFA384x_EVSTAT_INFDROP          ((UINT16)BIT13)
305#define         HFA384x_EVSTAT_INFO             ((UINT16)BIT7)
306#define         HFA384x_EVSTAT_DTIM             ((UINT16)BIT5)
307#define         HFA384x_EVSTAT_CMD              ((UINT16)BIT4)
308#define         HFA384x_EVSTAT_ALLOC            ((UINT16)BIT3)
309#define         HFA384x_EVSTAT_TXEXC            ((UINT16)BIT2)
310#define         HFA384x_EVSTAT_TX               ((UINT16)BIT1)
311#define         HFA384x_EVSTAT_RX               ((UINT16)BIT0)
312
313#define         HFA384x_INT_BAP_OP           (HFA384x_EVSTAT_INFO|HFA384x_EVSTAT_RX|HFA384x_EVSTAT_TX|HFA384x_EVSTAT_TXEXC)
314
315#define         HFA384x_INT_NORMAL           (HFA384x_EVSTAT_INFO|HFA384x_EVSTAT_RX|HFA384x_EVSTAT_TX|HFA384x_EVSTAT_TXEXC|HFA384x_EVSTAT_INFDROP|HFA384x_EVSTAT_ALLOC|HFA384x_EVSTAT_DTIM)
316
317#define         HFA384x_INTEN_TICK              ((UINT16)BIT15)
318#define         HFA384x_INTEN_WTERR             ((UINT16)BIT14)
319#define         HFA384x_INTEN_INFDROP           ((UINT16)BIT13)
320#define         HFA384x_INTEN_INFO              ((UINT16)BIT7)
321#define         HFA384x_INTEN_DTIM              ((UINT16)BIT5)
322#define         HFA384x_INTEN_CMD               ((UINT16)BIT4)
323#define         HFA384x_INTEN_ALLOC             ((UINT16)BIT3)
324#define         HFA384x_INTEN_TXEXC             ((UINT16)BIT2)
325#define         HFA384x_INTEN_TX                ((UINT16)BIT1)
326#define         HFA384x_INTEN_RX                ((UINT16)BIT0)
327
328#define         HFA384x_EVACK_TICK              ((UINT16)BIT15)
329#define         HFA384x_EVACK_WTERR             ((UINT16)BIT14)
330#define         HFA384x_EVACK_INFDROP           ((UINT16)BIT13)
331#define         HFA384x_EVACK_INFO              ((UINT16)BIT7)
332#define         HFA384x_EVACK_DTIM              ((UINT16)BIT5)
333#define         HFA384x_EVACK_CMD               ((UINT16)BIT4)
334#define         HFA384x_EVACK_ALLOC             ((UINT16)BIT3)
335#define         HFA384x_EVACK_TXEXC             ((UINT16)BIT2)
336#define         HFA384x_EVACK_TX                ((UINT16)BIT1)
337#define         HFA384x_EVACK_RX                ((UINT16)BIT0)
338
339#define         HFA384x_CONTROL_AUXEN           ((UINT16)(BIT15 | BIT14))
340
341
342/*--- Command Code Constants --------------------------*/
343/*--- Controller Commands --------------------------*/
344#define         HFA384x_CMDCODE_INIT            ((UINT16)0x00)
345#define         HFA384x_CMDCODE_ENABLE          ((UINT16)0x01)
346#define         HFA384x_CMDCODE_DISABLE         ((UINT16)0x02)
347#define         HFA384x_CMDCODE_DIAG            ((UINT16)0x03)
348
349/*--- Buffer Mgmt Commands --------------------------*/
350#define         HFA384x_CMDCODE_ALLOC           ((UINT16)0x0A)
351#define         HFA384x_CMDCODE_TX              ((UINT16)0x0B)
352#define         HFA384x_CMDCODE_CLRPRST         ((UINT16)0x12)
353
354/*--- Regulate Commands --------------------------*/
355#define         HFA384x_CMDCODE_NOTIFY          ((UINT16)0x10)
356#define         HFA384x_CMDCODE_INQ             ((UINT16)0x11)
357
358/*--- Configure Commands --------------------------*/
359#define         HFA384x_CMDCODE_ACCESS          ((UINT16)0x21)
360#define         HFA384x_CMDCODE_DOWNLD          ((UINT16)0x22)
361
362/*--- Debugging Commands -----------------------------*/
363#define         HFA384x_CMDCODE_MONITOR         ((UINT16)(0x38))
364#define         HFA384x_MONITOR_ENABLE          ((UINT16)(0x0b))
365#define         HFA384x_MONITOR_DISABLE         ((UINT16)(0x0f))
366
367/*--- Result Codes --------------------------*/
368#define         HFA384x_SUCCESS                 ((UINT16)(0x00))
369#define         HFA384x_CARD_FAIL               ((UINT16)(0x01))
370#define         HFA384x_NO_BUFF                 ((UINT16)(0x05))
371#define         HFA384x_CMD_ERR                 ((UINT16)(0x7F))
372
373/*--- Programming Modes --------------------------
374        MODE 0: Disable programming
375        MODE 1: Enable volatile memory programming
376        MODE 2: Enable non-volatile memory programming
377        MODE 3: Program non-volatile memory section
378--------------------------------------------------*/
379#define         HFA384x_PROGMODE_DISABLE        ((UINT16)0x00)
380#define         HFA384x_PROGMODE_RAM            ((UINT16)0x01)
381#define         HFA384x_PROGMODE_NV             ((UINT16)0x02)
382#define         HFA384x_PROGMODE_NVWRITE        ((UINT16)0x03)
383
384/*--- AUX register enable --------------------------*/
385#define         HFA384x_AUXPW0                  ((UINT16)0xfe01)
386#define         HFA384x_AUXPW1                  ((UINT16)0xdc23)
387#define         HFA384x_AUXPW2                  ((UINT16)0xba45)
388
389#define         HFA384x_CONTROL_AUX_ISDISABLED  ((UINT16)0x0000)
390#define         HFA384x_CONTROL_AUX_ISENABLED   ((UINT16)0xc000)
391#define         HFA384x_CONTROL_AUX_DOENABLE    ((UINT16)0x8000)
392#define         HFA384x_CONTROL_AUX_DODISABLE   ((UINT16)0x4000)
393
394/*--- Record ID Constants --------------------------*/
395/*--------------------------------------------------------------------
396Configuration RIDs: Network Parameters, Static Configuration Entities
397--------------------------------------------------------------------*/
398#define         HFA384x_RID_CNFPORTTYPE         ((UINT16)0xFC00)
399#define         HFA384x_RID_CNFOWNMACADDR       ((UINT16)0xFC01)
400#define         HFA384x_RID_CNFDESIREDSSID      ((UINT16)0xFC02)
401#define         HFA384x_RID_CNFOWNCHANNEL       ((UINT16)0xFC03)
402#define         HFA384x_RID_CNFOWNSSID          ((UINT16)0xFC04)
403#define         HFA384x_RID_CNFOWNATIMWIN       ((UINT16)0xFC05)
404#define         HFA384x_RID_CNFSYSSCALE         ((UINT16)0xFC06)
405#define         HFA384x_RID_CNFMAXDATALEN       ((UINT16)0xFC07)
406#define         HFA384x_RID_CNFWDSADDR          ((UINT16)0xFC08)
407#define         HFA384x_RID_CNFPMENABLED        ((UINT16)0xFC09)
408#define         HFA384x_RID_CNFPMEPS            ((UINT16)0xFC0A)
409#define         HFA384x_RID_CNFMULTICASTRX      ((UINT16)0xFC0B)
410#define         HFA384x_RID_CNFMAXSLEEPDUR      ((UINT16)0xFC0C)
411#define         HFA384x_RID_CNFPMHOLDDUR        ((UINT16)0xFC0D)
412#define         HFA384x_RID_CNFOWNNAME          ((UINT16)0xFC0E)
413#define         HFA384x_RID_CNFOWNDTIMPER       ((UINT16)0xFC10)
414#define         HFA384x_RID_CNFWDSADDR1         ((UINT16)0xFC11)
415#define         HFA384x_RID_CNFWDSADDR2         ((UINT16)0xFC12)
416#define         HFA384x_RID_CNFWDSADDR3         ((UINT16)0xFC13)
417#define         HFA384x_RID_CNFWDSADDR4         ((UINT16)0xFC14)
418#define         HFA384x_RID_CNFWDSADDR5         ((UINT16)0xFC15)
419#define         HFA384x_RID_CNFWDSADDR6         ((UINT16)0xFC16)
420#define         HFA384x_RID_CNFMCASTPMBUFF      ((UINT16)0xFC17)
421
422/*--------------------------------------------------------------------
423Configuration RID lengths: Network Params, Static Config Entities
424  This is the length of JUST the DATA part of the RID (does not
425  include the len or code fields)
426--------------------------------------------------------------------*/
427/* TODO: fill in the rest of these */
428#define         HFA384x_RID_CNFPORTTYPE_LEN     ((UINT16)2)
429#define         HFA384x_RID_CNFOWNMACADDR_LEN   ((UINT16)6)
430#define         HFA384x_RID_CNFDESIREDSSID_LEN  ((UINT16)34)
431#define         HFA384x_RID_CNFOWNCHANNEL_LEN   ((UINT16)2)
432#define         HFA384x_RID_CNFOWNSSID_LEN      ((UINT16)34)
433#define         HFA384x_RID_CNFOWNATIMWIN_LEN   ((UINT16)2)
434#define         HFA384x_RID_CNFSYSSCALE_LEN     ((UINT16)0)
435#define         HFA384x_RID_CNFMAXDATALEN_LEN   ((UINT16)0)
436#define         HFA384x_RID_CNFWDSADDR_LEN      ((UINT16)6)
437#define         HFA384x_RID_CNFPMENABLED_LEN    ((UINT16)0)
438#define         HFA384x_RID_CNFPMEPS_LEN        ((UINT16)0)
439#define         HFA384x_RID_CNFMULTICASTRX_LEN  ((UINT16)0)
440#define         HFA384x_RID_CNFMAXSLEEPDUR_LEN  ((UINT16)0)
441#define         HFA384x_RID_CNFPMHOLDDUR_LEN    ((UINT16)0)
442#define         HFA384x_RID_CNFOWNNAME_LEN      ((UINT16)34)
443#define         HFA384x_RID_CNFOWNDTIMPER_LEN   ((UINT16)0)
444#define         HFA384x_RID_CNFWDSADDR1_LEN     ((UINT16)6)
445#define         HFA384x_RID_CNFWDSADDR2_LEN     ((UINT16)6)
446#define         HFA384x_RID_CNFWDSADDR3_LEN     ((UINT16)6)
447#define         HFA384x_RID_CNFWDSADDR4_LEN     ((UINT16)6)
448#define         HFA384x_RID_CNFWDSADDR5_LEN     ((UINT16)6)
449#define         HFA384x_RID_CNFWDSADDR6_LEN     ((UINT16)6)
450#define         HFA384x_RID_CNFMCASTPMBUFF_LEN  ((UINT16)0)
451#define         HFA384x_RID_CNFAUTHENTICATION_LEN ((UINT16)sizeof(UINT16))
452#define         HFA384x_RID_CNFMAXSLEEPDUR_LEN  ((UINT16)0)
453
454/*--------------------------------------------------------------------
455Configuration RIDs: Network Parameters, Dynamic Configuration Entities
456--------------------------------------------------------------------*/
457#define         HFA384x_RID_GROUPADDR           ((UINT16)0xFC80)
458#define         HFA384x_RID_CREATEIBSS          ((UINT16)0xFC81)
459#define         HFA384x_RID_FRAGTHRESH          ((UINT16)0xFC82)
460#define         HFA384x_RID_RTSTHRESH           ((UINT16)0xFC83)
461#define         HFA384x_RID_TXRATECNTL          ((UINT16)0xFC84)
462#define         HFA384x_RID_PROMISCMODE         ((UINT16)0xFC85)
463#define         HFA384x_RID_FRAGTHRESH0         ((UINT16)0xFC90)
464#define         HFA384x_RID_FRAGTHRESH1         ((UINT16)0xFC91)
465#define         HFA384x_RID_FRAGTHRESH2         ((UINT16)0xFC92)
466#define         HFA384x_RID_FRAGTHRESH3         ((UINT16)0xFC93)
467#define         HFA384x_RID_FRAGTHRESH4         ((UINT16)0xFC94)
468#define         HFA384x_RID_FRAGTHRESH5         ((UINT16)0xFC95)
469#define         HFA384x_RID_FRAGTHRESH6         ((UINT16)0xFC96)
470#define         HFA384x_RID_RTSTHRESH0          ((UINT16)0xFC97)
471#define         HFA384x_RID_RTSTHRESH1          ((UINT16)0xFC98)
472#define         HFA384x_RID_RTSTHRESH2          ((UINT16)0xFC99)
473#define         HFA384x_RID_RTSTHRESH3          ((UINT16)0xFC9A)
474#define         HFA384x_RID_RTSTHRESH4          ((UINT16)0xFC9B)
475#define         HFA384x_RID_RTSTHRESH5          ((UINT16)0xFC9C)
476#define         HFA384x_RID_RTSTHRESH6          ((UINT16)0xFC9D)
477#define         HFA384x_RID_TXRATECNTL0         ((UINT16)0xFC9E)
478#define         HFA384x_RID_TXRATECNTL1         ((UINT16)0xFC9F)
479#define         HFA384x_RID_TXRATECNTL2         ((UINT16)0xFCA0)
480#define         HFA384x_RID_TXRATECNTL3         ((UINT16)0xFCA1)
481#define         HFA384x_RID_TXRATECNTL4         ((UINT16)0xFCA2)
482#define         HFA384x_RID_TXRATECNTL5         ((UINT16)0xFCA3)
483#define         HFA384x_RID_TXRATECNTL6         ((UINT16)0xFCA4)
484
485/*--------------------------------------------------------------------
486Configuration RID Lengths: Network Param, Dynamic Config Entities
487  This is the length of JUST the DATA part of the RID (does not
488  include the len or code fields)
489--------------------------------------------------------------------*/
490/* TODO: fill in the rest of these */
491#define         HFA384x_RID_GROUPADDR_LEN       ((UINT16)16 * WLAN_ADDR_LEN)
492#define         HFA384x_RID_CREATEIBSS_LEN      ((UINT16)0)
493#define         HFA384x_RID_FRAGTHRESH_LEN      ((UINT16)0)
494#define         HFA384x_RID_RTSTHRESH_LEN       ((UINT16)0)
495#define         HFA384x_RID_TXRATECNTL_LEN      ((UINT16)4)
496#define         HFA384x_RID_PROMISCMODE_LEN     ((UINT16)2)
497#define         HFA384x_RID_FRAGTHRESH0_LEN     ((UINT16)0)
498#define         HFA384x_RID_FRAGTHRESH1_LEN     ((UINT16)0)
499#define         HFA384x_RID_FRAGTHRESH2_LEN     ((UINT16)0)
500#define         HFA384x_RID_FRAGTHRESH3_LEN     ((UINT16)0)
501#define         HFA384x_RID_FRAGTHRESH4_LEN     ((UINT16)0)
502#define         HFA384x_RID_FRAGTHRESH5_LEN     ((UINT16)0)
503#define         HFA384x_RID_FRAGTHRESH6_LEN     ((UINT16)0)
504#define         HFA384x_RID_RTSTHRESH0_LEN      ((UINT16)0)
505#define         HFA384x_RID_RTSTHRESH1_LEN      ((UINT16)0)
506#define         HFA384x_RID_RTSTHRESH2_LEN      ((UINT16)0)
507#define         HFA384x_RID_RTSTHRESH3_LEN      ((UINT16)0)
508#define         HFA384x_RID_RTSTHRESH4_LEN      ((UINT16)0)
509#define         HFA384x_RID_RTSTHRESH5_LEN      ((UINT16)0)
510#define         HFA384x_RID_RTSTHRESH6_LEN      ((UINT16)0)
511#define         HFA384x_RID_TXRATECNTL0_LEN     ((UINT16)0)
512#define         HFA384x_RID_TXRATECNTL1_LEN     ((UINT16)0)
513#define         HFA384x_RID_TXRATECNTL2_LEN     ((UINT16)0)
514#define         HFA384x_RID_TXRATECNTL3_LEN     ((UINT16)0)
515#define         HFA384x_RID_TXRATECNTL4_LEN     ((UINT16)0)
516#define         HFA384x_RID_TXRATECNTL5_LEN     ((UINT16)0)
517#define         HFA384x_RID_TXRATECNTL6_LEN     ((UINT16)0)
518
519/*--------------------------------------------------------------------
520Configuration RIDs: Behavior Parameters
521--------------------------------------------------------------------*/
522#define         HFA384x_RID_ITICKTIME           ((UINT16)0xFCE0)
523
524/*--------------------------------------------------------------------
525Configuration RID Lengths: Behavior Parameters
526  This is the length of JUST the DATA part of the RID (does not
527  include the len or code fields)
528--------------------------------------------------------------------*/
529#define         HFA384x_RID_ITICKTIME_LEN       ((UINT16)2)
530
531/*----------------------------------------------------------------------
532Information RIDs: NIC Information
533--------------------------------------------------------------------*/
534#define         HFA384x_RID_MAXLOADTIME         ((UINT16)0xFD00)
535#define         HFA384x_RID_DOWNLOADBUFFER      ((UINT16)0xFD01)
536#define         HFA384x_RID_PRIIDENTITY         ((UINT16)0xFD02)
537#define         HFA384x_RID_PRISUPRANGE         ((UINT16)0xFD03)
538#define         HFA384x_RID_PRI_CFIACTRANGES    ((UINT16)0xFD04)
539#define         HFA384x_RID_NICSERIALNUMBER     ((UINT16)0xFD0A)
540#define         HFA384x_RID_NICIDENTITY         ((UINT16)0xFD0B)
541#define         HFA384x_RID_MFISUPRANGE         ((UINT16)0xFD0C)
542#define         HFA384x_RID_CFISUPRANGE         ((UINT16)0xFD0D)
543#define         HFA384x_RID_CHANNELLIST         ((UINT16)0xFD10)
544#define         HFA384x_RID_REGULATORYDOMAINS   ((UINT16)0xFD11)
545#define         HFA384x_RID_TEMPTYPE            ((UINT16)0xFD12)
546#define         HFA384x_RID_CIS                 ((UINT16)0xFD13)
547#define         HFA384x_RID_STAIDENTITY         ((UINT16)0xFD20)
548#define         HFA384x_RID_STASUPRANGE         ((UINT16)0xFD21)
549#define         HFA384x_RID_STA_MFIACTRANGES    ((UINT16)0xFD22)
550#define         HFA384x_RID_STA_CFIACTRANGES    ((UINT16)0xFD23)
551#define         HFA384x_RID_BUILDSEQ            ((UINT16)0xFFFE)
552#define         HFA384x_RID_FWID                ((UINT16)0xFFFF)
553
554/*----------------------------------------------------------------------
555Information RID Lengths: NIC Information
556  This is the length of JUST the DATA part of the RID (does not
557  include the len or code fields)
558--------------------------------------------------------------------*/
559#define         HFA384x_RID_MAXLOADTIME_LEN             ((UINT16)0)
560#define         HFA384x_RID_DOWNLOADBUFFER_LEN          ((UINT16)sizeof(hfa384x_downloadbuffer_t))
561#define         HFA384x_RID_PRIIDENTITY_LEN             ((UINT16)8)
562#define         HFA384x_RID_PRISUPRANGE_LEN             ((UINT16)10)
563#define         HFA384x_RID_CFIACTRANGES_LEN            ((UINT16)10)
564#define         HFA384x_RID_NICSERIALNUMBER_LEN         ((UINT16)12)
565#define         HFA384x_RID_NICIDENTITY_LEN             ((UINT16)8)
566#define         HFA384x_RID_MFISUPRANGE_LEN             ((UINT16)10)
567#define         HFA384x_RID_CFISUPRANGE_LEN             ((UINT16)10)
568#define         HFA384x_RID_CHANNELLIST_LEN             ((UINT16)0)
569#define         HFA384x_RID_REGULATORYDOMAINS_LEN       ((UINT16)12)
570#define         HFA384x_RID_TEMPTYPE_LEN                ((UINT16)0)
571#define         HFA384x_RID_CIS_LEN                     ((UINT16)480)
572#define         HFA384x_RID_STAIDENTITY_LEN             ((UINT16)8)
573#define         HFA384x_RID_STASUPRANGE_LEN             ((UINT16)10)
574#define         HFA384x_RID_MFIACTRANGES_LEN            ((UINT16)10)
575#define         HFA384x_RID_CFIACTRANGES2_LEN           ((UINT16)10)
576#define         HFA384x_RID_BUILDSEQ_LEN                ((UINT16)sizeof(hfa384x_BuildSeq_t))
577#define         HFA384x_RID_FWID_LEN                    ((UINT16)sizeof(hfa384x_FWID_t))
578
579/*--------------------------------------------------------------------
580Information RIDs:  MAC Information
581--------------------------------------------------------------------*/
582#define         HFA384x_RID_PORTSTATUS          ((UINT16)0xFD40)
583#define         HFA384x_RID_CURRENTSSID         ((UINT16)0xFD41)
584#define         HFA384x_RID_CURRENTBSSID        ((UINT16)0xFD42)
585#define         HFA384x_RID_COMMSQUALITY        ((UINT16)0xFD43)
586#define         HFA384x_RID_CURRENTTXRATE       ((UINT16)0xFD44)
587#define         HFA384x_RID_CURRENTBCNINT       ((UINT16)0xFD45)
588#define         HFA384x_RID_CURRENTSCALETHRESH  ((UINT16)0xFD46)
589#define         HFA384x_RID_PROTOCOLRSPTIME     ((UINT16)0xFD47)
590#define         HFA384x_RID_SHORTRETRYLIMIT     ((UINT16)0xFD48)
591#define         HFA384x_RID_LONGRETRYLIMIT      ((UINT16)0xFD49)
592#define         HFA384x_RID_MAXTXLIFETIME       ((UINT16)0xFD4A)
593#define         HFA384x_RID_MAXRXLIFETIME       ((UINT16)0xFD4B)
594#define         HFA384x_RID_CFPOLLABLE          ((UINT16)0xFD4C)
595#define         HFA384x_RID_AUTHALGORITHMS      ((UINT16)0xFD4D)
596#define         HFA384x_RID_PRIVACYOPTIMP       ((UINT16)0xFD4F)
597#define         HFA384x_RID_DBMCOMMSQUALITY     ((UINT16)0xFD51)
598#define         HFA384x_RID_CURRENTTXRATE1      ((UINT16)0xFD80)
599#define         HFA384x_RID_CURRENTTXRATE2      ((UINT16)0xFD81)
600#define         HFA384x_RID_CURRENTTXRATE3      ((UINT16)0xFD82)
601#define         HFA384x_RID_CURRENTTXRATE4      ((UINT16)0xFD83)
602#define         HFA384x_RID_CURRENTTXRATE5      ((UINT16)0xFD84)
603#define         HFA384x_RID_CURRENTTXRATE6      ((UINT16)0xFD85)
604#define         HFA384x_RID_OWNMACADDRESS       ((UINT16)0xFD86)
605// #define      HFA384x_RID_PCFINFO             ((UINT16)0xFD87)
606#define         HFA384x_RID_SCANRESULTS         ((UINT16)0xFD88) // NEW
607#define         HFA384x_RID_HOSTSCANRESULTS     ((UINT16)0xFD89) // NEW
608#define         HFA384x_RID_AUTHENTICATIONUSED  ((UINT16)0xFD8A) // NEW
609#define         HFA384x_RID_ASSOCIATEFAILURE    ((UINT16)0xFD8D) // 1.8.0
610
611/*--------------------------------------------------------------------
612Information RID Lengths:  MAC Information
613  This is the length of JUST the DATA part of the RID (does not
614  include the len or code fields)
615--------------------------------------------------------------------*/
616#define         HFA384x_RID_PORTSTATUS_LEN              ((UINT16)0)
617#define         HFA384x_RID_CURRENTSSID_LEN             ((UINT16)34)
618#define         HFA384x_RID_CURRENTBSSID_LEN            ((UINT16)WLAN_BSSID_LEN)
619#define         HFA384x_RID_COMMSQUALITY_LEN            ((UINT16)sizeof(hfa384x_commsquality_t))
620#define         HFA384x_RID_DBMCOMMSQUALITY_LEN         ((UINT16)sizeof(hfa384x_dbmcommsquality_t))
621#define         HFA384x_RID_CURRENTTXRATE_LEN           ((UINT16)0)
622#define         HFA384x_RID_CURRENTBCNINT_LEN           ((UINT16)0)
623#define         HFA384x_RID_STACURSCALETHRESH_LEN       ((UINT16)12)
624#define         HFA384x_RID_APCURSCALETHRESH_LEN        ((UINT16)6)
625#define         HFA384x_RID_PROTOCOLRSPTIME_LEN         ((UINT16)0)
626#define         HFA384x_RID_SHORTRETRYLIMIT_LEN         ((UINT16)0)
627#define         HFA384x_RID_LONGRETRYLIMIT_LEN          ((UINT16)0)
628#define         HFA384x_RID_MAXTXLIFETIME_LEN           ((UINT16)0)
629#define         HFA384x_RID_MAXRXLIFETIME_LEN           ((UINT16)0)
630#define         HFA384x_RID_CFPOLLABLE_LEN              ((UINT16)0)
631#define         HFA384x_RID_AUTHALGORITHMS_LEN          ((UINT16)4)
632#define         HFA384x_RID_PRIVACYOPTIMP_LEN           ((UINT16)0)
633#define         HFA384x_RID_CURRENTTXRATE1_LEN          ((UINT16)0)
634#define         HFA384x_RID_CURRENTTXRATE2_LEN          ((UINT16)0)
635#define         HFA384x_RID_CURRENTTXRATE3_LEN          ((UINT16)0)
636#define         HFA384x_RID_CURRENTTXRATE4_LEN          ((UINT16)0)
637#define         HFA384x_RID_CURRENTTXRATE5_LEN          ((UINT16)0)
638#define         HFA384x_RID_CURRENTTXRATE6_LEN          ((UINT16)0)
639#define         HFA384x_RID_OWNMACADDRESS_LEN           ((UINT16)6)
640#define         HFA384x_RID_PCFINFO_LEN                 ((UINT16)6)
641#define         HFA384x_RID_CNFAPPCFINFO_LEN            ((UINT16)sizeof(hfa384x_PCFInfo_data_t))
642#define         HFA384x_RID_SCANREQUEST_LEN             ((UINT16)sizeof(hfa384x_ScanRequest_data_t))
643#define         HFA384x_RID_JOINREQUEST_LEN             ((UINT16)sizeof(hfa384x_JoinRequest_data_t))
644#define         HFA384x_RID_AUTHENTICATESTA_LEN         ((UINT16)sizeof(hfa384x_authenticateStation_data_t))
645#define         HFA384x_RID_CHANNELINFOREQUEST_LEN      ((UINT16)sizeof(hfa384x_ChannelInfoRequest_data_t))
646/*--------------------------------------------------------------------
647Information RIDs:  Modem Information
648--------------------------------------------------------------------*/
649#define         HFA384x_RID_PHYTYPE             ((UINT16)0xFDC0)
650#define         HFA384x_RID_CURRENTCHANNEL      ((UINT16)0xFDC1)
651#define         HFA384x_RID_CURRENTPOWERSTATE   ((UINT16)0xFDC2)
652#define         HFA384x_RID_CCAMODE             ((UINT16)0xFDC3)
653#define         HFA384x_RID_SUPPORTEDDATARATES  ((UINT16)0xFDC6)
654#define         HFA384x_RID_LFOSTATUS           ((UINT16)0xFDC7) // 1.7.1
655
656/*--------------------------------------------------------------------
657Information RID Lengths:  Modem Information
658  This is the length of JUST the DATA part of the RID (does not
659  include the len or code fields)
660--------------------------------------------------------------------*/
661#define         HFA384x_RID_PHYTYPE_LEN                 ((UINT16)0)
662#define         HFA384x_RID_CURRENTCHANNEL_LEN          ((UINT16)0)
663#define         HFA384x_RID_CURRENTPOWERSTATE_LEN       ((UINT16)0)
664#define         HFA384x_RID_CCAMODE_LEN                 ((UINT16)0)
665#define         HFA384x_RID_SUPPORTEDDATARATES_LEN      ((UINT16)10)
666
667/*--------------------------------------------------------------------
668API ENHANCEMENTS (NOT ALREADY IMPLEMENTED)
669--------------------------------------------------------------------*/
670#define         HFA384x_RID_CNFWEPDEFAULTKEYID  ((UINT16)0xFC23)
671#define         HFA384x_RID_CNFWEPDEFAULTKEY0   ((UINT16)0xFC24)
672#define         HFA384x_RID_CNFWEPDEFAULTKEY1   ((UINT16)0xFC25)
673#define         HFA384x_RID_CNFWEPDEFAULTKEY2   ((UINT16)0xFC26)
674#define         HFA384x_RID_CNFWEPDEFAULTKEY3   ((UINT16)0xFC27)
675#define         HFA384x_RID_CNFWEPFLAGS         ((UINT16)0xFC28)
676#define         HFA384x_RID_CNFWEPKEYMAPTABLE   ((UINT16)0xFC29)
677#define         HFA384x_RID_CNFAUTHENTICATION   ((UINT16)0xFC2A)
678#define         HFA384x_RID_CNFMAXASSOCSTATIONS ((UINT16)0xFC2B)
679#define         HFA384x_RID_CNFTXCONTROL        ((UINT16)0xFC2C)
680#define         HFA384x_RID_CNFROAMINGMODE      ((UINT16)0xFC2D)
681#define         HFA384x_RID_CNFHOSTAUTHASSOC    ((UINT16)0xFC2E)
682#define         HFA384x_RID_CNFRCVCRCERROR      ((UINT16)0xFC30)
683// #define              HFA384x_RID_CNFMMLIFE           ((UINT16)0xFC31)
684#define         HFA384x_RID_CNFALTRETRYCNT      ((UINT16)0xFC32)
685#define         HFA384x_RID_CNFAPBCNINT         ((UINT16)0xFC33)
686#define         HFA384x_RID_CNFAPPCFINFO        ((UINT16)0xFC34)
687#define         HFA384x_RID_CNFSTAPCFINFO       ((UINT16)0xFC35)
688#define         HFA384x_RID_CNFPRIORITYQUSAGE   ((UINT16)0xFC37)
689#define         HFA384x_RID_CNFTIMCTRL          ((UINT16)0xFC40)
690#define         HFA384x_RID_CNFTHIRTY2TALLY     ((UINT16)0xFC42)
691#define         HFA384x_RID_CNFENHSECURITY      ((UINT16)0xFC43)
692#define         HFA384x_RID_CNFDBMADJUST        ((UINT16)0xFC46) // NEW
693#define         HFA384x_RID_CNFWPADATA          ((UINT16)0xFC48) // 1.7.0
694#define         HFA384x_RID_CNFPROPOGATIONDELAY ((UINT16)0xFC49) // 1.7.6
695#define         HFA384x_RID_CNFSHORTPREAMBLE    ((UINT16)0xFCB0)
696#define         HFA384x_RID_CNFEXCLONGPREAMBLE  ((UINT16)0xFCB1)
697#define         HFA384x_RID_CNFAUTHRSPTIMEOUT   ((UINT16)0xFCB2)
698#define         HFA384x_RID_CNFBASICRATES       ((UINT16)0xFCB3)
699#define         HFA384x_RID_CNFSUPPRATES        ((UINT16)0xFCB4)
700#define         HFA384x_RID_CNFFALLBACKCTRL     ((UINT16)0xFCB5) // NEW
701#define         HFA384x_RID_WEPKEYSTATUS        ((UINT16)0xFCB6) // NEW
702#define         HFA384x_RID_WEPKEYMAPINDEX      ((UINT16)0xFCB7) // NEW
703#define         HFA384x_RID_BROADCASTKEYID      ((UINT16)0xFCB8) // NEW
704#define         HFA384x_RID_ENTSECFLAGEYID      ((UINT16)0xFCB9) // NEW
705#define         HFA384x_RID_CNFPASSIVESCANCTRL  ((UINT16)0xFCBA) // NEW STA
706#define         HFA384x_RID_CNFWPAHANDLING      ((UINT16)0xFCBB) // 1.7.0
707#define         HFA384x_RID_MDCCONTROL          ((UINT16)0xFCBC) // 1.7.0/1.4.0
708#define         HFA384x_RID_MDCCOUNTRY          ((UINT16)0xFCBD) // 1.7.0/1.4.0
709#define         HFA384x_RID_TXPOWERMAX          ((UINT16)0xFCBE) // 1.7.0/1.4.0
710#define         HFA384x_RID_CNFLFOENBLED        ((UINT16)0xFCBF) // 1.6.3
711#define         HFA384x_RID_CAPINFO             ((UINT16)0xFCC0) // 1.7.0/1.3.7
712#define         HFA384x_RID_LISTENINTERVAL      ((UINT16)0xFCC1) // 1.7.0/1.3.7
713#define         HFA384x_RID_DIVERSITYENABLED    ((UINT16)0xFCC2) // 1.7.0/1.3.7
714#define         HFA384x_RID_LED_CONTROL         ((UINT16)0xFCC4) // 1.7.6     
715#define         HFA384x_RID_HFO_DELAY           ((UINT16)0xFCC5) // 1.7.6     
716#define         HFA384x_RID_DISSALOWEDBSSID     ((UINT16)0xFCC6) // 1.8.0
717#define         HFA384x_RID_SCANREQUEST         ((UINT16)0xFCE1)
718#define         HFA384x_RID_JOINREQUEST         ((UINT16)0xFCE2)
719#define         HFA384x_RID_AUTHENTICATESTA     ((UINT16)0xFCE3)
720#define         HFA384x_RID_CHANNELINFOREQUEST  ((UINT16)0xFCE4)
721#define         HFA384x_RID_HOSTSCAN            ((UINT16)0xFCE5) // NEW STA
722#define         HFA384x_RID_ASSOCIATESTA        ((UINT16)0xFCE6)
723
724#define         HFA384x_RID_CNFWEPDEFAULTKEY_LEN        ((UINT16)6)
725#define         HFA384x_RID_CNFWEP128DEFAULTKEY_LEN     ((UINT16)14)
726#define         HFA384x_RID_CNFPRIOQUSAGE_LEN           ((UINT16)4)
727/*--------------------------------------------------------------------
728PD Record codes
729--------------------------------------------------------------------*/
730#define HFA384x_PDR_PCB_PARTNUM         ((UINT16)0x0001)
731#define HFA384x_PDR_PDAVER              ((UINT16)0x0002)
732#define HFA384x_PDR_NIC_SERIAL          ((UINT16)0x0003)
733#define HFA384x_PDR_MKK_MEASUREMENTS    ((UINT16)0x0004)
734#define HFA384x_PDR_NIC_RAMSIZE         ((UINT16)0x0005)
735#define HFA384x_PDR_MFISUPRANGE         ((UINT16)0x0006)
736#define HFA384x_PDR_CFISUPRANGE         ((UINT16)0x0007)
737#define HFA384x_PDR_NICID               ((UINT16)0x0008)
738//#define HFA384x_PDR_REFDAC_MEASUREMENTS       ((UINT16)0x0010)
739//#define HFA384x_PDR_VGDAC_MEASUREMENTS        ((UINT16)0x0020)
740//#define HFA384x_PDR_LEVEL_COMP_MEASUREMENTS   ((UINT16)0x0030)
741//#define HFA384x_PDR_MODEM_TRIMDAC_MEASUREMENTS        ((UINT16)0x0040)
742//#define HFA384x_PDR_COREGA_HACK               ((UINT16)0x00ff)
743#define HFA384x_PDR_MAC_ADDRESS         ((UINT16)0x0101)
744//#define HFA384x_PDR_MKK_CALLNAME      ((UINT16)0x0102)
745#define HFA384x_PDR_REGDOMAIN           ((UINT16)0x0103)
746#define HFA384x_PDR_ALLOWED_CHANNEL     ((UINT16)0x0104)
747#define HFA384x_PDR_DEFAULT_CHANNEL     ((UINT16)0x0105)
748//#define HFA384x_PDR_PRIVACY_OPTION    ((UINT16)0x0106)
749#define HFA384x_PDR_TEMPTYPE            ((UINT16)0x0107)
750//#define HFA384x_PDR_REFDAC_SETUP      ((UINT16)0x0110)
751//#define HFA384x_PDR_VGDAC_SETUP               ((UINT16)0x0120)
752//#define HFA384x_PDR_LEVEL_COMP_SETUP  ((UINT16)0x0130)
753//#define HFA384x_PDR_TRIMDAC_SETUP     ((UINT16)0x0140)
754#define HFA384x_PDR_IFR_SETTING         ((UINT16)0x0200)
755#define HFA384x_PDR_RFR_SETTING         ((UINT16)0x0201)
756#define HFA384x_PDR_HFA3861_BASELINE    ((UINT16)0x0202)
757#define HFA384x_PDR_HFA3861_SHADOW      ((UINT16)0x0203)
758#define HFA384x_PDR_HFA3861_IFRF        ((UINT16)0x0204)
759#define HFA384x_PDR_HFA3861_CHCALSP     ((UINT16)0x0300)
760#define HFA384x_PDR_HFA3861_CHCALI      ((UINT16)0x0301)
761#define HFA384x_PDR_MAX_TX_POWER        ((UINT16)0x0302)
762#define HFA384x_PDR_MASTER_CHAN_LIST    ((UINT16)0x0303)
763#define HFA384x_PDR_3842_NIC_CONFIG     ((UINT16)0x0400)
764#define HFA384x_PDR_USB_ID              ((UINT16)0x0401)
765#define HFA384x_PDR_PCI_ID              ((UINT16)0x0402)
766#define HFA384x_PDR_PCI_IFCONF          ((UINT16)0x0403)
767#define HFA384x_PDR_PCI_PMCONF          ((UINT16)0x0404)
768#define HFA384x_PDR_RFENRGY             ((UINT16)0x0406)
769#define HFA384x_PDR_USB_POWER_TYPE      ((UINT16)0x0407)
770//#define HFA384x_PDR_UNKNOWN408                ((UINT16)0x0408)
771#define HFA384x_PDR_USB_MAX_POWER       ((UINT16)0x0409)
772#define HFA384x_PDR_USB_MANUFACTURER    ((UINT16)0x0410)
773#define HFA384x_PDR_USB_PRODUCT         ((UINT16)0x0411)
774#define HFA384x_PDR_ANT_DIVERSITY       ((UINT16)0x0412)
775#define HFA384x_PDR_HFO_DELAY           ((UINT16)0x0413)
776#define HFA384x_PDR_SCALE_THRESH        ((UINT16)0x0414)
777
778#define HFA384x_PDR_HFA3861_MANF_TESTSP ((UINT16)0x0900)
779#define HFA384x_PDR_HFA3861_MANF_TESTI  ((UINT16)0x0901)
780#define HFA384x_PDR_END_OF_PDA          ((UINT16)0x0000)
781
782
783/*=============================================================*/
784/*------ Macros -----------------------------------------------*/
785
786/*--- Register ID macros ------------------------*/
787
788#define         HFA384x_CMD             HFA384x_CMD_OFF
789#define         HFA384x_PARAM0          HFA384x_PARAM0_OFF
790#define         HFA384x_PARAM1          HFA384x_PARAM1_OFF
791#define         HFA384x_PARAM2          HFA384x_PARAM2_OFF
792#define         HFA384x_STATUS          HFA384x_STATUS_OFF
793#define         HFA384x_RESP0           HFA384x_RESP0_OFF
794#define         HFA384x_RESP1           HFA384x_RESP1_OFF
795#define         HFA384x_RESP2           HFA384x_RESP2_OFF
796#define         HFA384x_INFOFID         HFA384x_INFOFID_OFF
797#define         HFA384x_RXFID           HFA384x_RXFID_OFF
798#define         HFA384x_ALLOCFID        HFA384x_ALLOCFID_OFF
799#define         HFA384x_TXCOMPLFID      HFA384x_TXCOMPLFID_OFF
800#define         HFA384x_SELECT0         HFA384x_SELECT0_OFF
801#define         HFA384x_OFFSET0         HFA384x_OFFSET0_OFF
802#define         HFA384x_DATA0           HFA384x_DATA0_OFF
803#define         HFA384x_SELECT1         HFA384x_SELECT1_OFF
804#define         HFA384x_OFFSET1         HFA384x_OFFSET1_OFF
805#define         HFA384x_DATA1           HFA384x_DATA1_OFF
806#define         HFA384x_EVSTAT          HFA384x_EVSTAT_OFF
807#define         HFA384x_INTEN           HFA384x_INTEN_OFF
808#define         HFA384x_EVACK           HFA384x_EVACK_OFF
809#define         HFA384x_CONTROL         HFA384x_CONTROL_OFF
810#define         HFA384x_SWSUPPORT0      HFA384x_SWSUPPORT0_OFF
811#define         HFA384x_SWSUPPORT1      HFA384x_SWSUPPORT1_OFF
812#define         HFA384x_SWSUPPORT2      HFA384x_SWSUPPORT2_OFF
813#define         HFA384x_AUXPAGE         HFA384x_AUXPAGE_OFF
814#define         HFA384x_AUXOFFSET       HFA384x_AUXOFFSET_OFF
815#define         HFA384x_AUXDATA         HFA384x_AUXDATA_OFF
816#define         HFA384x_PCICOR          HFA384x_PCICOR_OFF
817#define         HFA384x_PCIHCR          HFA384x_PCIHCR_OFF
818
819
820/*--- Register Test/Get/Set Field macros ------------------------*/
821
822#define         HFA384x_CMD_ISBUSY(value)               ((UINT16)(((UINT16)value) & HFA384x_CMD_BUSY))
823#define         HFA384x_CMD_AINFO_GET(value)            ((UINT16)(((UINT16)(value) & HFA384x_CMD_AINFO) >> 8))
824#define         HFA384x_CMD_AINFO_SET(value)            ((UINT16)((UINT16)(value) << 8))
825#define         HFA384x_CMD_MACPORT_GET(value)          ((UINT16)(HFA384x_CMD_AINFO_GET((UINT16)(value) & HFA384x_CMD_MACPORT)))
826#define         HFA384x_CMD_MACPORT_SET(value)          ((UINT16)HFA384x_CMD_AINFO_SET(value))
827#define         HFA384x_CMD_ISRECL(value)               ((UINT16)(HFA384x_CMD_AINFO_GET((UINT16)(value) & HFA384x_CMD_RECL)))
828#define         HFA384x_CMD_RECL_SET(value)             ((UINT16)HFA384x_CMD_AINFO_SET(value))
829#define         HFA384x_CMD_QOS_GET(value)              ((UINT16((((UINT16)(value))&((UINT16)0x3000)) >> 12))
830#define         HFA384x_CMD_QOS_SET(value)              ((UINT16)((((UINT16)(value)) << 12) & 0x3000))
831#define         HFA384x_CMD_ISWRITE(value)              ((UINT16)(HFA384x_CMD_AINFO_GET((UINT16)(value) & HFA384x_CMD_WRITE)))
832#define         HFA384x_CMD_WRITE_SET(value)            ((UINT16)HFA384x_CMD_AINFO_SET((UINT16)value))
833#define         HFA384x_CMD_PROGMODE_GET(value)         ((UINT16)(HFA384x_CMD_AINFO_GET((UINT16)(value) & HFA384x_CMD_PROGMODE)))
834#define         HFA384x_CMD_PROGMODE_SET(value)         ((UINT16)HFA384x_CMD_AINFO_SET((UINT16)value))
835#define         HFA384x_CMD_CMDCODE_GET(value)          ((UINT16)(((UINT16)(value)) & HFA384x_CMD_CMDCODE))
836#define         HFA384x_CMD_CMDCODE_SET(value)          ((UINT16)(value))
837
838#define         HFA384x_STATUS_RESULT_GET(value)        ((UINT16)((((UINT16)(value)) & HFA384x_STATUS_RESULT) >> 8))
839#define         HFA384x_STATUS_RESULT_SET(value)        (((UINT16)(value)) << 8)
840#define         HFA384x_STATUS_CMDCODE_GET(value)       (((UINT16)(value)) & HFA384x_STATUS_CMDCODE)
841#define         HFA384x_STATUS_CMDCODE_SET(value)       ((UINT16)(value))
842
843#define         HFA384x_OFFSET_ISBUSY(value)            ((UINT16)(((UINT16)(value)) & HFA384x_OFFSET_BUSY))
844#define         HFA384x_OFFSET_ISERR(value)             ((UINT16)(((UINT16)(value)) & HFA384x_OFFSET_ERR))
845#define         HFA384x_OFFSET_DATAOFF_GET(value)       ((UINT16)(((UINT16)(value)) & HFA384x_OFFSET_DATAOFF))
846#define         HFA384x_OFFSET_DATAOFF_SET(value)       ((UINT16)(value))
847
848#define         HFA384x_EVSTAT_ISTICK(value)            ((UINT16)(((UINT16)(value)) & HFA384x_EVSTAT_TICK))
849#define         HFA384x_EVSTAT_ISWTERR(value)           ((UINT16)(((UINT16)(value)) & HFA384x_EVSTAT_WTERR))
850#define         HFA384x_EVSTAT_ISINFDROP(value)         ((UINT16)(((UINT16)(value)) & HFA384x_EVSTAT_INFDROP))
851#define         HFA384x_EVSTAT_ISINFO(value)            ((UINT16)(((UINT16)(value)) & HFA384x_EVSTAT_INFO))
852#define         HFA384x_EVSTAT_ISDTIM(value)            ((UINT16)(((UINT16)(value)) & HFA384x_EVSTAT_DTIM))
853#define         HFA384x_EVSTAT_ISCMD(value)             ((UINT16)(((UINT16)(value)) & HFA384x_EVSTAT_CMD))
854#define         HFA384x_EVSTAT_ISALLOC(value)           ((UINT16)(((UINT16)(value)) & HFA384x_EVSTAT_ALLOC))
855#define         HFA384x_EVSTAT_ISTXEXC(value)           ((UINT16)(((UINT16)(value)) & HFA384x_EVSTAT_TXEXC))
856#define         HFA384x_EVSTAT_ISTX(value)              ((UINT16)(((UINT16)(value)) & HFA384x_EVSTAT_TX))
857#define         HFA384x_EVSTAT_ISRX(value)              ((UINT16)(((UINT16)(value)) & HFA384x_EVSTAT_RX))
858
859#define         HFA384x_EVSTAT_ISBAP_OP(value)          ((UINT16)(((UINT16)(value)) & HFA384x_INT_BAP_OP))
860
861#define         HFA384x_INTEN_ISTICK(value)             ((UINT16)(((UINT16)(value)) & HFA384x_INTEN_TICK))
862#define         HFA384x_INTEN_TICK_SET(value)           ((UINT16)(((UINT16)(value)) << 15))
863#define         HFA384x_INTEN_ISWTERR(value)            ((UINT16)(((UINT16)(value)) & HFA384x_INTEN_WTERR))
864#define         HFA384x_INTEN_WTERR_SET(value)          ((UINT16)(((UINT16)(value)) << 14))
865#define         HFA384x_INTEN_ISINFDROP(value)          ((UINT16)(((UINT16)(value)) & HFA384x_INTEN_INFDROP))
866#define         HFA384x_INTEN_INFDROP_SET(value)        ((UINT16)(((UINT16)(value)) << 13))
867#define         HFA384x_INTEN_ISINFO(value)             ((UINT16)(((UINT16)(value)) & HFA384x_INTEN_INFO))
868#define         HFA384x_INTEN_INFO_SET(value)           ((UINT16)(((UINT16)(value)) << 7))
869#define         HFA384x_INTEN_ISDTIM(value)             ((UINT16)(((UINT16)(value)) & HFA384x_INTEN_DTIM))
870#define         HFA384x_INTEN_DTIM_SET(value)           ((UINT16)(((UINT16)(value)) << 5))
871#define         HFA384x_INTEN_ISCMD(value)              ((UINT16)(((UINT16)(value)) & HFA384x_INTEN_CMD))
872#define         HFA384x_INTEN_CMD_SET(value)            ((UINT16)(((UINT16)(value)) << 4))
873#define         HFA384x_INTEN_ISALLOC(value)            ((UINT16)(((UINT16)(value)) & HFA384x_INTEN_ALLOC))
874#define         HFA384x_INTEN_ALLOC_SET(value)          ((UINT16)(((UINT16)(value)) << 3))
875#define         HFA384x_INTEN_ISTXEXC(value)            ((UINT16)(((UINT16)(value)) & HFA384x_INTEN_TXEXC))
876#define         HFA384x_INTEN_TXEXC_SET(value)          ((UINT16)(((UINT16)(value)) << 2))
877#define         HFA384x_INTEN_ISTX(value)               ((UINT16)(((UINT16)(value)) & HFA384x_INTEN_TX))
878#define         HFA384x_INTEN_TX_SET(value)             ((UINT16)(((UINT16)(value)) << 1))
879#define         HFA384x_INTEN_ISRX(value)               ((UINT16)(((UINT16)(value)) & HFA384x_INTEN_RX))
880#define         HFA384x_INTEN_RX_SET(value)             ((UINT16)(((UINT16)(value)) << 0))
881
882#define         HFA384x_EVACK_ISTICK(value)             ((UINT16)(((UINT16)(value)) & HFA384x_EVACK_TICK))
883#define         HFA384x_EVACK_TICK_SET(value)           ((UINT16)(((UINT16)(value)) << 15))
884#define         HFA384x_EVACK_ISWTERR(value)            ((UINT16)(((UINT16)(value)) & HFA384x_EVACK_WTERR))
885#define         HFA384x_EVACK_WTERR_SET(value)          ((UINT16)(((UINT16)(value)) << 14))
886#define         HFA384x_EVACK_ISINFDROP(value)          ((UINT16)(((UINT16)(value)) & HFA384x_EVACK_INFDROP))
887#define         HFA384x_EVACK_INFDROP_SET(value)        ((UINT16)(((UINT16)(value)) << 13))
888#define         HFA384x_EVACK_ISINFO(value)             ((UINT16)(((UINT16)(value)) & HFA384x_EVACK_INFO))
889#define         HFA384x_EVACK_INFO_SET(value)           ((UINT16)(((UINT16)(value)) << 7))
890#define         HFA384x_EVACK_ISDTIM(value)             ((UINT16)(((UINT16)(value)) & HFA384x_EVACK_DTIM))
891#define         HFA384x_EVACK_DTIM_SET(value)           ((UINT16)(((UINT16)(value)) << 5))
892#define         HFA384x_EVACK_ISCMD(value)              ((UINT16)(((UINT16)(value)) & HFA384x_EVACK_CMD))
893#define         HFA384x_EVACK_CMD_SET(value)            ((UINT16)(((UINT16)(value)) << 4))
894#define         HFA384x_EVACK_ISALLOC(value)            ((UINT16)(((UINT16)(value)) & HFA384x_EVACK_ALLOC))
895#define         HFA384x_EVACK_ALLOC_SET(value)          ((UINT16)(((UINT16)(value)) << 3))
896#define         HFA384x_EVACK_ISTXEXC(value)            ((UINT16)(((UINT16)(value)) & HFA384x_EVACK_TXEXC))
897#define         HFA384x_EVACK_TXEXC_SET(value)          ((UINT16)(((UINT16)(value)) << 2))
898#define         HFA384x_EVACK_ISTX(value)               ((UINT16)(((UINT16)(value)) & HFA384x_EVACK_TX))
899#define         HFA384x_EVACK_TX_SET(value)             ((UINT16)(((UINT16)(value)) << 1))
900#define         HFA384x_EVACK_ISRX(value)               ((UINT16)(((UINT16)(value)) & HFA384x_EVACK_RX))
901#define         HFA384x_EVACK_RX_SET(value)             ((UINT16)(((UINT16)(value)) << 0))
902
903#define         HFA384x_CONTROL_AUXEN_SET(value)        ((UINT16)(((UINT16)(value)) << 14))
904#define         HFA384x_CONTROL_AUXEN_GET(value)        ((UINT16)(((UINT16)(value)) >> 14))
905
906/* Byte Order */
907#ifdef __KERNEL__
908#define hfa384x2host_16(n)      (__le16_to_cpu((UINT16)(n)))
909#define hfa384x2host_32(n)      (__le32_to_cpu((UINT32)(n)))
910#define host2hfa384x_16(n)      (__cpu_to_le16((UINT16)(n)))
911#define host2hfa384x_32(n)      (__cpu_to_le32((UINT32)(n)))
912#endif
913
914/* Host Maintained State Info */
915#define HFA384x_STATE_PREINIT   0
916#define HFA384x_STATE_INIT      1
917#define HFA384x_STATE_RUNNING   2
918
919/*=============================================================*/
920/*------ Types and their related constants --------------------*/
921
922#define HFA384x_HOSTAUTHASSOC_HOSTAUTH   BIT0
923#define HFA384x_HOSTAUTHASSOC_HOSTASSOC  BIT1
924
925#define HFA384x_WHAHANDLING_DISABLED     0
926#define HFA384x_WHAHANDLING_PASSTHROUGH  BIT1
927
928/*-------------------------------------------------------------*/
929/* Commonly used basic types */
930typedef struct hfa384x_bytestr
931{
932        UINT16  len;
933        UINT8   data[0];
934} __WLAN_ATTRIB_PACK__ hfa384x_bytestr_t;
935
936typedef struct hfa384x_bytestr32
937{
938        UINT16  len;
939        UINT8   data[32];
940} __WLAN_ATTRIB_PACK__ hfa384x_bytestr32_t;
941
942/*--------------------------------------------------------------------
943Configuration Record Structures:
944        Network Parameters, Static Configuration Entities
945--------------------------------------------------------------------*/
946/* Prototype structure: all configuration record structures start with
947these members */
948
949typedef struct hfa384x_record
950{
951        UINT16  reclen;
952        UINT16  rid;
953} __WLAN_ATTRIB_PACK__ hfa384x_rec_t;
954
955typedef struct hfa384x_record16
956{
957        UINT16  reclen;
958        UINT16  rid;
959        UINT16  val;
960} __WLAN_ATTRIB_PACK__ hfa384x_rec16_t;
961
962typedef struct hfa384x_record32
963{
964        UINT16  reclen;
965        UINT16  rid;
966        UINT32  val;
967} __WLAN_ATTRIB_PACK__ hfa384x_rec32;
968
969/*-- Hardware/Firmware Component Information ----------*/
970typedef struct hfa384x_compident
971{
972        UINT16  id;
973        UINT16  variant;
974        UINT16  major;
975        UINT16  minor;
976} __WLAN_ATTRIB_PACK__ hfa384x_compident_t;
977
978typedef struct hfa384x_caplevel
979{
980        UINT16  role;
981        UINT16  id;
982        UINT16  variant;
983        UINT16  bottom;
984        UINT16  top;
985} __WLAN_ATTRIB_PACK__ hfa384x_caplevel_t;
986
987/*-- Configuration Record: cnfPortType --*/
988typedef struct hfa384x_cnfPortType
989{
990        UINT16  cnfPortType;
991} __WLAN_ATTRIB_PACK__ hfa384x_cnfPortType_t;
992
993/*-- Configuration Record: cnfOwnMACAddress --*/
994typedef struct hfa384x_cnfOwnMACAddress
995{
996        UINT8   cnfOwnMACAddress[6];
997} __WLAN_ATTRIB_PACK__ hfa384x_cnfOwnMACAddress_t;
998
999/*-- Configuration Record: cnfDesiredSSID --*/
1000typedef struct hfa384x_cnfDesiredSSID
1001{
1002        UINT8   cnfDesiredSSID[34];
1003} __WLAN_ATTRIB_PACK__ hfa384x_cnfDesiredSSID_t;
1004
1005/*-- Configuration Record: cnfOwnChannel --*/
1006typedef struct hfa384x_cnfOwnChannel
1007{
1008        UINT16  cnfOwnChannel;
1009} __WLAN_ATTRIB_PACK__ hfa384x_cnfOwnChannel_t;
1010
1011/*-- Configuration Record: cnfOwnSSID --*/
1012typedef struct hfa384x_cnfOwnSSID
1013{
1014        UINT8   cnfOwnSSID[34];
1015} __WLAN_ATTRIB_PACK__ hfa384x_cnfOwnSSID_t;
1016
1017/*-- Configuration Record: cnfOwnATIMWindow --*/
1018typedef struct hfa384x_cnfOwnATIMWindow
1019{
1020        UINT16  cnfOwnATIMWindow;
1021} __WLAN_ATTRIB_PACK__ hfa384x_cnfOwnATIMWindow_t;
1022
1023/*-- Configuration Record: cnfSystemScale --*/
1024typedef struct hfa384x_cnfSystemScale
1025{
1026        UINT16  cnfSystemScale;
1027} __WLAN_ATTRIB_PACK__ hfa384x_cnfSystemScale_t;
1028
1029/*-- Configuration Record: cnfMaxDataLength --*/
1030typedef struct hfa384x_cnfMaxDataLength
1031{
1032        UINT16  cnfMaxDataLength;
1033} __WLAN_ATTRIB_PACK__ hfa384x_cnfMaxDataLength_t;
1034
1035/*-- Configuration Record: cnfWDSAddress --*/
1036typedef struct hfa384x_cnfWDSAddress
1037{
1038        UINT8   cnfWDSAddress[6];
1039} __WLAN_ATTRIB_PACK__ hfa384x_cnfWDSAddress_t;
1040
1041/*-- Configuration Record: cnfPMEnabled --*/
1042typedef struct hfa384x_cnfPMEnabled
1043{
1044        UINT16  cnfPMEnabled;
1045} __WLAN_ATTRIB_PACK__ hfa384x_cnfPMEnabled_t;
1046
1047/*-- Configuration Record: cnfPMEPS --*/
1048typedef struct hfa384x_cnfPMEPS
1049{
1050        UINT16  cnfPMEPS;
1051} __WLAN_ATTRIB_PACK__ hfa384x_cnfPMEPS_t;
1052
1053/*-- Configuration Record: cnfMulticastReceive --*/
1054typedef struct hfa384x_cnfMulticastReceive
1055{
1056        UINT16  cnfMulticastReceive;
1057} __WLAN_ATTRIB_PACK__ hfa384x_cnfMulticastReceive_t;
1058
1059/*-- Configuration Record: cnfAuthentication --*/
1060#define HFA384x_CNFAUTHENTICATION_OPENSYSTEM    0x0001
1061#define HFA384x_CNFAUTHENTICATION_SHAREDKEY     0x0002
1062#define HFA384x_CNFAUTHENTICATION_LEAP          0x0004
1063
1064/*-- Configuration Record: cnfMaxSleepDuration --*/
1065typedef struct hfa384x_cnfMaxSleepDuration
1066{
1067        UINT16  cnfMaxSleepDuration;
1068} __WLAN_ATTRIB_PACK__ hfa384x_cnfMaxSleepDuration_t;
1069
1070/*-- Configuration Record: cnfPMHoldoverDuration --*/
1071typedef struct hfa384x_cnfPMHoldoverDuration
1072{
1073        UINT16  cnfPMHoldoverDuration;
1074} __WLAN_ATTRIB_PACK__ hfa384x_cnfPMHoldoverDuration_t;
1075
1076/*-- Configuration Record: cnfOwnName --*/
1077typedef struct hfa384x_cnfOwnName
1078{
1079        UINT8   cnfOwnName[34];
1080} __WLAN_ATTRIB_PACK__ hfa384x_cnfOwnName_t;
1081
1082/*-- Configuration Record: cnfOwnDTIMPeriod --*/
1083typedef struct hfa384x_cnfOwnDTIMPeriod
1084{
1085        UINT16  cnfOwnDTIMPeriod;
1086} __WLAN_ATTRIB_PACK__ hfa384x_cnfOwnDTIMPeriod_t;
1087
1088/*-- Configuration Record: cnfWDSAddress --*/
1089typedef struct hfa384x_cnfWDSAddressN
1090{
1091        UINT8   cnfWDSAddress[6];
1092} __WLAN_ATTRIB_PACK__ hfa384x_cnfWDSAddressN_t;
1093
1094/*-- Configuration Record: cnfMulticastPMBuffering --*/
1095typedef struct hfa384x_cnfMulticastPMBuffering
1096{
1097        UINT16  cnfMulticastPMBuffering;
1098} __WLAN_ATTRIB_PACK__ hfa384x_cnfMulticastPMBuffering_t;
1099
1100/*--------------------------------------------------------------------
1101Configuration Record Structures:
1102        Network Parameters, Dynamic Configuration Entities
1103--------------------------------------------------------------------*/
1104
1105/*-- Configuration Record: GroupAddresses --*/
1106typedef struct hfa384x_GroupAddresses
1107{
1108        UINT8   MACAddress[16][6];
1109} __WLAN_ATTRIB_PACK__ hfa384x_GroupAddresses_t;
1110
1111/*-- Configuration Record: CreateIBSS --*/
1112typedef struct hfa384x_CreateIBSS
1113{
1114        UINT16  CreateIBSS;
1115} __WLAN_ATTRIB_PACK__ hfa384x_CreateIBSS_t;
1116
1117#define HFA384x_CREATEIBSS_JOINCREATEIBSS          0
1118#define HFA384x_CREATEIBSS_JOINESS_JOINCREATEIBSS  1
1119#define HFA384x_CREATEIBSS_JOINIBSS                2
1120#define HFA384x_CREATEIBSS_JOINESS_JOINIBSS        3
1121
1122/*-- Configuration Record: FragmentationThreshold --*/
1123typedef struct hfa384x_FragmentationThreshold
1124{
1125        UINT16  FragmentationThreshold;
1126} __WLAN_ATTRIB_PACK__ hfa384x_FragmentationThreshold_t;
1127
1128/*-- Configuration Record: RTSThreshold --*/
1129typedef struct hfa384x_RTSThreshold
1130{
1131        UINT16  RTSThreshold;
1132} __WLAN_ATTRIB_PACK__ hfa384x_RTSThreshold_t;
1133
1134/*-- Configuration Record: TxRateControl --*/
1135typedef struct hfa384x_TxRateControl
1136{
1137        UINT16  TxRateControl;
1138} __WLAN_ATTRIB_PACK__ hfa384x_TxRateControl_t;
1139
1140/*-- Configuration Record: PromiscuousMode --*/
1141typedef struct hfa384x_PromiscuousMode
1142{
1143        UINT16  PromiscuousMode;
1144} __WLAN_ATTRIB_PACK__ hfa384x_PromiscuousMode_t;
1145
1146/*-- Configuration Record: ScanRequest (data portion only) --*/
1147typedef struct hfa384x_ScanRequest_data
1148{
1149        UINT16  channelList;
1150        UINT16  txRate;
1151} __WLAN_ATTRIB_PACK__ hfa384x_ScanRequest_data_t;
1152
1153/*-- Configuration Record: HostScanRequest (data portion only) --*/
1154typedef struct hfa384x_HostScanRequest_data
1155{
1156        UINT16  channelList;
1157        UINT16  txRate;
1158        hfa384x_bytestr32_t ssid;
1159} __WLAN_ATTRIB_PACK__ hfa384x_HostScanRequest_data_t;
1160
1161/*-- Configuration Record: JoinRequest (data portion only) --*/
1162typedef struct hfa384x_JoinRequest_data
1163{
1164        UINT8   bssid[WLAN_BSSID_LEN];
1165        UINT16  channel;
1166} __WLAN_ATTRIB_PACK__ hfa384x_JoinRequest_data_t;
1167
1168/*-- Configuration Record: authenticateStation (data portion only) --*/
1169typedef struct hfa384x_authenticateStation_data
1170{
1171        UINT8   address[WLAN_ADDR_LEN];
1172        UINT16  status;
1173        UINT16  algorithm;
1174} __WLAN_ATTRIB_PACK__ hfa384x_authenticateStation_data_t;
1175
1176/*-- Configuration Record: associateStation (data portion only) --*/
1177typedef struct hfa384x_associateStation_data
1178{
1179        UINT8   address[WLAN_ADDR_LEN];
1180        UINT16  status;
1181        UINT16  type;
1182} __WLAN_ATTRIB_PACK__ hfa384x_associateStation_data_t;
1183
1184/*-- Configuration Record: ChannelInfoRequest (data portion only) --*/
1185typedef struct hfa384x_ChannelInfoRequest_data
1186{
1187        UINT16  channelList;
1188        UINT16  channelDwellTime;
1189} __WLAN_ATTRIB_PACK__ hfa384x_ChannelInfoRequest_data_t;
1190
1191/*-- Configuration Record: WEPKeyMapping (data portion only) --*/
1192typedef struct hfa384x_WEPKeyMapping
1193{
1194        UINT8   address[WLAN_ADDR_LEN];
1195        UINT16  key_index;
1196        UINT8   key[16];
1197        UINT8   mic_transmit_key[4];
1198        UINT8   mic_receive_key[4];
1199} __WLAN_ATTRIB_PACK__ hfa384x_WEPKeyMapping_t;
1200
1201/*-- Configuration Record: WPAData       (data portion only) --*/
1202typedef struct hfa384x_WPAData
1203{
1204        UINT16  datalen;
1205        UINT8   data[0]; // max 80
1206} __WLAN_ATTRIB_PACK__ hfa384x_WPAData_t;
1207
1208/*--------------------------------------------------------------------
1209Configuration Record Structures: Behavior Parameters
1210--------------------------------------------------------------------*/
1211
1212/*-- Configuration Record: TickTime --*/
1213typedef struct hfa384x_TickTime
1214{
1215        UINT16  TickTime;
1216} __WLAN_ATTRIB_PACK__ hfa384x_TickTime_t;
1217
1218/*--------------------------------------------------------------------
1219Information Record Structures: NIC Information
1220--------------------------------------------------------------------*/
1221
1222/*-- Information Record: MaxLoadTime --*/
1223typedef struct hfa384x_MaxLoadTime
1224{
1225        UINT16  MaxLoadTime;
1226} __WLAN_ATTRIB_PACK__ hfa384x_MaxLoadTime_t;
1227
1228/*-- Information Record: DownLoadBuffer --*/
1229/* NOTE: The page and offset are in AUX format */
1230typedef struct hfa384x_downloadbuffer
1231{
1232        UINT16  page;
1233        UINT16  offset;
1234        UINT16  len;
1235} __WLAN_ATTRIB_PACK__ hfa384x_downloadbuffer_t;
1236
1237/*-- Information Record: PRIIdentity --*/
1238typedef struct hfa384x_PRIIdentity
1239{
1240        UINT16  PRICompID;
1241        UINT16  PRIVariant;
1242        UINT16  PRIMajorVersion;
1243        UINT16  PRIMinorVersion;
1244} __WLAN_ATTRIB_PACK__ hfa384x_PRIIdentity_t;
1245
1246/*-- Information Record: PRISupRange --*/
1247typedef struct hfa384x_PRISupRange
1248{
1249        UINT16  PRIRole;
1250        UINT16  PRIID;
1251        UINT16  PRIVariant;
1252        UINT16  PRIBottom;
1253        UINT16  PRITop;
1254} __WLAN_ATTRIB_PACK__ hfa384x_PRISupRange_t;
1255
1256/*-- Information Record: CFIActRanges --*/
1257typedef struct hfa384x_CFIActRanges
1258{
1259        UINT16  CFIRole;
1260        UINT16  CFIID;
1261        UINT16  CFIVariant;
1262        UINT16  CFIBottom;
1263        UINT16  CFITop;
1264} __WLAN_ATTRIB_PACK__ hfa384x_CFIActRanges_t;
1265
1266/*-- Information Record: NICSerialNumber --*/
1267typedef struct hfa384x_NICSerialNumber
1268{
1269        UINT8   NICSerialNumber[12];
1270} __WLAN_ATTRIB_PACK__ hfa384x_NICSerialNumber_t;
1271
1272/*-- Information Record: NICIdentity --*/
1273typedef struct hfa384x_NICIdentity
1274{
1275        UINT16  NICCompID;
1276        UINT16  NICVariant;
1277        UINT16  NICMajorVersion;
1278        UINT16  NICMinorVersion;
1279} __WLAN_ATTRIB_PACK__ hfa384x_NICIdentity_t;
1280
1281/*-- Information Record: MFISupRange --*/
1282typedef struct hfa384x_MFISupRange
1283{
1284        UINT16  MFIRole;
1285        UINT16  MFIID;
1286        UINT16  MFIVariant;
1287        UINT16  MFIBottom;
1288        UINT16  MFITop;
1289} __WLAN_ATTRIB_PACK__ hfa384x_MFISupRange_t;
1290
1291/*-- Information Record: CFISupRange --*/
1292typedef struct hfa384x_CFISupRange
1293{
1294        UINT16  CFIRole;
1295        UINT16  CFIID;
1296        UINT16  CFIVariant;
1297        UINT16  CFIBottom;
1298        UINT16  CFITop;
1299} __WLAN_ATTRIB_PACK__ hfa384x_CFISupRange_t;
1300
1301/*-- Information Record: BUILDSEQ:BuildSeq --*/
1302typedef struct hfa384x_BuildSeq {
1303        UINT16  primary;
1304        UINT16  secondary;
1305} __WLAN_ATTRIB_PACK__ hfa384x_BuildSeq_t;
1306
1307/*-- Information Record: FWID --*/
1308#define HFA384x_FWID_LEN        14
1309typedef struct hfa384x_FWID {
1310        UINT8   primary[HFA384x_FWID_LEN];
1311        UINT8   secondary[HFA384x_FWID_LEN];
1312} __WLAN_ATTRIB_PACK__ hfa384x_FWID_t;
1313
1314/*-- Information Record: ChannelList --*/
1315typedef struct hfa384x_ChannelList
1316{
1317        UINT16  ChannelList;
1318} __WLAN_ATTRIB_PACK__ hfa384x_ChannelList_t;
1319
1320/*-- Information Record: RegulatoryDomains --*/
1321typedef struct hfa384x_RegulatoryDomains
1322{
1323        UINT8   RegulatoryDomains[12];
1324} __WLAN_ATTRIB_PACK__ hfa384x_RegulatoryDomains_t;
1325
1326/*-- Information Record: TempType --*/
1327typedef struct hfa384x_TempType
1328{
1329        UINT16  TempType;
1330} __WLAN_ATTRIB_PACK__ hfa384x_TempType_t;
1331
1332/*-- Information Record: CIS --*/
1333typedef struct hfa384x_CIS
1334{
1335        UINT8   CIS[480];
1336} __WLAN_ATTRIB_PACK__ hfa384x_CIS_t;
1337
1338/*-- Information Record: STAIdentity --*/
1339typedef struct hfa384x_STAIdentity
1340{
1341        UINT16  STACompID;
1342        UINT16  STAVariant;
1343        UINT16  STAMajorVersion;
1344        UINT16  STAMinorVersion;
1345} __WLAN_ATTRIB_PACK__ hfa384x_STAIdentity_t;
1346
1347/*-- Information Record: STASupRange --*/
1348typedef struct hfa384x_STASupRange
1349{
1350        UINT16  STARole;
1351        UINT16  STAID;
1352        UINT16  STAVariant;
1353        UINT16  STABottom;
1354        UINT16  STATop;
1355} __WLAN_ATTRIB_PACK__ hfa384x_STASupRange_t;
1356
1357/*-- Information Record: MFIActRanges --*/
1358typedef struct hfa384x_MFIActRanges
1359{
1360        UINT16  MFIRole;
1361        UINT16  MFIID;
1362        UINT16  MFIVariant;
1363        UINT16  MFIBottom;
1364        UINT16  MFITop;
1365} __WLAN_ATTRIB_PACK__ hfa384x_MFIActRanges_t;
1366
1367/*--------------------------------------------------------------------
1368Information Record Structures: NIC Information
1369--------------------------------------------------------------------*/
1370
1371/*-- Information Record: PortStatus --*/
1372typedef struct hfa384x_PortStatus
1373{
1374        UINT16  PortStatus;
1375} __WLAN_ATTRIB_PACK__ hfa384x_PortStatus_t;
1376
1377#define HFA384x_PSTATUS_DISABLED        ((UINT16)1)
1378#define HFA384x_PSTATUS_SEARCHING       ((UINT16)2)
1379#define HFA384x_PSTATUS_CONN_IBSS       ((UINT16)3)
1380#define HFA384x_PSTATUS_CONN_ESS        ((UINT16)4)
1381#define HFA384x_PSTATUS_OUTOFRANGE      ((UINT16)5)
1382#define HFA384x_PSTATUS_CONN_WDS        ((UINT16)6)
1383
1384/*-- Information Record: CurrentSSID --*/
1385typedef struct hfa384x_CurrentSSID
1386{
1387        UINT8   CurrentSSID[34];
1388} __WLAN_ATTRIB_PACK__ hfa384x_CurrentSSID_t;
1389
1390/*-- Information Record: CurrentBSSID --*/
1391typedef struct hfa384x_CurrentBSSID
1392{
1393        UINT8   CurrentBSSID[6];
1394} __WLAN_ATTRIB_PACK__ hfa384x_CurrentBSSID_t;
1395
1396/*-- Information Record: commsquality --*/
1397typedef struct hfa384x_commsquality
1398{
1399        UINT16  CQ_currBSS;
1400        UINT16  ASL_currBSS;
1401        UINT16  ANL_currFC;
1402} __WLAN_ATTRIB_PACK__ hfa384x_commsquality_t;
1403
1404/*-- Information Record: dmbcommsquality --*/
1405typedef struct hfa384x_dbmcommsquality
1406{
1407        UINT16  CQdbm_currBSS;
1408        UINT16  ASLdbm_currBSS;
1409        UINT16  ANLdbm_currFC;
1410} __WLAN_ATTRIB_PACK__ hfa384x_dbmcommsquality_t;
1411
1412/*-- Information Record: CurrentTxRate --*/
1413typedef struct hfa384x_CurrentTxRate
1414{
1415        UINT16  CurrentTxRate;
1416} __WLAN_ATTRIB_PACK__ hfa384x_CurrentTxRate_t;
1417
1418/*-- Information Record: CurrentBeaconInterval --*/
1419typedef struct hfa384x_CurrentBeaconInterval
1420{
1421        UINT16  CurrentBeaconInterval;
1422} __WLAN_ATTRIB_PACK__ hfa384x_CurrentBeaconInterval_t;
1423
1424/*-- Information Record: CurrentScaleThresholds --*/
1425typedef struct hfa384x_CurrentScaleThresholds
1426{
1427        UINT16  EnergyDetectThreshold;
1428        UINT16  CarrierDetectThreshold;
1429        UINT16  DeferDetectThreshold;
1430        UINT16  CellSearchThreshold; /* Stations only */
1431        UINT16  DeadSpotThreshold; /* Stations only */
1432} __WLAN_ATTRIB_PACK__ hfa384x_CurrentScaleThresholds_t;
1433
1434/*-- Information Record: ProtocolRspTime --*/
1435typedef struct hfa384x_ProtocolRspTime
1436{
1437        UINT16  ProtocolRspTime;
1438} __WLAN_ATTRIB_PACK__ hfa384x_ProtocolRspTime_t;
1439
1440/*-- Information Record: ShortRetryLimit --*/
1441typedef struct hfa384x_ShortRetryLimit
1442{
1443        UINT16  ShortRetryLimit;
1444} __WLAN_ATTRIB_PACK__ hfa384x_ShortRetryLimit_t;
1445
1446/*-- Information Record: LongRetryLimit --*/
1447typedef struct hfa384x_LongRetryLimit
1448{
1449        UINT16  LongRetryLimit;
1450} __WLAN_ATTRIB_PACK__ hfa384x_LongRetryLimit_t;
1451
1452/*-- Information Record: MaxTransmitLifetime --*/
1453typedef struct hfa384x_MaxTransmitLifetime
1454{
1455        UINT16  MaxTransmitLifetime;
1456} __WLAN_ATTRIB_PACK__ hfa384x_MaxTransmitLifetime_t;
1457
1458/*-- Information Record: MaxReceiveLifetime --*/
1459typedef struct hfa384x_MaxReceiveLifetime
1460{
1461        UINT16  MaxReceiveLifetime;
1462} __WLAN_ATTRIB_PACK__ hfa384x_MaxReceiveLifetime_t;
1463
1464/*-- Information Record: CFPollable --*/
1465typedef struct hfa384x_CFPollable
1466{
1467        UINT16  CFPollable;
1468} __WLAN_ATTRIB_PACK__ hfa384x_CFPollable_t;
1469
1470/*-- Information Record: AuthenticationAlgorithms --*/
1471typedef struct hfa384x_AuthenticationAlgorithms
1472{
1473        UINT16  AuthenticationType;
1474        UINT16  TypeEnabled;
1475} __WLAN_ATTRIB_PACK__ hfa384x_AuthenticationAlgorithms_t;
1476
1477/*-- Information Record: AuthenticationAlgorithms
1478(data only --*/
1479typedef struct hfa384x_AuthenticationAlgorithms_data
1480{
1481        UINT16  AuthenticationType;
1482        UINT16  TypeEnabled;
1483} __WLAN_ATTRIB_PACK__ hfa384x_AuthenticationAlgorithms_data_t;
1484
1485/*-- Information Record: PrivacyOptionImplemented --*/
1486typedef struct hfa384x_PrivacyOptionImplemented
1487{
1488        UINT16  PrivacyOptionImplemented;
1489} __WLAN_ATTRIB_PACK__ hfa384x_PrivacyOptionImplemented_t;
1490
1491/*-- Information Record: OwnMACAddress --*/
1492typedef struct hfa384x_OwnMACAddress
1493{
1494        UINT8   OwnMACAddress[6];
1495} __WLAN_ATTRIB_PACK__ hfa384x_OwnMACAddress_t;
1496
1497/*-- Information Record: PCFInfo --*/
1498typedef struct hfa384x_PCFInfo
1499{
1500        UINT16  MediumOccupancyLimit;
1501        UINT16  CFPPeriod;
1502        UINT16  CFPMaxDuration;
1503        UINT16  CFPFlags;
1504} __WLAN_ATTRIB_PACK__ hfa384x_PCFInfo_t;
1505
1506/*-- Information Record: PCFInfo (data portion only) --*/
1507typedef struct hfa384x_PCFInfo_data
1508{
1509        UINT16  MediumOccupancyLimit;
1510        UINT16  CFPPeriod;
1511        UINT16  CFPMaxDuration;
1512        UINT16  CFPFlags;
1513} __WLAN_ATTRIB_PACK__ hfa384x_PCFInfo_data_t;
1514
1515/*--------------------------------------------------------------------
1516Information Record Structures: Modem Information Records
1517--------------------------------------------------------------------*/
1518
1519/*-- Information Record: PHYType --*/
1520typedef struct hfa384x_PHYType
1521{
1522        UINT16  PHYType;
1523} __WLAN_ATTRIB_PACK__ hfa384x_PHYType_t;
1524
1525/*-- Information Record: CurrentChannel --*/
1526typedef struct hfa384x_CurrentChannel
1527{
1528        UINT16  CurrentChannel;
1529} __WLAN_ATTRIB_PACK__ hfa384x_CurrentChannel_t;
1530
1531/*-- Information Record: CurrentPowerState --*/
1532typedef struct hfa384x_CurrentPowerState
1533{
1534        UINT16  CurrentPowerState;
1535} __WLAN_ATTRIB_PACK__ hfa384x_CurrentPowerState_t;
1536
1537/*-- Information Record: CCAMode --*/
1538typedef struct hfa384x_CCAMode
1539{
1540        UINT16  CCAMode;
1541} __WLAN_ATTRIB_PACK__ hfa384x_CCAMode_t;
1542
1543/*-- Information Record: SupportedDataRates --*/
1544typedef struct hfa384x_SupportedDataRates
1545{
1546        UINT8   SupportedDataRates[10];
1547} __WLAN_ATTRIB_PACK__ hfa384x_SupportedDataRates_t;
1548
1549/*-- Information Record: LFOStatus --*/
1550typedef struct hfa384x_LFOStatus         
1551{
1552        UINT16  TestResults;
1553        UINT16  LFOResult;
1554        UINT16  VRHFOResult;
1555} __WLAN_ATTRIB_PACK__ hfa384x_LFOStatus_t;
1556
1557#define HFA384x_TESTRESULT_ALLPASSED    BIT0
1558#define HFA384x_TESTRESULT_LFO_FAIL     BIT1
1559#define HFA384x_TESTRESULT_VR_HF0_FAIL  BIT2
1560#define HFA384x_HOST_FIRM_COORDINATE    BIT7
1561#define HFA384x_TESTRESULT_COORDINATE   BIT15
1562
1563/*-- Information Record: LEDControl --*/
1564typedef struct hfa384x_LEDControl
1565{
1566        UINT16  searching_on;
1567        UINT16  searching_off;
1568        UINT16  assoc_on;
1569        UINT16  assoc_off;
1570        UINT16  activity;
1571} __WLAN_ATTRIB_PACK__ hfa384x_LEDControl_t;
1572
1573/*--------------------------------------------------------------------
1574                 FRAME DESCRIPTORS AND FRAME STRUCTURES
1575
1576FRAME DESCRIPTORS: Offsets
1577
1578----------------------------------------------------------------------
1579Control Info (offset 44-51)
1580--------------------------------------------------------------------*/
1581#define         HFA384x_FD_STATUS_OFF                   ((UINT16)0x44)
1582#define         HFA384x_FD_TIME_OFF                     ((UINT16)0x46)
1583#define         HFA384x_FD_SWSUPPORT_OFF                ((UINT16)0x4A)
1584#define         HFA384x_FD_SILENCE_OFF                  ((UINT16)0x4A)
1585#define         HFA384x_FD_SIGNAL_OFF                   ((UINT16)0x4B)
1586#define         HFA384x_FD_RATE_OFF                     ((UINT16)0x4C)
1587#define         HFA384x_FD_RXFLOW_OFF                   ((UINT16)0x4D)
1588#define         HFA384x_FD_RESERVED_OFF                 ((UINT16)0x4E)
1589#define         HFA384x_FD_TXCONTROL_OFF                ((UINT16)0x50)
1590/*--------------------------------------------------------------------
1591802.11 Header (offset 52-6B)
1592--------------------------------------------------------------------*/
1593#define         HFA384x_FD_FRAMECONTROL_OFF             ((UINT16)0x52)
1594#define         HFA384x_FD_DURATIONID_OFF               ((UINT16)0x54)
1595#define         HFA384x_FD_ADDRESS1_OFF                 ((UINT16)0x56)
1596#define         HFA384x_FD_ADDRESS2_OFF                 ((UINT16)0x5C)
1597#define         HFA384x_FD_ADDRESS3_OFF                 ((UINT16)0x62)
1598#define         HFA384x_FD_SEQCONTROL_OFF               ((UINT16)0x68)
1599#define         HFA384x_FD_ADDRESS4_OFF                 ((UINT16)0x6A)
1600#define         HFA384x_FD_DATALEN_OFF                  ((UINT16)0x70)
1601/*--------------------------------------------------------------------
1602802.3 Header (offset 72-7F)
1603--------------------------------------------------------------------*/
1604#define         HFA384x_FD_DESTADDRESS_OFF              ((UINT16)0x72)
1605#define         HFA384x_FD_SRCADDRESS_OFF               ((UINT16)0x78)
1606#define         HFA384x_FD_DATALENGTH_OFF               ((UINT16)0x7E)
1607
1608/*--------------------------------------------------------------------
1609FRAME STRUCTURES: Communication Frames
1610----------------------------------------------------------------------
1611Communication Frames: Transmit Frames
1612--------------------------------------------------------------------*/
1613/*-- Communication Frame: Transmit Frame Structure --*/
1614typedef struct hfa384x_tx_frame
1615{
1616        UINT16  status;
1617        UINT16  reserved1;
1618        UINT16  reserved2;
1619        UINT32  sw_support;
1620        UINT8   tx_retrycount;
1621        UINT8   tx_rate;
1622        UINT16  tx_control;
1623
1624        /*-- 802.11 Header Information --*/
1625
1626        UINT16  frame_control;
1627        UINT16  duration_id;
1628        UINT8   address1[6];
1629        UINT8   address2[6];
1630        UINT8   address3[6];
1631        UINT16  sequence_control;
1632        UINT8   address4[6];
1633        UINT16  data_len; /* little endian format */
1634
1635        /*-- 802.3 Header Information --*/
1636
1637        UINT8   dest_addr[6];
1638        UINT8   src_addr[6];
1639        UINT16  data_length; /* big endian format */
1640} __WLAN_ATTRIB_PACK__ hfa384x_tx_frame_t;
1641/*--------------------------------------------------------------------
1642Communication Frames: Field Masks for Transmit Frames
1643--------------------------------------------------------------------*/
1644/*-- Status Field --*/
1645#define         HFA384x_TXSTATUS_ACKERR                 ((UINT16)BIT5)
1646#define         HFA384x_TXSTATUS_FORMERR                ((UINT16)BIT3)
1647#define         HFA384x_TXSTATUS_DISCON                 ((UINT16)BIT2)
1648#define         HFA384x_TXSTATUS_AGEDERR                ((UINT16)BIT1)
1649#define         HFA384x_TXSTATUS_RETRYERR               ((UINT16)BIT0)
1650/*-- Transmit Control Field --*/
1651#define         HFA384x_TX_CFPOLL                       ((UINT16)BIT12)
1652#define         HFA384x_TX_PRST                         ((UINT16)BIT11)
1653#define         HFA384x_TX_MACPORT                      ((UINT16)(BIT10 | BIT9 | BIT8))
1654#define         HFA384x_TX_NOENCRYPT                    ((UINT16)BIT7)
1655#define         HFA384x_TX_RETRYSTRAT                   ((UINT16)(BIT6 | BIT5))
1656#define         HFA384x_TX_STRUCTYPE                    ((UINT16)(BIT4 | BIT3))
1657#define         HFA384x_TX_TXEX                         ((UINT16)BIT2)
1658#define         HFA384x_TX_TXOK                         ((UINT16)BIT1)
1659/*--------------------------------------------------------------------
1660Communication Frames: Test/Get/Set Field Values for Transmit Frames
1661--------------------------------------------------------------------*/
1662/*-- Status Field --*/
1663#define HFA384x_TXSTATUS_ISERROR(v)     \
1664        (((UINT16)(v))&\
1665        (HFA384x_TXSTATUS_ACKERR|HFA384x_TXSTATUS_FORMERR|\
1666        HFA384x_TXSTATUS_DISCON|HFA384x_TXSTATUS_AGEDERR|\
1667        HFA384x_TXSTATUS_RETRYERR))
1668
1669#define HFA384x_TXSTATUS_ISACKERR(v)    ((UINT16)(((UINT16)(v)) & HFA384x_TXSTATUS_ACKERR))
1670#define HFA384x_TXSTATUS_ISFORMERR(v)   ((UINT16)(((UINT16)(v)) & HFA384x_TXSTATUS_FORMERR))
1671#define HFA384x_TXSTATUS_ISDISCON(v)    ((UINT16)(((UINT16)(v)) & HFA384x_TXSTATUS_DISCON))
1672#define HFA384x_TXSTATUS_ISAGEDERR(v)   ((UINT16)(((UINT16)(v)) & HFA384x_TXSTATUS_AGEDERR))
1673#define HFA384x_TXSTATUS_ISRETRYERR(v)  ((UINT16)(((UINT16)(v)) & HFA384x_TXSTATUS_RETRYERR))
1674
1675#define HFA384x_TX_GET(v,m,s)           ((((UINT16)(v))&((UINT16)(m)))>>((UINT16)(s)))
1676#define HFA384x_TX_SET(v,m,s)           ((((UINT16)(v))<<((UINT16)(s)))&((UINT16)(m)))
1677
1678#define HFA384x_TX_CFPOLL_GET(v)        HFA384x_TX_GET(v, HFA384x_TX_CFPOLL,12)
1679#define HFA384x_TX_CFPOLL_SET(v)        HFA384x_TX_SET(v, HFA384x_TX_CFPOLL,12)
1680#define HFA384x_TX_PRST_GET(v)          HFA384x_TX_GET(v, HFA384x_TX_PRST,11)
1681#define HFA384x_TX_PRST_SET(v)          HFA384x_TX_SET(v, HFA384x_TX_PRST,11)
1682#define HFA384x_TX_MACPORT_GET(v)       HFA384x_TX_GET(v, HFA384x_TX_MACPORT, 8)
1683#define HFA384x_TX_MACPORT_SET(v)       HFA384x_TX_SET(v, HFA384x_TX_MACPORT, 8)
1684#define HFA384x_TX_NOENCRYPT_GET(v)     HFA384x_TX_GET(v, HFA384x_TX_NOENCRYPT, 7)
1685#define HFA384x_TX_NOENCRYPT_SET(v)     HFA384x_TX_SET(v, HFA384x_TX_NOENCRYPT, 7)
1686#define HFA384x_TX_RETRYSTRAT_GET(v)    HFA384x_TX_GET(v, HFA384x_TX_RETRYSTRAT, 5)
1687#define HFA384x_TX_RETRYSTRAT_SET(v)    HFA384x_TX_SET(v, HFA384x_TX_RETRYSTRAT, 5)
1688#define HFA384x_TX_STRUCTYPE_GET(v)     HFA384x_TX_GET(v, HFA384x_TX_STRUCTYPE, 3)
1689#define HFA384x_TX_STRUCTYPE_SET(v)     HFA384x_TX_SET(v, HFA384x_TX_STRUCTYPE, 3)
1690#define HFA384x_TX_TXEX_GET(v)          HFA384x_TX_GET(v, HFA384x_TX_TXEX, 2)
1691#define HFA384x_TX_TXEX_SET(v)          HFA384x_TX_SET(v, HFA384x_TX_TXEX, 2)
1692#define HFA384x_TX_TXOK_GET(v)          HFA384x_TX_GET(v, HFA384x_TX_TXOK, 1)
1693#define HFA384x_TX_TXOK_SET(v)          HFA384x_TX_SET(v, HFA384x_TX_TXOK, 1)
1694/*--------------------------------------------------------------------
1695Communication Frames: Receive Frames
1696--------------------------------------------------------------------*/
1697/*-- Communication Frame: Receive Frame Structure --*/
1698typedef struct hfa384x_rx_frame
1699{
1700        /*-- MAC rx descriptor (hfa384x byte order) --*/
1701        UINT16  status;
1702        UINT32  time;
1703        UINT8   silence;
1704        UINT8   signal;
1705        UINT8   rate;
1706        UINT8   rx_flow;
1707        UINT16  reserved1;
1708        UINT16  reserved2;
1709
1710        /*-- 802.11 Header Information (802.11 byte order) --*/
1711        UINT16  frame_control;
1712        UINT16  duration_id;
1713        UINT8   address1[6];
1714        UINT8   address2[6];
1715        UINT8   address3[6];
1716        UINT16  sequence_control;
1717        UINT8   address4[6];
1718        UINT16  data_len; /* hfa384x (little endian) format */
1719
1720        /*-- 802.3 Header Information --*/
1721        UINT8   dest_addr[6];
1722        UINT8   src_addr[6];
1723        UINT16  data_length; /* IEEE? (big endian) format */
1724} __WLAN_ATTRIB_PACK__ hfa384x_rx_frame_t;
1725/*--------------------------------------------------------------------
1726Communication Frames: Field Masks for Receive Frames
1727--------------------------------------------------------------------*/
1728/*-- Offsets --------*/
1729#define         HFA384x_RX_DATA_LEN_OFF                 ((UINT16)44)
1730#define         HFA384x_RX_80211HDR_OFF                 ((UINT16)14)
1731#define         HFA384x_RX_DATA_OFF                     ((UINT16)60)
1732
1733/*-- Status Fields --*/
1734#define         HFA384x_RXSTATUS_MSGTYPE                ((UINT16)(BIT15 | BIT14 | BIT13))
1735#define         HFA384x_RXSTATUS_MACPORT                ((UINT16)(BIT10 | BIT9 | BIT8))
1736#define         HFA384x_RXSTATUS_UNDECR                 ((UINT16)BIT1)
1737#define         HFA384x_RXSTATUS_FCSERR                 ((UINT16)BIT0)
1738/*--------------------------------------------------------------------
1739Communication Frames: Test/Get/Set Field Values for Receive Frames
1740--------------------------------------------------------------------*/
1741#define         HFA384x_RXSTATUS_MSGTYPE_GET(value)     ((UINT16)((((UINT16)(value)) & HFA384x_RXSTATUS_MSGTYPE) >> 13))
1742#define         HFA384x_RXSTATUS_MSGTYPE_SET(value)     ((UINT16)(((UINT16)(value)) << 13))
1743#define         HFA384x_RXSTATUS_MACPORT_GET(value)     ((UINT16)((((UINT16)(value)) & HFA384x_RXSTATUS_MACPORT) >> 8))
1744#define         HFA384x_RXSTATUS_MACPORT_SET(value)     ((UINT16)(((UINT16)(value)) << 8))
1745#define         HFA384x_RXSTATUS_ISUNDECR(value)        ((UINT16)(((UINT16)(value)) & HFA384x_RXSTATUS_UNDECR))
1746#define         HFA384x_RXSTATUS_ISFCSERR(value)        ((UINT16)(((UINT16)(value)) & HFA384x_RXSTATUS_FCSERR))
1747/*--------------------------------------------------------------------
1748 FRAME STRUCTURES: Information Types and Information Frame Structures
1749----------------------------------------------------------------------
1750Information Types
1751--------------------------------------------------------------------*/
1752#define         HFA384x_IT_HANDOVERADDR                 ((UINT16)0xF000UL)
1753#define         HFA384x_IT_HANDOVERDEAUTHADDRESS        ((UINT16)0xF001UL)//AP 1.3.7
1754#define         HFA384x_IT_COMMTALLIES                  ((UINT16)0xF100UL)
1755#define         HFA384x_IT_SCANRESULTS                  ((UINT16)0xF101UL)
1756#define         HFA384x_IT_CHINFORESULTS                ((UINT16)0xF102UL)
1757#define         HFA384x_IT_HOSTSCANRESULTS              ((UINT16)0xF103UL)
1758#define         HFA384x_IT_LINKSTATUS                   ((UINT16)0xF200UL)
1759#define         HFA384x_IT_ASSOCSTATUS                  ((UINT16)0xF201UL)
1760#define         HFA384x_IT_AUTHREQ                      ((UINT16)0xF202UL)
1761#define         HFA384x_IT_PSUSERCNT                    ((UINT16)0xF203UL)
1762#define         HFA384x_IT_KEYIDCHANGED                 ((UINT16)0xF204UL)
1763#define         HFA384x_IT_ASSOCREQ                     ((UINT16)0xF205UL)
1764#define         HFA384x_IT_MICFAILURE                   ((UINT16)0xF206UL)
1765
1766/*--------------------------------------------------------------------
1767Information Frames Structures
1768----------------------------------------------------------------------
1769Information Frames: Notification Frame Structures
1770--------------------------------------------------------------------*/
1771/*--  Notification Frame,MAC Mgmt: Handover Address --*/
1772typedef struct hfa384x_HandoverAddr
1773{
1774        UINT16  framelen;
1775        UINT16  infotype;
1776        UINT8   handover_addr[WLAN_BSSID_LEN];
1777} __WLAN_ATTRIB_PACK__ hfa384x_HandoverAddr_t;
1778
1779/*--  Inquiry Frame, Diagnose: Communication Tallies --*/
1780typedef struct hfa384x_CommTallies16
1781{
1782        UINT16  txunicastframes;
1783        UINT16  txmulticastframes;
1784        UINT16  txfragments;
1785        UINT16  txunicastoctets;
1786        UINT16  txmulticastoctets;
1787        UINT16  txdeferredtrans;
1788        UINT16  txsingleretryframes;
1789        UINT16  txmultipleretryframes;
1790        UINT16  txretrylimitexceeded;
1791        UINT16  txdiscards;
1792        UINT16  rxunicastframes;
1793        UINT16  rxmulticastframes;
1794        UINT16  rxfragments;
1795        UINT16  rxunicastoctets;
1796        UINT16  rxmulticastoctets;
1797        UINT16  rxfcserrors;
1798        UINT16  rxdiscardsnobuffer;
1799        UINT16  txdiscardswrongsa;
1800        UINT16  rxdiscardswepundecr;
1801        UINT16  rxmsginmsgfrag;
1802        UINT16  rxmsginbadmsgfrag;
1803} __WLAN_ATTRIB_PACK__ hfa384x_CommTallies16_t;
1804
1805typedef struct hfa384x_CommTallies32
1806{
1807        UINT32  txunicastframes;
1808        UINT32  txmulticastframes;
1809        UINT32  txfragments;
1810        UINT32  txunicastoctets;
1811        UINT32  txmulticastoctets;
1812        UINT32  txdeferredtrans;
1813        UINT32  txsingleretryframes;
1814        UINT32  txmultipleretryframes;
1815        UINT32  txretrylimitexceeded;
1816        UINT32  txdiscards;
1817        UINT32  rxunicastframes;
1818        UINT32  rxmulticastframes;
1819        UINT32  rxfragments;
1820        UINT32  rxunicastoctets;
1821        UINT32  rxmulticastoctets;
1822        UINT32  rxfcserrors;
1823        UINT32  rxdiscardsnobuffer;
1824        UINT32  txdiscardswrongsa;
1825        UINT32  rxdiscardswepundecr;
1826        UINT32  rxmsginmsgfrag;
1827        UINT32  rxmsginbadmsgfrag;
1828} __WLAN_ATTRIB_PACK__ hfa384x_CommTallies32_t;
1829
1830/*--  Inquiry Frame, Diagnose: Scan Results & Subfields--*/
1831typedef struct hfa384x_ScanResultSub
1832{
1833        UINT16  chid;
1834        UINT16  anl;
1835        UINT16  sl;
1836        UINT8   bssid[WLAN_BSSID_LEN];
1837        UINT16  bcnint;
1838        UINT16  capinfo;
1839        hfa384x_bytestr32_t     ssid;
1840        UINT8   supprates[10]; /* 802.11 info element */
1841        UINT16  proberesp_rate;
1842} __WLAN_ATTRIB_PACK__ hfa384x_ScanResultSub_t;
1843
1844typedef struct hfa384x_ScanResult
1845{
1846        UINT16  rsvd;
1847        UINT16  scanreason;
1848        hfa384x_ScanResultSub_t
1849                result[HFA384x_SCANRESULT_MAX];
1850} __WLAN_ATTRIB_PACK__ hfa384x_ScanResult_t;
1851
1852/*--  Inquiry Frame, Diagnose: ChInfo Results & Subfields--*/
1853typedef struct hfa384x_ChInfoResultSub
1854{
1855        UINT16  chid;
1856        UINT16  anl;
1857        UINT16  pnl;
1858        UINT16  active;
1859} __WLAN_ATTRIB_PACK__ hfa384x_ChInfoResultSub_t;
1860
1861#define HFA384x_CHINFORESULT_BSSACTIVE  BIT0
1862#define HFA384x_CHINFORESULT_PCFACTIVE  BIT1
1863
1864typedef struct hfa384x_ChInfoResult
1865{
1866        UINT16  scanchannels;
1867        hfa384x_ChInfoResultSub_t       
1868                result[HFA384x_CHINFORESULT_MAX];
1869} __WLAN_ATTRIB_PACK__ hfa384x_ChInfoResult_t;
1870
1871/*--  Inquiry Frame, Diagnose: Host Scan Results & Subfields--*/
1872typedef struct hfa384x_HScanResultSub
1873{
1874        UINT16  chid;
1875        UINT16  anl;
1876        UINT16  sl;
1877        UINT8   bssid[WLAN_BSSID_LEN];
1878        UINT16  bcnint;
1879        UINT16  capinfo;
1880        hfa384x_bytestr32_t     ssid;
1881        UINT8   supprates[10]; /* 802.11 info element */
1882        UINT16  proberesp_rate;
1883        UINT16  atim;
1884} __WLAN_ATTRIB_PACK__ hfa384x_HScanResultSub_t;
1885
1886typedef struct hfa384x_HScanResult
1887{
1888        UINT16  nresult;
1889        UINT16  rsvd;
1890        hfa384x_HScanResultSub_t
1891                result[HFA384x_HSCANRESULT_MAX];
1892} __WLAN_ATTRIB_PACK__ hfa384x_HScanResult_t;
1893
1894/*--  Unsolicited Frame, MAC Mgmt: LinkStatus --*/
1895
1896#define HFA384x_LINK_NOTCONNECTED       ((UINT16)0)
1897#define HFA384x_LINK_CONNECTED          ((UINT16)1)
1898#define HFA384x_LINK_DISCONNECTED       ((UINT16)2)
1899#define HFA384x_LINK_AP_CHANGE          ((UINT16)3)
1900#define HFA384x_LINK_AP_OUTOFRANGE      ((UINT16)4)
1901#define HFA384x_LINK_AP_INRANGE         ((UINT16)5)
1902#define HFA384x_LINK_ASSOCFAIL          ((UINT16)6)
1903
1904typedef struct hfa384x_LinkStatus
1905{
1906        UINT16  linkstatus;
1907} __WLAN_ATTRIB_PACK__ hfa384x_LinkStatus_t;
1908
1909
1910/*--  Unsolicited Frame, MAC Mgmt: AssociationStatus (--*/
1911
1912#define HFA384x_ASSOCSTATUS_STAASSOC    ((UINT16)1)
1913#define HFA384x_ASSOCSTATUS_REASSOC     ((UINT16)2)
1914#define HFA384x_ASSOCSTATUS_DISASSOC    ((UINT16)3)
1915#define HFA384x_ASSOCSTATUS_ASSOCFAIL   ((UINT16)4)
1916#define HFA384x_ASSOCSTATUS_AUTHFAIL    ((UINT16)5)
1917
1918typedef struct hfa384x_AssocStatus
1919{
1920        UINT16  assocstatus;
1921        UINT8   sta_addr[WLAN_ADDR_LEN];
1922        /* old_ap_addr is only valid if assocstatus == 2 */
1923        UINT8   old_ap_addr[WLAN_ADDR_LEN];
1924        UINT16  reason;
1925        UINT16  reserved;
1926} __WLAN_ATTRIB_PACK__ hfa384x_AssocStatus_t;
1927
1928/*--  Unsolicited Frame, MAC Mgmt: AuthRequest (AP Only) --*/
1929
1930typedef struct hfa384x_AuthRequest
1931{
1932        UINT8   sta_addr[WLAN_ADDR_LEN];
1933        UINT16  algorithm;
1934} __WLAN_ATTRIB_PACK__ hfa384x_AuthReq_t;
1935
1936/*--  Unsolicited Frame, MAC Mgmt: AssocRequest (AP Only) --*/
1937
1938typedef struct hfa384x_AssocRequest
1939{
1940        UINT8   sta_addr[WLAN_ADDR_LEN];
1941        UINT16  type;
1942        UINT8   wpa_data[80];
1943} __WLAN_ATTRIB_PACK__ hfa384x_AssocReq_t;
1944
1945
1946#define HFA384x_ASSOCREQ_TYPE_ASSOC     0
1947#define HFA384x_ASSOCREQ_TYPE_REASSOC   1
1948
1949/*--  Unsolicited Frame, MAC Mgmt: MIC Failure  (AP Only) --*/
1950
1951typedef struct hfa384x_MicFailure 
1952{
1953        UINT8   sender[WLAN_ADDR_LEN];
1954        UINT8   dest[WLAN_ADDR_LEN];
1955} __WLAN_ATTRIB_PACK__ hfa384x_MicFailure_t;
1956
1957/*--  Unsolicited Frame, MAC Mgmt: PSUserCount (AP Only) --*/
1958
1959typedef struct hfa384x_PSUserCount
1960{
1961        UINT16  usercnt;
1962} __WLAN_ATTRIB_PACK__ hfa384x_PSUserCount_t;
1963
1964typedef struct hfa384x_KeyIDChanged
1965{
1966        UINT8   sta_addr[WLAN_ADDR_LEN];
1967        UINT16  keyid;
1968} __WLAN_ATTRIB_PACK__ hfa384x_KeyIDChanged_t;
1969
1970/*--  Collection of all Inf frames ---------------*/
1971typedef union hfa384x_infodata {
1972        hfa384x_CommTallies16_t commtallies16;
1973        hfa384x_CommTallies32_t commtallies32;
1974        hfa384x_ScanResult_t    scanresult;
1975        hfa384x_ChInfoResult_t  chinforesult;
1976        hfa384x_HScanResult_t   hscanresult;
1977        hfa384x_LinkStatus_t    linkstatus;
1978        hfa384x_AssocStatus_t   assocstatus;
1979        hfa384x_AuthReq_t       authreq;
1980        hfa384x_PSUserCount_t   psusercnt;
1981        hfa384x_KeyIDChanged_t  keyidchanged;
1982} __WLAN_ATTRIB_PACK__ hfa384x_infodata_t;
1983
1984typedef struct hfa384x_InfFrame
1985{
1986        UINT16                  framelen;
1987        UINT16                  infotype;
1988        hfa384x_infodata_t      info;
1989} __WLAN_ATTRIB_PACK__ hfa384x_InfFrame_t;
1990
1991#if (WLAN_HOSTIF == WLAN_USB)
1992/*--------------------------------------------------------------------
1993USB Packet structures and constants.
1994--------------------------------------------------------------------*/
1995
1996/* Should be sent to the ctrlout endpoint */
1997#define HFA384x_USB_ENBULKIN    6
1998
1999/* Should be sent to the bulkout endpoint */
2000#define HFA384x_USB_TXFRM       0
2001#define HFA384x_USB_CMDREQ      1
2002#define HFA384x_USB_WRIDREQ     2
2003#define HFA384x_USB_RRIDREQ     3
2004#define HFA384x_USB_WMEMREQ     4
2005#define HFA384x_USB_RMEMREQ     5
2006
2007/* Received from the bulkin endpoint */
2008#define HFA384x_USB_ISFRM(a)    (!((a) & 0x8000))
2009#define HFA384x_USB_ISTXFRM(a)  (((a) & 0x9000) == 0x1000)
2010#define HFA384x_USB_ISRXFRM(a)  (!((a) & 0x9000))
2011#define HFA384x_USB_INFOFRM     0x8000
2012#define HFA384x_USB_CMDRESP     0x8001
2013#define HFA384x_USB_WRIDRESP    0x8002
2014#define HFA384x_USB_RRIDRESP    0x8003
2015#define HFA384x_USB_WMEMRESP    0x8004
2016#define HFA384x_USB_RMEMRESP    0x8005
2017#define HFA384x_USB_BUFAVAIL    0x8006
2018#define HFA384x_USB_ERROR       0x8007
2019
2020/*------------------------------------*/
2021/* Request (bulk OUT) packet contents */
2022
2023typedef struct hfa384x_usb_txfrm {
2024        hfa384x_tx_frame_t      desc;
2025        UINT8                   data[WLAN_DATA_MAXLEN];
2026} __WLAN_ATTRIB_PACK__ hfa384x_usb_txfrm_t;
2027
2028typedef struct hfa384x_usb_cmdreq {
2029        UINT16          type;
2030        UINT16          cmd;
2031        UINT16          parm0;
2032        UINT16          parm1;
2033        UINT16          parm2;
2034        UINT8           pad[54];
2035} __WLAN_ATTRIB_PACK__ hfa384x_usb_cmdreq_t;
2036
2037typedef struct hfa384x_usb_wridreq {
2038        UINT16          type;
2039        UINT16          frmlen;
2040        UINT16          rid;
2041        UINT8           data[HFA384x_RIDDATA_MAXLEN];
2042} __WLAN_ATTRIB_PACK__ hfa384x_usb_wridreq_t;
2043
2044typedef struct hfa384x_usb_rridreq {
2045        UINT16          type;
2046        UINT16          frmlen;
2047        UINT16          rid;
2048        UINT8           pad[58];
2049} __WLAN_ATTRIB_PACK__ hfa384x_usb_rridreq_t;
2050
2051typedef struct hfa384x_usb_wmemreq {
2052        UINT16          type;
2053        UINT16          frmlen;
2054        UINT16          offset;
2055        UINT16          page;
2056        UINT8           data[HFA384x_USB_RWMEM_MAXLEN];
2057} __WLAN_ATTRIB_PACK__ hfa384x_usb_wmemreq_t;
2058
2059typedef struct hfa384x_usb_rmemreq {
2060        UINT16          type;
2061        UINT16          frmlen;
2062        UINT16          offset;
2063        UINT16          page;
2064        UINT8           pad[56];
2065} __WLAN_ATTRIB_PACK__ hfa384x_usb_rmemreq_t;
2066
2067/*------------------------------------*/
2068/* Response (bulk IN) packet contents */
2069
2070typedef struct hfa384x_usb_rxfrm {
2071        hfa384x_rx_frame_t      desc;
2072        UINT8                   data[WLAN_DATA_MAXLEN];
2073} __WLAN_ATTRIB_PACK__ hfa384x_usb_rxfrm_t;
2074
2075typedef struct hfa384x_usb_infofrm {
2076        UINT16                  type;
2077        hfa384x_InfFrame_t      info;
2078} __WLAN_ATTRIB_PACK__ hfa384x_usb_infofrm_t;
2079
2080typedef struct hfa384x_usb_statusresp {
2081        UINT16          type;
2082        UINT16          status;
2083        UINT16          resp0;
2084        UINT16          resp1;
2085        UINT16          resp2;
2086} __WLAN_ATTRIB_PACK__ hfa384x_usb_cmdresp_t;
2087
2088typedef hfa384x_usb_cmdresp_t hfa384x_usb_wridresp_t;
2089
2090typedef struct hfa384x_usb_rridresp {
2091        UINT16          type;
2092        UINT16          frmlen;
2093        UINT16          rid;
2094        UINT8           data[HFA384x_RIDDATA_MAXLEN];
2095} __WLAN_ATTRIB_PACK__ hfa384x_usb_rridresp_t;
2096
2097typedef hfa384x_usb_cmdresp_t hfa384x_usb_wmemresp_t;
2098
2099typedef struct hfa384x_usb_rmemresp {
2100        UINT16          type;
2101        UINT16          frmlen;
2102        UINT8           data[HFA384x_USB_RWMEM_MAXLEN];
2103} __WLAN_ATTRIB_PACK__ hfa384x_usb_rmemresp_t;
2104
2105typedef struct hfa384x_usb_bufavail {
2106        UINT16          type;
2107        UINT16          frmlen;
2108} __WLAN_ATTRIB_PACK__ hfa384x_usb_bufavail_t;
2109
2110typedef struct hfa384x_usb_error {
2111        UINT16          type;
2112        UINT16          errortype;
2113} __WLAN_ATTRIB_PACK__ hfa384x_usb_error_t;
2114
2115/*----------------------------------------------------------*/
2116/* Unions for packaging all the known packet types together */
2117
2118typedef union hfa384x_usbout {
2119        UINT16                  type;
2120        hfa384x_usb_txfrm_t     txfrm;
2121        hfa384x_usb_cmdreq_t    cmdreq;
2122        hfa384x_usb_wridreq_t   wridreq;
2123        hfa384x_usb_rridreq_t   rridreq;
2124        hfa384x_usb_wmemreq_t   wmemreq;
2125        hfa384x_usb_rmemreq_t   rmemreq;
2126} __WLAN_ATTRIB_PACK__ hfa384x_usbout_t;
2127
2128typedef union hfa384x_usbin {
2129        UINT16                  type;
2130        hfa384x_usb_rxfrm_t     rxfrm;
2131        hfa384x_usb_txfrm_t     txfrm;
2132        hfa384x_usb_infofrm_t   infofrm;
2133        hfa384x_usb_cmdresp_t   cmdresp;
2134        hfa384x_usb_wridresp_t  wridresp;
2135        hfa384x_usb_rridresp_t  rridresp;
2136        hfa384x_usb_wmemresp_t  wmemresp;
2137        hfa384x_usb_rmemresp_t  rmemresp;
2138        hfa384x_usb_bufavail_t  bufavail;
2139        hfa384x_usb_error_t     usberror;
2140        UINT8                   boguspad[3000];
2141} __WLAN_ATTRIB_PACK__ hfa384x_usbin_t;
2142
2143#endif /* WLAN_USB */
2144
2145/*--------------------------------------------------------------------
2146PD record structures.
2147--------------------------------------------------------------------*/
2148
2149typedef struct hfa384x_pdr_pcb_partnum
2150{
2151        UINT8   num[8];
2152} __WLAN_ATTRIB_PACK__ hfa384x_pdr_pcb_partnum_t;
2153
2154typedef struct hfa384x_pdr_pcb_tracenum
2155{
2156        UINT8   num[8];
2157} __WLAN_ATTRIB_PACK__ hfa384x_pdr_pcb_tracenum_t;
2158
2159typedef struct hfa384x_pdr_nic_serial
2160{
2161        UINT8   num[12];
2162} __WLAN_ATTRIB_PACK__ hfa384x_pdr_nic_serial_t;
2163
2164typedef struct hfa384x_pdr_mkk_measurements
2165{
2166        double  carrier_freq;
2167        double  occupied_band;
2168        double  power_density;
2169        double  tx_spur_f1;
2170        double  tx_spur_f2;
2171        double  tx_spur_f3;
2172        double  tx_spur_f4;
2173        double  tx_spur_l1;
2174        double  tx_spur_l2;
2175        double  tx_spur_l3;
2176        double  tx_spur_l4;
2177        double  rx_spur_f1;
2178        double  rx_spur_f2;
2179        double  rx_spur_l1;
2180        double  rx_spur_l2;
2181} __WLAN_ATTRIB_PACK__ hfa384x_pdr_mkk_measurements_t;
2182
2183typedef struct hfa384x_pdr_nic_ramsize
2184{
2185        UINT8   size[12]; /* units of KB */
2186} __WLAN_ATTRIB_PACK__ hfa384x_pdr_nic_ramsize_t;
2187
2188typedef struct hfa384x_pdr_mfisuprange
2189{
2190        UINT16  id;
2191        UINT16  variant;
2192        UINT16  bottom;
2193        UINT16  top;
2194} __WLAN_ATTRIB_PACK__ hfa384x_pdr_mfisuprange_t;
2195
2196typedef struct hfa384x_pdr_cfisuprange
2197{
2198        UINT16  id;
2199        UINT16  variant;
2200        UINT16  bottom;
2201        UINT16  top;
2202} __WLAN_ATTRIB_PACK__ hfa384x_pdr_cfisuprange_t;
2203
2204typedef struct hfa384x_pdr_nicid
2205{
2206        UINT16  id;
2207        UINT16  variant;
2208        UINT16  major;
2209        UINT16  minor;
2210} __WLAN_ATTRIB_PACK__ hfa384x_pdr_nicid_t;
2211
2212
2213typedef struct hfa384x_pdr_refdac_measurements
2214{
2215        UINT16  value[0];
2216} __WLAN_ATTRIB_PACK__ hfa384x_pdr_refdac_measurements_t;
2217
2218typedef struct hfa384x_pdr_vgdac_measurements
2219{
2220        UINT16  value[0];
2221} __WLAN_ATTRIB_PACK__ hfa384x_pdr_vgdac_measurements_t;
2222
2223typedef struct hfa384x_pdr_level_comp_measurements
2224{
2225        UINT16  value[0];
2226} __WLAN_ATTRIB_PACK__ hfa384x_pdr_level_compc_measurements_t;
2227
2228typedef struct hfa384x_pdr_mac_address
2229{
2230        UINT8   addr[6];
2231} __WLAN_ATTRIB_PACK__ hfa384x_pdr_mac_address_t;
2232
2233typedef struct hfa384x_pdr_mkk_callname
2234{
2235        UINT8   callname[8];
2236} __WLAN_ATTRIB_PACK__ hfa384x_pdr_mkk_callname_t;
2237
2238typedef struct hfa384x_pdr_regdomain
2239{
2240        UINT16  numdomains;
2241        UINT16  domain[5];
2242} __WLAN_ATTRIB_PACK__ hfa384x_pdr_regdomain_t;
2243
2244typedef struct hfa384x_pdr_allowed_channel
2245{
2246        UINT16  ch_bitmap;
2247} __WLAN_ATTRIB_PACK__ hfa384x_pdr_allowed_channel_t;
2248
2249typedef struct hfa384x_pdr_default_channel
2250{
2251        UINT16  channel;
2252} __WLAN_ATTRIB_PACK__ hfa384x_pdr_default_channel_t;
2253
2254typedef struct hfa384x_pdr_privacy_option
2255{
2256        UINT16  available;
2257} __WLAN_ATTRIB_PACK__ hfa384x_pdr_privacy_option_t;
2258
2259typedef struct hfa384x_pdr_temptype
2260{
2261        UINT16  type;
2262} __WLAN_ATTRIB_PACK__ hfa384x_pdr_temptype_t;
2263
2264typedef struct hfa384x_pdr_refdac_setup
2265{
2266        UINT16  ch_value[14];
2267} __WLAN_ATTRIB_PACK__ hfa384x_pdr_refdac_setup_t;
2268
2269typedef struct hfa384x_pdr_vgdac_setup
2270{
2271        UINT16  ch_value[14];
2272} __WLAN_ATTRIB_PACK__ hfa384x_pdr_vgdac_setup_t;
2273
2274typedef struct hfa384x_pdr_level_comp_setup
2275{
2276        UINT16  ch_value[14];
2277} __WLAN_ATTRIB_PACK__ hfa384x_pdr_level_comp_setup_t;
2278
2279typedef struct hfa384x_pdr_trimdac_setup
2280{
2281        UINT16  trimidac;
2282        UINT16  trimqdac;
2283} __WLAN_ATTRIB_PACK__ hfa384x_pdr_trimdac_setup_t;
2284
2285typedef struct hfa384x_pdr_ifr_setting
2286{
2287        UINT16  value[3];
2288} __WLAN_ATTRIB_PACK__ hfa384x_pdr_ifr_setting_t;
2289
2290typedef struct hfa384x_pdr_rfr_setting
2291{
2292        UINT16  value[3];
2293} __WLAN_ATTRIB_PACK__ hfa384x_pdr_rfr_setting_t;
2294
2295typedef struct hfa384x_pdr_hfa3861_baseline
2296{
2297        UINT16  value[50];
2298} __WLAN_ATTRIB_PACK__ hfa384x_pdr_hfa3861_baseline_t;
2299
2300typedef struct hfa384x_pdr_hfa3861_shadow
2301{
2302        UINT32  value[32];
2303} __WLAN_ATTRIB_PACK__ hfa384x_pdr_hfa3861_shadow_t;
2304
2305typedef struct hfa384x_pdr_hfa3861_ifrf
2306{
2307        UINT32  value[20];
2308} __WLAN_ATTRIB_PACK__ hfa384x_pdr_hfa3861_ifrf_t;
2309
2310typedef struct hfa384x_pdr_hfa3861_chcalsp
2311{
2312        UINT16  value[14];
2313} __WLAN_ATTRIB_PACK__ hfa384x_pdr_hfa3861_chcalsp_t;
2314
2315typedef struct hfa384x_pdr_hfa3861_chcali
2316{
2317        UINT16  value[17];
2318} __WLAN_ATTRIB_PACK__ hfa384x_pdr_hfa3861_chcali_t;
2319
2320typedef struct hfa384x_pdr_hfa3861_nic_config
2321{
2322        UINT16  config_bitmap;
2323} __WLAN_ATTRIB_PACK__ hfa384x_pdr_nic_config_t;
2324
2325typedef struct hfa384x_pdr_hfo_delay
2326{
2327        UINT8   hfo_delay;
2328} __WLAN_ATTRIB_PACK__ hfa384x_hfo_delay_t;
2329
2330typedef struct hfa384x_pdr_hfa3861_manf_testsp
2331{
2332        UINT16  value[30];
2333} __WLAN_ATTRIB_PACK__ hfa384x_pdr_hfa3861_manf_testsp_t;
2334
2335typedef struct hfa384x_pdr_hfa3861_manf_testi
2336{
2337        UINT16  value[30];
2338} __WLAN_ATTRIB_PACK__ hfa384x_pdr_hfa3861_manf_testi_t;
2339
2340typedef struct hfa384x_end_of_pda
2341{
2342        UINT16  crc;
2343} __WLAN_ATTRIB_PACK__ hfa384x_pdr_end_of_pda_t;
2344
2345typedef struct hfa384x_pdrec
2346{
2347        UINT16  len; /* in words */
2348        UINT16  code;
2349        union pdr {
2350        hfa384x_pdr_pcb_partnum_t       pcb_partnum;
2351        hfa384x_pdr_pcb_tracenum_t      pcb_tracenum;
2352        hfa384x_pdr_nic_serial_t        nic_serial;
2353        hfa384x_pdr_mkk_measurements_t  mkk_measurements;
2354        hfa384x_pdr_nic_ramsize_t       nic_ramsize;
2355        hfa384x_pdr_mfisuprange_t       mfisuprange;
2356        hfa384x_pdr_cfisuprange_t       cfisuprange;
2357        hfa384x_pdr_nicid_t             nicid;
2358        hfa384x_pdr_refdac_measurements_t       refdac_measurements;
2359        hfa384x_pdr_vgdac_measurements_t        vgdac_measurements;
2360        hfa384x_pdr_level_compc_measurements_t  level_compc_measurements;
2361        hfa384x_pdr_mac_address_t       mac_address;
2362        hfa384x_pdr_mkk_callname_t      mkk_callname;
2363        hfa384x_pdr_regdomain_t         regdomain;
2364        hfa384x_pdr_allowed_channel_t   allowed_channel;
2365        hfa384x_pdr_default_channel_t   default_channel;
2366        hfa384x_pdr_privacy_option_t    privacy_option;
2367        hfa384x_pdr_temptype_t          temptype;
2368        hfa384x_pdr_refdac_setup_t      refdac_setup;
2369        hfa384x_pdr_vgdac_setup_t       vgdac_setup;
2370        hfa384x_pdr_level_comp_setup_t  level_comp_setup;
2371        hfa384x_pdr_trimdac_setup_t     trimdac_setup;
2372        hfa384x_pdr_ifr_setting_t       ifr_setting;
2373        hfa384x_pdr_rfr_setting_t       rfr_setting;
2374        hfa384x_pdr_hfa3861_baseline_t  hfa3861_baseline;
2375        hfa384x_pdr_hfa3861_shadow_t    hfa3861_shadow;
2376        hfa384x_pdr_hfa3861_ifrf_t      hfa3861_ifrf;
2377        hfa384x_pdr_hfa3861_chcalsp_t   hfa3861_chcalsp;
2378        hfa384x_pdr_hfa3861_chcali_t    hfa3861_chcali;
2379        hfa384x_pdr_nic_config_t        nic_config;
2380        hfa384x_hfo_delay_t             hfo_delay;
2381        hfa384x_pdr_hfa3861_manf_testsp_t       hfa3861_manf_testsp;
2382        hfa384x_pdr_hfa3861_manf_testi_t        hfa3861_manf_testi;
2383        hfa384x_pdr_end_of_pda_t        end_of_pda;
2384
2385        } data;
2386} __WLAN_ATTRIB_PACK__ hfa384x_pdrec_t;
2387
2388
2389#ifdef __KERNEL__
2390/*--------------------------------------------------------------------
2391---  MAC state structure, argument to all functions --
2392---  Also, a collection of support types --
2393--------------------------------------------------------------------*/
2394typedef struct hfa384x_statusresult
2395{
2396        UINT16  status;
2397        UINT16  resp0;
2398        UINT16  resp1;
2399        UINT16  resp2;
2400} hfa384x_cmdresult_t;
2401
2402#if (WLAN_HOSTIF == WLAN_USB)
2403
2404/* USB Control Exchange (CTLX):
2405 *  A queue of the structure below is maintained for all of the
2406 *  Request/Response type USB packets supported by Prism2.
2407 */
2408/* The following hfa384x_* structures are arguments to
2409 * the usercb() for the different CTLX types.
2410 */
2411typedef hfa384x_cmdresult_t hfa384x_wridresult_t;
2412typedef hfa384x_cmdresult_t hfa384x_wmemresult_t;
2413
2414typedef struct hfa384x_rridresult
2415{
2416        UINT16          rid;
2417        const void      *riddata;
2418        UINT            riddata_len;
2419} hfa384x_rridresult_t;
2420
2421enum ctlx_state {
2422        CTLX_START = 0, /* Start state, not queued */
2423
2424        CTLX_COMPLETE,  /* CTLX successfully completed */
2425        CTLX_REQ_FAILED,        /* OUT URB completed w/ error */
2426
2427        CTLX_PENDING,           /* Queued, data valid */
2428        CTLX_REQ_SUBMITTED,     /* OUT URB submitted */
2429        CTLX_REQ_COMPLETE,      /* OUT URB complete */
2430        CTLX_RESP_COMPLETE      /* IN URB received */
2431};
2432typedef enum ctlx_state  CTLX_STATE;
2433
2434struct hfa384x_usbctlx;
2435struct hfa384x;
2436
2437typedef void (*ctlx_cmdcb_t)( struct hfa384x*, const struct hfa384x_usbctlx* );
2438
2439typedef void (*ctlx_usercb_t)(
2440        struct hfa384x  *hw,
2441        void            *ctlxresult,
2442        void            *usercb_data);
2443
2444typedef struct hfa384x_usbctlx
2445{
2446        struct list_head        list;
2447
2448        size_t                  outbufsize;
2449        hfa384x_usbout_t        outbuf;         /* pkt buf for OUT */
2450        hfa384x_usbin_t         inbuf;          /* pkt buf for IN(a copy) */
2451
2452        CTLX_STATE              state;          /* Tracks running state */
2453
2454        struct completion       done;
2455        volatile int            reapable;       /* Food for the reaper task */
2456
2457        ctlx_cmdcb_t            cmdcb;          /* Async command callback */
2458        ctlx_usercb_t           usercb;         /* Async user callback, */
2459        void                    *usercb_data;   /*  at CTLX completion  */
2460
2461        int                     variant;        /* Identifies cmd variant */
2462} hfa384x_usbctlx_t;
2463
2464typedef struct hfa384x_usbctlxq
2465{
2466        spinlock_t              lock;
2467        struct list_head        pending;
2468        struct list_head        active;
2469        struct list_head        completing;
2470        struct list_head        reapable;
2471} hfa384x_usbctlxq_t;
2472#endif
2473
2474typedef struct hfa484x_metacmd
2475{
2476        UINT16          cmd;
2477
2478        UINT16          parm0;
2479        UINT16          parm1;
2480        UINT16          parm2;
2481
2482#if 0 //XXX cmd irq stuff
2483        UINT16          bulkid;         /* what RID/FID to copy down. */
2484        int             bulklen;        /* how much to copy from BAP */
2485        char            *bulkdata;      /* And to where? */
2486#endif
2487
2488        hfa384x_cmdresult_t result;
2489} hfa384x_metacmd_t;
2490
2491#define MAX_PRISM2_GRP_ADDR     16
2492#define MAX_GRP_ADDR            32
2493#define WLAN_COMMENT_MAX        80  /* Max. length of user comment string. */
2494
2495#define MM_SAT_PCF              (BIT14)
2496#define MM_GCSD_PCF             (BIT15)
2497#define MM_GCSD_PCF_EB          (BIT14 | BIT15)
2498
2499#define WLAN_STATE_STOPPED      0   /* Network is not active. */
2500#define WLAN_STATE_STARTED      1   /* Network has been started. */
2501
2502#define WLAN_AUTH_MAX           60  /* Max. # of authenticated stations. */
2503#define WLAN_ACCESS_MAX         60  /* Max. # of stations in an access list. */
2504#define WLAN_ACCESS_NONE        0   /* No stations may be authenticated. */
2505#define WLAN_ACCESS_ALL         1   /* All stations may be authenticated. */
2506#define WLAN_ACCESS_ALLOW       2   /* Authenticate only "allowed" stations. */
2507#define WLAN_ACCESS_DENY        3   /* Do not authenticate "denied" stations. */
2508
2509/* XXX These are going away ASAP */
2510typedef struct prism2sta_authlist
2511{
2512        UINT    cnt;
2513        UINT8   addr[WLAN_AUTH_MAX][WLAN_ADDR_LEN];
2514        UINT8   assoc[WLAN_AUTH_MAX];
2515} prism2sta_authlist_t;
2516
2517typedef struct prism2sta_accesslist
2518{
2519        UINT    modify;
2520        UINT    cnt;
2521        UINT8   addr[WLAN_ACCESS_MAX][WLAN_ADDR_LEN];
2522        UINT    cnt1;
2523        UINT8   addr1[WLAN_ACCESS_MAX][WLAN_ADDR_LEN];
2524} prism2sta_accesslist_t;
2525
2526typedef struct hfa384x
2527{
2528#if (WLAN_HOSTIF != WLAN_USB)
2529        /* Resource config */
2530        UINT32                  iobase;
2531        char                    __iomem *membase;
2532        UINT32                  irq;
2533#else
2534        /* USB support data */
2535        struct usb_device       *usb;
2536        struct urb              rx_urb;
2537        struct sk_buff          *rx_urb_skb;
2538        struct urb              tx_urb;
2539        struct urb              ctlx_urb;
2540        hfa384x_usbout_t        txbuff;
2541        hfa384x_usbctlxq_t      ctlxq;
2542        struct timer_list       reqtimer;
2543        struct timer_list       resptimer;
2544
2545        struct timer_list       throttle;
2546
2547        struct tasklet_struct   reaper_bh;
2548        struct tasklet_struct   completion_bh;
2549
2550        struct work_struct      usb_work;
2551
2552        unsigned long           usb_flags;
2553#define THROTTLE_RX     0
2554#define THROTTLE_TX     1
2555#define WORK_RX_HALT    2
2556#define WORK_TX_HALT    3
2557#define WORK_RX_RESUME  4
2558#define WORK_TX_RESUME  5
2559
2560        unsigned short          req_timer_done:1;
2561        unsigned short          resp_timer_done:1;
2562
2563        int                     endp_in;
2564        int                     endp_out;
2565#endif /* !USB */
2566
2567#if (WLAN_HOSTIF == WLAN_PCMCIA)
2568#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,16)
2569        struct pcmcia_device *pdev;
2570#else
2571        dev_link_t      *link;
2572#endif
2573        dev_node_t      node;
2574#endif
2575
2576        int                     sniff_fcs;
2577        int                     sniff_channel; 
2578        int                     sniff_truncate; 
2579        int                     sniffhdr;
2580
2581        wait_queue_head_t cmdq;         /* wait queue itself */
2582
2583        /* Controller state */
2584        UINT32          state;
2585        UINT32          isap;
2586        UINT8           port_enabled[HFA384x_NUMPORTS_MAX];
2587#if (WLAN_HOSTIF != WLAN_USB)
2588        UINT            auxen;
2589        UINT            isram16;
2590#endif /* !USB */
2591
2592        /* Download support */
2593        UINT                            dlstate;
2594        hfa384x_downloadbuffer_t        bufinfo;
2595        UINT16                          dltimeout;
2596
2597#if (WLAN_HOSTIF != WLAN_USB)
2598        spinlock_t      cmdlock;
2599        volatile int    cmdflag;        /* wait queue flag */
2600        hfa384x_metacmd_t *cmddata;      /* for our async callback */
2601
2602        /* BAP support */
2603        spinlock_t      baplock;       
2604        struct tasklet_struct   bap_tasklet;
2605
2606        /* MAC buffer ids */
2607        UINT16          txfid_head;
2608        UINT16          txfid_tail;
2609        UINT            txfid_N;
2610        UINT16          txfid_queue[HFA384x_DRVR_FIDSTACKLEN_MAX];
2611        UINT16                  infofid;
2612        struct semaphore        infofid_sem;
2613#endif /* !USB */
2614
2615        int                          scanflag;    /* to signal scan comlete */
2616        int                          join_ap;        /* are we joined to a specific ap */
2617        int                          join_retries;   /* number of join retries till we fail */
2618        hfa384x_JoinRequest_data_t   joinreq;        /* join request saved data */
2619
2620        wlandevice_t            *wlandev;
2621        /* Timer to allow for the deferred processing of linkstatus messages */
2622        struct work_struct      link_bh;
2623
2624        struct work_struct      commsqual_bh;
2625        hfa384x_commsquality_t  qual;
2626        struct timer_list       commsqual_timer;
2627
2628        UINT16 link_status;
2629        UINT16 link_status_new;
2630        struct sk_buff_head        authq;
2631
2632        /* And here we have stuff that used to be in priv */
2633
2634        /* State variables */
2635        UINT            presniff_port_type;
2636        UINT16          presniff_wepflags;
2637        UINT32          dot11_desired_bss_type;
2638        int             ap;     /* AP flag: 0 - Station, 1 - Access Point. */
2639
2640        int             dbmadjust;
2641
2642        /* Group Addresses - right now, there are up to a total
2643        of MAX_GRP_ADDR group addresses */
2644        UINT8           dot11_grp_addr[MAX_GRP_ADDR][WLAN_ADDR_LEN];
2645        UINT            dot11_grpcnt;
2646
2647        /* Component Identities */
2648        hfa384x_compident_t     ident_nic;
2649        hfa384x_compident_t     ident_pri_fw;
2650        hfa384x_compident_t     ident_sta_fw;
2651        hfa384x_compident_t     ident_ap_fw;
2652        UINT16                  mm_mods;
2653
2654        /* Supplier compatibility ranges */
2655        hfa384x_caplevel_t      cap_sup_mfi;
2656        hfa384x_caplevel_t      cap_sup_cfi;
2657        hfa384x_caplevel_t      cap_sup_pri;
2658        hfa384x_caplevel_t      cap_sup_sta;
2659        hfa384x_caplevel_t      cap_sup_ap;
2660
2661        /* Actor compatibility ranges */
2662        hfa384x_caplevel_t      cap_act_pri_cfi; /* pri f/w to controller interface */
2663        hfa384x_caplevel_t      cap_act_sta_cfi; /* sta f/w to controller interface */
2664        hfa384x_caplevel_t      cap_act_sta_mfi; /* sta f/w to modem interface */
2665        hfa384x_caplevel_t      cap_act_ap_cfi;  /* ap f/w to controller interface */
2666        hfa384x_caplevel_t      cap_act_ap_mfi;  /* ap f/w to modem interface */
2667
2668        UINT32                  psusercount;  /* Power save user count. */
2669        hfa384x_CommTallies32_t tallies;      /* Communication tallies. */
2670        UINT8                   comment[WLAN_COMMENT_MAX+1]; /* User comment */
2671
2672        /* Channel Info request results (AP only) */
2673        struct {
2674                atomic_t                done;
2675                UINT8                   count;
2676                hfa384x_ChInfoResult_t  results;
2677        } channel_info;
2678
2679        hfa384x_InfFrame_t      *scanresults;
2680
2681
2682        prism2sta_authlist_t    authlist;     /* Authenticated station list. */
2683        UINT                    accessmode;   /* Access mode. */
2684        prism2sta_accesslist_t  allow;        /* Allowed station list. */
2685        prism2sta_accesslist_t  deny;         /* Denied station list. */
2686
2687} hfa384x_t;
2688
2689/*=============================================================*/
2690/*--- Function Declarations -----------------------------------*/
2691/*=============================================================*/
2692#if (WLAN_HOSTIF == WLAN_USB)
2693void
2694hfa384x_create(
2695        hfa384x_t *hw,
2696        struct usb_device *usb);
2697#else
2698void
2699hfa384x_create(
2700        hfa384x_t *hw,
2701        UINT irq,
2702        UINT32 iobase,
2703        UINT8 __iomem *membase);
2704#endif
2705
2706void hfa384x_destroy(hfa384x_t *hw);
2707
2708irqreturn_t
2709hfa384x_interrupt(int irq, void *dev_id PT_REGS);
2710int
2711hfa384x_corereset( hfa384x_t *hw, int holdtime, int settletime, int genesis);
2712int
2713hfa384x_drvr_chinforesults( hfa384x_t *hw);
2714int
2715hfa384x_drvr_commtallies( hfa384x_t *hw);
2716int
2717hfa384x_drvr_disable(hfa384x_t *hw, UINT16 macport);
2718int
2719hfa384x_drvr_enable(hfa384x_t *hw, UINT16 macport);
2720int
2721hfa384x_drvr_flashdl_enable(hfa384x_t *hw);
2722int
2723hfa384x_drvr_flashdl_disable(hfa384x_t *hw);
2724int
2725hfa384x_drvr_flashdl_write(hfa384x_t *hw, UINT32 daddr, void* buf, UINT32 len);
2726int
2727hfa384x_drvr_getconfig(hfa384x_t *hw, UINT16 rid, void *buf, UINT16 len);
2728int
2729hfa384x_drvr_handover( hfa384x_t *hw, UINT8 *addr);
2730int
2731hfa384x_drvr_hostscanresults( hfa384x_t *hw);
2732int
2733hfa384x_drvr_low_level(hfa384x_t *hw, hfa384x_metacmd_t *cmd);
2734int
2735hfa384x_drvr_mmi_read(hfa384x_t *hw, UINT32 address, UINT32 *result);
2736int
2737hfa384x_drvr_mmi_write(hfa384x_t *hw, UINT32 address, UINT32 data);
2738int
2739hfa384x_drvr_ramdl_enable(hfa384x_t *hw, UINT32 exeaddr);
2740int
2741hfa384x_drvr_ramdl_disable(hfa384x_t *hw);
2742int
2743hfa384x_drvr_ramdl_write(hfa384x_t *hw, UINT32 daddr, void* buf, UINT32 len);
2744int
2745hfa384x_drvr_readpda(hfa384x_t *hw, void *buf, UINT len);
2746int
2747hfa384x_drvr_scanresults( hfa384x_t *hw);
2748
2749int
2750hfa384x_drvr_setconfig(hfa384x_t *hw, UINT16 rid, void *buf, UINT16 len);
2751
2752static inline int
2753hfa384x_drvr_getconfig16(hfa384x_t *hw, UINT16 rid, void *val)
2754{
2755        int             result = 0;
2756        result = hfa384x_drvr_getconfig(hw, rid, val, sizeof(UINT16));
2757        if ( result == 0 ) {
2758                *((UINT16*)val) = hfa384x2host_16(*((UINT16*)val));
2759        }
2760        return result;
2761}
2762
2763static inline int
2764hfa384x_drvr_getconfig32(hfa384x_t *hw, UINT16 rid, void *val)
2765{
2766        int             result = 0;
2767
2768        result = hfa384x_drvr_getconfig(hw, rid, val, sizeof(UINT32));
2769        if ( result == 0 ) {
2770                *((UINT32*)val) = hfa384x2host_32(*((UINT32*)val));
2771        }
2772
2773        return result;
2774}
2775
2776static inline int
2777hfa384x_drvr_setconfig16(hfa384x_t *hw, UINT16 rid, UINT16 val)
2778{
2779        UINT16 value = host2hfa384x_16(val);
2780        return hfa384x_drvr_setconfig(hw, rid, &value, sizeof(value));
2781}
2782
2783static inline int
2784hfa384x_drvr_setconfig32(hfa384x_t *hw, UINT16 rid, UINT32 val)
2785{
2786        UINT32 value = host2hfa384x_32(val);
2787        return hfa384x_drvr_setconfig(hw, rid, &value, sizeof(value));
2788}
2789
2790#if (WLAN_HOSTIF == WLAN_USB)   
2791int     
2792hfa384x_drvr_getconfig_async(hfa384x_t     *hw,         
2793                              UINT16        rid,         
2794                              ctlx_usercb_t usercb,     
2795                              void          *usercb_data);       
2796         
2797int     
2798hfa384x_drvr_setconfig_async(hfa384x_t *hw,     
2799                              UINT16 rid,       
2800                              void *buf,         
2801                              UINT16 len,       
2802                              ctlx_usercb_t usercb,     
2803                              void *usercb_data);       
2804#else
2805static inline int
2806hfa384x_drvr_setconfig_async(hfa384x_t *hw, UINT16 rid, void *buf, UINT16 len,
2807                             void *ptr1, void *ptr2)     
2808{
2809         (void)ptr1;
2810         (void)ptr2;
2811         return hfa384x_drvr_setconfig(hw, rid, buf, len);
2812}
2813#endif
2814
2815static inline int
2816hfa384x_drvr_setconfig16_async(hfa384x_t *hw, UINT16 rid, UINT16 val)
2817{       
2818        UINT16 value = host2hfa384x_16(val);     
2819        return hfa384x_drvr_setconfig_async(hw, rid, &value, sizeof(value),
2820                                            NULL , NULL);       
2821}
2822
2823static inline int
2824hfa384x_drvr_setconfig32_async(hfa384x_t *hw, UINT16 rid, UINT32 val)
2825{       
2826        UINT32 value = host2hfa384x_32(val);     
2827        return hfa384x_drvr_setconfig_async(hw, rid, &value, sizeof(value),
2828                                            NULL , NULL);       
2829}
2830
2831
2832int
2833hfa384x_drvr_start(hfa384x_t *hw);
2834int
2835hfa384x_drvr_stop(hfa384x_t *hw);
2836int
2837hfa384x_drvr_txframe(hfa384x_t *hw, struct sk_buff *skb, p80211_hdr_t *p80211_hdr, p80211_metawep_t *p80211_wep);
2838void
2839hfa384x_tx_timeout(wlandevice_t *wlandev);
2840
2841int
2842hfa384x_cmd_initialize(hfa384x_t *hw);
2843int
2844hfa384x_cmd_enable(hfa384x_t *hw, UINT16 macport);
2845int
2846hfa384x_cmd_disable(hfa384x_t *hw, UINT16 macport);
2847int
2848hfa384x_cmd_diagnose(hfa384x_t *hw);
2849int
2850hfa384x_cmd_allocate(hfa384x_t *hw, UINT16 len);
2851int
2852hfa384x_cmd_transmit(hfa384x_t *hw, UINT16 reclaim, UINT16 qos, UINT16 fid);
2853int
2854hfa384x_cmd_clearpersist(hfa384x_t *hw, UINT16 fid);
2855int
2856hfa384x_cmd_notify(hfa384x_t *hw, UINT16 reclaim, UINT16 fid, void *buf, UINT16 len);
2857int
2858hfa384x_cmd_inquire(hfa384x_t *hw, UINT16 fid);
2859int
2860hfa384x_cmd_access(hfa384x_t *hw, UINT16 write, UINT16 rid, void *buf, UINT16 len);
2861int
2862hfa384x_cmd_monitor(hfa384x_t *hw, UINT16 enable);
2863int
2864hfa384x_cmd_download(
2865        hfa384x_t *hw,
2866        UINT16 mode,
2867        UINT16 lowaddr,
2868        UINT16 highaddr,
2869        UINT16 codelen);
2870int
2871hfa384x_cmd_aux_enable(hfa384x_t *hw, int force);
2872int
2873hfa384x_cmd_aux_disable(hfa384x_t *hw);
2874int
2875hfa384x_copy_from_bap(
2876        hfa384x_t *hw,
2877        UINT16  bap,
2878        UINT16  id,
2879        UINT16  offset,
2880        void    *buf,
2881        UINT    len);
2882int
2883hfa384x_copy_to_bap(
2884        hfa384x_t *hw,
2885        UINT16  bap,
2886        UINT16  id,
2887        UINT16  offset,
2888        void    *buf,
2889        UINT    len);
2890void
2891hfa384x_copy_from_aux(
2892        hfa384x_t *hw,
2893        UINT32  cardaddr,
2894        UINT32  auxctl,
2895        void    *buf,
2896        UINT    len);
2897void
2898hfa384x_copy_to_aux(
2899        hfa384x_t *hw,
2900        UINT32  cardaddr,
2901        UINT32  auxctl,
2902        void    *buf,
2903        UINT    len);
2904
2905#if (WLAN_HOSTIF != WLAN_USB)
2906
2907/*
2908   HFA384x is a LITTLE ENDIAN part.
2909
2910   the get/setreg functions implicitly byte-swap the data to LE.
2911   the _noswap variants do not perform a byte-swap on the data.
2912*/
2913
2914static inline UINT16
2915__hfa384x_getreg(hfa384x_t *hw, UINT reg);
2916
2917static inline void   
2918__hfa384x_setreg(hfa384x_t *hw, UINT16 val, UINT reg);
2919
2920static inline UINT16
2921__hfa384x_getreg_noswap(hfa384x_t *hw, UINT reg);
2922
2923static inline void
2924__hfa384x_setreg_noswap(hfa384x_t *hw, UINT16 val, UINT reg);
2925
2926#ifdef REVERSE_ENDIAN
2927#define hfa384x_getreg __hfa384x_getreg_noswap
2928#define hfa384x_setreg __hfa384x_setreg_noswap
2929#define hfa384x_getreg_noswap __hfa384x_getreg
2930#define hfa384x_setreg_noswap __hfa384x_setreg
2931#else
2932#define hfa384x_getreg __hfa384x_getreg
2933#define hfa384x_setreg __hfa384x_setreg
2934#define hfa384x_getreg_noswap __hfa384x_getreg_noswap
2935#define hfa384x_setreg_noswap __hfa384x_setreg_noswap
2936#endif
2937
2938/*----------------------------------------------------------------
2939* hfa384x_getreg
2940*
2941* Retrieve the value of one of the MAC registers.  Done here
2942* because different PRISM2 MAC parts use different buses and such.
2943* NOTE: This function returns the value in HOST ORDER!!!!!!
2944*
2945* Arguments:
2946*       hw         MAC part structure
2947*       reg        Register identifier (offset for I/O based i/f)
2948*
2949* Returns:
2950*       Value from the register in HOST ORDER!!!!
2951----------------------------------------------------------------*/
2952static inline UINT16
2953__hfa384x_getreg(hfa384x_t *hw, UINT reg)
2954{
2955/*      printk(KERN_DEBUG "Reading from 0x%0x\n", hw->membase + reg); */
2956#if ((WLAN_HOSTIF == WLAN_PCMCIA) || (WLAN_HOSTIF == WLAN_PLX))
2957        return wlan_inw_le16_to_cpu(hw->iobase+reg);
2958#elif (WLAN_HOSTIF == WLAN_PCI)
2959        return __le16_to_cpu(readw(hw->membase + reg));
2960#endif
2961}
2962
2963/*----------------------------------------------------------------
2964* hfa384x_setreg
2965*
2966* Set the value of one of the MAC registers.  Done here
2967* because different PRISM2 MAC parts use different buses and such.
2968* NOTE: This function assumes the value is in HOST ORDER!!!!!!
2969*
2970* Arguments:
2971*       hw      MAC part structure
2972*       val     Value, in HOST ORDER!!, to put in the register
2973*       reg     Register identifier (offset for I/O based i/f)
2974*
2975* Returns:
2976*       Nothing
2977----------------------------------------------------------------*/
2978static inline void
2979__hfa384x_setreg(hfa384x_t *hw, UINT16 val, UINT reg)
2980{
2981#if ((WLAN_HOSTIF == WLAN_PCMCIA) || (WLAN_HOSTIF == WLAN_PLX))
2982        wlan_outw_cpu_to_le16( val, hw->iobase + reg);
2983        return;
2984#elif (WLAN_HOSTIF == WLAN_PCI)
2985        writew(__cpu_to_le16(val), hw->membase + reg);
2986        return;
2987#endif
2988}
2989
2990
2991/*----------------------------------------------------------------
2992* hfa384x_getreg_noswap
2993*
2994* Retrieve the value of one of the MAC registers.  Done here
2995* because different PRISM2 MAC parts use different buses and such.
2996*
2997* Arguments:
2998*       hw         MAC part structure
2999*       reg        Register identifier (offset for I/O based i/f)
3000*
3001* Returns:
3002*       Value from the register.
3003----------------------------------------------------------------*/
3004static inline UINT16
3005__hfa384x_getreg_noswap(hfa384x_t *hw, UINT reg)
3006{
3007#if ((WLAN_HOSTIF == WLAN_PCMCIA) || (WLAN_HOSTIF == WLAN_PLX))
3008        return wlan_inw(hw->iobase+reg);
3009#elif (WLAN_HOSTIF == WLAN_PCI)
3010        return readw(hw->membase + reg);
3011#endif
3012}
3013
3014
3015/*----------------------------------------------------------------
3016* hfa384x_setreg_noswap
3017*
3018* Set the value of one of the MAC registers.  Done here
3019* because different PRISM2 MAC parts use different buses and such.
3020*
3021* Arguments:
3022*       hw      MAC part structure
3023*       val     Value to put in the register
3024*       reg     Register identifier (offset for I/O based i/f)
3025*
3026* Returns:
3027*       Nothing
3028----------------------------------------------------------------*/
3029static inline void
3030__hfa384x_setreg_noswap(hfa384x_t *hw, UINT16 val, UINT reg)
3031{
3032#if ((WLAN_HOSTIF == WLAN_PCMCIA) || (WLAN_HOSTIF == WLAN_PLX))
3033        wlan_outw( val, hw->iobase + reg);
3034        return;
3035#elif (WLAN_HOSTIF == WLAN_PCI)
3036        writew(val, hw->membase + reg);
3037        return;
3038#endif
3039}
3040
3041
3042static inline void hfa384x_events_all(hfa384x_t *hw)
3043{
3044        hfa384x_setreg(hw,
3045                       HFA384x_INT_NORMAL
3046#ifdef CMD_IRQ
3047                       | HFA384x_INTEN_CMD_SET(1)
3048#endif
3049                       ,
3050                       HFA384x_INTEN); 
3051
3052}
3053
3054static inline void hfa384x_events_nobap(hfa384x_t *hw)
3055{
3056        hfa384x_setreg(hw,
3057                        (HFA384x_INT_NORMAL & ~HFA384x_INT_BAP_OP)
3058#ifdef CMD_IRQ
3059                       | HFA384x_INTEN_CMD_SET(1)
3060#endif
3061                       ,
3062                       HFA384x_INTEN); 
3063
3064}
3065
3066#endif /* WLAN_HOSTIF != WLAN_USB */
3067#endif /* __KERNEL__ */
3068
3069#endif  /* _HFA384x_H */
Note: See TracBrowser for help on using the repository browser.