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 */
3070