Home | History | Annotate | Download | only in net
      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 (at) 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 
     56 FILE_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 /*--------------------------------------------------------------------
    396 Configuration 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 /*--------------------------------------------------------------------
    423 Configuration 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 /*--------------------------------------------------------------------
    455 Configuration 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 /*--------------------------------------------------------------------
    486 Configuration 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 /*--------------------------------------------------------------------
    520 Configuration RIDs: Behavior Parameters
    521 --------------------------------------------------------------------*/
    522 #define		HFA384x_RID_ITICKTIME		((UINT16)0xFCE0)
    523 
    524 /*--------------------------------------------------------------------
    525 Configuration 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 /*----------------------------------------------------------------------
    532 Information 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 /*----------------------------------------------------------------------
    555 Information 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 /*--------------------------------------------------------------------
    580 Information 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 /*--------------------------------------------------------------------
    612 Information 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 /*--------------------------------------------------------------------
    647 Information 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 /*--------------------------------------------------------------------
    657 Information 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 /*--------------------------------------------------------------------
    668 API 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 /*--------------------------------------------------------------------
    728 PD 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 */
    930 typedef struct hfa384x_bytestr
    931 {
    932 	UINT16	len;
    933 	UINT8	data[0];
    934 } __WLAN_ATTRIB_PACK__ hfa384x_bytestr_t;
    935 
    936 typedef struct hfa384x_bytestr32
    937 {
    938 	UINT16	len;
    939 	UINT8	data[32];
    940 } __WLAN_ATTRIB_PACK__ hfa384x_bytestr32_t;
    941 
    942 /*--------------------------------------------------------------------
    943 Configuration Record Structures:
    944 	Network Parameters, Static Configuration Entities
    945 --------------------------------------------------------------------*/
    946 /* Prototype structure: all configuration record structures start with
    947 these members */
    948 
    949 typedef struct hfa384x_record
    950 {
    951 	UINT16	reclen;
    952 	UINT16	rid;
    953 } __WLAN_ATTRIB_PACK__ hfa384x_rec_t;
    954 
    955 typedef struct hfa384x_record16
    956 {
    957 	UINT16	reclen;
    958 	UINT16	rid;
    959 	UINT16	val;
    960 } __WLAN_ATTRIB_PACK__ hfa384x_rec16_t;
    961 
    962 typedef 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 ----------*/
    970 typedef struct hfa384x_compident
    971 {
    972 	UINT16	id;
    973 	UINT16	variant;
    974 	UINT16	major;
    975 	UINT16	minor;
    976 } __WLAN_ATTRIB_PACK__ hfa384x_compident_t;
    977 
    978 typedef 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 --*/
    988 typedef struct hfa384x_cnfPortType
    989 {
    990 	UINT16	cnfPortType;
    991 } __WLAN_ATTRIB_PACK__ hfa384x_cnfPortType_t;
    992 
    993 /*-- Configuration Record: cnfOwnMACAddress --*/
    994 typedef struct hfa384x_cnfOwnMACAddress
    995 {
    996 	UINT8	cnfOwnMACAddress[6];
    997 } __WLAN_ATTRIB_PACK__ hfa384x_cnfOwnMACAddress_t;
    998 
    999 /*-- Configuration Record: cnfDesiredSSID --*/
   1000 typedef struct hfa384x_cnfDesiredSSID
   1001 {
   1002 	UINT8	cnfDesiredSSID[34];
   1003 } __WLAN_ATTRIB_PACK__ hfa384x_cnfDesiredSSID_t;
   1004 
   1005 /*-- Configuration Record: cnfOwnChannel --*/
   1006 typedef struct hfa384x_cnfOwnChannel
   1007 {
   1008 	UINT16	cnfOwnChannel;
   1009 } __WLAN_ATTRIB_PACK__ hfa384x_cnfOwnChannel_t;
   1010 
   1011 /*-- Configuration Record: cnfOwnSSID --*/
   1012 typedef struct hfa384x_cnfOwnSSID
   1013 {
   1014 	UINT8	cnfOwnSSID[34];
   1015 } __WLAN_ATTRIB_PACK__ hfa384x_cnfOwnSSID_t;
   1016 
   1017 /*-- Configuration Record: cnfOwnATIMWindow --*/
   1018 typedef struct hfa384x_cnfOwnATIMWindow
   1019 {
   1020 	UINT16	cnfOwnATIMWindow;
   1021 } __WLAN_ATTRIB_PACK__ hfa384x_cnfOwnATIMWindow_t;
   1022 
   1023 /*-- Configuration Record: cnfSystemScale --*/
   1024 typedef struct hfa384x_cnfSystemScale
   1025 {
   1026 	UINT16	cnfSystemScale;
   1027 } __WLAN_ATTRIB_PACK__ hfa384x_cnfSystemScale_t;
   1028 
   1029 /*-- Configuration Record: cnfMaxDataLength --*/
   1030 typedef struct hfa384x_cnfMaxDataLength
   1031 {
   1032 	UINT16	cnfMaxDataLength;
   1033 } __WLAN_ATTRIB_PACK__ hfa384x_cnfMaxDataLength_t;
   1034 
   1035 /*-- Configuration Record: cnfWDSAddress --*/
   1036 typedef struct hfa384x_cnfWDSAddress
   1037 {
   1038 	UINT8	cnfWDSAddress[6];
   1039 } __WLAN_ATTRIB_PACK__ hfa384x_cnfWDSAddress_t;
   1040 
   1041 /*-- Configuration Record: cnfPMEnabled --*/
   1042 typedef struct hfa384x_cnfPMEnabled
   1043 {
   1044 	UINT16	cnfPMEnabled;
   1045 } __WLAN_ATTRIB_PACK__ hfa384x_cnfPMEnabled_t;
   1046 
   1047 /*-- Configuration Record: cnfPMEPS --*/
   1048 typedef struct hfa384x_cnfPMEPS
   1049 {
   1050 	UINT16	cnfPMEPS;
   1051 } __WLAN_ATTRIB_PACK__ hfa384x_cnfPMEPS_t;
   1052 
   1053 /*-- Configuration Record: cnfMulticastReceive --*/
   1054 typedef 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 --*/
   1065 typedef struct hfa384x_cnfMaxSleepDuration
   1066 {
   1067 	UINT16	cnfMaxSleepDuration;
   1068 } __WLAN_ATTRIB_PACK__ hfa384x_cnfMaxSleepDuration_t;
   1069 
   1070 /*-- Configuration Record: cnfPMHoldoverDuration --*/
   1071 typedef struct hfa384x_cnfPMHoldoverDuration
   1072 {
   1073 	UINT16	cnfPMHoldoverDuration;
   1074 } __WLAN_ATTRIB_PACK__ hfa384x_cnfPMHoldoverDuration_t;
   1075 
   1076 /*-- Configuration Record: cnfOwnName --*/
   1077 typedef struct hfa384x_cnfOwnName
   1078 {
   1079 	UINT8	cnfOwnName[34];
   1080 } __WLAN_ATTRIB_PACK__ hfa384x_cnfOwnName_t;
   1081 
   1082 /*-- Configuration Record: cnfOwnDTIMPeriod --*/
   1083 typedef struct hfa384x_cnfOwnDTIMPeriod
   1084 {
   1085 	UINT16	cnfOwnDTIMPeriod;
   1086 } __WLAN_ATTRIB_PACK__ hfa384x_cnfOwnDTIMPeriod_t;
   1087 
   1088 /*-- Configuration Record: cnfWDSAddress --*/
   1089 typedef struct hfa384x_cnfWDSAddressN
   1090 {
   1091 	UINT8	cnfWDSAddress[6];
   1092 } __WLAN_ATTRIB_PACK__ hfa384x_cnfWDSAddressN_t;
   1093 
   1094 /*-- Configuration Record: cnfMulticastPMBuffering --*/
   1095 typedef struct hfa384x_cnfMulticastPMBuffering
   1096 {
   1097 	UINT16	cnfMulticastPMBuffering;
   1098 } __WLAN_ATTRIB_PACK__ hfa384x_cnfMulticastPMBuffering_t;
   1099 
   1100 /*--------------------------------------------------------------------
   1101 Configuration Record Structures:
   1102 	Network Parameters, Dynamic Configuration Entities
   1103 --------------------------------------------------------------------*/
   1104 
   1105 /*-- Configuration Record: GroupAddresses --*/
   1106 typedef struct hfa384x_GroupAddresses
   1107 {
   1108 	UINT8	MACAddress[16][6];
   1109 } __WLAN_ATTRIB_PACK__ hfa384x_GroupAddresses_t;
   1110 
   1111 /*-- Configuration Record: CreateIBSS --*/
   1112 typedef 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 --*/
   1123 typedef struct hfa384x_FragmentationThreshold
   1124 {
   1125 	UINT16	FragmentationThreshold;
   1126 } __WLAN_ATTRIB_PACK__ hfa384x_FragmentationThreshold_t;
   1127 
   1128 /*-- Configuration Record: RTSThreshold --*/
   1129 typedef struct hfa384x_RTSThreshold
   1130 {
   1131 	UINT16	RTSThreshold;
   1132 } __WLAN_ATTRIB_PACK__ hfa384x_RTSThreshold_t;
   1133 
   1134 /*-- Configuration Record: TxRateControl --*/
   1135 typedef struct hfa384x_TxRateControl
   1136 {
   1137 	UINT16	TxRateControl;
   1138 } __WLAN_ATTRIB_PACK__ hfa384x_TxRateControl_t;
   1139 
   1140 /*-- Configuration Record: PromiscuousMode --*/
   1141 typedef struct hfa384x_PromiscuousMode
   1142 {
   1143 	UINT16	PromiscuousMode;
   1144 } __WLAN_ATTRIB_PACK__ hfa384x_PromiscuousMode_t;
   1145 
   1146 /*-- Configuration Record: ScanRequest (data portion only) --*/
   1147 typedef 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) --*/
   1154 typedef 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) --*/
   1162 typedef 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) --*/
   1169 typedef 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) --*/
   1177 typedef 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) --*/
   1185 typedef 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) --*/
   1192 typedef 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) --*/
   1202 typedef struct hfa384x_WPAData
   1203 {
   1204 	UINT16	datalen;
   1205         UINT8 	data[0]; // max 80
   1206 } __WLAN_ATTRIB_PACK__ hfa384x_WPAData_t;
   1207 
   1208 /*--------------------------------------------------------------------
   1209 Configuration Record Structures: Behavior Parameters
   1210 --------------------------------------------------------------------*/
   1211 
   1212 /*-- Configuration Record: TickTime --*/
   1213 typedef struct hfa384x_TickTime
   1214 {
   1215 	UINT16	TickTime;
   1216 } __WLAN_ATTRIB_PACK__ hfa384x_TickTime_t;
   1217 
   1218 /*--------------------------------------------------------------------
   1219 Information Record Structures: NIC Information
   1220 --------------------------------------------------------------------*/
   1221 
   1222 /*-- Information Record: MaxLoadTime --*/
   1223 typedef 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 */
   1230 typedef 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 --*/
   1238 typedef 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 --*/
   1247 typedef 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 --*/
   1257 typedef 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 --*/
   1267 typedef struct hfa384x_NICSerialNumber
   1268 {
   1269 	UINT8	NICSerialNumber[12];
   1270 } __WLAN_ATTRIB_PACK__ hfa384x_NICSerialNumber_t;
   1271 
   1272 /*-- Information Record: NICIdentity --*/
   1273 typedef 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 --*/
   1282 typedef 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 --*/
   1292 typedef 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 --*/
   1302 typedef 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
   1309 typedef 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 --*/
   1315 typedef struct hfa384x_ChannelList
   1316 {
   1317 	UINT16	ChannelList;
   1318 } __WLAN_ATTRIB_PACK__ hfa384x_ChannelList_t;
   1319 
   1320 /*-- Information Record: RegulatoryDomains --*/
   1321 typedef struct hfa384x_RegulatoryDomains
   1322 {
   1323 	UINT8	RegulatoryDomains[12];
   1324 } __WLAN_ATTRIB_PACK__ hfa384x_RegulatoryDomains_t;
   1325 
   1326 /*-- Information Record: TempType --*/
   1327 typedef struct hfa384x_TempType
   1328 {
   1329 	UINT16	TempType;
   1330 } __WLAN_ATTRIB_PACK__ hfa384x_TempType_t;
   1331 
   1332 /*-- Information Record: CIS --*/
   1333 typedef struct hfa384x_CIS
   1334 {
   1335 	UINT8	CIS[480];
   1336 } __WLAN_ATTRIB_PACK__ hfa384x_CIS_t;
   1337 
   1338 /*-- Information Record: STAIdentity --*/
   1339 typedef 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 --*/
   1348 typedef 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 --*/
   1358 typedef 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 /*--------------------------------------------------------------------
   1368 Information Record Structures: NIC Information
   1369 --------------------------------------------------------------------*/
   1370 
   1371 /*-- Information Record: PortStatus --*/
   1372 typedef 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 --*/
   1385 typedef struct hfa384x_CurrentSSID
   1386 {
   1387 	UINT8	CurrentSSID[34];
   1388 } __WLAN_ATTRIB_PACK__ hfa384x_CurrentSSID_t;
   1389 
   1390 /*-- Information Record: CurrentBSSID --*/
   1391 typedef struct hfa384x_CurrentBSSID
   1392 {
   1393 	UINT8	CurrentBSSID[6];
   1394 } __WLAN_ATTRIB_PACK__ hfa384x_CurrentBSSID_t;
   1395 
   1396 /*-- Information Record: commsquality --*/
   1397 typedef 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 --*/
   1405 typedef 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 --*/
   1413 typedef struct hfa384x_CurrentTxRate
   1414 {
   1415 	UINT16	CurrentTxRate;
   1416 } __WLAN_ATTRIB_PACK__ hfa384x_CurrentTxRate_t;
   1417 
   1418 /*-- Information Record: CurrentBeaconInterval --*/
   1419 typedef struct hfa384x_CurrentBeaconInterval
   1420 {
   1421 	UINT16	CurrentBeaconInterval;
   1422 } __WLAN_ATTRIB_PACK__ hfa384x_CurrentBeaconInterval_t;
   1423 
   1424 /*-- Information Record: CurrentScaleThresholds --*/
   1425 typedef 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 --*/
   1435 typedef struct hfa384x_ProtocolRspTime
   1436 {
   1437 	UINT16	ProtocolRspTime;
   1438 } __WLAN_ATTRIB_PACK__ hfa384x_ProtocolRspTime_t;
   1439 
   1440 /*-- Information Record: ShortRetryLimit --*/
   1441 typedef struct hfa384x_ShortRetryLimit
   1442 {
   1443 	UINT16	ShortRetryLimit;
   1444 } __WLAN_ATTRIB_PACK__ hfa384x_ShortRetryLimit_t;
   1445 
   1446 /*-- Information Record: LongRetryLimit --*/
   1447 typedef struct hfa384x_LongRetryLimit
   1448 {
   1449 	UINT16	LongRetryLimit;
   1450 } __WLAN_ATTRIB_PACK__ hfa384x_LongRetryLimit_t;
   1451 
   1452 /*-- Information Record: MaxTransmitLifetime --*/
   1453 typedef struct hfa384x_MaxTransmitLifetime
   1454 {
   1455 	UINT16	MaxTransmitLifetime;
   1456 } __WLAN_ATTRIB_PACK__ hfa384x_MaxTransmitLifetime_t;
   1457 
   1458 /*-- Information Record: MaxReceiveLifetime --*/
   1459 typedef struct hfa384x_MaxReceiveLifetime
   1460 {
   1461 	UINT16	MaxReceiveLifetime;
   1462 } __WLAN_ATTRIB_PACK__ hfa384x_MaxReceiveLifetime_t;
   1463 
   1464 /*-- Information Record: CFPollable --*/
   1465 typedef struct hfa384x_CFPollable
   1466 {
   1467 	UINT16	CFPollable;
   1468 } __WLAN_ATTRIB_PACK__ hfa384x_CFPollable_t;
   1469 
   1470 /*-- Information Record: AuthenticationAlgorithms --*/
   1471 typedef 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 --*/
   1479 typedef struct hfa384x_AuthenticationAlgorithms_data
   1480 {
   1481 	UINT16	AuthenticationType;
   1482 	UINT16	TypeEnabled;
   1483 } __WLAN_ATTRIB_PACK__ hfa384x_AuthenticationAlgorithms_data_t;
   1484 
   1485 /*-- Information Record: PrivacyOptionImplemented --*/
   1486 typedef struct hfa384x_PrivacyOptionImplemented
   1487 {
   1488 	UINT16	PrivacyOptionImplemented;
   1489 } __WLAN_ATTRIB_PACK__ hfa384x_PrivacyOptionImplemented_t;
   1490 
   1491 /*-- Information Record: OwnMACAddress --*/
   1492 typedef struct hfa384x_OwnMACAddress
   1493 {
   1494 	UINT8	OwnMACAddress[6];
   1495 } __WLAN_ATTRIB_PACK__ hfa384x_OwnMACAddress_t;
   1496 
   1497 /*-- Information Record: PCFInfo --*/
   1498 typedef 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) --*/
   1507 typedef 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 /*--------------------------------------------------------------------
   1516 Information Record Structures: Modem Information Records
   1517 --------------------------------------------------------------------*/
   1518 
   1519 /*-- Information Record: PHYType --*/
   1520 typedef struct hfa384x_PHYType
   1521 {
   1522 	UINT16	PHYType;
   1523 } __WLAN_ATTRIB_PACK__ hfa384x_PHYType_t;
   1524 
   1525 /*-- Information Record: CurrentChannel --*/
   1526 typedef struct hfa384x_CurrentChannel
   1527 {
   1528 	UINT16	CurrentChannel;
   1529 } __WLAN_ATTRIB_PACK__ hfa384x_CurrentChannel_t;
   1530 
   1531 /*-- Information Record: CurrentPowerState --*/
   1532 typedef struct hfa384x_CurrentPowerState
   1533 {
   1534 	UINT16	CurrentPowerState;
   1535 } __WLAN_ATTRIB_PACK__ hfa384x_CurrentPowerState_t;
   1536 
   1537 /*-- Information Record: CCAMode --*/
   1538 typedef struct hfa384x_CCAMode
   1539 {
   1540 	UINT16	CCAMode;
   1541 } __WLAN_ATTRIB_PACK__ hfa384x_CCAMode_t;
   1542 
   1543 /*-- Information Record: SupportedDataRates --*/
   1544 typedef struct hfa384x_SupportedDataRates
   1545 {
   1546 	UINT8	SupportedDataRates[10];
   1547 } __WLAN_ATTRIB_PACK__ hfa384x_SupportedDataRates_t;
   1548 
   1549 /*-- Information Record: LFOStatus --*/
   1550 typedef 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 --*/
   1564 typedef 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 
   1576 FRAME DESCRIPTORS: Offsets
   1577 
   1578 ----------------------------------------------------------------------
   1579 Control 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 /*--------------------------------------------------------------------
   1591 802.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 /*--------------------------------------------------------------------
   1602 802.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 /*--------------------------------------------------------------------
   1609 FRAME STRUCTURES: Communication Frames
   1610 ----------------------------------------------------------------------
   1611 Communication Frames: Transmit Frames
   1612 --------------------------------------------------------------------*/
   1613 /*-- Communication Frame: Transmit Frame Structure --*/
   1614 typedef 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 /*--------------------------------------------------------------------
   1642 Communication 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 /*--------------------------------------------------------------------
   1660 Communication 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 /*--------------------------------------------------------------------
   1695 Communication Frames: Receive Frames
   1696 --------------------------------------------------------------------*/
   1697 /*-- Communication Frame: Receive Frame Structure --*/
   1698 typedef 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 /*--------------------------------------------------------------------
   1726 Communication 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 /*--------------------------------------------------------------------
   1739 Communication 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 ----------------------------------------------------------------------
   1750 Information 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 /*--------------------------------------------------------------------
   1767 Information Frames Structures
   1768 ----------------------------------------------------------------------
   1769 Information Frames: Notification Frame Structures
   1770 --------------------------------------------------------------------*/
   1771 /*--  Notification Frame,MAC Mgmt: Handover Address --*/
   1772 typedef 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 --*/
   1780 typedef 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 
   1805 typedef 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--*/
   1831 typedef 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 
   1844 typedef 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--*/
   1853 typedef 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 
   1864 typedef 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--*/
   1872 typedef 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 
   1886 typedef 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 
   1904 typedef 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 
   1918 typedef 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 
   1930 typedef 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 
   1938 typedef 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 
   1951 typedef 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 
   1959 typedef struct hfa384x_PSUserCount
   1960 {
   1961 	UINT16	usercnt;
   1962 } __WLAN_ATTRIB_PACK__ hfa384x_PSUserCount_t;
   1963 
   1964 typedef 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 ---------------*/
   1971 typedef 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 
   1984 typedef 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 /*--------------------------------------------------------------------
   1993 USB 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 
   2023 typedef 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 
   2028 typedef 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 
   2037 typedef 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 
   2044 typedef 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 
   2051 typedef 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 
   2059 typedef 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 
   2070 typedef 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 
   2075 typedef struct hfa384x_usb_infofrm {
   2076 	UINT16			type;
   2077 	hfa384x_InfFrame_t	info;
   2078 } __WLAN_ATTRIB_PACK__ hfa384x_usb_infofrm_t;
   2079 
   2080 typedef 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 
   2088 typedef hfa384x_usb_cmdresp_t hfa384x_usb_wridresp_t;
   2089 
   2090 typedef 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 
   2097 typedef hfa384x_usb_cmdresp_t hfa384x_usb_wmemresp_t;
   2098 
   2099 typedef 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 
   2105 typedef struct hfa384x_usb_bufavail {
   2106 	UINT16		type;
   2107 	UINT16		frmlen;
   2108 } __WLAN_ATTRIB_PACK__ hfa384x_usb_bufavail_t;
   2109 
   2110 typedef 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 
   2118 typedef 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 
   2128 typedef 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 /*--------------------------------------------------------------------
   2146 PD record structures.
   2147 --------------------------------------------------------------------*/
   2148 
   2149 typedef struct hfa384x_pdr_pcb_partnum
   2150 {
   2151 	UINT8	num[8];
   2152 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_pcb_partnum_t;
   2153 
   2154 typedef struct hfa384x_pdr_pcb_tracenum
   2155 {
   2156 	UINT8	num[8];
   2157 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_pcb_tracenum_t;
   2158 
   2159 typedef struct hfa384x_pdr_nic_serial
   2160 {
   2161 	UINT8	num[12];
   2162 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_nic_serial_t;
   2163 
   2164 typedef 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 
   2183 typedef struct hfa384x_pdr_nic_ramsize
   2184 {
   2185 	UINT8	size[12]; /* units of KB */
   2186 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_nic_ramsize_t;
   2187 
   2188 typedef 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 
   2196 typedef 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 
   2204 typedef 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 
   2213 typedef struct hfa384x_pdr_refdac_measurements
   2214 {
   2215 	UINT16	value[0];
   2216 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_refdac_measurements_t;
   2217 
   2218 typedef struct hfa384x_pdr_vgdac_measurements
   2219 {
   2220 	UINT16	value[0];
   2221 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_vgdac_measurements_t;
   2222 
   2223 typedef struct hfa384x_pdr_level_comp_measurements
   2224 {
   2225 	UINT16	value[0];
   2226 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_level_compc_measurements_t;
   2227 
   2228 typedef struct hfa384x_pdr_mac_address
   2229 {
   2230 	UINT8	addr[6];
   2231 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_mac_address_t;
   2232 
   2233 typedef struct hfa384x_pdr_mkk_callname
   2234 {
   2235 	UINT8	callname[8];
   2236 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_mkk_callname_t;
   2237 
   2238 typedef struct hfa384x_pdr_regdomain
   2239 {
   2240 	UINT16	numdomains;
   2241 	UINT16	domain[5];
   2242 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_regdomain_t;
   2243 
   2244 typedef struct hfa384x_pdr_allowed_channel
   2245 {
   2246 	UINT16	ch_bitmap;
   2247 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_allowed_channel_t;
   2248 
   2249 typedef struct hfa384x_pdr_default_channel
   2250 {
   2251 	UINT16	channel;
   2252 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_default_channel_t;
   2253 
   2254 typedef struct hfa384x_pdr_privacy_option
   2255 {
   2256 	UINT16	available;
   2257 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_privacy_option_t;
   2258 
   2259 typedef struct hfa384x_pdr_temptype
   2260 {
   2261 	UINT16	type;
   2262 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_temptype_t;
   2263 
   2264 typedef struct hfa384x_pdr_refdac_setup
   2265 {
   2266 	UINT16	ch_value[14];
   2267 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_refdac_setup_t;
   2268 
   2269 typedef struct hfa384x_pdr_vgdac_setup
   2270 {
   2271 	UINT16	ch_value[14];
   2272 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_vgdac_setup_t;
   2273 
   2274 typedef struct hfa384x_pdr_level_comp_setup
   2275 {
   2276 	UINT16	ch_value[14];
   2277 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_level_comp_setup_t;
   2278 
   2279 typedef struct hfa384x_pdr_trimdac_setup
   2280 {
   2281 	UINT16	trimidac;
   2282 	UINT16	trimqdac;
   2283 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_trimdac_setup_t;
   2284 
   2285 typedef struct hfa384x_pdr_ifr_setting
   2286 {
   2287 	UINT16	value[3];
   2288 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_ifr_setting_t;
   2289 
   2290 typedef struct hfa384x_pdr_rfr_setting
   2291 {
   2292 	UINT16	value[3];
   2293 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_rfr_setting_t;
   2294 
   2295 typedef struct hfa384x_pdr_hfa3861_baseline
   2296 {
   2297 	UINT16	value[50];
   2298 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_hfa3861_baseline_t;
   2299 
   2300 typedef struct hfa384x_pdr_hfa3861_shadow
   2301 {
   2302 	UINT32	value[32];
   2303 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_hfa3861_shadow_t;
   2304 
   2305 typedef struct hfa384x_pdr_hfa3861_ifrf
   2306 {
   2307 	UINT32	value[20];
   2308 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_hfa3861_ifrf_t;
   2309 
   2310 typedef struct hfa384x_pdr_hfa3861_chcalsp
   2311 {
   2312 	UINT16	value[14];
   2313 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_hfa3861_chcalsp_t;
   2314 
   2315 typedef struct hfa384x_pdr_hfa3861_chcali
   2316 {
   2317 	UINT16	value[17];
   2318 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_hfa3861_chcali_t;
   2319 
   2320 typedef struct hfa384x_pdr_hfa3861_nic_config
   2321 {
   2322 	UINT16	config_bitmap;
   2323 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_nic_config_t;
   2324 
   2325 typedef struct hfa384x_pdr_hfo_delay
   2326 {
   2327 	UINT8   hfo_delay;
   2328 } __WLAN_ATTRIB_PACK__ hfa384x_hfo_delay_t;
   2329 
   2330 typedef struct hfa384x_pdr_hfa3861_manf_testsp
   2331 {
   2332 	UINT16	value[30];
   2333 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_hfa3861_manf_testsp_t;
   2334 
   2335 typedef struct hfa384x_pdr_hfa3861_manf_testi
   2336 {
   2337 	UINT16	value[30];
   2338 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_hfa3861_manf_testi_t;
   2339 
   2340 typedef struct hfa384x_end_of_pda
   2341 {
   2342 	UINT16	crc;
   2343 } __WLAN_ATTRIB_PACK__ hfa384x_pdr_end_of_pda_t;
   2344 
   2345 typedef 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 --------------------------------------------------------------------*/
   2394 typedef 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  */
   2411 typedef hfa384x_cmdresult_t hfa384x_wridresult_t;
   2412 typedef hfa384x_cmdresult_t hfa384x_wmemresult_t;
   2413 
   2414 typedef struct hfa384x_rridresult
   2415 {
   2416 	UINT16		rid;
   2417 	const void	*riddata;
   2418 	UINT		riddata_len;
   2419 } hfa384x_rridresult_t;
   2420 
   2421 enum 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 };
   2432 typedef enum ctlx_state  CTLX_STATE;
   2433 
   2434 struct hfa384x_usbctlx;
   2435 struct hfa384x;
   2436 
   2437 typedef void (*ctlx_cmdcb_t)( struct hfa384x*, const struct hfa384x_usbctlx* );
   2438 
   2439 typedef void (*ctlx_usercb_t)(
   2440 	struct hfa384x	*hw,
   2441 	void		*ctlxresult,
   2442 	void		*usercb_data);
   2443 
   2444 typedef 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 
   2464 typedef 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 
   2474 typedef 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 */
   2510 typedef 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 
   2517 typedef 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 
   2526 typedef 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)
   2693 void
   2694 hfa384x_create(
   2695 	hfa384x_t *hw,
   2696 	struct usb_device *usb);
   2697 #else
   2698 void
   2699 hfa384x_create(
   2700 	hfa384x_t *hw,
   2701 	UINT irq,
   2702 	UINT32 iobase,
   2703 	UINT8 __iomem *membase);
   2704 #endif
   2705 
   2706 void hfa384x_destroy(hfa384x_t *hw);
   2707 
   2708 irqreturn_t
   2709 hfa384x_interrupt(int irq, void *dev_id PT_REGS);
   2710 int
   2711 hfa384x_corereset( hfa384x_t *hw, int holdtime, int settletime, int genesis);
   2712 int
   2713 hfa384x_drvr_chinforesults( hfa384x_t *hw);
   2714 int
   2715 hfa384x_drvr_commtallies( hfa384x_t *hw);
   2716 int
   2717 hfa384x_drvr_disable(hfa384x_t *hw, UINT16 macport);
   2718 int
   2719 hfa384x_drvr_enable(hfa384x_t *hw, UINT16 macport);
   2720 int
   2721 hfa384x_drvr_flashdl_enable(hfa384x_t *hw);
   2722 int
   2723 hfa384x_drvr_flashdl_disable(hfa384x_t *hw);
   2724 int
   2725 hfa384x_drvr_flashdl_write(hfa384x_t *hw, UINT32 daddr, void* buf, UINT32 len);
   2726 int
   2727 hfa384x_drvr_getconfig(hfa384x_t *hw, UINT16 rid, void *buf, UINT16 len);
   2728 int
   2729 hfa384x_drvr_handover( hfa384x_t *hw, UINT8 *addr);
   2730 int
   2731 hfa384x_drvr_hostscanresults( hfa384x_t *hw);
   2732 int
   2733 hfa384x_drvr_low_level(hfa384x_t *hw, hfa384x_metacmd_t *cmd);
   2734 int
   2735 hfa384x_drvr_mmi_read(hfa384x_t *hw, UINT32 address, UINT32 *result);
   2736 int
   2737 hfa384x_drvr_mmi_write(hfa384x_t *hw, UINT32 address, UINT32 data);
   2738 int
   2739 hfa384x_drvr_ramdl_enable(hfa384x_t *hw, UINT32 exeaddr);
   2740 int
   2741 hfa384x_drvr_ramdl_disable(hfa384x_t *hw);
   2742 int
   2743 hfa384x_drvr_ramdl_write(hfa384x_t *hw, UINT32 daddr, void* buf, UINT32 len);
   2744 int
   2745 hfa384x_drvr_readpda(hfa384x_t *hw, void *buf, UINT len);
   2746 int
   2747 hfa384x_drvr_scanresults( hfa384x_t *hw);
   2748 
   2749 int
   2750 hfa384x_drvr_setconfig(hfa384x_t *hw, UINT16 rid, void *buf, UINT16 len);
   2751 
   2752 static inline int
   2753 hfa384x_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 
   2763 static inline int
   2764 hfa384x_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 
   2776 static inline int
   2777 hfa384x_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 
   2783 static inline int
   2784 hfa384x_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)
   2791 int
   2792 hfa384x_drvr_getconfig_async(hfa384x_t     *hw,
   2793                               UINT16        rid,
   2794                               ctlx_usercb_t usercb,
   2795                               void          *usercb_data);
   2796 
   2797 int
   2798 hfa384x_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
   2805 static inline int
   2806 hfa384x_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 
   2815 static inline int
   2816 hfa384x_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 
   2823 static inline int
   2824 hfa384x_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 
   2832 int
   2833 hfa384x_drvr_start(hfa384x_t *hw);
   2834 int
   2835 hfa384x_drvr_stop(hfa384x_t *hw);
   2836 int
   2837 hfa384x_drvr_txframe(hfa384x_t *hw, struct sk_buff *skb, p80211_hdr_t *p80211_hdr, p80211_metawep_t *p80211_wep);
   2838 void
   2839 hfa384x_tx_timeout(wlandevice_t *wlandev);
   2840 
   2841 int
   2842 hfa384x_cmd_initialize(hfa384x_t *hw);
   2843 int
   2844 hfa384x_cmd_enable(hfa384x_t *hw, UINT16 macport);
   2845 int
   2846 hfa384x_cmd_disable(hfa384x_t *hw, UINT16 macport);
   2847 int
   2848 hfa384x_cmd_diagnose(hfa384x_t *hw);
   2849 int
   2850 hfa384x_cmd_allocate(hfa384x_t *hw, UINT16 len);
   2851 int
   2852 hfa384x_cmd_transmit(hfa384x_t *hw, UINT16 reclaim, UINT16 qos, UINT16 fid);
   2853 int
   2854 hfa384x_cmd_clearpersist(hfa384x_t *hw, UINT16 fid);
   2855 int
   2856 hfa384x_cmd_notify(hfa384x_t *hw, UINT16 reclaim, UINT16 fid, void *buf, UINT16 len);
   2857 int
   2858 hfa384x_cmd_inquire(hfa384x_t *hw, UINT16 fid);
   2859 int
   2860 hfa384x_cmd_access(hfa384x_t *hw, UINT16 write, UINT16 rid, void *buf, UINT16 len);
   2861 int
   2862 hfa384x_cmd_monitor(hfa384x_t *hw, UINT16 enable);
   2863 int
   2864 hfa384x_cmd_download(
   2865 	hfa384x_t *hw,
   2866 	UINT16 mode,
   2867 	UINT16 lowaddr,
   2868 	UINT16 highaddr,
   2869 	UINT16 codelen);
   2870 int
   2871 hfa384x_cmd_aux_enable(hfa384x_t *hw, int force);
   2872 int
   2873 hfa384x_cmd_aux_disable(hfa384x_t *hw);
   2874 int
   2875 hfa384x_copy_from_bap(
   2876 	hfa384x_t *hw,
   2877 	UINT16	bap,
   2878 	UINT16	id,
   2879 	UINT16	offset,
   2880 	void	*buf,
   2881 	UINT	len);
   2882 int
   2883 hfa384x_copy_to_bap(
   2884 	hfa384x_t *hw,
   2885 	UINT16	bap,
   2886 	UINT16	id,
   2887 	UINT16	offset,
   2888 	void	*buf,
   2889 	UINT	len);
   2890 void
   2891 hfa384x_copy_from_aux(
   2892 	hfa384x_t *hw,
   2893 	UINT32	cardaddr,
   2894 	UINT32	auxctl,
   2895 	void	*buf,
   2896 	UINT	len);
   2897 void
   2898 hfa384x_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 
   2914 static inline UINT16
   2915 __hfa384x_getreg(hfa384x_t *hw, UINT reg);
   2916 
   2917 static inline void
   2918 __hfa384x_setreg(hfa384x_t *hw, UINT16 val, UINT reg);
   2919 
   2920 static inline UINT16
   2921 __hfa384x_getreg_noswap(hfa384x_t *hw, UINT reg);
   2922 
   2923 static 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 ----------------------------------------------------------------*/
   2952 static 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 ----------------------------------------------------------------*/
   2978 static 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 ----------------------------------------------------------------*/
   3004 static 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 ----------------------------------------------------------------*/
   3029 static 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 
   3042 static 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 
   3054 static 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