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