1 /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 2 /* Copyright(c) 2007 - 2011 Realtek Corporation. */ 3 4 #ifndef __RTW_MLME_EXT_H_ 5 #define __RTW_MLME_EXT_H_ 6 7 #include "osdep_service.h" 8 #include "drv_types.h" 9 #include "wlan_bssdef.h" 10 11 /* Commented by Albert 20101105 */ 12 /* Increase the SURVEY_TO value from 100 to 150 ( 100ms to 150ms ) */ 13 /* The Realtek 8188CE SoftAP will spend around 100ms to send the probe response after receiving the probe request. */ 14 /* So, this driver tried to extend the dwell time for each scanning channel. */ 15 /* This will increase the chance to receive the probe response from SoftAP. */ 16 17 #define SURVEY_TO (100) 18 #define REAUTH_TO (300) /* 50) */ 19 #define REASSOC_TO (300) /* 50) */ 20 /* define DISCONNECT_TO (3000) */ 21 #define ADDBA_TO (2000) 22 23 #define LINKED_TO (1) /* unit:2 sec, 1x2=2 sec */ 24 25 #define REAUTH_LIMIT (4) 26 #define REASSOC_LIMIT (4) 27 #define READDBA_LIMIT (2) 28 29 #define ROAMING_LIMIT 8 30 31 #define DYNAMIC_FUNC_DISABLE (0x0) 32 33 /* ====== ODM_ABILITY_E ======== */ 34 /* BB ODM section BIT 0-15 */ 35 #define DYNAMIC_BB_DIG BIT(0) 36 #define DYNAMIC_BB_RA_MASK BIT(1) 37 #define DYNAMIC_BB_DYNAMIC_TXPWR BIT(2) 38 #define DYNAMIC_BB_BB_FA_CNT BIT(3) 39 40 #define DYNAMIC_BB_RSSI_MONITOR BIT(4) 41 #define DYNAMIC_BB_CCK_PD BIT(5) 42 #define DYNAMIC_BB_ANT_DIV BIT(6) 43 #define DYNAMIC_BB_PWR_SAVE BIT(7) 44 #define DYNAMIC_BB_PWR_TRA BIT(8) 45 #define DYNAMIC_BB_RATE_ADAPTIVE BIT(9) 46 #define DYNAMIC_BB_PATH_DIV BIT(10) 47 #define DYNAMIC_BB_PSD BIT(11) 48 49 /* MAC DM section BIT 16-23 */ 50 #define DYNAMIC_MAC_EDCA_TURBO BIT(16) 51 #define DYNAMIC_MAC_EARLY_MODE BIT(17) 52 53 /* RF ODM section BIT 24-31 */ 54 #define DYNAMIC_RF_TX_PWR_TRACK BIT(24) 55 #define DYNAMIC_RF_RX_GAIN_TRACK BIT(25) 56 #define DYNAMIC_RF_CALIBRATION BIT(26) 57 58 #define DYNAMIC_ALL_FUNC_ENABLE 0xFFFFFFF 59 60 #define _HW_STATE_NOLINK_ 0x00 61 #define _HW_STATE_ADHOC_ 0x01 62 #define _HW_STATE_STATION_ 0x02 63 #define _HW_STATE_AP_ 0x03 64 65 #define _1M_RATE_ 0 66 #define _2M_RATE_ 1 67 #define _5M_RATE_ 2 68 #define _11M_RATE_ 3 69 #define _6M_RATE_ 4 70 #define _9M_RATE_ 5 71 #define _12M_RATE_ 6 72 #define _18M_RATE_ 7 73 #define _24M_RATE_ 8 74 #define _36M_RATE_ 9 75 #define _48M_RATE_ 10 76 #define _54M_RATE_ 11 77 78 extern unsigned char RTW_WPA_OUI[]; 79 extern unsigned char WMM_OUI[]; 80 extern unsigned char WPS_OUI[]; 81 extern unsigned char WFD_OUI[]; 82 extern unsigned char P2P_OUI[]; 83 84 extern unsigned char WMM_INFO_OUI[]; 85 extern unsigned char WMM_PARA_OUI[]; 86 87 /* Channel Plan Type. */ 88 /* Note: */ 89 /* We just add new channel plan when the new channel plan is different 90 * from any of the following channel plan. */ 91 /* If you just want to customize the actions(scan period or join actions) 92 * about one of the channel plan, */ 93 /* customize them in struct rt_channel_info in the RT_CHANNEL_LIST. */ 94 enum RT_CHANNEL_DOMAIN { 95 /* old channel plan mapping ===== */ 96 RT_CHANNEL_DOMAIN_FCC = 0x00, 97 RT_CHANNEL_DOMAIN_IC = 0x01, 98 RT_CHANNEL_DOMAIN_ETSI = 0x02, 99 RT_CHANNEL_DOMAIN_SPAIN = 0x03, 100 RT_CHANNEL_DOMAIN_FRANCE = 0x04, 101 RT_CHANNEL_DOMAIN_MKK = 0x05, 102 RT_CHANNEL_DOMAIN_MKK1 = 0x06, 103 RT_CHANNEL_DOMAIN_ISRAEL = 0x07, 104 RT_CHANNEL_DOMAIN_TELEC = 0x08, 105 RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN = 0x09, 106 RT_CHANNEL_DOMAIN_WORLD_WIDE_13 = 0x0A, 107 RT_CHANNEL_DOMAIN_TAIWAN = 0x0B, 108 RT_CHANNEL_DOMAIN_CHINA = 0x0C, 109 RT_CHANNEL_DOMAIN_SINGAPORE_INDIA_MEXICO = 0x0D, 110 RT_CHANNEL_DOMAIN_KOREA = 0x0E, 111 RT_CHANNEL_DOMAIN_TURKEY = 0x0F, 112 RT_CHANNEL_DOMAIN_JAPAN = 0x10, 113 RT_CHANNEL_DOMAIN_FCC_NO_DFS = 0x11, 114 RT_CHANNEL_DOMAIN_JAPAN_NO_DFS = 0x12, 115 RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS = 0x14, 116 117 /* new channel plan mapping, (2GDOMAIN_5GDOMAIN) ===== */ 118 RT_CHANNEL_DOMAIN_WORLD_NULL = 0x20, 119 RT_CHANNEL_DOMAIN_ETSI1_NULL = 0x21, 120 RT_CHANNEL_DOMAIN_FCC1_NULL = 0x22, 121 RT_CHANNEL_DOMAIN_MKK1_NULL = 0x23, 122 RT_CHANNEL_DOMAIN_ETSI2_NULL = 0x24, 123 RT_CHANNEL_DOMAIN_FCC1_FCC1 = 0x25, 124 RT_CHANNEL_DOMAIN_WORLD_ETSI1 = 0x26, 125 RT_CHANNEL_DOMAIN_MKK1_MKK1 = 0x27, 126 RT_CHANNEL_DOMAIN_WORLD_KCC1 = 0x28, 127 RT_CHANNEL_DOMAIN_WORLD_FCC2 = 0x29, 128 RT_CHANNEL_DOMAIN_WORLD_FCC3 = 0x30, 129 RT_CHANNEL_DOMAIN_WORLD_FCC4 = 0x31, 130 RT_CHANNEL_DOMAIN_WORLD_FCC5 = 0x32, 131 RT_CHANNEL_DOMAIN_WORLD_FCC6 = 0x33, 132 RT_CHANNEL_DOMAIN_FCC1_FCC7 = 0x34, 133 RT_CHANNEL_DOMAIN_WORLD_ETSI2 = 0x35, 134 RT_CHANNEL_DOMAIN_WORLD_ETSI3 = 0x36, 135 RT_CHANNEL_DOMAIN_MKK1_MKK2 = 0x37, 136 RT_CHANNEL_DOMAIN_MKK1_MKK3 = 0x38, 137 RT_CHANNEL_DOMAIN_FCC1_NCC1 = 0x39, 138 RT_CHANNEL_DOMAIN_FCC1_NCC2 = 0x40, 139 RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN_2G = 0x41, 140 /* Add new channel plan above this line=============== */ 141 RT_CHANNEL_DOMAIN_MAX, 142 RT_CHANNEL_DOMAIN_REALTEK_DEFINE = 0x7F, 143 }; 144 145 enum RT_CHANNEL_DOMAIN_2G { 146 RT_CHANNEL_DOMAIN_2G_WORLD = 0x00, /* Worldwide 13 */ 147 RT_CHANNEL_DOMAIN_2G_ETSI1 = 0x01, /* Europe */ 148 RT_CHANNEL_DOMAIN_2G_FCC1 = 0x02, /* US */ 149 RT_CHANNEL_DOMAIN_2G_MKK1 = 0x03, /* Japan */ 150 RT_CHANNEL_DOMAIN_2G_ETSI2 = 0x04, /* France */ 151 RT_CHANNEL_DOMAIN_2G_NULL = 0x05, 152 /* Add new channel plan above this line=============== */ 153 RT_CHANNEL_DOMAIN_2G_MAX, 154 }; 155 156 #define rtw_is_channel_plan_valid(chplan) \ 157 (chplan < RT_CHANNEL_DOMAIN_MAX || \ 158 chplan == RT_CHANNEL_DOMAIN_REALTEK_DEFINE) 159 160 struct rt_channel_plan { 161 unsigned char Channel[MAX_CHANNEL_NUM]; 162 unsigned char Len; 163 }; 164 165 struct rt_channel_plan_2g { 166 unsigned char Channel[MAX_CHANNEL_NUM_2G]; 167 unsigned char Len; 168 }; 169 170 struct rt_channel_plan_map { 171 unsigned char Index2G; 172 }; 173 174 enum Associated_AP { 175 atherosAP = 0, 176 broadcomAP = 1, 177 ciscoAP = 2, 178 marvellAP = 3, 179 ralinkAP = 4, 180 realtekAP = 5, 181 airgocapAP = 6, 182 unknownAP = 7, 183 maxAP, 184 }; 185 186 enum HT_IOT_PEER { 187 HT_IOT_PEER_UNKNOWN = 0, 188 HT_IOT_PEER_REALTEK = 1, 189 HT_IOT_PEER_REALTEK_92SE = 2, 190 HT_IOT_PEER_BROADCOM = 3, 191 HT_IOT_PEER_RALINK = 4, 192 HT_IOT_PEER_ATHEROS = 5, 193 HT_IOT_PEER_CISCO = 6, 194 HT_IOT_PEER_MERU = 7, 195 HT_IOT_PEER_MARVELL = 8, 196 HT_IOT_PEER_REALTEK_SOFTAP = 9,/* peer is RealTek SOFT_AP */ 197 HT_IOT_PEER_SELF_SOFTAP = 10, /* Self is SoftAP */ 198 HT_IOT_PEER_AIRGO = 11, 199 HT_IOT_PEER_INTEL = 12, 200 HT_IOT_PEER_RTK_APCLIENT = 13, 201 HT_IOT_PEER_REALTEK_81XX = 14, 202 HT_IOT_PEER_REALTEK_WOW = 15, 203 HT_IOT_PEER_TENDA = 16, 204 HT_IOT_PEER_MAX = 17 205 }; 206 207 enum SCAN_STATE { 208 SCAN_DISABLE = 0, 209 SCAN_START = 1, 210 SCAN_TXNULL = 2, 211 SCAN_PROCESS = 3, 212 SCAN_COMPLETE = 4, 213 SCAN_STATE_MAX, 214 }; 215 216 struct mlme_handler { 217 unsigned int num; 218 char *str; 219 unsigned int (*func)(struct adapter *adapt, struct recv_frame *frame); 220 }; 221 222 struct action_handler { 223 unsigned int num; 224 char* str; 225 unsigned int (*func)(struct adapter *adapt, struct recv_frame *frame); 226 }; 227 228 struct ss_res { 229 int state; 230 int bss_cnt; 231 int channel_idx; 232 int scan_mode; 233 u8 ssid_num; 234 u8 ch_num; 235 struct ndis_802_11_ssid ssid[RTW_SSID_SCAN_AMOUNT]; 236 struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT]; 237 }; 238 239 /* define AP_MODE 0x0C */ 240 /* define STATION_MODE 0x08 */ 241 /* define AD_HOC_MODE 0x04 */ 242 /* define NO_LINK_MODE 0x00 */ 243 244 #define WIFI_FW_NULL_STATE _HW_STATE_NOLINK_ 245 #define WIFI_FW_STATION_STATE _HW_STATE_STATION_ 246 #define WIFI_FW_AP_STATE _HW_STATE_AP_ 247 #define WIFI_FW_ADHOC_STATE _HW_STATE_ADHOC_ 248 249 #define WIFI_FW_AUTH_NULL 0x00000100 250 #define WIFI_FW_AUTH_STATE 0x00000200 251 #define WIFI_FW_AUTH_SUCCESS 0x00000400 252 253 #define WIFI_FW_ASSOC_STATE 0x00002000 254 #define WIFI_FW_ASSOC_SUCCESS 0x00004000 255 256 #define WIFI_FW_LINKING_STATE (WIFI_FW_AUTH_NULL | \ 257 WIFI_FW_AUTH_STATE | \ 258 WIFI_FW_AUTH_SUCCESS | \ 259 WIFI_FW_ASSOC_STATE) 260 261 struct FW_Sta_Info { 262 struct sta_info *psta; 263 u32 status; 264 u32 rx_pkt; 265 u32 retry; 266 unsigned char SupportedRates[NDIS_802_11_LENGTH_RATES_EX]; 267 }; 268 269 /* 270 * Usage: 271 * When one iface acted as AP mode and the other iface is STA mode and scanning, 272 * it should switch back to AP's operating channel periodically. 273 * Parameters info: 274 * When the driver scanned RTW_SCAN_NUM_OF_CH channels, it would switch back to 275 * AP's operating channel for 276 * RTW_STAY_AP_CH_MILLISECOND * SURVEY_TO milliseconds. 277 * Example: 278 * For chip supports 2.4G + 5GHz and AP mode is operating in channel 1, 279 * RTW_SCAN_NUM_OF_CH is 8, RTW_STAY_AP_CH_MS is 3 and SURVEY_TO is 100. 280 * When it's STA mode gets set_scan command, 281 * it would 282 * 1. Doing the scan on channel 1.2.3.4.5.6.7.8 283 * 2. Back to channel 1 for 300 milliseconds 284 * 3. Go through doing site survey on channel 9.10.11.36.40.44.48.52 285 * 4. Back to channel 1 for 300 milliseconds 286 * 5. ... and so on, till survey done. 287 */ 288 289 struct mlme_ext_info { 290 u32 state; 291 u32 reauth_count; 292 u32 reassoc_count; 293 u32 link_count; 294 u32 auth_seq; 295 u32 auth_algo; /* 802.11 auth, could be open, shared, auto */ 296 u32 authModeToggle; 297 u32 enc_algo;/* encrypt algorithm; */ 298 u32 key_index; /* this is only valid for legacy wep, 299 * 0~3 for key id. */ 300 u32 iv; 301 u8 chg_txt[128]; 302 u16 aid; 303 u16 bcn_interval; 304 u16 capability; 305 u8 assoc_AP_vendor; 306 u8 slotTime; 307 u8 preamble_mode; 308 u8 WMM_enable; 309 u8 ERP_enable; 310 u8 ERP_IE; 311 u8 HT_enable; 312 u8 HT_caps_enable; 313 u8 HT_info_enable; 314 u8 HT_protection; 315 u8 turboMode_cts2self; 316 u8 turboMode_rtsen; 317 u8 SM_PS; 318 u8 agg_enable_bitmap; 319 u8 ADDBA_retry_count; 320 u8 candidate_tid_bitmap; 321 u8 dialogToken; 322 /* Accept ADDBA Request */ 323 bool bAcceptAddbaReq; 324 u8 bwmode_updated; 325 u8 hidden_ssid_mode; 326 327 struct ADDBA_request ADDBA_req; 328 struct WMM_para_element WMM_param; 329 struct HT_caps_element HT_caps; 330 struct HT_info_element HT_info; 331 struct wlan_bssid_ex network;/* join network or bss_network, 332 * if in ap mode, it is the same 333 * as cur_network.network */ 334 struct FW_Sta_Info FW_sta_info[NUM_STA]; 335 }; 336 337 /* The channel information about this channel including joining, 338 * scanning, and power constraints. */ 339 struct rt_channel_info { 340 u8 ChannelNum; /* The channel number. */ 341 enum rt_scan_type ScanType; /* Scan type such as passive 342 * or active scan. */ 343 u32 rx_count; 344 }; 345 346 int rtw_ch_set_search_ch(struct rt_channel_info *ch_set, const u32 ch); 347 348 /* P2P_MAX_REG_CLASSES - Maximum number of regulatory classes */ 349 #define P2P_MAX_REG_CLASSES 10 350 351 /* P2P_MAX_REG_CLASS_CHANNELS - Maximum number of chan per regulatory class */ 352 #define P2P_MAX_REG_CLASS_CHANNELS 20 353 354 /* struct p2p_channels - List of supported channels */ 355 struct p2p_channels { 356 /* struct p2p_reg_class - Supported regulatory class */ 357 struct p2p_reg_class { 358 /* reg_class - Regulatory class (IEEE 802.11-2007, Annex J) */ 359 u8 reg_class; 360 361 /* channel - Supported channels */ 362 u8 channel[P2P_MAX_REG_CLASS_CHANNELS]; 363 364 /* channels - Number of channel entries in use */ 365 size_t channels; 366 } reg_class[P2P_MAX_REG_CLASSES]; 367 368 /* reg_classes - Number of reg_class entries in use */ 369 size_t reg_classes; 370 }; 371 372 struct p2p_oper_class_map { 373 enum hw_mode {IEEE80211G} mode; 374 u8 op_class; 375 u8 min_chan; 376 u8 max_chan; 377 u8 inc; 378 enum {BW20, BW40PLUS, BW40MINUS} bw; 379 }; 380 381 struct mlme_ext_priv { 382 struct adapter *padapter; 383 u8 mlmeext_init; 384 atomic_t event_seq; 385 u16 mgnt_seq; 386 387 unsigned char cur_channel; 388 unsigned char cur_bwmode; 389 unsigned char cur_ch_offset;/* PRIME_CHNL_OFFSET */ 390 unsigned char cur_wireless_mode; /* NETWORK_TYPE */ 391 392 unsigned char oper_channel; /* saved chan info when call 393 * set_channel_bw */ 394 unsigned char oper_bwmode; 395 unsigned char oper_ch_offset;/* PRIME_CHNL_OFFSET */ 396 397 unsigned char max_chan_nums; 398 struct rt_channel_info channel_set[MAX_CHANNEL_NUM]; 399 struct p2p_channels channel_list; 400 unsigned char basicrate[NumRates]; 401 unsigned char datarate[NumRates]; 402 403 struct ss_res sitesurvey_res; 404 struct mlme_ext_info mlmext_info;/* for sta/adhoc mode, including 405 * current scan/connecting/connected 406 * related info. For ap mode, 407 * network includes ap's cap_info*/ 408 struct timer_list survey_timer; 409 struct timer_list link_timer; 410 u16 chan_scan_time; 411 412 u8 scan_abort; 413 u8 tx_rate; /* TXRATE when USERATE is set. */ 414 415 u32 retry; /* retry for issue probereq */ 416 417 u64 TSFValue; 418 419 #ifdef CONFIG_88EU_AP_MODE 420 unsigned char bstart_bss; 421 #endif 422 u8 update_channel_plan_by_ap_done; 423 /* recv_decache check for Action_public frame */ 424 u8 action_public_dialog_token; 425 u16 action_public_rxseq; 426 u8 active_keep_alive_check; 427 }; 428 429 int init_mlme_ext_priv(struct adapter *adapter); 430 int init_hw_mlme_ext(struct adapter *padapter); 431 void free_mlme_ext_priv (struct mlme_ext_priv *pmlmeext); 432 extern void init_mlme_ext_timer(struct adapter *padapter); 433 extern void init_addba_retry_timer(struct adapter *adapt, struct sta_info *sta); 434 extern struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv); 435 436 unsigned char networktype_to_raid(unsigned char network_type); 437 u8 judge_network_type(struct adapter *padapter, unsigned char *rate, int len); 438 void get_rate_set(struct adapter *padapter, unsigned char *pbssrate, int *len); 439 void UpdateBrateTbl(struct adapter *padapter, u8 *mBratesOS); 440 void UpdateBrateTblForSoftAP(u8 *bssrateset, u32 bssratelen); 441 442 void Save_DM_Func_Flag(struct adapter *padapter); 443 void Restore_DM_Func_Flag(struct adapter *padapter); 444 void Switch_DM_Func(struct adapter *padapter, u32 mode, u8 enable); 445 446 void Set_MSR(struct adapter *padapter, u8 type); 447 448 u8 rtw_get_oper_ch(struct adapter *adapter); 449 void rtw_set_oper_ch(struct adapter *adapter, u8 ch); 450 u8 rtw_get_oper_bw(struct adapter *adapter); 451 void rtw_set_oper_bw(struct adapter *adapter, u8 bw); 452 u8 rtw_get_oper_choffset(struct adapter *adapter); 453 void rtw_set_oper_choffset(struct adapter *adapter, u8 offset); 454 455 void set_channel_bwmode(struct adapter *padapter, unsigned char channel, 456 unsigned char channel_offset, unsigned short bwmode); 457 void SelectChannel(struct adapter *padapter, unsigned char channel); 458 void SetBWMode(struct adapter *padapter, unsigned short bwmode, 459 unsigned char channel_offset); 460 461 unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval); 462 463 void write_cam(struct adapter *padapter, u8 entry, u16 ctrl, u8 *mac, u8 *key); 464 void clear_cam_entry(struct adapter *padapter, u8 entry); 465 466 void invalidate_cam_all(struct adapter *padapter); 467 void CAM_empty_entry(struct adapter * Adapter, u8 ucIndex); 468 469 int allocate_fw_sta_entry(struct adapter *padapter); 470 void flush_all_cam_entry(struct adapter *padapter); 471 472 void site_survey(struct adapter *padapter); 473 u8 collect_bss_info(struct adapter *padapter, struct recv_frame *precv_frame, 474 struct wlan_bssid_ex *bssid); 475 void update_network(struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src, 476 struct adapter *adapter, bool update_ie); 477 478 int get_bsstype(unsigned short capability); 479 u8 *get_my_bssid(struct wlan_bssid_ex *pnetwork); 480 u16 get_beacon_interval(struct wlan_bssid_ex *bss); 481 482 int is_client_associated_to_ap(struct adapter *padapter); 483 int is_client_associated_to_ibss(struct adapter *padapter); 484 int is_IBSS_empty(struct adapter *padapter); 485 486 unsigned char check_assoc_AP(u8 *pframe, uint len); 487 488 int WMM_param_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE); 489 void WMMOnAssocRsp(struct adapter *padapter); 490 491 void HT_caps_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE); 492 void HT_info_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE); 493 void HTOnAssocRsp(struct adapter *padapter); 494 495 void ERP_IE_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE); 496 void VCS_update(struct adapter *padapter, struct sta_info *psta); 497 498 void update_beacon_info(struct adapter *padapter, u8 *pframe, uint len, 499 struct sta_info *psta); 500 int rtw_check_bcn_info(struct adapter *Adapter, u8 *pframe, u32 packet_len); 501 void update_IOT_info(struct adapter *padapter); 502 void update_capinfo(struct adapter *adapter, u16 updatecap); 503 void update_wireless_mode(struct adapter *padapter); 504 void update_tx_basic_rate(struct adapter *padapter, u8 modulation); 505 void update_bmc_sta_support_rate(struct adapter *padapter, u32 mac_id); 506 int update_sta_support_rate(struct adapter *padapter, u8 *pvar_ie, 507 uint var_ie_len, int cam_idx); 508 509 /* for sta/adhoc mode */ 510 void update_sta_info(struct adapter *padapter, struct sta_info *psta); 511 unsigned int update_basic_rate(unsigned char *ptn, unsigned int ptn_sz); 512 unsigned int update_supported_rate(unsigned char *ptn, unsigned int ptn_sz); 513 unsigned int update_MSC_rate(struct HT_caps_element *pHT_caps); 514 void Update_RA_Entry(struct adapter *padapter, u32 mac_id); 515 void set_sta_rate(struct adapter *padapter, struct sta_info *psta); 516 517 unsigned int receive_disconnect(struct adapter *padapter, 518 unsigned char *macaddr, unsigned short reason); 519 520 unsigned char get_highest_rate_idx(u32 mask); 521 int support_short_GI(struct adapter *padapter, struct HT_caps_element *caps); 522 unsigned int is_ap_in_tkip(struct adapter *padapter); 523 unsigned int is_ap_in_wep(struct adapter *padapter); 524 unsigned int should_forbid_n_rate(struct adapter *padapter); 525 526 void report_join_res(struct adapter *padapter, int res); 527 void report_survey_event(struct adapter *padapter, struct recv_frame *precv_frame); 528 void report_surveydone_event(struct adapter *padapter); 529 void report_del_sta_event(struct adapter *padapter, 530 unsigned char *addr, unsigned short reason); 531 void report_add_sta_event(struct adapter *padapter, unsigned char* addr, 532 int cam_idx); 533 534 void beacon_timing_control(struct adapter *padapter); 535 extern u8 set_tx_beacon_cmd(struct adapter*padapter); 536 unsigned int setup_beacon_frame(struct adapter *padapter, 537 unsigned char *beacon_frame); 538 void update_mgnt_tx_rate(struct adapter *padapter, u8 rate); 539 void update_mgntframe_attrib(struct adapter *padapter, 540 struct pkt_attrib *pattrib); 541 void dump_mgntframe(struct adapter *padapter, struct xmit_frame *pmgntframe); 542 s32 dump_mgntframe_and_wait(struct adapter *padapter, 543 struct xmit_frame *pmgntframe, int timeout_ms); 544 s32 dump_mgntframe_and_wait_ack(struct adapter *padapter, 545 struct xmit_frame *pmgntframe); 546 547 #ifdef CONFIG_88EU_P2P 548 void issue_probersp_p2p(struct adapter *padapter, unsigned char *da); 549 void issue_p2p_provision_request(struct adapter *padapter, u8 *pssid, 550 u8 ussidlen, u8 *pdev_raddr); 551 void issue_p2p_GO_request(struct adapter *padapter, u8 *raddr); 552 void issue_probereq_p2p(struct adapter *padapter, u8 *da); 553 int issue_probereq_p2p_ex(struct adapter *adapter, u8 *da, int try_cnt, 554 int wait_ms); 555 void issue_p2p_invitation_response(struct adapter *padapter, u8 *raddr, 556 u8 dialogToken, u8 success); 557 void issue_p2p_invitation_request(struct adapter *padapter, u8* raddr); 558 #endif /* CONFIG_88EU_P2P */ 559 void issue_beacon(struct adapter *padapter, int timeout_ms); 560 void issue_probersp(struct adapter *padapter, unsigned char *da, 561 u8 is_valid_p2p_probereq); 562 void issue_assocreq(struct adapter *padapter); 563 void issue_asocrsp(struct adapter *padapter, unsigned short status, 564 struct sta_info *pstat, int pkt_type); 565 void issue_auth(struct adapter *padapter, struct sta_info *psta, 566 unsigned short status); 567 void issue_probereq(struct adapter *padapter, struct ndis_802_11_ssid *pssid, 568 u8 *da); 569 s32 issue_probereq_ex(struct adapter *adapter, struct ndis_802_11_ssid *pssid, 570 u8* da, int try_cnt, int wait_ms); 571 int issue_nulldata(struct adapter *padapter, unsigned char *da, 572 unsigned int power_mode, int try_cnt, int wait_ms); 573 int issue_qos_nulldata(struct adapter *padapter, unsigned char *da, 574 u16 tid, int try_cnt, int wait_ms); 575 int issue_deauth(struct adapter *padapter, unsigned char *da, 576 unsigned short reason); 577 int issue_deauth_ex(struct adapter *padapter, u8 *da, unsigned short reason, 578 int try_cnt, int wait_ms); 579 void issue_action_spct_ch_switch(struct adapter *padapter, u8 *ra, u8 new_ch, 580 u8 ch_offset); 581 void issue_action_BA(struct adapter *padapter, unsigned char *raddr, 582 unsigned char action, unsigned short status); 583 unsigned int send_delba(struct adapter *padapter, u8 initiator, u8 *addr); 584 unsigned int send_beacon(struct adapter *padapter); 585 586 void start_clnt_assoc(struct adapter *padapter); 587 void start_clnt_auth(struct adapter *padapter); 588 void start_clnt_join(struct adapter *padapter); 589 void start_create_ibss(struct adapter *padapter); 590 591 unsigned int OnAssocReq(struct adapter *padapter, 592 struct recv_frame *precv_frame); 593 unsigned int OnAssocRsp(struct adapter *padapter, 594 struct recv_frame *precv_frame); 595 unsigned int OnProbeReq(struct adapter *padapter, 596 struct recv_frame *precv_frame); 597 unsigned int OnProbeRsp(struct adapter *padapter, 598 struct recv_frame *precv_frame); 599 unsigned int DoReserved(struct adapter *padapter, 600 struct recv_frame *precv_frame); 601 unsigned int OnBeacon(struct adapter *padapter, 602 struct recv_frame *precv_frame); 603 unsigned int OnAtim(struct adapter *padapter, 604 struct recv_frame *precv_frame); 605 unsigned int OnDisassoc(struct adapter *padapter, 606 struct recv_frame *precv_frame); 607 unsigned int OnAuth(struct adapter *padapter, 608 struct recv_frame *precv_frame); 609 unsigned int OnAuthClient(struct adapter *padapter, 610 struct recv_frame *precv_frame); 611 unsigned int OnDeAuth(struct adapter *padapter, 612 struct recv_frame *precv_frame); 613 unsigned int OnAction(struct adapter *padapter, 614 struct recv_frame *precv_frame); 615 616 unsigned int on_action_spct(struct adapter *padapter, 617 struct recv_frame *precv_frame); 618 unsigned int OnAction_qos(struct adapter *padapter, 619 struct recv_frame *precv_frame); 620 unsigned int OnAction_dls(struct adapter *padapter, 621 struct recv_frame *precv_frame); 622 unsigned int OnAction_back(struct adapter *padapter, 623 struct recv_frame *precv_frame); 624 unsigned int on_action_public(struct adapter *padapter, 625 struct recv_frame *precv_frame); 626 unsigned int OnAction_ht(struct adapter *padapter, 627 struct recv_frame *precv_frame); 628 unsigned int OnAction_wmm(struct adapter *padapter, 629 struct recv_frame *precv_frame); 630 unsigned int OnAction_p2p(struct adapter *padapter, 631 struct recv_frame *precv_frame); 632 633 void mlmeext_joinbss_event_callback(struct adapter *padapter, int join_res); 634 void mlmeext_sta_del_event_callback(struct adapter *padapter); 635 void mlmeext_sta_add_event_callback(struct adapter *padapter, 636 struct sta_info *psta); 637 638 void linked_status_chk(struct adapter *padapter); 639 640 void survey_timer_hdl (struct adapter *padapter); 641 void link_timer_hdl (struct adapter *padapter); 642 void addba_timer_hdl(struct sta_info *psta); 643 644 #define set_survey_timer(mlmeext, ms) \ 645 do { \ 646 _set_timer(&(mlmeext)->survey_timer, (ms)); \ 647 } while (0) 648 649 #define set_link_timer(mlmeext, ms) \ 650 do { \ 651 _set_timer(&(mlmeext)->link_timer, (ms)); \ 652 } while (0) 653 654 int cckrates_included(unsigned char *rate, int ratelen); 655 int cckratesonly_included(unsigned char *rate, int ratelen); 656 657 void process_addba_req(struct adapter *padapter, u8 *paddba_req, u8 *addr); 658 659 void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len); 660 void correct_TSF(struct adapter *padapter, struct mlme_ext_priv *pmlmeext); 661 662 struct cmd_hdl { 663 uint parmsize; 664 u8 (*h2cfuns)(struct adapter *padapter, u8 *pbuf); 665 }; 666 667 u8 read_macreg_hdl(struct adapter *padapter, u8 *pbuf); 668 u8 write_macreg_hdl(struct adapter *padapter, u8 *pbuf); 669 u8 read_bbreg_hdl(struct adapter *padapter, u8 *pbuf); 670 u8 write_bbreg_hdl(struct adapter *padapter, u8 *pbuf); 671 u8 read_rfreg_hdl(struct adapter *padapter, u8 *pbuf); 672 u8 write_rfreg_hdl(struct adapter *padapter, u8 *pbuf); 673 u8 NULL_hdl(struct adapter *padapter, u8 *pbuf); 674 u8 join_cmd_hdl(struct adapter *padapter, u8 *pbuf); 675 u8 disconnect_hdl(struct adapter *padapter, u8 *pbuf); 676 u8 createbss_hdl(struct adapter *padapter, u8 *pbuf); 677 u8 setopmode_hdl(struct adapter *padapter, u8 *pbuf); 678 u8 sitesurvey_cmd_hdl(struct adapter *padapter, u8 *pbuf); 679 u8 setauth_hdl(struct adapter *padapter, u8 *pbuf); 680 u8 setkey_hdl(struct adapter *padapter, u8 *pbuf); 681 u8 set_stakey_hdl(struct adapter *padapter, u8 *pbuf); 682 u8 set_assocsta_hdl(struct adapter *padapter, u8 *pbuf); 683 u8 del_assocsta_hdl(struct adapter *padapter, u8 *pbuf); 684 u8 add_ba_hdl(struct adapter *padapter, unsigned char *pbuf); 685 686 u8 mlme_evt_hdl(struct adapter *padapter, unsigned char *pbuf); 687 u8 h2c_msg_hdl(struct adapter *padapter, unsigned char *pbuf); 688 u8 tx_beacon_hdl(struct adapter *padapter, unsigned char *pbuf); 689 u8 set_ch_hdl(struct adapter *padapter, u8 *pbuf); 690 u8 set_chplan_hdl(struct adapter *padapter, unsigned char *pbuf); 691 u8 led_blink_hdl(struct adapter *padapter, unsigned char *pbuf); 692 /* Handling DFS channel switch announcement ie. */ 693 u8 set_csa_hdl(struct adapter *padapter, unsigned char *pbuf); 694 u8 tdls_hdl(struct adapter *padapter, unsigned char *pbuf); 695 696 #define GEN_DRV_CMD_HANDLER(size, cmd) {size, &cmd ## _hdl}, 697 #define GEN_MLME_EXT_HANDLER(size, cmd) {size, cmd}, 698 699 #ifdef _RTW_CMD_C_ 700 701 static struct cmd_hdl wlancmds[] = { 702 GEN_DRV_CMD_HANDLER(0, NULL) /*0*/ 703 GEN_DRV_CMD_HANDLER(0, NULL) 704 GEN_DRV_CMD_HANDLER(0, NULL) 705 GEN_DRV_CMD_HANDLER(0, NULL) 706 GEN_DRV_CMD_HANDLER(0, NULL) 707 GEN_DRV_CMD_HANDLER(0, NULL) 708 GEN_MLME_EXT_HANDLER(0, NULL) 709 GEN_MLME_EXT_HANDLER(0, NULL) 710 GEN_MLME_EXT_HANDLER(0, NULL) 711 GEN_MLME_EXT_HANDLER(0, NULL) 712 GEN_MLME_EXT_HANDLER(0, NULL) /*10*/ 713 GEN_MLME_EXT_HANDLER(0, NULL) 714 GEN_MLME_EXT_HANDLER(0, NULL) 715 GEN_MLME_EXT_HANDLER(0, NULL) 716 GEN_MLME_EXT_HANDLER(sizeof (struct joinbss_parm), join_cmd_hdl) /*14*/ 717 GEN_MLME_EXT_HANDLER(sizeof (struct disconnect_parm), disconnect_hdl) 718 GEN_MLME_EXT_HANDLER(sizeof (struct createbss_parm), createbss_hdl) 719 GEN_MLME_EXT_HANDLER(sizeof (struct setopmode_parm), setopmode_hdl) 720 GEN_MLME_EXT_HANDLER(sizeof (struct sitesurvey_parm), 721 sitesurvey_cmd_hdl) /*18*/ 722 GEN_MLME_EXT_HANDLER(sizeof (struct setauth_parm), setauth_hdl) 723 GEN_MLME_EXT_HANDLER(sizeof (struct setkey_parm), setkey_hdl) /*20*/ 724 GEN_MLME_EXT_HANDLER(sizeof (struct set_stakey_parm), set_stakey_hdl) 725 GEN_MLME_EXT_HANDLER(sizeof (struct set_assocsta_parm), NULL) 726 GEN_MLME_EXT_HANDLER(sizeof (struct del_assocsta_parm), NULL) 727 GEN_MLME_EXT_HANDLER(sizeof (struct setstapwrstate_parm), NULL) 728 GEN_MLME_EXT_HANDLER(sizeof (struct setbasicrate_parm), NULL) 729 GEN_MLME_EXT_HANDLER(sizeof (struct getbasicrate_parm), NULL) 730 GEN_MLME_EXT_HANDLER(sizeof (struct setdatarate_parm), NULL) 731 GEN_MLME_EXT_HANDLER(sizeof (struct getdatarate_parm), NULL) 732 GEN_MLME_EXT_HANDLER(sizeof (struct setphyinfo_parm), NULL) 733 GEN_MLME_EXT_HANDLER(sizeof (struct getphyinfo_parm), NULL) /*30*/ 734 GEN_MLME_EXT_HANDLER(sizeof (struct setphy_parm), NULL) 735 GEN_MLME_EXT_HANDLER(sizeof (struct getphy_parm), NULL) 736 GEN_MLME_EXT_HANDLER(0, NULL) 737 GEN_MLME_EXT_HANDLER(0, NULL) 738 GEN_MLME_EXT_HANDLER(0, NULL) 739 GEN_MLME_EXT_HANDLER(0, NULL) 740 GEN_MLME_EXT_HANDLER(0, NULL) 741 GEN_MLME_EXT_HANDLER(0, NULL) 742 GEN_MLME_EXT_HANDLER(0, NULL) 743 GEN_MLME_EXT_HANDLER(0, NULL) /*40*/ 744 GEN_MLME_EXT_HANDLER(0, NULL) 745 GEN_MLME_EXT_HANDLER(0, NULL) 746 GEN_MLME_EXT_HANDLER(0, NULL) 747 GEN_MLME_EXT_HANDLER(0, NULL) 748 GEN_MLME_EXT_HANDLER(sizeof(struct addBaReq_parm), add_ba_hdl) 749 GEN_MLME_EXT_HANDLER(sizeof(struct set_ch_parm), set_ch_hdl) /* 46 */ 750 GEN_MLME_EXT_HANDLER(0, NULL) 751 GEN_MLME_EXT_HANDLER(0, NULL) 752 GEN_MLME_EXT_HANDLER(0, NULL) 753 GEN_MLME_EXT_HANDLER(0, NULL) /*50*/ 754 GEN_MLME_EXT_HANDLER(0, NULL) 755 GEN_MLME_EXT_HANDLER(0, NULL) 756 GEN_MLME_EXT_HANDLER(0, NULL) 757 GEN_MLME_EXT_HANDLER(0, NULL) 758 GEN_MLME_EXT_HANDLER(sizeof(struct Tx_Beacon_param), 759 tx_beacon_hdl) /*55*/ 760 761 GEN_MLME_EXT_HANDLER(0, mlme_evt_hdl) /*56*/ 762 GEN_MLME_EXT_HANDLER(0, rtw_drvextra_cmd_hdl) /*57*/ 763 764 GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl) /*58*/ 765 GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param), 766 set_chplan_hdl) /*59*/ 767 GEN_MLME_EXT_HANDLER(sizeof(struct LedBlink_param), 768 led_blink_hdl) /*60*/ 769 770 GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelSwitch_param), 771 set_csa_hdl) /*61*/ 772 GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param), 773 tdls_hdl) /*62*/ 774 }; 775 776 #endif 777 778 struct C2HEvent_Header { 779 #ifdef __LITTLE_ENDIAN 780 unsigned int len:16; 781 unsigned int ID:8; 782 unsigned int seq:8; 783 #elif defined(__BIG_ENDIAN) 784 unsigned int seq:8; 785 unsigned int ID:8; 786 unsigned int len:16; 787 #endif 788 unsigned int rsvd; 789 }; 790 791 void rtw_dummy_event_callback(struct adapter *adapter, u8 *pbuf); 792 void rtw_fwdbg_event_callback(struct adapter *adapter, u8 *pbuf); 793 794 enum rtw_c2h_event { 795 GEN_EVT_CODE(_Read_MACREG) = 0, /*0*/ 796 GEN_EVT_CODE(_Read_BBREG), 797 GEN_EVT_CODE(_Read_RFREG), 798 GEN_EVT_CODE(_Read_EEPROM), 799 GEN_EVT_CODE(_Read_EFUSE), 800 GEN_EVT_CODE(_Read_CAM), /*5*/ 801 GEN_EVT_CODE(_Get_BasicRate), 802 GEN_EVT_CODE(_Get_DataRate), 803 GEN_EVT_CODE(_Survey), /*8*/ 804 GEN_EVT_CODE(_SurveyDone), /*9*/ 805 806 GEN_EVT_CODE(_JoinBss) , /*10*/ 807 GEN_EVT_CODE(_AddSTA), 808 GEN_EVT_CODE(_DelSTA), 809 GEN_EVT_CODE(_AtimDone), 810 GEN_EVT_CODE(_TX_Report), 811 GEN_EVT_CODE(_CCX_Report), /*15*/ 812 GEN_EVT_CODE(_DTM_Report), 813 GEN_EVT_CODE(_TX_Rate_Statistics), 814 GEN_EVT_CODE(_C2HLBK), 815 GEN_EVT_CODE(_FWDBG), 816 GEN_EVT_CODE(_C2HFEEDBACK), /*20*/ 817 GEN_EVT_CODE(_ADDBA), 818 GEN_EVT_CODE(_C2HBCN), 819 GEN_EVT_CODE(_ReportPwrState), /* filen: only for PCIE, USB */ 820 GEN_EVT_CODE(_CloseRF), /* filen: only for PCIE, 821 * work around ASPM */ 822 MAX_C2HEVT 823 }; 824 825 #ifdef _RTW_MLME_EXT_C_ 826 827 static struct fwevent wlanevents[] = { 828 {0, rtw_dummy_event_callback}, /*0*/ 829 {0, NULL}, 830 {0, NULL}, 831 {0, NULL}, 832 {0, NULL}, 833 {0, NULL}, 834 {0, NULL}, 835 {0, NULL}, 836 {0, &rtw_survey_event_callback}, /*8*/ 837 {sizeof (struct surveydone_event), &rtw_surveydone_event_callback},/*9*/ 838 {0, &rtw_joinbss_event_callback}, /*10*/ 839 {sizeof(struct stassoc_event), &rtw_stassoc_event_callback}, 840 {sizeof(struct stadel_event), &rtw_stadel_event_callback}, 841 {0, NULL}, 842 {0, rtw_dummy_event_callback}, 843 {0, NULL}, /*15*/ 844 {0, NULL}, 845 {0, NULL}, 846 {0, NULL}, 847 {0, rtw_fwdbg_event_callback}, 848 {0, NULL}, /*20*/ 849 {0, NULL}, 850 {0, NULL}, 851 {0, NULL}, 852 {0, NULL}, 853 }; 854 855 #endif/* _RTL_MLME_EXT_C_ */ 856 857 #endif /* __RTW_MLME_EXT_H_ */ 858