1 /* 2 * Merged with mainline rtllib.h in Aug 2004. Original ieee802_11 3 * remains copyright by the original authors 4 * 5 * Portions of the merged code are based on Host AP (software wireless 6 * LAN access point) driver for Intersil Prism2/2.5/3. 7 * 8 * Copyright (c) 2001-2002, SSH Communications Security Corp and Jouni Malinen 9 * <jkmaline@cc.hut.fi> 10 * Copyright (c) 2002-2003, Jouni Malinen <jkmaline@cc.hut.fi> 11 * 12 * Adaption to a generic IEEE 802.11 stack by James Ketrenos 13 * <jketreno@linux.intel.com> 14 * Copyright (c) 2004, Intel Corporation 15 * 16 * Modified for Realtek's wi-fi cards by Andrea Merello 17 * <andreamrl@tiscali.it> 18 * 19 * This program is free software; you can redistribute it and/or modify 20 * it under the terms of the GNU General Public License version 2 as 21 * published by the Free Software Foundation. See README and COPYING for 22 * more details. 23 */ 24 #ifndef RTLLIB_H 25 #define RTLLIB_H 26 #include <linux/if_ether.h> /* ETH_ALEN */ 27 #include <linux/kernel.h> /* ARRAY_SIZE */ 28 #include <linux/module.h> 29 #include <linux/interrupt.h> 30 #include <linux/jiffies.h> 31 #include <linux/timer.h> 32 #include <linux/sched.h> 33 #include <linux/semaphore.h> 34 35 #include <linux/delay.h> 36 #include <linux/wireless.h> 37 38 #include "rtllib_debug.h" 39 #include "rtl819x_HT.h" 40 #include "rtl819x_BA.h" 41 #include "rtl819x_TS.h" 42 43 #include <linux/netdevice.h> 44 #include <linux/if_arp.h> /* ARPHRD_ETHER */ 45 #include <net/lib80211.h> 46 47 #define MAX_PRECMD_CNT 16 48 #define MAX_RFDEPENDCMD_CNT 16 49 #define MAX_POSTCMD_CNT 16 50 51 #ifndef WIRELESS_SPY 52 #define WIRELESS_SPY 53 #endif 54 #include <net/iw_handler.h> 55 56 #ifndef IW_MODE_MONITOR 57 #define IW_MODE_MONITOR 6 58 #endif 59 60 #ifndef IWEVCUSTOM 61 #define IWEVCUSTOM 0x8c02 62 #endif 63 64 #ifndef IW_CUSTOM_MAX 65 /* Max number of char in custom event - use multiple of them if needed */ 66 #define IW_CUSTOM_MAX 256 /* In bytes */ 67 #endif 68 69 #ifndef container_of 70 /** 71 * container_of - cast a member of a structure out to the containing structure 72 * 73 * @ptr: the pointer to the member. 74 * @type: the type of the container struct this is embedded in. 75 * @member: the name of the member within the struct. 76 * 77 */ 78 #define container_of(ptr, type, member) ({ \ 79 const typeof(((type *)0)->member)*__mptr = (ptr); \ 80 (type *)((char *)__mptr - offsetof(type, member)); }) 81 #endif 82 83 #define skb_tail_pointer_rsl(skb) skb_tail_pointer(skb) 84 85 #define EXPORT_SYMBOL_RSL(x) EXPORT_SYMBOL(x) 86 87 88 #define queue_delayed_work_rsl(x, y, z) queue_delayed_work(x, y, z) 89 #define INIT_DELAYED_WORK_RSL(x, y, z) INIT_DELAYED_WORK(x, y) 90 91 #define queue_work_rsl(x, y) queue_work(x, y) 92 #define INIT_WORK_RSL(x, y, z) INIT_WORK(x, y) 93 94 #define container_of_work_rsl(x, y, z) container_of(x, y, z) 95 #define container_of_dwork_rsl(x, y, z) \ 96 container_of(container_of(x, struct delayed_work, work), y, z) 97 98 #define iwe_stream_add_event_rsl(info, start, stop, iwe, len) \ 99 iwe_stream_add_event(info, start, stop, iwe, len) 100 101 #define iwe_stream_add_point_rsl(info, start, stop, iwe, p) \ 102 iwe_stream_add_point(info, start, stop, iwe, p) 103 104 #define usb_alloc_urb_rsl(x, y) usb_alloc_urb(x, y) 105 #define usb_submit_urb_rsl(x, y) usb_submit_urb(x, y) 106 107 static inline void *netdev_priv_rsl(struct net_device *dev) 108 { 109 return netdev_priv(dev); 110 } 111 112 #define KEY_TYPE_NA 0x0 113 #define KEY_TYPE_WEP40 0x1 114 #define KEY_TYPE_TKIP 0x2 115 #define KEY_TYPE_CCMP 0x4 116 #define KEY_TYPE_WEP104 0x5 117 /* added for rtl819x tx procedure */ 118 #define MAX_QUEUE_SIZE 0x10 119 120 #define BK_QUEUE 0 121 #define BE_QUEUE 1 122 #define VI_QUEUE 2 123 #define VO_QUEUE 3 124 #define HCCA_QUEUE 4 125 #define TXCMD_QUEUE 5 126 #define MGNT_QUEUE 6 127 #define HIGH_QUEUE 7 128 #define BEACON_QUEUE 8 129 130 #define LOW_QUEUE BE_QUEUE 131 #define NORMAL_QUEUE MGNT_QUEUE 132 133 #ifndef IW_MODE_MESH 134 #define IW_MODE_MESH 7 135 #endif 136 #define AMSDU_SUBHEADER_LEN 14 137 #define SWRF_TIMEOUT 50 138 139 #define IE_CISCO_FLAG_POSITION 0x08 140 #define SUPPORT_CKIP_MIC 0x08 141 #define SUPPORT_CKIP_PK 0x10 142 #define RT_RF_OFF_LEVL_ASPM BIT0 143 #define RT_RF_OFF_LEVL_CLK_REQ BIT1 144 #define RT_RF_OFF_LEVL_PCI_D3 BIT2 145 #define RT_RF_OFF_LEVL_HALT_NIC BIT3 146 #define RT_RF_OFF_LEVL_FREE_FW BIT4 147 #define RT_RF_OFF_LEVL_FW_32K BIT5 148 #define RT_RF_PS_LEVEL_ALWAYS_ASPM BIT6 149 #define RT_RF_LPS_DISALBE_2R BIT30 150 #define RT_RF_LPS_LEVEL_ASPM BIT31 151 #define RT_IN_PS_LEVEL(pPSC, _PS_FLAG) \ 152 ((pPSC->CurPsLevel & _PS_FLAG) ? true : false) 153 #define RT_CLEAR_PS_LEVEL(pPSC, _PS_FLAG) \ 154 (pPSC->CurPsLevel &= (~(_PS_FLAG))) 155 #define RT_SET_PS_LEVEL(pPSC, _PS_FLAG) (pPSC->CurPsLevel |= _PS_FLAG) 156 157 /* defined for skb cb field */ 158 /* At most 28 byte */ 159 struct cb_desc { 160 /* Tx Desc Related flags (8-9) */ 161 u8 bLastIniPkt:1; 162 u8 bCmdOrInit:1; 163 u8 bFirstSeg:1; 164 u8 bLastSeg:1; 165 u8 bEncrypt:1; 166 u8 bTxDisableRateFallBack:1; 167 u8 bTxUseDriverAssingedRate:1; 168 u8 bHwSec:1; 169 170 u8 nStuckCount; 171 172 /* Tx Firmware Relaged flags (10-11)*/ 173 u8 bCTSEnable:1; 174 u8 bRTSEnable:1; 175 u8 bUseShortGI:1; 176 u8 bUseShortPreamble:1; 177 u8 bTxEnableFwCalcDur:1; 178 u8 bAMPDUEnable:1; 179 u8 bRTSSTBC:1; 180 u8 RTSSC:1; 181 182 u8 bRTSBW:1; 183 u8 bPacketBW:1; 184 u8 bRTSUseShortPreamble:1; 185 u8 bRTSUseShortGI:1; 186 u8 bMulticast:1; 187 u8 bBroadcast:1; 188 u8 drv_agg_enable:1; 189 u8 reserved2:1; 190 191 /* Tx Desc related element(12-19) */ 192 u8 rata_index; 193 u8 queue_index; 194 u16 txbuf_size; 195 u8 RATRIndex; 196 u8 bAMSDU:1; 197 u8 bFromAggrQ:1; 198 u8 reserved6:6; 199 u8 macId; 200 u8 priority; 201 202 /* Tx firmware related element(20-27) */ 203 u8 data_rate; 204 u8 rts_rate; 205 u8 ampdu_factor; 206 u8 ampdu_density; 207 u8 DrvAggrNum; 208 u8 bdhcp; 209 u16 pkt_size; 210 u8 bIsSpecialDataFrame; 211 212 u8 bBTTxPacket; 213 u8 bIsBTProbRsp; 214 }; 215 216 enum sw_chnl_cmd_id { 217 CmdID_End, 218 CmdID_SetTxPowerLevel, 219 CmdID_BBRegWrite10, 220 CmdID_WritePortUlong, 221 CmdID_WritePortUshort, 222 CmdID_WritePortUchar, 223 CmdID_RF_WriteReg, 224 }; 225 226 struct sw_chnl_cmd { 227 enum sw_chnl_cmd_id CmdID; 228 u32 Para1; 229 u32 Para2; 230 u32 msDelay; 231 } __packed; 232 233 /*--------------------------Define -------------------------------------------*/ 234 #define MGN_1M 0x02 235 #define MGN_2M 0x04 236 #define MGN_5_5M 0x0b 237 #define MGN_11M 0x16 238 239 #define MGN_6M 0x0c 240 #define MGN_9M 0x12 241 #define MGN_12M 0x18 242 #define MGN_18M 0x24 243 #define MGN_24M 0x30 244 #define MGN_36M 0x48 245 #define MGN_48M 0x60 246 #define MGN_54M 0x6c 247 248 #define MGN_MCS0 0x80 249 #define MGN_MCS1 0x81 250 #define MGN_MCS2 0x82 251 #define MGN_MCS3 0x83 252 #define MGN_MCS4 0x84 253 #define MGN_MCS5 0x85 254 #define MGN_MCS6 0x86 255 #define MGN_MCS7 0x87 256 #define MGN_MCS8 0x88 257 #define MGN_MCS9 0x89 258 #define MGN_MCS10 0x8a 259 #define MGN_MCS11 0x8b 260 #define MGN_MCS12 0x8c 261 #define MGN_MCS13 0x8d 262 #define MGN_MCS14 0x8e 263 #define MGN_MCS15 0x8f 264 #define MGN_MCS0_SG 0x90 265 #define MGN_MCS1_SG 0x91 266 #define MGN_MCS2_SG 0x92 267 #define MGN_MCS3_SG 0x93 268 #define MGN_MCS4_SG 0x94 269 #define MGN_MCS5_SG 0x95 270 #define MGN_MCS6_SG 0x96 271 #define MGN_MCS7_SG 0x97 272 #define MGN_MCS8_SG 0x98 273 #define MGN_MCS9_SG 0x99 274 #define MGN_MCS10_SG 0x9a 275 #define MGN_MCS11_SG 0x9b 276 #define MGN_MCS12_SG 0x9c 277 #define MGN_MCS13_SG 0x9d 278 #define MGN_MCS14_SG 0x9e 279 #define MGN_MCS15_SG 0x9f 280 281 282 enum _ReasonCode { 283 unspec_reason = 0x1, 284 auth_not_valid = 0x2, 285 deauth_lv_ss = 0x3, 286 inactivity = 0x4, 287 ap_overload = 0x5, 288 class2_err = 0x6, 289 class3_err = 0x7, 290 disas_lv_ss = 0x8, 291 asoc_not_auth = 0x9, 292 293 mic_failure = 0xe, 294 295 invalid_IE = 0x0d, 296 four_way_tmout = 0x0f, 297 two_way_tmout = 0x10, 298 IE_dismatch = 0x11, 299 invalid_Gcipher = 0x12, 300 invalid_Pcipher = 0x13, 301 invalid_AKMP = 0x14, 302 unsup_RSNIEver = 0x15, 303 invalid_RSNIE = 0x16, 304 auth_802_1x_fail = 0x17, 305 ciper_reject = 0x18, 306 307 QoS_unspec = 0x20, 308 QAP_bandwidth = 0x21, 309 poor_condition = 0x22, 310 no_facility = 0x23, 311 req_declined = 0x25, 312 invalid_param = 0x26, 313 req_not_honored = 0x27, 314 TS_not_created = 0x2F, 315 DL_not_allowed = 0x30, 316 dest_not_exist = 0x31, 317 dest_not_QSTA = 0x32, 318 }; 319 320 enum hal_def_variable { 321 HAL_DEF_TPC_ENABLE, 322 HAL_DEF_INIT_GAIN, 323 HAL_DEF_PROT_IMP_MODE, 324 HAL_DEF_HIGH_POWER_MECHANISM, 325 HAL_DEF_RATE_ADAPTIVE_MECHANISM, 326 HAL_DEF_ANTENNA_DIVERSITY_MECHANISM, 327 HAL_DEF_LED, 328 HAL_DEF_CW_MAX_MIN, 329 330 HAL_DEF_WOWLAN, 331 HAL_DEF_ENDPOINTS, 332 HAL_DEF_MIN_TX_POWER_DBM, 333 HAL_DEF_MAX_TX_POWER_DBM, 334 HW_DEF_EFUSE_REPG_SECTION1_FLAG, 335 HW_DEF_EFUSE_REPG_DATA, 336 HW_DEF_GPIO, 337 HAL_DEF_PCI_SUPPORT_ASPM, 338 HAL_DEF_THERMAL_VALUE, 339 HAL_DEF_USB_IN_TOKEN_REV, 340 }; 341 342 enum hw_variables { 343 HW_VAR_ETHER_ADDR, 344 HW_VAR_MULTICAST_REG, 345 HW_VAR_BASIC_RATE, 346 HW_VAR_BSSID, 347 HW_VAR_MEDIA_STATUS, 348 HW_VAR_SECURITY_CONF, 349 HW_VAR_BEACON_INTERVAL, 350 HW_VAR_ATIM_WINDOW, 351 HW_VAR_LISTEN_INTERVAL, 352 HW_VAR_CS_COUNTER, 353 HW_VAR_DEFAULTKEY0, 354 HW_VAR_DEFAULTKEY1, 355 HW_VAR_DEFAULTKEY2, 356 HW_VAR_DEFAULTKEY3, 357 HW_VAR_SIFS, 358 HW_VAR_DIFS, 359 HW_VAR_EIFS, 360 HW_VAR_SLOT_TIME, 361 HW_VAR_ACK_PREAMBLE, 362 HW_VAR_CW_CONFIG, 363 HW_VAR_CW_VALUES, 364 HW_VAR_RATE_FALLBACK_CONTROL, 365 HW_VAR_CONTENTION_WINDOW, 366 HW_VAR_RETRY_COUNT, 367 HW_VAR_TR_SWITCH, 368 HW_VAR_COMMAND, 369 HW_VAR_WPA_CONFIG, 370 HW_VAR_AMPDU_MIN_SPACE, 371 HW_VAR_SHORTGI_DENSITY, 372 HW_VAR_AMPDU_FACTOR, 373 HW_VAR_MCS_RATE_AVAILABLE, 374 HW_VAR_AC_PARAM, 375 HW_VAR_ACM_CTRL, 376 HW_VAR_DIS_Req_Qsize, 377 HW_VAR_CCX_CHNL_LOAD, 378 HW_VAR_CCX_NOISE_HISTOGRAM, 379 HW_VAR_CCX_CLM_NHM, 380 HW_VAR_TxOPLimit, 381 HW_VAR_TURBO_MODE, 382 HW_VAR_RF_STATE, 383 HW_VAR_RF_OFF_BY_HW, 384 HW_VAR_BUS_SPEED, 385 HW_VAR_SET_DEV_POWER, 386 387 HW_VAR_RCR, 388 HW_VAR_RATR_0, 389 HW_VAR_RRSR, 390 HW_VAR_CPU_RST, 391 HW_VAR_CECHK_BSSID, 392 HW_VAR_LBK_MODE, 393 HW_VAR_AES_11N_FIX, 394 HW_VAR_USB_RX_AGGR, 395 HW_VAR_USER_CONTROL_TURBO_MODE, 396 HW_VAR_RETRY_LIMIT, 397 HW_VAR_INIT_TX_RATE, 398 HW_VAR_TX_RATE_REG, 399 HW_VAR_EFUSE_USAGE, 400 HW_VAR_EFUSE_BYTES, 401 HW_VAR_AUTOLOAD_STATUS, 402 HW_VAR_RF_2R_DISABLE, 403 HW_VAR_SET_RPWM, 404 HW_VAR_H2C_FW_PWRMODE, 405 HW_VAR_H2C_FW_JOINBSSRPT, 406 HW_VAR_1X1_RECV_COMBINE, 407 HW_VAR_STOP_SEND_BEACON, 408 HW_VAR_TSF_TIMER, 409 HW_VAR_IO_CMD, 410 411 HW_VAR_RF_RECOVERY, 412 HW_VAR_H2C_FW_UPDATE_GTK, 413 HW_VAR_WF_MASK, 414 HW_VAR_WF_CRC, 415 HW_VAR_WF_IS_MAC_ADDR, 416 HW_VAR_H2C_FW_OFFLOAD, 417 HW_VAR_RESET_WFCRC, 418 419 HW_VAR_HANDLE_FW_C2H, 420 HW_VAR_DL_FW_RSVD_PAGE, 421 HW_VAR_AID, 422 HW_VAR_HW_SEQ_ENABLE, 423 HW_VAR_CORRECT_TSF, 424 HW_VAR_BCN_VALID, 425 HW_VAR_FWLPS_RF_ON, 426 HW_VAR_DUAL_TSF_RST, 427 HW_VAR_SWITCH_EPHY_WoWLAN, 428 HW_VAR_INT_MIGRATION, 429 HW_VAR_INT_AC, 430 HW_VAR_RF_TIMING, 431 }; 432 433 enum rt_op_mode { 434 RT_OP_MODE_AP, 435 RT_OP_MODE_INFRASTRUCTURE, 436 RT_OP_MODE_IBSS, 437 RT_OP_MODE_NO_LINK, 438 }; 439 440 441 #define aSifsTime \ 442 (((priv->rtllib->current_network.mode == IEEE_A) \ 443 || (priv->rtllib->current_network.mode == IEEE_N_24G) \ 444 || (priv->rtllib->current_network.mode == IEEE_N_5G)) ? 16 : 10) 445 446 #define MGMT_QUEUE_NUM 5 447 448 #define IEEE_CMD_SET_WPA_PARAM 1 449 #define IEEE_CMD_SET_WPA_IE 2 450 #define IEEE_CMD_SET_ENCRYPTION 3 451 #define IEEE_CMD_MLME 4 452 453 #define IEEE_PARAM_WPA_ENABLED 1 454 #define IEEE_PARAM_TKIP_COUNTERMEASURES 2 455 #define IEEE_PARAM_DROP_UNENCRYPTED 3 456 #define IEEE_PARAM_PRIVACY_INVOKED 4 457 #define IEEE_PARAM_AUTH_ALGS 5 458 #define IEEE_PARAM_IEEE_802_1X 6 459 #define IEEE_PARAM_WPAX_SELECT 7 460 #define IEEE_PROTO_WPA 1 461 #define IEEE_PROTO_RSN 2 462 #define IEEE_WPAX_USEGROUP 0 463 #define IEEE_WPAX_WEP40 1 464 #define IEEE_WPAX_TKIP 2 465 #define IEEE_WPAX_WRAP 3 466 #define IEEE_WPAX_CCMP 4 467 #define IEEE_WPAX_WEP104 5 468 469 #define IEEE_KEY_MGMT_IEEE8021X 1 470 #define IEEE_KEY_MGMT_PSK 2 471 472 #define IEEE_MLME_STA_DEAUTH 1 473 #define IEEE_MLME_STA_DISASSOC 2 474 475 476 #define IEEE_CRYPT_ERR_UNKNOWN_ALG 2 477 #define IEEE_CRYPT_ERR_UNKNOWN_ADDR 3 478 #define IEEE_CRYPT_ERR_CRYPT_INIT_FAILED 4 479 #define IEEE_CRYPT_ERR_KEY_SET_FAILED 5 480 #define IEEE_CRYPT_ERR_TX_KEY_SET_FAILED 6 481 #define IEEE_CRYPT_ERR_CARD_CONF_FAILED 7 482 #define IEEE_CRYPT_ALG_NAME_LEN 16 483 484 #define MAX_IE_LEN 0xff 485 #define RT_ASSERT_RET(_Exp) do {} while (0) 486 #define RT_ASSERT_RET_VALUE(_Exp, Ret) \ 487 do {} while (0) 488 489 struct ieee_param { 490 u32 cmd; 491 u8 sta_addr[ETH_ALEN]; 492 union { 493 struct { 494 u8 name; 495 u32 value; 496 } wpa_param; 497 struct { 498 u32 len; 499 u8 reserved[32]; 500 u8 data[0]; 501 } wpa_ie; 502 struct { 503 int command; 504 int reason_code; 505 } mlme; 506 struct { 507 u8 alg[IEEE_CRYPT_ALG_NAME_LEN]; 508 u8 set_tx; 509 u32 err; 510 u8 idx; 511 u8 seq[8]; /* sequence counter (set: RX, get: TX) */ 512 u16 key_len; 513 u8 key[0]; 514 } crypt; 515 } u; 516 }; 517 518 519 #if WIRELESS_EXT < 17 520 #define IW_QUAL_QUAL_INVALID 0x10 521 #define IW_QUAL_LEVEL_INVALID 0x20 522 #define IW_QUAL_NOISE_INVALID 0x40 523 #define IW_QUAL_QUAL_UPDATED 0x1 524 #define IW_QUAL_LEVEL_UPDATED 0x2 525 #define IW_QUAL_NOISE_UPDATED 0x4 526 #endif 527 528 #define MSECS(t) msecs_to_jiffies(t) 529 #define msleep_interruptible_rsl msleep_interruptible 530 531 #define RTLLIB_DATA_LEN 2304 532 /* Maximum size for the MA-UNITDATA primitive, 802.11 standard section 533 6.2.1.1.2. 534 535 The figure in section 7.1.2 suggests a body size of up to 2312 536 bytes is allowed, which is a bit confusing, I suspect this 537 represents the 2304 bytes of real data, plus a possible 8 bytes of 538 WEP IV and ICV. (this interpretation suggested by Ramiro Barreiro) */ 539 #define RTLLIB_1ADDR_LEN 10 540 #define RTLLIB_2ADDR_LEN 16 541 #define RTLLIB_3ADDR_LEN 24 542 #define RTLLIB_4ADDR_LEN 30 543 #define RTLLIB_FCS_LEN 4 544 #define RTLLIB_HLEN (RTLLIB_4ADDR_LEN) 545 #define RTLLIB_FRAME_LEN (RTLLIB_DATA_LEN + RTLLIB_HLEN) 546 #define RTLLIB_MGMT_HDR_LEN 24 547 #define RTLLIB_DATA_HDR3_LEN 24 548 #define RTLLIB_DATA_HDR4_LEN 30 549 550 #define RTLLIB_SKBBUFFER_SIZE 2500 551 552 #define MIN_FRAG_THRESHOLD 256U 553 #define MAX_FRAG_THRESHOLD 2346U 554 #define MAX_HT_DATA_FRAG_THRESHOLD 0x2000 555 556 #define HT_AMSDU_SIZE_4K 3839 557 #define HT_AMSDU_SIZE_8K 7935 558 559 /* Frame control field constants */ 560 #define RTLLIB_FCTL_VERS 0x0003 561 #define RTLLIB_FCTL_FTYPE 0x000c 562 #define RTLLIB_FCTL_STYPE 0x00f0 563 #define RTLLIB_FCTL_FRAMETYPE 0x00fc 564 #define RTLLIB_FCTL_TODS 0x0100 565 #define RTLLIB_FCTL_FROMDS 0x0200 566 #define RTLLIB_FCTL_DSTODS 0x0300 567 #define RTLLIB_FCTL_MOREFRAGS 0x0400 568 #define RTLLIB_FCTL_RETRY 0x0800 569 #define RTLLIB_FCTL_PM 0x1000 570 #define RTLLIB_FCTL_MOREDATA 0x2000 571 #define RTLLIB_FCTL_WEP 0x4000 572 #define RTLLIB_FCTL_ORDER 0x8000 573 574 #define RTLLIB_FTYPE_MGMT 0x0000 575 #define RTLLIB_FTYPE_CTL 0x0004 576 #define RTLLIB_FTYPE_DATA 0x0008 577 578 /* management */ 579 #define RTLLIB_STYPE_ASSOC_REQ 0x0000 580 #define RTLLIB_STYPE_ASSOC_RESP 0x0010 581 #define RTLLIB_STYPE_REASSOC_REQ 0x0020 582 #define RTLLIB_STYPE_REASSOC_RESP 0x0030 583 #define RTLLIB_STYPE_PROBE_REQ 0x0040 584 #define RTLLIB_STYPE_PROBE_RESP 0x0050 585 #define RTLLIB_STYPE_BEACON 0x0080 586 #define RTLLIB_STYPE_ATIM 0x0090 587 #define RTLLIB_STYPE_DISASSOC 0x00A0 588 #define RTLLIB_STYPE_AUTH 0x00B0 589 #define RTLLIB_STYPE_DEAUTH 0x00C0 590 #define RTLLIB_STYPE_MANAGE_ACT 0x00D0 591 592 /* control */ 593 #define RTLLIB_STYPE_PSPOLL 0x00A0 594 #define RTLLIB_STYPE_RTS 0x00B0 595 #define RTLLIB_STYPE_CTS 0x00C0 596 #define RTLLIB_STYPE_ACK 0x00D0 597 #define RTLLIB_STYPE_CFEND 0x00E0 598 #define RTLLIB_STYPE_CFENDACK 0x00F0 599 #define RTLLIB_STYPE_BLOCKACK 0x0094 600 601 /* data */ 602 #define RTLLIB_STYPE_DATA 0x0000 603 #define RTLLIB_STYPE_DATA_CFACK 0x0010 604 #define RTLLIB_STYPE_DATA_CFPOLL 0x0020 605 #define RTLLIB_STYPE_DATA_CFACKPOLL 0x0030 606 #define RTLLIB_STYPE_NULLFUNC 0x0040 607 #define RTLLIB_STYPE_CFACK 0x0050 608 #define RTLLIB_STYPE_CFPOLL 0x0060 609 #define RTLLIB_STYPE_CFACKPOLL 0x0070 610 #define RTLLIB_STYPE_QOS_DATA 0x0080 611 #define RTLLIB_STYPE_QOS_NULL 0x00C0 612 613 #define RTLLIB_SCTL_FRAG 0x000F 614 #define RTLLIB_SCTL_SEQ 0xFFF0 615 616 /* QOS control */ 617 #define RTLLIB_QCTL_TID 0x000F 618 619 #define FC_QOS_BIT BIT7 620 #define IsDataFrame(pdu) (((pdu[0] & 0x0C) == 0x08) ? true : false) 621 #define IsLegacyDataFrame(pdu) (IsDataFrame(pdu) && (!(pdu[0]&FC_QOS_BIT))) 622 #define IsQoSDataFrame(pframe) \ 623 ((*(u16 *)pframe&(RTLLIB_STYPE_QOS_DATA|RTLLIB_FTYPE_DATA)) == \ 624 (RTLLIB_STYPE_QOS_DATA|RTLLIB_FTYPE_DATA)) 625 #define Frame_Order(pframe) (*(u16 *)pframe&RTLLIB_FCTL_ORDER) 626 #define SN_LESS(a, b) (((a-b)&0x800) != 0) 627 #define SN_EQUAL(a, b) (a == b) 628 #define MAX_DEV_ADDR_SIZE 8 629 630 enum act_category { 631 ACT_CAT_QOS = 1, 632 ACT_CAT_DLS = 2, 633 ACT_CAT_BA = 3, 634 ACT_CAT_HT = 7, 635 ACT_CAT_WMM = 17, 636 }; 637 638 enum ts_action { 639 ACT_ADDTSREQ = 0, 640 ACT_ADDTSRSP = 1, 641 ACT_DELTS = 2, 642 ACT_SCHEDULE = 3, 643 }; 644 645 enum ba_action { 646 ACT_ADDBAREQ = 0, 647 ACT_ADDBARSP = 1, 648 ACT_DELBA = 2, 649 }; 650 651 enum init_gain_op_type { 652 IG_Backup = 0, 653 IG_Restore, 654 IG_Max 655 }; 656 657 enum led_ctl_mode { 658 LED_CTL_POWER_ON = 1, 659 LED_CTL_LINK = 2, 660 LED_CTL_NO_LINK = 3, 661 LED_CTL_TX = 4, 662 LED_CTL_RX = 5, 663 LED_CTL_SITE_SURVEY = 6, 664 LED_CTL_POWER_OFF = 7, 665 LED_CTL_START_TO_LINK = 8, 666 LED_CTL_START_WPS = 9, 667 LED_CTL_STOP_WPS = 10, 668 LED_CTL_START_WPS_BOTTON = 11, 669 LED_CTL_STOP_WPS_FAIL = 12, 670 LED_CTL_STOP_WPS_FAIL_OVERLAP = 13, 671 }; 672 673 enum rt_rf_type_def { 674 RF_1T2R = 0, 675 RF_2T4R, 676 RF_2T2R, 677 RF_1T1R, 678 RF_2T2R_GREEN, 679 RF_819X_MAX_TYPE 680 }; 681 682 enum wireless_mode { 683 WIRELESS_MODE_UNKNOWN = 0x00, 684 WIRELESS_MODE_A = 0x01, 685 WIRELESS_MODE_B = 0x02, 686 WIRELESS_MODE_G = 0x04, 687 WIRELESS_MODE_AUTO = 0x08, 688 WIRELESS_MODE_N_24G = 0x10, 689 WIRELESS_MODE_N_5G = 0x20 690 }; 691 692 enum wireless_network_type { 693 WIRELESS_11B = 1, 694 WIRELESS_11G = 2, 695 WIRELESS_11A = 4, 696 WIRELESS_11N = 8 697 }; 698 699 #define OUI_SUBTYPE_WMM_INFO 0 700 #define OUI_SUBTYPE_WMM_PARAM 1 701 #define OUI_SUBTYPE_QOS_CAPABI 5 702 703 /* debug macros */ 704 extern u32 rtllib_debug_level; 705 #define RTLLIB_DEBUG(level, fmt, args...) \ 706 do { \ 707 if (rtllib_debug_level & (level)) \ 708 printk(KERN_DEBUG "rtllib: " fmt, ## args); \ 709 } while (0) 710 711 #define RTLLIB_DEBUG_DATA(level, data, datalen) \ 712 do { \ 713 if ((rtllib_debug_level & (level)) == (level)) { \ 714 int i; \ 715 u8 *pdata = (u8 *)data; \ 716 printk(KERN_DEBUG "rtllib: %s()\n", __func__); \ 717 for (i = 0; i < (int)(datalen); i++) { \ 718 printk("%2.2x ", pdata[i]); \ 719 if ((i+1)%16 == 0) \ 720 printk("\n"); \ 721 } \ 722 printk("\n"); \ 723 } \ 724 } while (0) 725 726 /* 727 * To use the debug system; 728 * 729 * If you are defining a new debug classification, simply add it to the #define 730 * list here in the form of: 731 * 732 * #define RTLLIB_DL_xxxx VALUE 733 * 734 * shifting value to the left one bit from the previous entry. xxxx should be 735 * the name of the classification (for example, WEP) 736 * 737 * You then need to either add a RTLLIB_xxxx_DEBUG() macro definition for your 738 * classification, or use RTLLIB_DEBUG(RTLLIB_DL_xxxx, ...) whenever you want 739 * to send output to that classification. 740 * 741 * To add your debug level to the list of levels seen when you perform 742 * 743 * % cat /proc/net/ipw/debug_level 744 * 745 * you simply need to add your entry to the ipw_debug_levels array. 746 * 747 * 748 */ 749 750 #define RTLLIB_DL_INFO (1<<0) 751 #define RTLLIB_DL_WX (1<<1) 752 #define RTLLIB_DL_SCAN (1<<2) 753 #define RTLLIB_DL_STATE (1<<3) 754 #define RTLLIB_DL_MGMT (1<<4) 755 #define RTLLIB_DL_FRAG (1<<5) 756 #define RTLLIB_DL_EAP (1<<6) 757 #define RTLLIB_DL_DROP (1<<7) 758 759 #define RTLLIB_DL_TX (1<<8) 760 #define RTLLIB_DL_RX (1<<9) 761 762 #define RTLLIB_DL_HT (1<<10) 763 #define RTLLIB_DL_BA (1<<11) 764 #define RTLLIB_DL_TS (1<<12) 765 #define RTLLIB_DL_QOS (1<<13) 766 #define RTLLIB_DL_REORDER (1<<14) 767 #define RTLLIB_DL_IOT (1<<15) 768 #define RTLLIB_DL_IPS (1<<16) 769 #define RTLLIB_DL_TRACE (1<<29) 770 #define RTLLIB_DL_DATA (1<<30) 771 #define RTLLIB_DL_ERR (1<<31) 772 #define RTLLIB_ERROR(f, a...) printk(KERN_ERR "rtllib: " f, ## a) 773 #define RTLLIB_WARNING(f, a...) printk(KERN_WARNING "rtllib: " f, ## a) 774 #define RTLLIB_DEBUG_INFO(f, a...) RTLLIB_DEBUG(RTLLIB_DL_INFO, f, ## a) 775 776 #define RTLLIB_DEBUG_WX(f, a...) RTLLIB_DEBUG(RTLLIB_DL_WX, f, ## a) 777 #define RTLLIB_DEBUG_SCAN(f, a...) RTLLIB_DEBUG(RTLLIB_DL_SCAN, f, ## a) 778 #define RTLLIB_DEBUG_STATE(f, a...) RTLLIB_DEBUG(RTLLIB_DL_STATE, f, ## a) 779 #define RTLLIB_DEBUG_MGMT(f, a...) RTLLIB_DEBUG(RTLLIB_DL_MGMT, f, ## a) 780 #define RTLLIB_DEBUG_FRAG(f, a...) RTLLIB_DEBUG(RTLLIB_DL_FRAG, f, ## a) 781 #define RTLLIB_DEBUG_EAP(f, a...) RTLLIB_DEBUG(RTLLIB_DL_EAP, f, ## a) 782 #define RTLLIB_DEBUG_DROP(f, a...) RTLLIB_DEBUG(RTLLIB_DL_DROP, f, ## a) 783 #define RTLLIB_DEBUG_TX(f, a...) RTLLIB_DEBUG(RTLLIB_DL_TX, f, ## a) 784 #define RTLLIB_DEBUG_RX(f, a...) RTLLIB_DEBUG(RTLLIB_DL_RX, f, ## a) 785 #define RTLLIB_DEBUG_QOS(f, a...) RTLLIB_DEBUG(RTLLIB_DL_QOS, f, ## a) 786 787 /* Added by Annie, 2005-11-22. */ 788 #define MAX_STR_LEN 64 789 /* I want to see ASCII 33 to 126 only. Otherwise, I print '?'. */ 790 #define PRINTABLE(_ch) (_ch > '!' && _ch < '~') 791 #define RTLLIB_PRINT_STR(_Comp, _TitleString, _Ptr, _Len) \ 792 if ((_Comp) & level) { \ 793 int __i; \ 794 u8 struct buffer[MAX_STR_LEN]; \ 795 int length = (_Len < MAX_STR_LEN) ? _Len : (MAX_STR_LEN-1) ;\ 796 memset(struct buffer, 0, MAX_STR_LEN); \ 797 memcpy(struct buffer, (u8 *)_Ptr, length); \ 798 for (__i = 0; __i < MAX_STR_LEN; __i++) { \ 799 if (!PRINTABLE(struct buffer[__i])) \ 800 struct buffer[__i] = '?'; \ 801 } \ 802 struct buffer[length] = '\0'; \ 803 printk(KERN_INFO "Rtl819x: "); \ 804 printk(_TitleString); \ 805 printk(": %d, <%s>\n", _Len, struct buffer); \ 806 } 807 #ifndef ETH_P_PAE 808 #define ETH_P_PAE 0x888E /* Port Access Entity (IEEE 802.1X) */ 809 #define ETH_P_IP 0x0800 /* Internet Protocol packet */ 810 #define ETH_P_ARP 0x0806 /* Address Resolution packet */ 811 #endif /* ETH_P_PAE */ 812 813 #define ETH_P_PREAUTH 0x88C7 /* IEEE 802.11i pre-authentication */ 814 815 #ifndef ETH_P_80211_RAW 816 #define ETH_P_80211_RAW (ETH_P_ECONET + 1) 817 #endif 818 819 /* IEEE 802.11 defines */ 820 821 #define P80211_OUI_LEN 3 822 823 struct rtllib_snap_hdr { 824 825 u8 dsap; /* always 0xAA */ 826 u8 ssap; /* always 0xAA */ 827 u8 ctrl; /* always 0x03 */ 828 u8 oui[P80211_OUI_LEN]; /* organizational universal id */ 829 830 } __packed; 831 832 enum _REG_PREAMBLE_MODE { 833 PREAMBLE_LONG = 1, 834 PREAMBLE_AUTO = 2, 835 PREAMBLE_SHORT = 3, 836 }; 837 838 #define SNAP_SIZE sizeof(struct rtllib_snap_hdr) 839 840 #define WLAN_FC_GET_VERS(fc) ((fc) & RTLLIB_FCTL_VERS) 841 #define WLAN_FC_GET_TYPE(fc) ((fc) & RTLLIB_FCTL_FTYPE) 842 #define WLAN_FC_GET_STYPE(fc) ((fc) & RTLLIB_FCTL_STYPE) 843 #define WLAN_FC_MORE_DATA(fc) ((fc) & RTLLIB_FCTL_MOREDATA) 844 845 #define WLAN_FC_GET_FRAMETYPE(fc) ((fc) & RTLLIB_FCTL_FRAMETYPE) 846 #define WLAN_GET_SEQ_FRAG(seq) ((seq) & RTLLIB_SCTL_FRAG) 847 #define WLAN_GET_SEQ_SEQ(seq) (((seq) & RTLLIB_SCTL_SEQ) >> 4) 848 849 /* Authentication algorithms */ 850 #define WLAN_AUTH_OPEN 0 851 #define WLAN_AUTH_SHARED_KEY 1 852 #define WLAN_AUTH_LEAP 128 853 854 #define WLAN_AUTH_CHALLENGE_LEN 128 855 856 #define WLAN_CAPABILITY_ESS (1<<0) 857 #define WLAN_CAPABILITY_IBSS (1<<1) 858 #define WLAN_CAPABILITY_CF_POLLABLE (1<<2) 859 #define WLAN_CAPABILITY_CF_POLL_REQUEST (1<<3) 860 #define WLAN_CAPABILITY_PRIVACY (1<<4) 861 #define WLAN_CAPABILITY_SHORT_PREAMBLE (1<<5) 862 #define WLAN_CAPABILITY_PBCC (1<<6) 863 #define WLAN_CAPABILITY_CHANNEL_AGILITY (1<<7) 864 #define WLAN_CAPABILITY_SPECTRUM_MGMT (1<<8) 865 #define WLAN_CAPABILITY_QOS (1<<9) 866 #define WLAN_CAPABILITY_SHORT_SLOT_TIME (1<<10) 867 #define WLAN_CAPABILITY_DSSS_OFDM (1<<13) 868 869 /* 802.11g ERP information element */ 870 #define WLAN_ERP_NON_ERP_PRESENT (1<<0) 871 #define WLAN_ERP_USE_PROTECTION (1<<1) 872 #define WLAN_ERP_BARKER_PREAMBLE (1<<2) 873 874 #define RTLLIB_STATMASK_SIGNAL (1<<0) 875 #define RTLLIB_STATMASK_RSSI (1<<1) 876 #define RTLLIB_STATMASK_NOISE (1<<2) 877 #define RTLLIB_STATMASK_RATE (1<<3) 878 #define RTLLIB_STATMASK_WEMASK 0x7 879 880 #define RTLLIB_CCK_MODULATION (1<<0) 881 #define RTLLIB_OFDM_MODULATION (1<<1) 882 883 #define RTLLIB_24GHZ_BAND (1<<0) 884 #define RTLLIB_52GHZ_BAND (1<<1) 885 886 #define RTLLIB_CCK_RATE_LEN 4 887 #define RTLLIB_CCK_RATE_1MB 0x02 888 #define RTLLIB_CCK_RATE_2MB 0x04 889 #define RTLLIB_CCK_RATE_5MB 0x0B 890 #define RTLLIB_CCK_RATE_11MB 0x16 891 #define RTLLIB_OFDM_RATE_LEN 8 892 #define RTLLIB_OFDM_RATE_6MB 0x0C 893 #define RTLLIB_OFDM_RATE_9MB 0x12 894 #define RTLLIB_OFDM_RATE_12MB 0x18 895 #define RTLLIB_OFDM_RATE_18MB 0x24 896 #define RTLLIB_OFDM_RATE_24MB 0x30 897 #define RTLLIB_OFDM_RATE_36MB 0x48 898 #define RTLLIB_OFDM_RATE_48MB 0x60 899 #define RTLLIB_OFDM_RATE_54MB 0x6C 900 #define RTLLIB_BASIC_RATE_MASK 0x80 901 902 #define RTLLIB_CCK_RATE_1MB_MASK (1<<0) 903 #define RTLLIB_CCK_RATE_2MB_MASK (1<<1) 904 #define RTLLIB_CCK_RATE_5MB_MASK (1<<2) 905 #define RTLLIB_CCK_RATE_11MB_MASK (1<<3) 906 #define RTLLIB_OFDM_RATE_6MB_MASK (1<<4) 907 #define RTLLIB_OFDM_RATE_9MB_MASK (1<<5) 908 #define RTLLIB_OFDM_RATE_12MB_MASK (1<<6) 909 #define RTLLIB_OFDM_RATE_18MB_MASK (1<<7) 910 #define RTLLIB_OFDM_RATE_24MB_MASK (1<<8) 911 #define RTLLIB_OFDM_RATE_36MB_MASK (1<<9) 912 #define RTLLIB_OFDM_RATE_48MB_MASK (1<<10) 913 #define RTLLIB_OFDM_RATE_54MB_MASK (1<<11) 914 915 #define RTLLIB_CCK_RATES_MASK 0x0000000F 916 #define RTLLIB_CCK_BASIC_RATES_MASK (RTLLIB_CCK_RATE_1MB_MASK | \ 917 RTLLIB_CCK_RATE_2MB_MASK) 918 #define RTLLIB_CCK_DEFAULT_RATES_MASK (RTLLIB_CCK_BASIC_RATES_MASK | \ 919 RTLLIB_CCK_RATE_5MB_MASK | \ 920 RTLLIB_CCK_RATE_11MB_MASK) 921 922 #define RTLLIB_OFDM_RATES_MASK 0x00000FF0 923 #define RTLLIB_OFDM_BASIC_RATES_MASK (RTLLIB_OFDM_RATE_6MB_MASK | \ 924 RTLLIB_OFDM_RATE_12MB_MASK | \ 925 RTLLIB_OFDM_RATE_24MB_MASK) 926 #define RTLLIB_OFDM_DEFAULT_RATES_MASK (RTLLIB_OFDM_BASIC_RATES_MASK | \ 927 RTLLIB_OFDM_RATE_9MB_MASK | \ 928 RTLLIB_OFDM_RATE_18MB_MASK | \ 929 RTLLIB_OFDM_RATE_36MB_MASK | \ 930 RTLLIB_OFDM_RATE_48MB_MASK | \ 931 RTLLIB_OFDM_RATE_54MB_MASK) 932 #define RTLLIB_DEFAULT_RATES_MASK (RTLLIB_OFDM_DEFAULT_RATES_MASK | \ 933 RTLLIB_CCK_DEFAULT_RATES_MASK) 934 935 #define RTLLIB_NUM_OFDM_RATES 8 936 #define RTLLIB_NUM_CCK_RATES 4 937 #define RTLLIB_OFDM_SHIFT_MASK_A 4 938 939 940 /* this is stolen and modified from the madwifi driver*/ 941 #define RTLLIB_FC0_TYPE_MASK 0x0c 942 #define RTLLIB_FC0_TYPE_DATA 0x08 943 #define RTLLIB_FC0_SUBTYPE_MASK 0xB0 944 #define RTLLIB_FC0_SUBTYPE_QOS 0x80 945 946 #define RTLLIB_QOS_HAS_SEQ(fc) \ 947 (((fc) & (RTLLIB_FC0_TYPE_MASK | RTLLIB_FC0_SUBTYPE_MASK)) == \ 948 (RTLLIB_FC0_TYPE_DATA | RTLLIB_FC0_SUBTYPE_QOS)) 949 950 /* this is stolen from ipw2200 driver */ 951 #define IEEE_IBSS_MAC_HASH_SIZE 31 952 struct ieee_ibss_seq { 953 u8 mac[ETH_ALEN]; 954 u16 seq_num[17]; 955 u16 frag_num[17]; 956 unsigned long packet_time[17]; 957 struct list_head list; 958 }; 959 960 /* NOTE: This data is for statistical purposes; not all hardware provides this 961 * information for frames received. Not setting these will not cause 962 * any adverse affects. */ 963 struct rtllib_rx_stats { 964 u64 mac_time; 965 s8 rssi; 966 u8 signal; 967 u8 noise; 968 u16 rate; /* in 100 kbps */ 969 u8 received_channel; 970 u8 control; 971 u8 mask; 972 u8 freq; 973 u16 len; 974 u64 tsf; 975 u32 beacon_time; 976 u8 nic_type; 977 u16 Length; 978 u8 SignalQuality; 979 s32 RecvSignalPower; 980 s8 RxPower; 981 u8 SignalStrength; 982 u16 bHwError:1; 983 u16 bCRC:1; 984 u16 bICV:1; 985 u16 bShortPreamble:1; 986 u16 Antenna:1; 987 u16 Decrypted:1; 988 u16 Wakeup:1; 989 u16 Reserved0:1; 990 u8 AGC; 991 u32 TimeStampLow; 992 u32 TimeStampHigh; 993 bool bShift; 994 bool bIsQosData; 995 u8 UserPriority; 996 997 u8 RxDrvInfoSize; 998 u8 RxBufShift; 999 bool bIsAMPDU; 1000 bool bFirstMPDU; 1001 bool bContainHTC; 1002 bool RxIs40MHzPacket; 1003 u32 RxPWDBAll; 1004 u8 RxMIMOSignalStrength[4]; 1005 s8 RxMIMOSignalQuality[2]; 1006 bool bPacketMatchBSSID; 1007 bool bIsCCK; 1008 bool bPacketToSelf; 1009 u8 *virtual_address; 1010 u16 packetlength; 1011 u16 fraglength; 1012 u16 fragoffset; 1013 u16 ntotalfrag; 1014 bool bisrxaggrsubframe; 1015 bool bPacketBeacon; 1016 bool bToSelfBA; 1017 char cck_adc_pwdb[4]; 1018 u16 Seq_Num; 1019 u8 nTotalAggPkt; 1020 }; 1021 1022 /* IEEE 802.11 requires that STA supports concurrent reception of at least 1023 * three fragmented frames. This define can be increased to support more 1024 * concurrent frames, but it should be noted that each entry can consume about 1025 * 2 kB of RAM and increasing cache size will slow down frame reassembly. */ 1026 #define RTLLIB_FRAG_CACHE_LEN 4 1027 1028 struct rtllib_frag_entry { 1029 unsigned long first_frag_time; 1030 unsigned int seq; 1031 unsigned int last_frag; 1032 struct sk_buff *skb; 1033 u8 src_addr[ETH_ALEN]; 1034 u8 dst_addr[ETH_ALEN]; 1035 }; 1036 1037 struct rtllib_stats { 1038 unsigned int tx_unicast_frames; 1039 unsigned int tx_multicast_frames; 1040 unsigned int tx_fragments; 1041 unsigned int tx_unicast_octets; 1042 unsigned int tx_multicast_octets; 1043 unsigned int tx_deferred_transmissions; 1044 unsigned int tx_single_retry_frames; 1045 unsigned int tx_multiple_retry_frames; 1046 unsigned int tx_retry_limit_exceeded; 1047 unsigned int tx_discards; 1048 unsigned int rx_unicast_frames; 1049 unsigned int rx_multicast_frames; 1050 unsigned int rx_fragments; 1051 unsigned int rx_unicast_octets; 1052 unsigned int rx_multicast_octets; 1053 unsigned int rx_fcs_errors; 1054 unsigned int rx_discards_no_buffer; 1055 unsigned int tx_discards_wrong_sa; 1056 unsigned int rx_discards_undecryptable; 1057 unsigned int rx_message_in_msg_fragments; 1058 unsigned int rx_message_in_bad_msg_fragments; 1059 }; 1060 1061 struct rtllib_device; 1062 1063 #define SEC_KEY_1 (1<<0) 1064 #define SEC_KEY_2 (1<<1) 1065 #define SEC_KEY_3 (1<<2) 1066 #define SEC_KEY_4 (1<<3) 1067 #define SEC_ACTIVE_KEY (1<<4) 1068 #define SEC_AUTH_MODE (1<<5) 1069 #define SEC_UNICAST_GROUP (1<<6) 1070 #define SEC_LEVEL (1<<7) 1071 #define SEC_ENABLED (1<<8) 1072 #define SEC_ENCRYPT (1<<9) 1073 1074 #define SEC_LEVEL_0 0 /* None */ 1075 #define SEC_LEVEL_1 1 /* WEP 40 and 104 bit */ 1076 #define SEC_LEVEL_2 2 /* Level 1 + TKIP */ 1077 #define SEC_LEVEL_2_CKIP 3 /* Level 1 + CKIP */ 1078 #define SEC_LEVEL_3 4 /* Level 2 + CCMP */ 1079 1080 #define SEC_ALG_NONE 0 1081 #define SEC_ALG_WEP 1 1082 #define SEC_ALG_TKIP 2 1083 #define SEC_ALG_CCMP 4 1084 1085 #define WEP_KEY_LEN 13 1086 #define SCM_KEY_LEN 32 1087 #define SCM_TEMPORAL_KEY_LENGTH 16 1088 1089 struct rtllib_security { 1090 u16 active_key:2, 1091 enabled:1, 1092 auth_mode:2, 1093 auth_algo:4, 1094 unicast_uses_group:1, 1095 encrypt:1; 1096 u8 key_sizes[NUM_WEP_KEYS]; 1097 u8 keys[NUM_WEP_KEYS][SCM_KEY_LEN]; 1098 u8 level; 1099 u16 flags; 1100 } __packed; 1101 1102 1103 /* 1104 802.11 data frame from AP 1105 ,-------------------------------------------------------------------. 1106 Bytes | 2 | 2 | 6 | 6 | 6 | 2 | 0..2312 | 4 | 1107 |------|------|---------|---------|---------|------|---------|------| 1108 Desc. | ctrl | dura | DA/RA | TA | SA | Sequ | frame | fcs | 1109 | | tion | (BSSID) | | | ence | data | | 1110 `-------------------------------------------------------------------' 1111 Total: 28-2340 bytes 1112 */ 1113 1114 /* Management Frame Information Element Types */ 1115 enum rtllib_mfie { 1116 MFIE_TYPE_SSID = 0, 1117 MFIE_TYPE_RATES = 1, 1118 MFIE_TYPE_FH_SET = 2, 1119 MFIE_TYPE_DS_SET = 3, 1120 MFIE_TYPE_CF_SET = 4, 1121 MFIE_TYPE_TIM = 5, 1122 MFIE_TYPE_IBSS_SET = 6, 1123 MFIE_TYPE_COUNTRY = 7, 1124 MFIE_TYPE_HOP_PARAMS = 8, 1125 MFIE_TYPE_HOP_TABLE = 9, 1126 MFIE_TYPE_REQUEST = 10, 1127 MFIE_TYPE_CHALLENGE = 16, 1128 MFIE_TYPE_POWER_CONSTRAINT = 32, 1129 MFIE_TYPE_POWER_CAPABILITY = 33, 1130 MFIE_TYPE_TPC_REQUEST = 34, 1131 MFIE_TYPE_TPC_REPORT = 35, 1132 MFIE_TYPE_SUPP_CHANNELS = 36, 1133 MFIE_TYPE_CSA = 37, 1134 MFIE_TYPE_MEASURE_REQUEST = 38, 1135 MFIE_TYPE_MEASURE_REPORT = 39, 1136 MFIE_TYPE_QUIET = 40, 1137 MFIE_TYPE_IBSS_DFS = 41, 1138 MFIE_TYPE_ERP = 42, 1139 MFIE_TYPE_HT_CAP = 45, 1140 MFIE_TYPE_RSN = 48, 1141 MFIE_TYPE_RATES_EX = 50, 1142 MFIE_TYPE_HT_INFO = 61, 1143 MFIE_TYPE_AIRONET = 133, 1144 MFIE_TYPE_GENERIC = 221, 1145 MFIE_TYPE_QOS_PARAMETER = 222, 1146 }; 1147 1148 /* Minimal header; can be used for passing 802.11 frames with sufficient 1149 * information to determine what type of underlying data type is actually 1150 * stored in the data. */ 1151 struct rtllib_pspoll_hdr { 1152 __le16 frame_ctl; 1153 __le16 aid; 1154 u8 bssid[ETH_ALEN]; 1155 u8 ta[ETH_ALEN]; 1156 } __packed; 1157 1158 struct rtllib_hdr { 1159 __le16 frame_ctl; 1160 __le16 duration_id; 1161 u8 payload[0]; 1162 } __packed; 1163 1164 struct rtllib_hdr_1addr { 1165 __le16 frame_ctl; 1166 __le16 duration_id; 1167 u8 addr1[ETH_ALEN]; 1168 u8 payload[0]; 1169 } __packed; 1170 1171 struct rtllib_hdr_2addr { 1172 __le16 frame_ctl; 1173 __le16 duration_id; 1174 u8 addr1[ETH_ALEN]; 1175 u8 addr2[ETH_ALEN]; 1176 u8 payload[0]; 1177 } __packed; 1178 1179 struct rtllib_hdr_3addr { 1180 __le16 frame_ctl; 1181 __le16 duration_id; 1182 u8 addr1[ETH_ALEN]; 1183 u8 addr2[ETH_ALEN]; 1184 u8 addr3[ETH_ALEN]; 1185 __le16 seq_ctl; 1186 u8 payload[0]; 1187 } __packed; 1188 1189 struct rtllib_hdr_4addr { 1190 __le16 frame_ctl; 1191 __le16 duration_id; 1192 u8 addr1[ETH_ALEN]; 1193 u8 addr2[ETH_ALEN]; 1194 u8 addr3[ETH_ALEN]; 1195 __le16 seq_ctl; 1196 u8 addr4[ETH_ALEN]; 1197 u8 payload[0]; 1198 } __packed; 1199 1200 struct rtllib_hdr_3addrqos { 1201 __le16 frame_ctl; 1202 __le16 duration_id; 1203 u8 addr1[ETH_ALEN]; 1204 u8 addr2[ETH_ALEN]; 1205 u8 addr3[ETH_ALEN]; 1206 __le16 seq_ctl; 1207 __le16 qos_ctl; 1208 u8 payload[0]; 1209 } __packed; 1210 1211 struct rtllib_hdr_4addrqos { 1212 __le16 frame_ctl; 1213 __le16 duration_id; 1214 u8 addr1[ETH_ALEN]; 1215 u8 addr2[ETH_ALEN]; 1216 u8 addr3[ETH_ALEN]; 1217 __le16 seq_ctl; 1218 u8 addr4[ETH_ALEN]; 1219 __le16 qos_ctl; 1220 u8 payload[0]; 1221 } __packed; 1222 1223 struct rtllib_info_element { 1224 u8 id; 1225 u8 len; 1226 u8 data[0]; 1227 } __packed; 1228 1229 struct rtllib_authentication { 1230 struct rtllib_hdr_3addr header; 1231 __le16 algorithm; 1232 __le16 transaction; 1233 __le16 status; 1234 /*challenge*/ 1235 struct rtllib_info_element info_element[0]; 1236 } __packed; 1237 1238 struct rtllib_disauth { 1239 struct rtllib_hdr_3addr header; 1240 __le16 reason; 1241 } __packed; 1242 1243 struct rtllib_disassoc { 1244 struct rtllib_hdr_3addr header; 1245 __le16 reason; 1246 } __packed; 1247 1248 struct rtllib_probe_request { 1249 struct rtllib_hdr_3addr header; 1250 /* SSID, supported rates */ 1251 struct rtllib_info_element info_element[0]; 1252 } __packed; 1253 1254 struct rtllib_probe_response { 1255 struct rtllib_hdr_3addr header; 1256 u32 time_stamp[2]; 1257 __le16 beacon_interval; 1258 __le16 capability; 1259 /* SSID, supported rates, FH params, DS params, 1260 * CF params, IBSS params, TIM (if beacon), RSN */ 1261 struct rtllib_info_element info_element[0]; 1262 } __packed; 1263 1264 /* Alias beacon for probe_response */ 1265 #define rtllib_beacon rtllib_probe_response 1266 1267 struct rtllib_assoc_request_frame { 1268 struct rtllib_hdr_3addr header; 1269 __le16 capability; 1270 __le16 listen_interval; 1271 /* SSID, supported rates, RSN */ 1272 struct rtllib_info_element info_element[0]; 1273 } __packed; 1274 1275 struct rtllib_reassoc_request_frame { 1276 struct rtllib_hdr_3addr header; 1277 __le16 capability; 1278 __le16 listen_interval; 1279 u8 current_ap[ETH_ALEN]; 1280 /* SSID, supported rates, RSN */ 1281 struct rtllib_info_element info_element[0]; 1282 } __packed; 1283 1284 struct rtllib_assoc_response_frame { 1285 struct rtllib_hdr_3addr header; 1286 __le16 capability; 1287 __le16 status; 1288 __le16 aid; 1289 struct rtllib_info_element info_element[0]; /* supported rates */ 1290 } __packed; 1291 1292 struct rtllib_txb { 1293 u8 nr_frags; 1294 u8 encrypted; 1295 u8 queue_index; 1296 u8 rts_included; 1297 u16 reserved; 1298 __le16 frag_size; 1299 __le16 payload_size; 1300 struct sk_buff *fragments[0]; 1301 }; 1302 1303 #define MAX_TX_AGG_COUNT 16 1304 struct rtllib_drv_agg_txb { 1305 u8 nr_drv_agg_frames; 1306 struct sk_buff *tx_agg_frames[MAX_TX_AGG_COUNT]; 1307 } __packed; 1308 1309 #define MAX_SUBFRAME_COUNT 64 1310 struct rtllib_rxb { 1311 u8 nr_subframes; 1312 struct sk_buff *subframes[MAX_SUBFRAME_COUNT]; 1313 u8 dst[ETH_ALEN]; 1314 u8 src[ETH_ALEN]; 1315 } __packed; 1316 1317 union frameqos { 1318 u16 shortdata; 1319 u8 chardata[2]; 1320 struct { 1321 u16 tid:4; 1322 u16 eosp:1; 1323 u16 ack_policy:2; 1324 u16 reserved:1; 1325 u16 txop:8; 1326 } field; 1327 }; 1328 1329 /* SWEEP TABLE ENTRIES NUMBER*/ 1330 #define MAX_SWEEP_TAB_ENTRIES 42 1331 #define MAX_SWEEP_TAB_ENTRIES_PER_PACKET 7 1332 /* MAX_RATES_LENGTH needs to be 12. The spec says 8, and many APs 1333 * only use 8, and then use extended rates for the remaining supported 1334 * rates. Other APs, however, stick all of their supported rates on the 1335 * main rates information element... */ 1336 #define MAX_RATES_LENGTH ((u8)12) 1337 #define MAX_RATES_EX_LENGTH ((u8)16) 1338 #define MAX_NETWORK_COUNT 96 1339 1340 #define MAX_CHANNEL_NUMBER 161 1341 #define RTLLIB_SOFTMAC_SCAN_TIME 100 1342 #define RTLLIB_SOFTMAC_ASSOC_RETRY_TIME (HZ * 2) 1343 1344 #define CRC_LENGTH 4U 1345 1346 #define MAX_WPA_IE_LEN 64 1347 #define MAX_WZC_IE_LEN 256 1348 1349 #define NETWORK_EMPTY_ESSID (1<<0) 1350 #define NETWORK_HAS_OFDM (1<<1) 1351 #define NETWORK_HAS_CCK (1<<2) 1352 1353 /* QoS structure */ 1354 #define NETWORK_HAS_QOS_PARAMETERS (1<<3) 1355 #define NETWORK_HAS_QOS_INFORMATION (1<<4) 1356 #define NETWORK_HAS_QOS_MASK (NETWORK_HAS_QOS_PARAMETERS | \ 1357 NETWORK_HAS_QOS_INFORMATION) 1358 /* 802.11h */ 1359 #define NETWORK_HAS_POWER_CONSTRAINT (1<<5) 1360 #define NETWORK_HAS_CSA (1<<6) 1361 #define NETWORK_HAS_QUIET (1<<7) 1362 #define NETWORK_HAS_IBSS_DFS (1<<8) 1363 #define NETWORK_HAS_TPC_REPORT (1<<9) 1364 1365 #define NETWORK_HAS_ERP_VALUE (1<<10) 1366 1367 #define QOS_QUEUE_NUM 4 1368 #define QOS_OUI_LEN 3 1369 #define QOS_OUI_TYPE 2 1370 #define QOS_ELEMENT_ID 221 1371 #define QOS_OUI_INFO_SUB_TYPE 0 1372 #define QOS_OUI_PARAM_SUB_TYPE 1 1373 #define QOS_VERSION_1 1 1374 #define QOS_AIFSN_MIN_VALUE 2 1375 1376 struct rtllib_qos_information_element { 1377 u8 elementID; 1378 u8 length; 1379 u8 qui[QOS_OUI_LEN]; 1380 u8 qui_type; 1381 u8 qui_subtype; 1382 u8 version; 1383 u8 ac_info; 1384 } __packed; 1385 1386 struct rtllib_qos_ac_parameter { 1387 u8 aci_aifsn; 1388 u8 ecw_min_max; 1389 __le16 tx_op_limit; 1390 } __packed; 1391 1392 struct rtllib_qos_parameter_info { 1393 struct rtllib_qos_information_element info_element; 1394 u8 reserved; 1395 struct rtllib_qos_ac_parameter ac_params_record[QOS_QUEUE_NUM]; 1396 } __packed; 1397 1398 struct rtllib_qos_parameters { 1399 __le16 cw_min[QOS_QUEUE_NUM]; 1400 __le16 cw_max[QOS_QUEUE_NUM]; 1401 u8 aifs[QOS_QUEUE_NUM]; 1402 u8 flag[QOS_QUEUE_NUM]; 1403 __le16 tx_op_limit[QOS_QUEUE_NUM]; 1404 } __packed; 1405 1406 struct rtllib_qos_data { 1407 struct rtllib_qos_parameters parameters; 1408 unsigned int wmm_acm; 1409 int active; 1410 int supported; 1411 u8 param_count; 1412 u8 old_param_count; 1413 }; 1414 1415 struct rtllib_tim_parameters { 1416 u8 tim_count; 1417 u8 tim_period; 1418 } __packed; 1419 1420 struct rtllib_wmm_ac_param { 1421 u8 ac_aci_acm_aifsn; 1422 u8 ac_ecwmin_ecwmax; 1423 u16 ac_txop_limit; 1424 }; 1425 1426 struct rtllib_wmm_ts_info { 1427 u8 ac_dir_tid; 1428 u8 ac_up_psb; 1429 u8 reserved; 1430 } __packed; 1431 1432 struct rtllib_wmm_tspec_elem { 1433 struct rtllib_wmm_ts_info ts_info; 1434 u16 norm_msdu_size; 1435 u16 max_msdu_size; 1436 u32 min_serv_inter; 1437 u32 max_serv_inter; 1438 u32 inact_inter; 1439 u32 suspen_inter; 1440 u32 serv_start_time; 1441 u32 min_data_rate; 1442 u32 mean_data_rate; 1443 u32 peak_data_rate; 1444 u32 max_burst_size; 1445 u32 delay_bound; 1446 u32 min_phy_rate; 1447 u16 surp_band_allow; 1448 u16 medium_time; 1449 } __packed; 1450 1451 enum eap_type { 1452 EAP_PACKET = 0, 1453 EAPOL_START, 1454 EAPOL_LOGOFF, 1455 EAPOL_KEY, 1456 EAPOL_ENCAP_ASF_ALERT 1457 }; 1458 1459 static const char *eap_types[] = { 1460 [EAP_PACKET] = "EAP-Packet", 1461 [EAPOL_START] = "EAPOL-Start", 1462 [EAPOL_LOGOFF] = "EAPOL-Logoff", 1463 [EAPOL_KEY] = "EAPOL-Key", 1464 [EAPOL_ENCAP_ASF_ALERT] = "EAPOL-Encap-ASF-Alert" 1465 }; 1466 1467 static inline const char *eap_get_type(int type) 1468 { 1469 return ((u32)type >= ARRAY_SIZE(eap_types)) ? "Unknown" : 1470 eap_types[type]; 1471 } 1472 static inline u8 Frame_QoSTID(u8 *buf) 1473 { 1474 struct rtllib_hdr_3addr *hdr; 1475 u16 fc; 1476 hdr = (struct rtllib_hdr_3addr *)buf; 1477 fc = le16_to_cpu(hdr->frame_ctl); 1478 return (u8)((union frameqos *)(buf + (((fc & RTLLIB_FCTL_TODS) && 1479 (fc & RTLLIB_FCTL_FROMDS)) ? 30 : 24)))->field.tid; 1480 } 1481 1482 1483 struct eapol { 1484 u8 snap[6]; 1485 u16 ethertype; 1486 u8 version; 1487 u8 type; 1488 u16 length; 1489 } __packed; 1490 1491 struct rtllib_softmac_stats { 1492 unsigned int rx_ass_ok; 1493 unsigned int rx_ass_err; 1494 unsigned int rx_probe_rq; 1495 unsigned int tx_probe_rs; 1496 unsigned int tx_beacons; 1497 unsigned int rx_auth_rq; 1498 unsigned int rx_auth_rs_ok; 1499 unsigned int rx_auth_rs_err; 1500 unsigned int tx_auth_rq; 1501 unsigned int no_auth_rs; 1502 unsigned int no_ass_rs; 1503 unsigned int tx_ass_rq; 1504 unsigned int rx_ass_rq; 1505 unsigned int tx_probe_rq; 1506 unsigned int reassoc; 1507 unsigned int swtxstop; 1508 unsigned int swtxawake; 1509 unsigned char CurrentShowTxate; 1510 unsigned char last_packet_rate; 1511 unsigned int txretrycount; 1512 }; 1513 1514 #define BEACON_PROBE_SSID_ID_POSITION 12 1515 1516 struct rtllib_info_element_hdr { 1517 u8 id; 1518 u8 len; 1519 } __packed; 1520 1521 /* 1522 * These are the data types that can make up management packets 1523 * 1524 u16 auth_algorithm; 1525 u16 auth_sequence; 1526 u16 beacon_interval; 1527 u16 capability; 1528 u8 current_ap[ETH_ALEN]; 1529 u16 listen_interval; 1530 struct { 1531 u16 association_id:14, reserved:2; 1532 } __packed; 1533 u32 time_stamp[2]; 1534 u16 reason; 1535 u16 status; 1536 */ 1537 1538 #define RTLLIB_DEFAULT_TX_ESSID "Penguin" 1539 #define RTLLIB_DEFAULT_BASIC_RATE 2 1540 1541 enum {WMM_all_frame, WMM_two_frame, WMM_four_frame, WMM_six_frame}; 1542 #define MAX_SP_Len (WMM_all_frame << 4) 1543 #define RTLLIB_QOS_TID 0x0f 1544 #define QOS_CTL_NOTCONTAIN_ACK (0x01 << 5) 1545 1546 #define RTLLIB_DTIM_MBCAST 4 1547 #define RTLLIB_DTIM_UCAST 2 1548 #define RTLLIB_DTIM_VALID 1 1549 #define RTLLIB_DTIM_INVALID 0 1550 1551 #define RTLLIB_PS_DISABLED 0 1552 #define RTLLIB_PS_UNICAST RTLLIB_DTIM_UCAST 1553 #define RTLLIB_PS_MBCAST RTLLIB_DTIM_MBCAST 1554 1555 #define WME_AC_BK 0x00 1556 #define WME_AC_BE 0x01 1557 #define WME_AC_VI 0x02 1558 #define WME_AC_VO 0x03 1559 #define WME_ACI_MASK 0x03 1560 #define WME_AIFSN_MASK 0x03 1561 #define WME_AC_PRAM_LEN 16 1562 1563 #define MAX_RECEIVE_BUFFER_SIZE 9100 1564 1565 #define UP2AC(up) ( \ 1566 ((up) < 1) ? WME_AC_BE : \ 1567 ((up) < 3) ? WME_AC_BK : \ 1568 ((up) < 4) ? WME_AC_BE : \ 1569 ((up) < 6) ? WME_AC_VI : \ 1570 WME_AC_VO) 1571 1572 #define AC2UP(_ac) ( \ 1573 ((_ac) == WME_AC_VO) ? 6 : \ 1574 ((_ac) == WME_AC_VI) ? 5 : \ 1575 ((_ac) == WME_AC_BK) ? 1 : \ 1576 0) 1577 1578 #define ETHER_ADDR_LEN 6 /* length of an Ethernet address */ 1579 #define ETHERNET_HEADER_SIZE 14 /* length of two Ethernet address 1580 * plus ether type*/ 1581 1582 struct ether_header { 1583 u8 ether_dhost[ETHER_ADDR_LEN]; 1584 u8 ether_shost[ETHER_ADDR_LEN]; 1585 u16 ether_type; 1586 } __packed; 1587 1588 #ifndef ETHERTYPE_PAE 1589 #define ETHERTYPE_PAE 0x888e /* EAPOL PAE/802.1x */ 1590 #endif 1591 #ifndef ETHERTYPE_IP 1592 #define ETHERTYPE_IP 0x0800 /* IP protocol */ 1593 #endif 1594 1595 1596 enum erp_t { 1597 ERP_NonERPpresent = 0x01, 1598 ERP_UseProtection = 0x02, 1599 ERP_BarkerPreambleMode = 0x04, 1600 }; 1601 1602 struct rtllib_network { 1603 /* These entries are used to identify a unique network */ 1604 u8 bssid[ETH_ALEN]; 1605 u8 channel; 1606 /* Ensure null-terminated for any debug msgs */ 1607 u8 ssid[IW_ESSID_MAX_SIZE + 1]; 1608 u8 ssid_len; 1609 u8 hidden_ssid[IW_ESSID_MAX_SIZE + 1]; 1610 u8 hidden_ssid_len; 1611 struct rtllib_qos_data qos_data; 1612 1613 bool bWithAironetIE; 1614 bool bCkipSupported; 1615 bool bCcxRmEnable; 1616 u16 CcxRmState[2]; 1617 bool bMBssidValid; 1618 u8 MBssidMask; 1619 u8 MBssid[6]; 1620 bool bWithCcxVerNum; 1621 u8 BssCcxVerNumber; 1622 /* These are network statistics */ 1623 struct rtllib_rx_stats stats; 1624 u16 capability; 1625 u8 rates[MAX_RATES_LENGTH]; 1626 u8 rates_len; 1627 u8 rates_ex[MAX_RATES_EX_LENGTH]; 1628 u8 rates_ex_len; 1629 unsigned long last_scanned; 1630 u8 mode; 1631 u32 flags; 1632 u32 last_associate; 1633 u32 time_stamp[2]; 1634 u16 beacon_interval; 1635 u16 listen_interval; 1636 u16 atim_window; 1637 u8 erp_value; 1638 u8 wpa_ie[MAX_WPA_IE_LEN]; 1639 size_t wpa_ie_len; 1640 u8 rsn_ie[MAX_WPA_IE_LEN]; 1641 size_t rsn_ie_len; 1642 u8 wzc_ie[MAX_WZC_IE_LEN]; 1643 size_t wzc_ie_len; 1644 1645 struct rtllib_tim_parameters tim; 1646 u8 dtim_period; 1647 u8 dtim_data; 1648 u64 last_dtim_sta_time; 1649 1650 u8 wmm_info; 1651 struct rtllib_wmm_ac_param wmm_param[4]; 1652 u8 Turbo_Enable; 1653 u16 CountryIeLen; 1654 u8 CountryIeBuf[MAX_IE_LEN]; 1655 struct bss_ht bssht; 1656 bool broadcom_cap_exist; 1657 bool realtek_cap_exit; 1658 bool marvell_cap_exist; 1659 bool ralink_cap_exist; 1660 bool atheros_cap_exist; 1661 bool cisco_cap_exist; 1662 bool airgo_cap_exist; 1663 bool unknown_cap_exist; 1664 bool berp_info_valid; 1665 bool buseprotection; 1666 bool bIsNetgear854T; 1667 u8 SignalStrength; 1668 u8 RSSI; 1669 struct list_head list; 1670 }; 1671 1672 #if 1 1673 enum rtllib_state { 1674 1675 /* the card is not linked at all */ 1676 RTLLIB_NOLINK = 0, 1677 1678 /* RTLLIB_ASSOCIATING* are for BSS client mode 1679 * the driver shall not perform RX filtering unless 1680 * the state is LINKED. 1681 * The driver shall just check for the state LINKED and 1682 * defaults to NOLINK for ALL the other states (including 1683 * LINKED_SCANNING) 1684 */ 1685 1686 /* the association procedure will start (wq scheduling)*/ 1687 RTLLIB_ASSOCIATING, 1688 RTLLIB_ASSOCIATING_RETRY, 1689 1690 /* the association procedure is sending AUTH request*/ 1691 RTLLIB_ASSOCIATING_AUTHENTICATING, 1692 1693 /* the association procedure has successfully authentcated 1694 * and is sending association request 1695 */ 1696 RTLLIB_ASSOCIATING_AUTHENTICATED, 1697 1698 /* the link is ok. the card associated to a BSS or linked 1699 * to a ibss cell or acting as an AP and creating the bss 1700 */ 1701 RTLLIB_LINKED, 1702 1703 /* same as LINKED, but the driver shall apply RX filter 1704 * rules as we are in NO_LINK mode. As the card is still 1705 * logically linked, but it is doing a syncro site survey 1706 * then it will be back to LINKED state. 1707 */ 1708 RTLLIB_LINKED_SCANNING, 1709 }; 1710 #else 1711 enum rtllib_state { 1712 RTLLIB_UNINITIALIZED = 0, 1713 RTLLIB_INITIALIZED, 1714 RTLLIB_ASSOCIATING, 1715 RTLLIB_ASSOCIATED, 1716 RTLLIB_AUTHENTICATING, 1717 RTLLIB_AUTHENTICATED, 1718 RTLLIB_SHUTDOWN 1719 }; 1720 #endif 1721 1722 #define DEFAULT_MAX_SCAN_AGE (15 * HZ) 1723 #define DEFAULT_FTS 2346 1724 1725 #define CFG_RTLLIB_RESERVE_FCS (1<<0) 1726 #define CFG_RTLLIB_COMPUTE_FCS (1<<1) 1727 #define CFG_RTLLIB_RTS (1<<2) 1728 1729 #define RTLLIB_24GHZ_MIN_CHANNEL 1 1730 #define RTLLIB_24GHZ_MAX_CHANNEL 14 1731 #define RTLLIB_24GHZ_CHANNELS (RTLLIB_24GHZ_MAX_CHANNEL - \ 1732 RTLLIB_24GHZ_MIN_CHANNEL + 1) 1733 1734 #define RTLLIB_52GHZ_MIN_CHANNEL 34 1735 #define RTLLIB_52GHZ_MAX_CHANNEL 165 1736 #define RTLLIB_52GHZ_CHANNELS (RTLLIB_52GHZ_MAX_CHANNEL - \ 1737 RTLLIB_52GHZ_MIN_CHANNEL + 1) 1738 #ifndef eqMacAddr 1739 #define eqMacAddr(a, b) \ 1740 (((a)[0] == (b)[0] && (a)[1] == (b)[1] && (a)[2] == (b)[2] && \ 1741 (a)[3] == (b)[3] && (a)[4] == (b)[4] && (a)[5] == (b)[5]) ? 1 : 0) 1742 #endif 1743 struct tx_pending { 1744 int frag; 1745 struct rtllib_txb *txb; 1746 }; 1747 1748 struct bandwidth_autoswitch { 1749 long threshold_20Mhzto40Mhz; 1750 long threshold_40Mhzto20Mhz; 1751 bool bforced_tx20Mhz; 1752 bool bautoswitch_enable; 1753 }; 1754 1755 1756 1757 #define REORDER_WIN_SIZE 128 1758 #define REORDER_ENTRY_NUM 128 1759 struct rx_reorder_entry { 1760 struct list_head List; 1761 u16 SeqNum; 1762 struct rtllib_rxb *prxb; 1763 }; 1764 enum fsync_state { 1765 Default_Fsync, 1766 HW_Fsync, 1767 SW_Fsync 1768 }; 1769 1770 enum rt_ps_mode { 1771 eActive, 1772 eMaxPs, 1773 eFastPs, 1774 eAutoPs, 1775 }; 1776 1777 enum ips_callback_function { 1778 IPS_CALLBACK_NONE = 0, 1779 IPS_CALLBACK_MGNT_LINK_REQUEST = 1, 1780 IPS_CALLBACK_JOIN_REQUEST = 2, 1781 }; 1782 1783 enum rt_join_action { 1784 RT_JOIN_INFRA = 1, 1785 RT_JOIN_IBSS = 2, 1786 RT_START_IBSS = 3, 1787 RT_NO_ACTION = 4, 1788 }; 1789 1790 struct ibss_parms { 1791 u16 atimWin; 1792 }; 1793 #define MAX_NUM_RATES 264 1794 1795 enum rt_rf_power_state { 1796 eRfOn, 1797 eRfSleep, 1798 eRfOff 1799 }; 1800 1801 #define MAX_SUPPORT_WOL_PATTERN_NUM 8 1802 1803 #define MAX_WOL_BIT_MASK_SIZE 16 1804 #define MAX_WOL_PATTERN_SIZE 128 1805 1806 enum wol_pattern_type { 1807 eNetBIOS = 0, 1808 eIPv4IPv6ARP, 1809 eIPv4IPv6TCPSYN, 1810 eMACIDOnly, 1811 eNoDefined, 1812 }; 1813 1814 struct rt_pm_wol_info { 1815 u32 PatternId; 1816 u32 Mask[4]; 1817 u16 CrcRemainder; 1818 u8 WFMIndex; 1819 enum wol_pattern_type PatternType; 1820 }; 1821 1822 struct rt_pwr_save_ctrl { 1823 1824 bool bInactivePs; 1825 bool bIPSModeBackup; 1826 bool bHaltAdapterClkRQ; 1827 bool bSwRfProcessing; 1828 enum rt_rf_power_state eInactivePowerState; 1829 struct work_struct InactivePsWorkItem; 1830 struct timer_list InactivePsTimer; 1831 1832 enum ips_callback_function ReturnPoint; 1833 1834 bool bTmpBssDesc; 1835 enum rt_join_action tmpJoinAction; 1836 struct rtllib_network tmpBssDesc; 1837 1838 bool bTmpScanOnly; 1839 bool bTmpActiveScan; 1840 bool bTmpFilterHiddenAP; 1841 bool bTmpUpdateParms; 1842 u8 tmpSsidBuf[33]; 1843 struct octet_string tmpSsid2Scan; 1844 bool bTmpSsid2Scan; 1845 u8 tmpNetworkType; 1846 u8 tmpChannelNumber; 1847 u16 tmpBcnPeriod; 1848 u8 tmpDtimPeriod; 1849 u16 tmpmCap; 1850 struct octet_string tmpSuppRateSet; 1851 u8 tmpSuppRateBuf[MAX_NUM_RATES]; 1852 bool bTmpSuppRate; 1853 struct ibss_parms tmpIbpm; 1854 bool bTmpIbpm; 1855 1856 bool bLeisurePs; 1857 u32 PowerProfile; 1858 u8 LpsIdleCount; 1859 u8 RegMaxLPSAwakeIntvl; 1860 u8 LPSAwakeIntvl; 1861 1862 u32 CurPsLevel; 1863 u32 RegRfPsLevel; 1864 1865 bool bFwCtrlLPS; 1866 u8 FWCtrlPSMode; 1867 1868 bool LinkReqInIPSRFOffPgs; 1869 bool BufConnectinfoBefore; 1870 1871 1872 bool bGpioRfSw; 1873 1874 u8 RegAMDPciASPM; 1875 1876 u8 oWLANMode; 1877 struct rt_pm_wol_info PmWoLPatternInfo[MAX_SUPPORT_WOL_PATTERN_NUM]; 1878 1879 }; 1880 1881 #define RT_RF_CHANGE_SOURCE u32 1882 1883 #define RF_CHANGE_BY_SW BIT31 1884 #define RF_CHANGE_BY_HW BIT30 1885 #define RF_CHANGE_BY_PS BIT29 1886 #define RF_CHANGE_BY_IPS BIT28 1887 #define RF_CHANGE_BY_INIT 0 1888 1889 enum country_code_type { 1890 COUNTRY_CODE_FCC = 0, 1891 COUNTRY_CODE_IC = 1, 1892 COUNTRY_CODE_ETSI = 2, 1893 COUNTRY_CODE_SPAIN = 3, 1894 COUNTRY_CODE_FRANCE = 4, 1895 COUNTRY_CODE_MKK = 5, 1896 COUNTRY_CODE_MKK1 = 6, 1897 COUNTRY_CODE_ISRAEL = 7, 1898 COUNTRY_CODE_TELEC = 8, 1899 COUNTRY_CODE_MIC = 9, 1900 COUNTRY_CODE_GLOBAL_DOMAIN = 10, 1901 COUNTRY_CODE_WORLD_WIDE_13 = 11, 1902 COUNTRY_CODE_TELEC_NETGEAR = 12, 1903 COUNTRY_CODE_MAX 1904 }; 1905 1906 enum scan_op_backup_opt { 1907 SCAN_OPT_BACKUP = 0, 1908 SCAN_OPT_RESTORE, 1909 SCAN_OPT_MAX 1910 }; 1911 1912 enum fw_cmd_io_type { 1913 FW_CMD_DIG_ENABLE = 0, 1914 FW_CMD_DIG_DISABLE = 1, 1915 FW_CMD_DIG_HALT = 2, 1916 FW_CMD_DIG_RESUME = 3, 1917 FW_CMD_HIGH_PWR_ENABLE = 4, 1918 FW_CMD_HIGH_PWR_DISABLE = 5, 1919 FW_CMD_RA_RESET = 6, 1920 FW_CMD_RA_ACTIVE = 7, 1921 FW_CMD_RA_REFRESH_N = 8, 1922 FW_CMD_RA_REFRESH_BG = 9, 1923 FW_CMD_RA_INIT = 10, 1924 FW_CMD_IQK_ENABLE = 11, 1925 FW_CMD_TXPWR_TRACK_ENABLE = 12, 1926 FW_CMD_TXPWR_TRACK_DISABLE = 13, 1927 FW_CMD_TXPWR_TRACK_THERMAL = 14, 1928 FW_CMD_PAUSE_DM_BY_SCAN = 15, 1929 FW_CMD_RESUME_DM_BY_SCAN = 16, 1930 FW_CMD_RA_REFRESH_N_COMB = 17, 1931 FW_CMD_RA_REFRESH_BG_COMB = 18, 1932 FW_CMD_ANTENNA_SW_ENABLE = 19, 1933 FW_CMD_ANTENNA_SW_DISABLE = 20, 1934 FW_CMD_TX_FEEDBACK_CCX_ENABLE = 21, 1935 FW_CMD_LPS_ENTER = 22, 1936 FW_CMD_LPS_LEAVE = 23, 1937 FW_CMD_DIG_MODE_SS = 24, 1938 FW_CMD_DIG_MODE_FA = 25, 1939 FW_CMD_ADD_A2_ENTRY = 26, 1940 FW_CMD_CTRL_DM_BY_DRIVER = 27, 1941 FW_CMD_CTRL_DM_BY_DRIVER_NEW = 28, 1942 FW_CMD_PAPE_CONTROL = 29, 1943 FW_CMD_CHAN_SET = 30, 1944 }; 1945 1946 #define RT_MAX_LD_SLOT_NUM 10 1947 struct rt_link_detect { 1948 1949 u32 NumRecvBcnInPeriod; 1950 u32 NumRecvDataInPeriod; 1951 1952 u32 RxBcnNum[RT_MAX_LD_SLOT_NUM]; 1953 u32 RxDataNum[RT_MAX_LD_SLOT_NUM]; 1954 u16 SlotNum; 1955 u16 SlotIndex; 1956 1957 u32 NumTxOkInPeriod; 1958 u32 NumRxOkInPeriod; 1959 u32 NumRxUnicastOkInPeriod; 1960 bool bBusyTraffic; 1961 bool bHigherBusyTraffic; 1962 bool bHigherBusyRxTraffic; 1963 u8 IdleCount; 1964 u32 NumTxUnicastOkInPeriod; 1965 u32 LastNumTxUnicast; 1966 u32 LastNumRxUnicast; 1967 }; 1968 1969 struct sw_cam_table { 1970 1971 u8 macaddr[6]; 1972 bool bused; 1973 u8 key_buf[16]; 1974 u16 key_type; 1975 u8 useDK; 1976 u8 key_index; 1977 1978 }; 1979 #define TOTAL_CAM_ENTRY 32 1980 struct rate_adaptive { 1981 u8 rate_adaptive_disabled; 1982 u8 ratr_state; 1983 u16 reserve; 1984 1985 u32 high_rssi_thresh_for_ra; 1986 u32 high2low_rssi_thresh_for_ra; 1987 u8 low2high_rssi_thresh_for_ra40M; 1988 u32 low_rssi_thresh_for_ra40M; 1989 u8 low2high_rssi_thresh_for_ra20M; 1990 u32 low_rssi_thresh_for_ra20M; 1991 u32 upper_rssi_threshold_ratr; 1992 u32 middle_rssi_threshold_ratr; 1993 u32 low_rssi_threshold_ratr; 1994 u32 low_rssi_threshold_ratr_40M; 1995 u32 low_rssi_threshold_ratr_20M; 1996 u8 ping_rssi_enable; 1997 u32 ping_rssi_ratr; 1998 u32 ping_rssi_thresh_for_ra; 1999 u32 last_ratr; 2000 u8 PreRATRState; 2001 2002 }; 2003 enum ratr_table_mode_8192s { 2004 RATR_INX_WIRELESS_NGB = 0, 2005 RATR_INX_WIRELESS_NG = 1, 2006 RATR_INX_WIRELESS_NB = 2, 2007 RATR_INX_WIRELESS_N = 3, 2008 RATR_INX_WIRELESS_GB = 4, 2009 RATR_INX_WIRELESS_G = 5, 2010 RATR_INX_WIRELESS_B = 6, 2011 RATR_INX_WIRELESS_MC = 7, 2012 RATR_INX_WIRELESS_A = 8, 2013 }; 2014 2015 #define NUM_PMKID_CACHE 16 2016 struct rt_pmkid_list { 2017 u8 bUsed; 2018 u8 Bssid[6]; 2019 u8 PMKID[16]; 2020 u8 SsidBuf[33]; 2021 u8 *ssid_octet; 2022 u16 ssid_length; 2023 }; 2024 2025 struct rt_intel_promisc_mode { 2026 bool bPromiscuousOn; 2027 bool bFilterSourceStationFrame; 2028 }; 2029 2030 2031 /*************** DRIVER STATUS *****/ 2032 #define STATUS_SCANNING 0 2033 #define STATUS_SCAN_HW 1 2034 #define STATUS_SCAN_ABORTING 2 2035 #define STATUS_SETTING_CHAN 3 2036 /*************** DRIVER STATUS *****/ 2037 2038 enum { 2039 NO_USE = 0, 2040 USED = 1, 2041 HW_SEC = 2, 2042 SW_SEC = 3, 2043 }; 2044 2045 enum { 2046 LPS_IS_WAKE = 0, 2047 LPS_IS_SLEEP = 1, 2048 LPS_WAIT_NULL_DATA_SEND = 2, 2049 }; 2050 2051 struct rtllib_device { 2052 struct pci_dev *pdev; 2053 struct net_device *dev; 2054 struct rtllib_security sec; 2055 2056 bool disable_mgnt_queue; 2057 2058 unsigned long status; 2059 short hwscan_ch_bk; 2060 enum ht_extchnl_offset chan_offset_bk; 2061 enum ht_channel_width bandwidth_bk; 2062 u8 hwscan_sem_up; 2063 u8 CntAfterLink; 2064 2065 enum rt_op_mode OpMode; 2066 2067 u8 VersionID; 2068 /* The last AssocReq/Resp IEs */ 2069 u8 *assocreq_ies, *assocresp_ies; 2070 size_t assocreq_ies_len, assocresp_ies_len; 2071 2072 bool b_customer_lenovo_id; 2073 bool bForcedShowRxRate; 2074 bool bForcedShowRateStill; 2075 u8 SystemQueryDataRateCount; 2076 bool bForcedBgMode; 2077 bool bUseRAMask; 2078 bool b1x1RecvCombine; 2079 u8 RF_Type; 2080 bool b1SSSupport; 2081 2082 u8 hwsec_active; 2083 bool is_silent_reset; 2084 bool force_mic_error; 2085 bool is_roaming; 2086 bool ieee_up; 2087 bool cannot_notify; 2088 bool bSupportRemoteWakeUp; 2089 enum rt_ps_mode dot11PowerSaveMode; 2090 bool actscanning; 2091 bool FirstIe_InScan; 2092 bool be_scan_inprogress; 2093 bool beinretry; 2094 enum rt_rf_power_state eRFPowerState; 2095 RT_RF_CHANGE_SOURCE RfOffReason; 2096 bool is_set_key; 2097 bool wx_set_enc; 2098 struct rt_hi_throughput *pHTInfo; 2099 spinlock_t bw_spinlock; 2100 2101 spinlock_t reorder_spinlock; 2102 u8 Regdot11HTOperationalRateSet[16]; 2103 u8 Regdot11TxHTOperationalRateSet[16]; 2104 u8 dot11HTOperationalRateSet[16]; 2105 u8 RegHTSuppRateSet[16]; 2106 u8 HTCurrentOperaRate; 2107 u8 HTHighestOperaRate; 2108 u8 MinSpaceCfg; 2109 u8 MaxMssDensity; 2110 u8 bTxDisableRateFallBack; 2111 u8 bTxUseDriverAssingedRate; 2112 u8 bTxEnableFwCalcDur; 2113 atomic_t atm_chnlop; 2114 atomic_t atm_swbw; 2115 2116 struct list_head Tx_TS_Admit_List; 2117 struct list_head Tx_TS_Pending_List; 2118 struct list_head Tx_TS_Unused_List; 2119 struct tx_ts_record TxTsRecord[TOTAL_TS_NUM]; 2120 struct list_head Rx_TS_Admit_List; 2121 struct list_head Rx_TS_Pending_List; 2122 struct list_head Rx_TS_Unused_List; 2123 struct rx_ts_record RxTsRecord[TOTAL_TS_NUM]; 2124 struct rx_reorder_entry RxReorderEntry[128]; 2125 struct list_head RxReorder_Unused_List; 2126 u8 ForcedPriority; 2127 2128 2129 /* Bookkeeping structures */ 2130 struct net_device_stats stats; 2131 struct rtllib_stats ieee_stats; 2132 struct rtllib_softmac_stats softmac_stats; 2133 2134 /* Probe / Beacon management */ 2135 struct list_head network_free_list; 2136 struct list_head network_list; 2137 struct rtllib_network *networks; 2138 int scans; 2139 int scan_age; 2140 2141 int iw_mode; /* operating mode (IW_MODE_*) */ 2142 bool bNetPromiscuousMode; 2143 struct rt_intel_promisc_mode IntelPromiscuousModeInfo; 2144 2145 struct iw_spy_data spy_data; 2146 2147 spinlock_t lock; 2148 spinlock_t wpax_suitlist_lock; 2149 2150 int tx_headroom; /* Set to size of any additional room needed at front 2151 * of allocated Tx SKBs */ 2152 u32 config; 2153 2154 /* WEP and other encryption related settings at the device level */ 2155 int open_wep; /* Set to 1 to allow unencrypted frames */ 2156 int auth_mode; 2157 int reset_on_keychange; /* Set to 1 if the HW needs to be reset on 2158 * WEP key changes */ 2159 2160 /* If the host performs {en,de}cryption, then set to 1 */ 2161 int host_encrypt; 2162 int host_encrypt_msdu; 2163 int host_decrypt; 2164 /* host performs multicast decryption */ 2165 int host_mc_decrypt; 2166 2167 /* host should strip IV and ICV from protected frames */ 2168 /* meaningful only when hardware decryption is being used */ 2169 int host_strip_iv_icv; 2170 2171 int host_open_frag; 2172 int host_build_iv; 2173 int ieee802_1x; /* is IEEE 802.1X used */ 2174 2175 /* WPA data */ 2176 bool bHalfNMode; 2177 bool bHalfWirelessN24GMode; 2178 int wpa_enabled; 2179 int drop_unencrypted; 2180 int tkip_countermeasures; 2181 int privacy_invoked; 2182 size_t wpa_ie_len; 2183 u8 *wpa_ie; 2184 size_t wps_ie_len; 2185 u8 *wps_ie; 2186 u8 ap_mac_addr[6]; 2187 u16 pairwise_key_type; 2188 u16 group_key_type; 2189 2190 struct lib80211_crypt_info crypt_info; 2191 2192 struct sw_cam_table swcamtable[TOTAL_CAM_ENTRY]; 2193 int bcrx_sta_key; /* use individual keys to override default keys even 2194 * with RX of broad/multicast frames */ 2195 2196 struct rt_pmkid_list PMKIDList[NUM_PMKID_CACHE]; 2197 2198 /* Fragmentation structures */ 2199 struct rtllib_frag_entry frag_cache[17][RTLLIB_FRAG_CACHE_LEN]; 2200 unsigned int frag_next_idx[17]; 2201 u16 fts; /* Fragmentation Threshold */ 2202 #define DEFAULT_RTS_THRESHOLD 2346U 2203 #define MIN_RTS_THRESHOLD 1 2204 #define MAX_RTS_THRESHOLD 2346U 2205 u16 rts; /* RTS threshold */ 2206 2207 /* Association info */ 2208 u8 bssid[ETH_ALEN]; 2209 2210 /* This stores infos for the current network. 2211 * Either the network we are associated in INFRASTRUCTURE 2212 * or the network that we are creating in MASTER mode. 2213 * ad-hoc is a mixture ;-). 2214 * Note that in infrastructure mode, even when not associated, 2215 * fields bssid and essid may be valid (if wpa_set and essid_set 2216 * are true) as thy carry the value set by the user via iwconfig 2217 */ 2218 struct rtllib_network current_network; 2219 2220 enum rtllib_state state; 2221 2222 int short_slot; 2223 int reg_mode; 2224 int mode; /* A, B, G */ 2225 int modulation; /* CCK, OFDM */ 2226 int freq_band; /* 2.4Ghz, 5.2Ghz, Mixed */ 2227 int abg_true; /* ABG flag */ 2228 2229 /* used for forcing the ibss workqueue to terminate 2230 * without wait for the syncro scan to terminate 2231 */ 2232 short sync_scan_hurryup; 2233 u16 scan_watch_dog; 2234 int perfect_rssi; 2235 int worst_rssi; 2236 2237 u16 prev_seq_ctl; /* used to drop duplicate frames */ 2238 2239 /* map of allowed channels. 0 is dummy */ 2240 void *pDot11dInfo; 2241 bool bGlobalDomain; 2242 u8 active_channel_map[MAX_CHANNEL_NUMBER+1]; 2243 2244 u8 IbssStartChnl; 2245 u8 ibss_maxjoin_chal; 2246 2247 int rate; /* current rate */ 2248 int basic_rate; 2249 u32 currentRate; 2250 2251 short active_scan; 2252 2253 /* this contains flags for selectively enable softmac support */ 2254 u16 softmac_features; 2255 2256 /* if the sequence control field is not filled by HW */ 2257 u16 seq_ctrl[5]; 2258 2259 /* association procedure transaction sequence number */ 2260 u16 associate_seq; 2261 2262 /* AID for RTXed association responses */ 2263 u16 assoc_id; 2264 2265 /* power save mode related*/ 2266 u8 ack_tx_to_ieee; 2267 short ps; 2268 short sta_sleep; 2269 int ps_timeout; 2270 int ps_period; 2271 struct tasklet_struct ps_task; 2272 u64 ps_time; 2273 bool polling; 2274 2275 short raw_tx; 2276 /* used if IEEE_SOFTMAC_TX_QUEUE is set */ 2277 short queue_stop; 2278 short scanning_continue ; 2279 short proto_started; 2280 short proto_stoppping; 2281 2282 struct semaphore wx_sem; 2283 struct semaphore scan_sem; 2284 struct semaphore ips_sem; 2285 2286 spinlock_t mgmt_tx_lock; 2287 spinlock_t beacon_lock; 2288 2289 short beacon_txing; 2290 2291 short wap_set; 2292 short ssid_set; 2293 2294 /* set on initialization */ 2295 u8 qos_support; 2296 unsigned int wmm_acm; 2297 2298 /* for discarding duplicated packets in IBSS */ 2299 struct list_head ibss_mac_hash[IEEE_IBSS_MAC_HASH_SIZE]; 2300 2301 /* for discarding duplicated packets in BSS */ 2302 u16 last_rxseq_num[17]; /* rx seq previous per-tid */ 2303 u16 last_rxfrag_num[17];/* tx frag previous per-tid */ 2304 unsigned long last_packet_time[17]; 2305 2306 /* for PS mode */ 2307 unsigned long last_rx_ps_time; 2308 bool bAwakePktSent; 2309 u8 LPSDelayCnt; 2310 2311 /* used if IEEE_SOFTMAC_SINGLE_QUEUE is set */ 2312 struct sk_buff *mgmt_queue_ring[MGMT_QUEUE_NUM]; 2313 int mgmt_queue_head; 2314 int mgmt_queue_tail; 2315 #define RTLLIB_QUEUE_LIMIT 128 2316 u8 AsocRetryCount; 2317 unsigned int hw_header; 2318 struct sk_buff_head skb_waitQ[MAX_QUEUE_SIZE]; 2319 struct sk_buff_head skb_aggQ[MAX_QUEUE_SIZE]; 2320 struct sk_buff_head skb_drv_aggQ[MAX_QUEUE_SIZE]; 2321 u32 sta_edca_param[4]; 2322 bool aggregation; 2323 bool enable_rx_imm_BA; 2324 bool bibsscoordinator; 2325 2326 bool bdynamic_txpower_enable; 2327 2328 bool bCTSToSelfEnable; 2329 u8 CTSToSelfTH; 2330 2331 u32 fsync_time_interval; 2332 u32 fsync_rate_bitmap; 2333 u8 fsync_rssi_threshold; 2334 bool bfsync_enable; 2335 2336 u8 fsync_multiple_timeinterval; 2337 u32 fsync_firstdiff_ratethreshold; 2338 u32 fsync_seconddiff_ratethreshold; 2339 enum fsync_state fsync_state; 2340 bool bis_any_nonbepkts; 2341 struct bandwidth_autoswitch bandwidth_auto_switch; 2342 bool FwRWRF; 2343 2344 struct rt_link_detect LinkDetectInfo; 2345 bool bIsAggregateFrame; 2346 struct rt_pwr_save_ctrl PowerSaveControl; 2347 u8 amsdu_in_process; 2348 2349 /* used if IEEE_SOFTMAC_TX_QUEUE is set */ 2350 struct tx_pending tx_pending; 2351 2352 /* used if IEEE_SOFTMAC_ASSOCIATE is set */ 2353 struct timer_list associate_timer; 2354 2355 /* used if IEEE_SOFTMAC_BEACONS is set */ 2356 struct timer_list beacon_timer; 2357 u8 need_sw_enc; 2358 struct work_struct associate_complete_wq; 2359 struct work_struct ips_leave_wq; 2360 struct delayed_work associate_procedure_wq; 2361 struct delayed_work softmac_scan_wq; 2362 struct delayed_work softmac_hint11d_wq; 2363 struct delayed_work associate_retry_wq; 2364 struct delayed_work start_ibss_wq; 2365 struct delayed_work hw_wakeup_wq; 2366 struct delayed_work hw_sleep_wq; 2367 struct delayed_work link_change_wq; 2368 struct work_struct wx_sync_scan_wq; 2369 2370 struct workqueue_struct *wq; 2371 union { 2372 struct rtllib_rxb *RfdArray[REORDER_WIN_SIZE]; 2373 struct rtllib_rxb *stats_IndicateArray[REORDER_WIN_SIZE]; 2374 struct rtllib_rxb *prxbIndicateArray[REORDER_WIN_SIZE]; 2375 struct { 2376 struct sw_chnl_cmd PreCommonCmd[MAX_PRECMD_CNT]; 2377 struct sw_chnl_cmd PostCommonCmd[MAX_POSTCMD_CNT]; 2378 struct sw_chnl_cmd RfDependCmd[MAX_RFDEPENDCMD_CNT]; 2379 }; 2380 }; 2381 2382 /* Callback functions */ 2383 void (*set_security)(struct net_device *dev, 2384 struct rtllib_security *sec); 2385 2386 /* Used to TX data frame by using txb structs. 2387 * this is not used if in the softmac_features 2388 * is set the flag IEEE_SOFTMAC_TX_QUEUE 2389 */ 2390 int (*hard_start_xmit)(struct rtllib_txb *txb, 2391 struct net_device *dev); 2392 2393 int (*reset_port)(struct net_device *dev); 2394 int (*is_queue_full)(struct net_device *dev, int pri); 2395 2396 int (*handle_management)(struct net_device *dev, 2397 struct rtllib_network *network, u16 type); 2398 int (*is_qos_active)(struct net_device *dev, struct sk_buff *skb); 2399 2400 /* Softmac-generated frames (mamagement) are TXed via this 2401 * callback if the flag IEEE_SOFTMAC_SINGLE_QUEUE is 2402 * not set. As some cards may have different HW queues that 2403 * one might want to use for data and management frames 2404 * the option to have two callbacks might be useful. 2405 * This fucntion can't sleep. 2406 */ 2407 int (*softmac_hard_start_xmit)(struct sk_buff *skb, 2408 struct net_device *dev); 2409 2410 /* used instead of hard_start_xmit (not softmac_hard_start_xmit) 2411 * if the IEEE_SOFTMAC_TX_QUEUE feature is used to TX data 2412 * frames. I the option IEEE_SOFTMAC_SINGLE_QUEUE is also set 2413 * then also management frames are sent via this callback. 2414 * This function can't sleep. 2415 */ 2416 void (*softmac_data_hard_start_xmit)(struct sk_buff *skb, 2417 struct net_device *dev, int rate); 2418 2419 /* stops the HW queue for DATA frames. Useful to avoid 2420 * waste time to TX data frame when we are reassociating 2421 * This function can sleep. 2422 */ 2423 void (*data_hard_stop)(struct net_device *dev); 2424 2425 /* OK this is complementar to data_poll_hard_stop */ 2426 void (*data_hard_resume)(struct net_device *dev); 2427 2428 /* ask to the driver to retune the radio . 2429 * This function can sleep. the driver should ensure 2430 * the radio has been swithced before return. 2431 */ 2432 void (*set_chan)(struct net_device *dev, short ch); 2433 2434 /* These are not used if the ieee stack takes care of 2435 * scanning (IEEE_SOFTMAC_SCAN feature set). 2436 * In this case only the set_chan is used. 2437 * 2438 * The syncro version is similar to the start_scan but 2439 * does not return until all channels has been scanned. 2440 * this is called in user context and should sleep, 2441 * it is called in a work_queue when swithcing to ad-hoc mode 2442 * or in behalf of iwlist scan when the card is associated 2443 * and root user ask for a scan. 2444 * the fucntion stop_scan should stop both the syncro and 2445 * background scanning and can sleep. 2446 * The fucntion start_scan should initiate the background 2447 * scanning and can't sleep. 2448 */ 2449 void (*scan_syncro)(struct net_device *dev); 2450 void (*start_scan)(struct net_device *dev); 2451 void (*stop_scan)(struct net_device *dev); 2452 2453 void (*rtllib_start_hw_scan)(struct net_device *dev); 2454 void (*rtllib_stop_hw_scan)(struct net_device *dev); 2455 2456 /* indicate the driver that the link state is changed 2457 * for example it may indicate the card is associated now. 2458 * Driver might be interested in this to apply RX filter 2459 * rules or simply light the LINK led 2460 */ 2461 void (*link_change)(struct net_device *dev); 2462 2463 /* these two function indicates to the HW when to start 2464 * and stop to send beacons. This is used when the 2465 * IEEE_SOFTMAC_BEACONS is not set. For now the 2466 * stop_send_bacons is NOT guaranteed to be called only 2467 * after start_send_beacons. 2468 */ 2469 void (*start_send_beacons)(struct net_device *dev); 2470 void (*stop_send_beacons)(struct net_device *dev); 2471 2472 /* power save mode related */ 2473 void (*sta_wake_up)(struct net_device *dev); 2474 void (*enter_sleep_state)(struct net_device *dev, u64 time); 2475 short (*ps_is_queue_empty)(struct net_device *dev); 2476 int (*handle_beacon)(struct net_device *dev, 2477 struct rtllib_beacon *beacon, 2478 struct rtllib_network *network); 2479 int (*handle_assoc_response)(struct net_device *dev, 2480 struct rtllib_assoc_response_frame *resp, 2481 struct rtllib_network *network); 2482 2483 2484 /* check whether Tx hw resouce available */ 2485 short (*check_nic_enough_desc)(struct net_device *dev, int queue_index); 2486 short (*get_nic_desc_num)(struct net_device *dev, int queue_index); 2487 void (*SetBWModeHandler)(struct net_device *dev, 2488 enum ht_channel_width Bandwidth, 2489 enum ht_extchnl_offset Offset); 2490 bool (*GetNmodeSupportBySecCfg)(struct net_device *dev); 2491 void (*SetWirelessMode)(struct net_device *dev, u8 wireless_mode); 2492 bool (*GetHalfNmodeSupportByAPsHandler)(struct net_device *dev); 2493 u8 (*rtllib_ap_sec_type)(struct rtllib_device *ieee); 2494 void (*HalUsbRxAggrHandler)(struct net_device *dev, bool Value); 2495 void (*InitialGainHandler)(struct net_device *dev, u8 Operation); 2496 bool (*SetFwCmdHandler)(struct net_device *dev, 2497 enum fw_cmd_io_type FwCmdIO); 2498 void (*UpdateHalRAMaskHandler)(struct net_device *dev, bool bMulticast, 2499 u8 macId, u8 MimoPs, u8 WirelessMode, 2500 u8 bCurTxBW40MHz, u8 rssi_level); 2501 void (*UpdateBeaconInterruptHandler)(struct net_device *dev, 2502 bool start); 2503 void (*UpdateInterruptMaskHandler)(struct net_device *dev, u32 AddMSR, 2504 u32 RemoveMSR); 2505 u16 (*rtl_11n_user_show_rates)(struct net_device *dev); 2506 void (*ScanOperationBackupHandler)(struct net_device *dev, 2507 u8 Operation); 2508 void (*LedControlHandler)(struct net_device *dev, 2509 enum led_ctl_mode LedAction); 2510 void (*SetHwRegHandler)(struct net_device *dev, u8 variable, u8 *val); 2511 void (*GetHwRegHandler)(struct net_device *dev, u8 variable, u8 *val); 2512 2513 void (*AllowAllDestAddrHandler)(struct net_device *dev, 2514 bool bAllowAllDA, bool WriteIntoReg); 2515 2516 void (*rtllib_ips_leave_wq) (struct net_device *dev); 2517 void (*rtllib_ips_leave)(struct net_device *dev); 2518 void (*LeisurePSLeave)(struct net_device *dev); 2519 void (*rtllib_rfkill_poll)(struct net_device *dev); 2520 2521 /* This must be the last item so that it points to the data 2522 * allocated beyond this structure by alloc_rtllib */ 2523 u8 priv[0]; 2524 }; 2525 2526 #define IEEE_A (1<<0) 2527 #define IEEE_B (1<<1) 2528 #define IEEE_G (1<<2) 2529 #define IEEE_N_24G (1<<4) 2530 #define IEEE_N_5G (1<<5) 2531 #define IEEE_MODE_MASK (IEEE_A|IEEE_B|IEEE_G) 2532 2533 /* Generate a 802.11 header */ 2534 2535 /* Uses the channel change callback directly 2536 * instead of [start/stop] scan callbacks 2537 */ 2538 #define IEEE_SOFTMAC_SCAN (1<<2) 2539 2540 /* Perform authentication and association handshake */ 2541 #define IEEE_SOFTMAC_ASSOCIATE (1<<3) 2542 2543 /* Generate probe requests */ 2544 #define IEEE_SOFTMAC_PROBERQ (1<<4) 2545 2546 /* Generate respones to probe requests */ 2547 #define IEEE_SOFTMAC_PROBERS (1<<5) 2548 2549 /* The ieee802.11 stack will manages the netif queue 2550 * wake/stop for the driver, taking care of 802.11 2551 * fragmentation. See softmac.c for details. */ 2552 #define IEEE_SOFTMAC_TX_QUEUE (1<<7) 2553 2554 /* Uses only the softmac_data_hard_start_xmit 2555 * even for TX management frames. 2556 */ 2557 #define IEEE_SOFTMAC_SINGLE_QUEUE (1<<8) 2558 2559 /* Generate beacons. The stack will enqueue beacons 2560 * to the card 2561 */ 2562 #define IEEE_SOFTMAC_BEACONS (1<<6) 2563 2564 2565 static inline void *rtllib_priv(struct net_device *dev) 2566 { 2567 return ((struct rtllib_device *)netdev_priv(dev))->priv; 2568 } 2569 2570 extern inline int rtllib_is_empty_essid(const char *essid, int essid_len) 2571 { 2572 /* Single white space is for Linksys APs */ 2573 if (essid_len == 1 && essid[0] == ' ') 2574 return 1; 2575 2576 /* Otherwise, if the entire essid is 0, we assume it is hidden */ 2577 while (essid_len) { 2578 essid_len--; 2579 if (essid[essid_len] != '\0') 2580 return 0; 2581 } 2582 2583 return 1; 2584 } 2585 2586 extern inline int rtllib_is_valid_mode(struct rtllib_device *ieee, int mode) 2587 { 2588 /* 2589 * It is possible for both access points and our device to support 2590 * combinations of modes, so as long as there is one valid combination 2591 * of ap/device supported modes, then return success 2592 * 2593 */ 2594 if ((mode & IEEE_A) && 2595 (ieee->modulation & RTLLIB_OFDM_MODULATION) && 2596 (ieee->freq_band & RTLLIB_52GHZ_BAND)) 2597 return 1; 2598 2599 if ((mode & IEEE_G) && 2600 (ieee->modulation & RTLLIB_OFDM_MODULATION) && 2601 (ieee->freq_band & RTLLIB_24GHZ_BAND)) 2602 return 1; 2603 2604 if ((mode & IEEE_B) && 2605 (ieee->modulation & RTLLIB_CCK_MODULATION) && 2606 (ieee->freq_band & RTLLIB_24GHZ_BAND)) 2607 return 1; 2608 2609 return 0; 2610 } 2611 2612 extern inline int rtllib_get_hdrlen(u16 fc) 2613 { 2614 int hdrlen = RTLLIB_3ADDR_LEN; 2615 2616 switch (WLAN_FC_GET_TYPE(fc)) { 2617 case RTLLIB_FTYPE_DATA: 2618 if ((fc & RTLLIB_FCTL_FROMDS) && (fc & RTLLIB_FCTL_TODS)) 2619 hdrlen = RTLLIB_4ADDR_LEN; /* Addr4 */ 2620 if (RTLLIB_QOS_HAS_SEQ(fc)) 2621 hdrlen += 2; /* QOS ctrl*/ 2622 break; 2623 case RTLLIB_FTYPE_CTL: 2624 switch (WLAN_FC_GET_STYPE(fc)) { 2625 case RTLLIB_STYPE_CTS: 2626 case RTLLIB_STYPE_ACK: 2627 hdrlen = RTLLIB_1ADDR_LEN; 2628 break; 2629 default: 2630 hdrlen = RTLLIB_2ADDR_LEN; 2631 break; 2632 } 2633 break; 2634 } 2635 2636 return hdrlen; 2637 } 2638 2639 static inline u8 *rtllib_get_payload(struct rtllib_hdr *hdr) 2640 { 2641 switch (rtllib_get_hdrlen(le16_to_cpu(hdr->frame_ctl))) { 2642 case RTLLIB_1ADDR_LEN: 2643 return ((struct rtllib_hdr_1addr *)hdr)->payload; 2644 case RTLLIB_2ADDR_LEN: 2645 return ((struct rtllib_hdr_2addr *)hdr)->payload; 2646 case RTLLIB_3ADDR_LEN: 2647 return ((struct rtllib_hdr_3addr *)hdr)->payload; 2648 case RTLLIB_4ADDR_LEN: 2649 return ((struct rtllib_hdr_4addr *)hdr)->payload; 2650 } 2651 return NULL; 2652 } 2653 2654 static inline int rtllib_is_ofdm_rate(u8 rate) 2655 { 2656 switch (rate & ~RTLLIB_BASIC_RATE_MASK) { 2657 case RTLLIB_OFDM_RATE_6MB: 2658 case RTLLIB_OFDM_RATE_9MB: 2659 case RTLLIB_OFDM_RATE_12MB: 2660 case RTLLIB_OFDM_RATE_18MB: 2661 case RTLLIB_OFDM_RATE_24MB: 2662 case RTLLIB_OFDM_RATE_36MB: 2663 case RTLLIB_OFDM_RATE_48MB: 2664 case RTLLIB_OFDM_RATE_54MB: 2665 return 1; 2666 } 2667 return 0; 2668 } 2669 2670 static inline int rtllib_is_cck_rate(u8 rate) 2671 { 2672 switch (rate & ~RTLLIB_BASIC_RATE_MASK) { 2673 case RTLLIB_CCK_RATE_1MB: 2674 case RTLLIB_CCK_RATE_2MB: 2675 case RTLLIB_CCK_RATE_5MB: 2676 case RTLLIB_CCK_RATE_11MB: 2677 return 1; 2678 } 2679 return 0; 2680 } 2681 2682 2683 /* rtllib.c */ 2684 extern void free_rtllib(struct net_device *dev); 2685 extern struct net_device *alloc_rtllib(int sizeof_priv); 2686 2687 extern int rtllib_set_encryption(struct rtllib_device *ieee); 2688 2689 /* rtllib_tx.c */ 2690 2691 extern int rtllib_encrypt_fragment( 2692 struct rtllib_device *ieee, 2693 struct sk_buff *frag, 2694 int hdr_len); 2695 2696 extern int rtllib_xmit(struct sk_buff *skb, struct net_device *dev); 2697 extern int rtllib_xmit_inter(struct sk_buff *skb, struct net_device *dev); 2698 extern void rtllib_txb_free(struct rtllib_txb *); 2699 2700 /* rtllib_rx.c */ 2701 extern int rtllib_rx(struct rtllib_device *ieee, struct sk_buff *skb, 2702 struct rtllib_rx_stats *rx_stats); 2703 extern void rtllib_rx_mgt(struct rtllib_device *ieee, 2704 struct sk_buff *skb, 2705 struct rtllib_rx_stats *stats); 2706 extern void rtllib_rx_probe_rq(struct rtllib_device *ieee, 2707 struct sk_buff *skb); 2708 extern int rtllib_legal_channel(struct rtllib_device *rtllib, u8 channel); 2709 2710 /* rtllib_wx.c */ 2711 extern int rtllib_wx_get_scan(struct rtllib_device *ieee, 2712 struct iw_request_info *info, 2713 union iwreq_data *wrqu, char *key); 2714 extern int rtllib_wx_set_encode(struct rtllib_device *ieee, 2715 struct iw_request_info *info, 2716 union iwreq_data *wrqu, char *key); 2717 extern int rtllib_wx_get_encode(struct rtllib_device *ieee, 2718 struct iw_request_info *info, 2719 union iwreq_data *wrqu, char *key); 2720 #if WIRELESS_EXT >= 18 2721 extern int rtllib_wx_get_encode_ext(struct rtllib_device *ieee, 2722 struct iw_request_info *info, 2723 union iwreq_data *wrqu, char *extra); 2724 extern int rtllib_wx_set_encode_ext(struct rtllib_device *ieee, 2725 struct iw_request_info *info, 2726 union iwreq_data *wrqu, char *extra); 2727 #endif 2728 extern int rtllib_wx_set_auth(struct rtllib_device *ieee, 2729 struct iw_request_info *info, 2730 struct iw_param *data, char *extra); 2731 extern int rtllib_wx_set_mlme(struct rtllib_device *ieee, 2732 struct iw_request_info *info, 2733 union iwreq_data *wrqu, char *extra); 2734 extern int rtllib_wx_set_gen_ie(struct rtllib_device *ieee, u8 *ie, size_t len); 2735 2736 /* rtllib_softmac.c */ 2737 extern short rtllib_is_54g(struct rtllib_network *net); 2738 extern short rtllib_is_shortslot(const struct rtllib_network *net); 2739 extern int rtllib_rx_frame_softmac(struct rtllib_device *ieee, 2740 struct sk_buff *skb, 2741 struct rtllib_rx_stats *rx_stats, u16 type, 2742 u16 stype); 2743 extern void rtllib_softmac_new_net(struct rtllib_device *ieee, 2744 struct rtllib_network *net); 2745 2746 void SendDisassociation(struct rtllib_device *ieee, bool deauth, u16 asRsn); 2747 extern void rtllib_softmac_xmit(struct rtllib_txb *txb, 2748 struct rtllib_device *ieee); 2749 2750 extern void rtllib_stop_send_beacons(struct rtllib_device *ieee); 2751 extern void notify_wx_assoc_event(struct rtllib_device *ieee); 2752 extern void rtllib_softmac_check_all_nets(struct rtllib_device *ieee); 2753 extern void rtllib_start_bss(struct rtllib_device *ieee); 2754 extern void rtllib_start_master_bss(struct rtllib_device *ieee); 2755 extern void rtllib_start_ibss(struct rtllib_device *ieee); 2756 extern void rtllib_softmac_init(struct rtllib_device *ieee); 2757 extern void rtllib_softmac_free(struct rtllib_device *ieee); 2758 extern void rtllib_associate_abort(struct rtllib_device *ieee); 2759 extern void rtllib_disassociate(struct rtllib_device *ieee); 2760 extern void rtllib_stop_scan(struct rtllib_device *ieee); 2761 extern bool rtllib_act_scanning(struct rtllib_device *ieee, bool sync_scan); 2762 extern void rtllib_stop_scan_syncro(struct rtllib_device *ieee); 2763 extern void rtllib_start_scan_syncro(struct rtllib_device *ieee, u8 is_mesh); 2764 extern inline struct sk_buff *rtllib_probe_req(struct rtllib_device *ieee); 2765 extern u8 MgntQuery_MgntFrameTxRate(struct rtllib_device *ieee); 2766 extern void rtllib_sta_ps_send_null_frame(struct rtllib_device *ieee, 2767 short pwr); 2768 extern void rtllib_sta_wakeup(struct rtllib_device *ieee, short nl); 2769 extern void rtllib_sta_ps_send_pspoll_frame(struct rtllib_device *ieee); 2770 extern void rtllib_check_all_nets(struct rtllib_device *ieee); 2771 extern void rtllib_start_protocol(struct rtllib_device *ieee); 2772 extern void rtllib_stop_protocol(struct rtllib_device *ieee, u8 shutdown); 2773 2774 extern void rtllib_EnableNetMonitorMode(struct net_device *dev, 2775 bool bInitState); 2776 extern void rtllib_DisableNetMonitorMode(struct net_device *dev, 2777 bool bInitState); 2778 extern void rtllib_EnableIntelPromiscuousMode(struct net_device *dev, 2779 bool bInitState); 2780 extern void rtllib_DisableIntelPromiscuousMode(struct net_device *dev, 2781 bool bInitState); 2782 extern void rtllib_send_probe_requests(struct rtllib_device *ieee, u8 is_mesh); 2783 2784 extern void rtllib_softmac_stop_protocol(struct rtllib_device *ieee, 2785 u8 mesh_flag, u8 shutdown); 2786 extern void rtllib_softmac_start_protocol(struct rtllib_device *ieee, 2787 u8 mesh_flag); 2788 2789 extern void rtllib_reset_queue(struct rtllib_device *ieee); 2790 extern void rtllib_wake_queue(struct rtllib_device *ieee); 2791 extern void rtllib_stop_queue(struct rtllib_device *ieee); 2792 extern void rtllib_wake_all_queues(struct rtllib_device *ieee); 2793 extern void rtllib_stop_all_queues(struct rtllib_device *ieee); 2794 extern struct sk_buff *rtllib_get_beacon(struct rtllib_device *ieee); 2795 extern void rtllib_start_send_beacons(struct rtllib_device *ieee); 2796 extern void rtllib_stop_send_beacons(struct rtllib_device *ieee); 2797 extern int rtllib_wpa_supplicant_ioctl(struct rtllib_device *ieee, 2798 struct iw_point *p, u8 is_mesh); 2799 2800 extern void notify_wx_assoc_event(struct rtllib_device *ieee); 2801 extern void rtllib_ps_tx_ack(struct rtllib_device *ieee, short success); 2802 2803 extern void softmac_mgmt_xmit(struct sk_buff *skb, 2804 struct rtllib_device *ieee); 2805 extern u16 rtllib_query_seqnum(struct rtllib_device *ieee, 2806 struct sk_buff *skb, u8 *dst); 2807 extern u8 rtllib_ap_sec_type(struct rtllib_device *ieee); 2808 2809 /* rtllib_crypt_ccmp&tkip&wep.c */ 2810 extern void rtllib_tkip_null(void); 2811 extern void rtllib_wep_null(void); 2812 extern void rtllib_ccmp_null(void); 2813 2814 /* rtllib_softmac_wx.c */ 2815 2816 extern int rtllib_wx_get_wap(struct rtllib_device *ieee, 2817 struct iw_request_info *info, 2818 union iwreq_data *wrqu, char *ext); 2819 2820 extern int rtllib_wx_set_wap(struct rtllib_device *ieee, 2821 struct iw_request_info *info, 2822 union iwreq_data *awrq, 2823 char *extra); 2824 2825 extern int rtllib_wx_get_essid(struct rtllib_device *ieee, 2826 struct iw_request_info *a, 2827 union iwreq_data *wrqu, char *b); 2828 2829 extern int rtllib_wx_set_rate(struct rtllib_device *ieee, 2830 struct iw_request_info *info, 2831 union iwreq_data *wrqu, char *extra); 2832 2833 extern int rtllib_wx_get_rate(struct rtllib_device *ieee, 2834 struct iw_request_info *info, 2835 union iwreq_data *wrqu, char *extra); 2836 2837 extern int rtllib_wx_set_mode(struct rtllib_device *ieee, 2838 struct iw_request_info *a, 2839 union iwreq_data *wrqu, char *b); 2840 2841 extern int rtllib_wx_set_scan(struct rtllib_device *ieee, 2842 struct iw_request_info *a, 2843 union iwreq_data *wrqu, char *b); 2844 2845 extern int rtllib_wx_set_essid(struct rtllib_device *ieee, 2846 struct iw_request_info *a, 2847 union iwreq_data *wrqu, char *extra); 2848 2849 extern int rtllib_wx_get_mode(struct rtllib_device *ieee, 2850 struct iw_request_info *a, 2851 union iwreq_data *wrqu, char *b); 2852 2853 extern int rtllib_wx_set_freq(struct rtllib_device *ieee, 2854 struct iw_request_info *a, 2855 union iwreq_data *wrqu, char *b); 2856 2857 extern int rtllib_wx_get_freq(struct rtllib_device *ieee, 2858 struct iw_request_info *a, 2859 union iwreq_data *wrqu, char *b); 2860 extern void rtllib_wx_sync_scan_wq(void *data); 2861 2862 extern int rtllib_wx_set_rawtx(struct rtllib_device *ieee, 2863 struct iw_request_info *info, 2864 union iwreq_data *wrqu, char *extra); 2865 2866 extern int rtllib_wx_get_name(struct rtllib_device *ieee, 2867 struct iw_request_info *info, 2868 union iwreq_data *wrqu, char *extra); 2869 2870 extern int rtllib_wx_set_power(struct rtllib_device *ieee, 2871 struct iw_request_info *info, 2872 union iwreq_data *wrqu, char *extra); 2873 2874 extern int rtllib_wx_get_power(struct rtllib_device *ieee, 2875 struct iw_request_info *info, 2876 union iwreq_data *wrqu, char *extra); 2877 2878 extern int rtllib_wx_set_rts(struct rtllib_device *ieee, 2879 struct iw_request_info *info, 2880 union iwreq_data *wrqu, char *extra); 2881 2882 extern int rtllib_wx_get_rts(struct rtllib_device *ieee, 2883 struct iw_request_info *info, 2884 union iwreq_data *wrqu, char *extra); 2885 #define MAX_RECEIVE_BUFFER_SIZE 9100 2886 extern void HTDebugHTCapability(u8 *CapIE, u8 *TitleString); 2887 extern void HTDebugHTInfo(u8 *InfoIE, u8 *TitleString); 2888 2889 void HTSetConnectBwMode(struct rtllib_device *ieee, 2890 enum ht_channel_width Bandwidth, 2891 enum ht_extchnl_offset Offset); 2892 extern void HTUpdateDefaultSetting(struct rtllib_device *ieee); 2893 extern void HTConstructCapabilityElement(struct rtllib_device *ieee, 2894 u8 *posHTCap, u8 *len, 2895 u8 isEncrypt, bool bAssoc); 2896 extern void HTConstructInfoElement(struct rtllib_device *ieee, 2897 u8 *posHTInfo, u8 *len, u8 isEncrypt); 2898 extern void HTConstructRT2RTAggElement(struct rtllib_device *ieee, 2899 u8 *posRT2RTAgg, u8* len); 2900 extern void HTOnAssocRsp(struct rtllib_device *ieee); 2901 extern void HTInitializeHTInfo(struct rtllib_device *ieee); 2902 extern void HTInitializeBssDesc(struct bss_ht *pBssHT); 2903 extern void HTResetSelfAndSavePeerSetting(struct rtllib_device *ieee, 2904 struct rtllib_network *pNetwork); 2905 extern void HT_update_self_and_peer_setting(struct rtllib_device *ieee, 2906 struct rtllib_network *pNetwork); 2907 extern u8 HTGetHighestMCSRate(struct rtllib_device *ieee, u8 *pMCSRateSet, 2908 u8 *pMCSFilter); 2909 extern u8 MCS_FILTER_ALL[]; 2910 extern u16 MCS_DATA_RATE[2][2][77] ; 2911 extern u8 HTCCheck(struct rtllib_device *ieee, u8 *pFrame); 2912 extern void HTResetIOTSetting(struct rt_hi_throughput *pHTInfo); 2913 extern bool IsHTHalfNmodeAPs(struct rtllib_device *ieee); 2914 extern u16 HTHalfMcsToDataRate(struct rtllib_device *ieee, u8 nMcsRate); 2915 extern u16 HTMcsToDataRate(struct rtllib_device *ieee, u8 nMcsRate); 2916 extern u16 TxCountToDataRate(struct rtllib_device *ieee, u8 nDataRate); 2917 extern int rtllib_rx_ADDBAReq(struct rtllib_device *ieee, struct sk_buff *skb); 2918 extern int rtllib_rx_ADDBARsp(struct rtllib_device *ieee, struct sk_buff *skb); 2919 extern int rtllib_rx_DELBA(struct rtllib_device *ieee, struct sk_buff *skb); 2920 extern void TsInitAddBA(struct rtllib_device *ieee, struct tx_ts_record *pTS, 2921 u8 Policy, u8 bOverwritePending); 2922 extern void TsInitDelBA(struct rtllib_device *ieee, 2923 struct ts_common_info *pTsCommonInfo, 2924 enum tr_select TxRxSelect); 2925 extern void BaSetupTimeOut(unsigned long data); 2926 extern void TxBaInactTimeout(unsigned long data); 2927 extern void RxBaInactTimeout(unsigned long data); 2928 extern void ResetBaEntry(struct ba_record *pBA); 2929 extern bool GetTs( 2930 struct rtllib_device *ieee, 2931 struct ts_common_info **ppTS, 2932 u8 *Addr, 2933 u8 TID, 2934 enum tr_select TxRxSelect, 2935 bool bAddNewTs 2936 ); 2937 extern void TSInitialize(struct rtllib_device *ieee); 2938 extern void TsStartAddBaProcess(struct rtllib_device *ieee, 2939 struct tx_ts_record *pTxTS); 2940 extern void RemovePeerTS(struct rtllib_device *ieee, u8 *Addr); 2941 extern void RemoveAllTS(struct rtllib_device *ieee); 2942 void rtllib_softmac_scan_syncro(struct rtllib_device *ieee, u8 is_mesh); 2943 2944 extern const long rtllib_wlan_frequencies[]; 2945 2946 extern inline void rtllib_increment_scans(struct rtllib_device *ieee) 2947 { 2948 ieee->scans++; 2949 } 2950 2951 extern inline int rtllib_get_scans(struct rtllib_device *ieee) 2952 { 2953 return ieee->scans; 2954 } 2955 2956 static inline const char *escape_essid(const char *essid, u8 essid_len) 2957 { 2958 static char escaped[IW_ESSID_MAX_SIZE * 2 + 1]; 2959 const char *s = essid; 2960 char *d = escaped; 2961 2962 if (rtllib_is_empty_essid(essid, essid_len)) { 2963 memcpy(escaped, "<hidden>", sizeof("<hidden>")); 2964 return escaped; 2965 } 2966 2967 essid_len = min(essid_len, (u8)IW_ESSID_MAX_SIZE); 2968 while (essid_len--) { 2969 if (*s == '\0') { 2970 *d++ = '\\'; 2971 *d++ = '0'; 2972 s++; 2973 } else { 2974 *d++ = *s++; 2975 } 2976 } 2977 *d = '\0'; 2978 return escaped; 2979 } 2980 2981 #define CONVERT_RATE(_ieee, _MGN_RATE) \ 2982 ((_MGN_RATE < MGN_MCS0) ? (_MGN_RATE) : \ 2983 (HTMcsToDataRate(_ieee, (u8)_MGN_RATE))) 2984 2985 /* fun with the built-in rtllib stack... */ 2986 bool rtllib_MgntDisconnect(struct rtllib_device *rtllib, u8 asRsn); 2987 2988 2989 /* For the function is more related to hardware setting, it's better to use the 2990 * ieee handler to refer to it. 2991 */ 2992 extern void rtllib_update_active_chan_map(struct rtllib_device *ieee); 2993 extern void rtllib_FlushRxTsPendingPkts(struct rtllib_device *ieee, 2994 struct rx_ts_record *pTS); 2995 extern int rtllib_data_xmit(struct sk_buff *skb, struct net_device *dev); 2996 extern int rtllib_parse_info_param(struct rtllib_device *ieee, 2997 struct rtllib_info_element *info_element, 2998 u16 length, 2999 struct rtllib_network *network, 3000 struct rtllib_rx_stats *stats); 3001 3002 void rtllib_indicate_packets(struct rtllib_device *ieee, 3003 struct rtllib_rxb **prxbIndicateArray, u8 index); 3004 extern u8 HTFilterMCSRate(struct rtllib_device *ieee, u8 *pSupportMCS, 3005 u8 *pOperateMCS); 3006 extern void HTUseDefaultSetting(struct rtllib_device *ieee); 3007 #define RT_ASOC_RETRY_LIMIT 5 3008 u8 MgntQuery_TxRateExcludeCCKRates(struct rtllib_device *ieee); 3009 extern void rtllib_TURBO_Info(struct rtllib_device *ieee, u8 **tag_p); 3010 #ifndef ENABLE_LOCK_DEBUG 3011 #define SPIN_LOCK_IEEE(plock) spin_lock_irqsave((plock), flags) 3012 #define SPIN_UNLOCK_IEEE(plock) spin_unlock_irqrestore((plock), flags) 3013 #define SPIN_LOCK_IEEE_REORDER(plock) spin_lock_irqsave((plock), flags) 3014 #define SPIN_UNLOCK_IEEE_REORDER(plock) spin_unlock_irqrestore((plock), flags) 3015 #define SPIN_LOCK_IEEE_WPAX(plock) spin_lock_irqsave((plock), flags) 3016 #define SPIN_UNLOCK_IEEE_WPAX(plock) spin_unlock_irqrestore((plock), flags) 3017 #define SPIN_LOCK_IEEE_MGNTTX(plock) spin_lock_irqsave((plock), flags) 3018 #define SPIN_UNLOCK_IEEE_MGNTTX(plock) spin_unlock_irqrestore((plock), flags) 3019 #define SPIN_LOCK_IEEE_BCN(plock) spin_lock_irqsave((plock), flags) 3020 #define SPIN_UNLOCK_IEEE_BCN(plock) spin_unlock_irqrestore((plock), flags) 3021 #define SPIN_LOCK_MSH_STAINFO(plock) spin_lock_irqsave((plock), flags) 3022 #define SPIN_UNLOCK_MSH_STAINFO(plock) spin_unlock_irqrestore((plock), flags) 3023 #define SPIN_LOCK_MSH_PREQ(plock) spin_lock_irqsave((plock), flags) 3024 #define SPIN_UNLOCK_MSH_PREQ(plock) spin_unlock_irqrestore((plock), flags) 3025 #define SPIN_LOCK_MSH_QUEUE(plock) spin_lock_irqsave((plock), flags) 3026 #define SPIN_UNLOCK_MSH_QUEUE(plock) spin_unlock_irqrestore((plock), flags) 3027 #define SPIN_LOCK_PRIV_RFPS(plock) spin_lock_irqsave((plock), flags) 3028 #define SPIN_UNLOCK_PRIV_RFPS(plock) spin_unlock_irqrestore((plock), flags) 3029 #define SPIN_LOCK_PRIV_IRQTH(plock) spin_lock_irqsave((plock), flags) 3030 #define SPIN_UNLOCK_PRIV_IRQTH(plock) spin_unlock_irqrestore((plock), flags) 3031 #define SPIN_LOCK_PRIV_TX(plock) spin_lock_irqsave((plock), flags) 3032 #define SPIN_UNLOCK_PRIV_TX(plock) spin_unlock_irqrestore((plock), flags) 3033 #define SPIN_LOCK_PRIV_D3(plock) spin_lock_irqsave((plock), flags) 3034 #define SPIN_UNLOCK_PRIV_D3(plock) spin_unlock_irqrestore((plock), flags) 3035 #define SPIN_LOCK_PRIV_RF(plock) spin_lock_irqsave((plock), flags) 3036 #define SPIN_UNLOCK_PRIV_RF(plock) spin_unlock_irqrestore((plock), flags) 3037 #define SPIN_LOCK_PRIV_PS(plock) spin_lock_irqsave((plock), flags) 3038 #define SPIN_UNLOCK_PRIV_PS(plock) spin_unlock_irqrestore((plock), flags) 3039 #define SEM_DOWN_IEEE_WX(psem) down(psem) 3040 #define SEM_UP_IEEE_WX(psem) up(psem) 3041 #define SEM_DOWN_IEEE_SCAN(psem) down(psem) 3042 #define SEM_UP_IEEE_SCAN(psem) up(psem) 3043 #define SEM_DOWN_IEEE_IPS(psem) down(psem) 3044 #define SEM_UP_IEEE_IPS(psem) up(psem) 3045 #define SEM_DOWN_PRIV_WX(psem) down(psem) 3046 #define SEM_UP_PRIV_WX(psem) up(psem) 3047 #define SEM_DOWN_PRIV_RF(psem) down(psem) 3048 #define SEM_UP_PRIV_RF(psem) up(psem) 3049 #define MUTEX_LOCK_PRIV(pmutex) mutex_lock(pmutex) 3050 #define MUTEX_UNLOCK_PRIV(pmutex) mutex_unlock(pmutex) 3051 #endif 3052 3053 #endif /* RTLLIB_H */ 3054