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