1 /******************************************************************************
3 * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
5 * This program is free software; you can redistribute it and/or modify it
6 * under the terms of version 2 of the GNU General Public License as
7 * published by the Free Software Foundation.
9 * This program is distributed in the hope that it will be useful, but WITHOUT
10 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
14 * You should have received a copy of the GNU General Public License along with
15 * this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA
19 ******************************************************************************/
20 #ifndef __RTW_MLME_EXT_H_
21 #define __RTW_MLME_EXT_H_
24 #include <osdep_service.h>
25 #include <drv_types.h>
26 #include <wlan_bssdef.h>
29 // Commented by Albert 20101105
30 // Increase the SURVEY_TO value from 100 to 150 ( 100ms to 150ms )
31 // The Realtek 8188CE SoftAP will spend around 100ms to send the probe response after receiving the probe request.
32 // So, this driver tried to extend the dwell time for each scanning channel.
33 // This will increase the chance to receive the probe response from SoftAP.
35 #define SURVEY_TO (100)
36 #define REAUTH_TO (300) //(50)
37 #define REASSOC_TO (300) //(50)
38 //#define DISCONNECT_TO (3000)
39 #define ADDBA_TO (2000)
41 #define LINKED_TO (1) //unit:2 sec, 1x2=2 sec
43 #define REAUTH_LIMIT (4)
44 #define REASSOC_LIMIT (4)
45 #define READDBA_LIMIT (2)
47 //#define IOCMD_REG0 0x10250370
48 //#define IOCMD_REG1 0x10250374
49 //#define IOCMD_REG2 0x10250378
51 //#define FW_DYNAMIC_FUN_SWITCH 0x10250364
53 //#define WRITE_BB_CMD 0xF0000001
54 //#define SET_CHANNEL_CMD 0xF3000000
55 //#define UPDATE_RA_CMD 0xFD0000A2
57 #define DYNAMIC_FUNC_DISABLE (0x0)
58 #define DYNAMIC_FUNC_DIG BIT(0)
59 #define DYNAMIC_FUNC_HP BIT(1)
60 #define DYNAMIC_FUNC_SS BIT(2) //Tx Power Tracking
61 #define DYNAMIC_FUNC_BT BIT(3)
62 #define DYNAMIC_FUNC_ANT_DIV BIT(4)
63 #define DYNAMIC_FUNC_ADAPTIVITY BIT(5)
65 #define _HW_STATE_NOLINK_ 0x00
66 #define _HW_STATE_ADHOC_ 0x01
67 #define _HW_STATE_STATION_ 0x02
68 #define _HW_STATE_AP_ 0x03
85 extern unsigned char RTW_WPA_OUI
[];
86 extern unsigned char WMM_OUI
[];
87 extern unsigned char WPS_OUI
[];
88 extern unsigned char WFD_OUI
[];
89 extern unsigned char P2P_OUI
[];
91 extern unsigned char WMM_INFO_OUI
[];
92 extern unsigned char WMM_PARA_OUI
[];
98 // We just add new channel plan when the new channel plan is different from any of the following
100 // If you just wnat to customize the acitions(scan period or join actions) about one of the channel plan,
101 // customize them in RT_CHANNEL_INFO in the RT_CHANNEL_LIST.
103 typedef enum _RT_CHANNEL_DOMAIN
105 //===== old channel plan mapping =====//
106 RT_CHANNEL_DOMAIN_FCC
= 0x00,
107 RT_CHANNEL_DOMAIN_IC
= 0x01,
108 RT_CHANNEL_DOMAIN_ETSI
= 0x02,
109 RT_CHANNEL_DOMAIN_SPAIN
= 0x03,
110 RT_CHANNEL_DOMAIN_FRANCE
= 0x04,
111 RT_CHANNEL_DOMAIN_MKK
= 0x05,
112 RT_CHANNEL_DOMAIN_MKK1
= 0x06,
113 RT_CHANNEL_DOMAIN_ISRAEL
= 0x07,
114 RT_CHANNEL_DOMAIN_TELEC
= 0x08,
115 RT_CHANNEL_DOMAIN_GLOBAL_DOAMIN
= 0x09,
116 RT_CHANNEL_DOMAIN_WORLD_WIDE_13
= 0x0A,
117 RT_CHANNEL_DOMAIN_TAIWAN
= 0x0B,
118 RT_CHANNEL_DOMAIN_CHINA
= 0x0C,
119 RT_CHANNEL_DOMAIN_SINGAPORE_INDIA_MEXICO
= 0x0D,
120 RT_CHANNEL_DOMAIN_KOREA
= 0x0E,
121 RT_CHANNEL_DOMAIN_TURKEY
= 0x0F,
122 RT_CHANNEL_DOMAIN_JAPAN
= 0x10,
123 RT_CHANNEL_DOMAIN_FCC_NO_DFS
= 0x11,
124 RT_CHANNEL_DOMAIN_JAPAN_NO_DFS
= 0x12,
125 RT_CHANNEL_DOMAIN_WORLD_WIDE_5G
= 0x13,
126 RT_CHANNEL_DOMAIN_TAIWAN_NO_DFS
= 0x14,
128 //===== new channel plan mapping, (2GDOMAIN_5GDOMAIN) =====//
129 RT_CHANNEL_DOMAIN_WORLD_NULL
= 0x20,
130 RT_CHANNEL_DOMAIN_ETSI1_NULL
= 0x21,
131 RT_CHANNEL_DOMAIN_FCC1_NULL
= 0x22,
132 RT_CHANNEL_DOMAIN_MKK1_NULL
= 0x23,
133 RT_CHANNEL_DOMAIN_ETSI2_NULL
= 0x24,
134 RT_CHANNEL_DOMAIN_FCC1_FCC1
= 0x25,
135 RT_CHANNEL_DOMAIN_WORLD_ETSI1
= 0x26,
136 RT_CHANNEL_DOMAIN_MKK1_MKK1
= 0x27,
137 RT_CHANNEL_DOMAIN_WORLD_KCC1
= 0x28,
138 RT_CHANNEL_DOMAIN_WORLD_FCC2
= 0x29,
139 RT_CHANNEL_DOMAIN_WORLD_FCC3
= 0x30,
140 RT_CHANNEL_DOMAIN_WORLD_FCC4
= 0x31,
141 RT_CHANNEL_DOMAIN_WORLD_FCC5
= 0x32,
142 RT_CHANNEL_DOMAIN_WORLD_FCC6
= 0x33,
143 RT_CHANNEL_DOMAIN_FCC1_FCC7
= 0x34,
144 RT_CHANNEL_DOMAIN_WORLD_ETSI2
= 0x35,
145 RT_CHANNEL_DOMAIN_WORLD_ETSI3
= 0x36,
146 RT_CHANNEL_DOMAIN_MKK1_MKK2
= 0x37,
147 RT_CHANNEL_DOMAIN_MKK1_MKK3
= 0x38,
148 RT_CHANNEL_DOMAIN_FCC1_NCC1
= 0x39,
149 RT_CHANNEL_DOMAIN_FCC1_NCC2
= 0x40,
151 //===== Add new channel plan above this line===============//
152 RT_CHANNEL_DOMAIN_MAX
,
153 RT_CHANNEL_DOMAIN_REALTEK_DEFINE
= 0x7F,
154 }RT_CHANNEL_DOMAIN
, *PRT_CHANNEL_DOMAIN
;
156 typedef enum _RT_CHANNEL_DOMAIN_2G
158 RT_CHANNEL_DOMAIN_2G_WORLD
= 0x00, //Worldwird 13
159 RT_CHANNEL_DOMAIN_2G_ETSI1
= 0x01, //Europe
160 RT_CHANNEL_DOMAIN_2G_FCC1
= 0x02, //US
161 RT_CHANNEL_DOMAIN_2G_MKK1
= 0x03, //Japan
162 RT_CHANNEL_DOMAIN_2G_ETSI2
= 0x04, //France
163 RT_CHANNEL_DOMAIN_2G_NULL
= 0x05,
164 //===== Add new channel plan above this line===============//
165 RT_CHANNEL_DOMAIN_2G_MAX
,
166 }RT_CHANNEL_DOMAIN_2G
, *PRT_CHANNEL_DOMAIN_2G
;
168 typedef enum _RT_CHANNEL_DOMAIN_5G
170 RT_CHANNEL_DOMAIN_5G_NULL
= 0x00,
171 RT_CHANNEL_DOMAIN_5G_ETSI1
= 0x01, //Europe
172 RT_CHANNEL_DOMAIN_5G_ETSI2
= 0x02, //Australia, New Zealand
173 RT_CHANNEL_DOMAIN_5G_ETSI3
= 0x03, //Russia
174 RT_CHANNEL_DOMAIN_5G_FCC1
= 0x04, //US
175 RT_CHANNEL_DOMAIN_5G_FCC2
= 0x05, //FCC o/w DFS Channels
176 RT_CHANNEL_DOMAIN_5G_FCC3
= 0x06, //India, Mexico
177 RT_CHANNEL_DOMAIN_5G_FCC4
= 0x07, //Venezuela
178 RT_CHANNEL_DOMAIN_5G_FCC5
= 0x08, //China
179 RT_CHANNEL_DOMAIN_5G_FCC6
= 0x09, //Israel
180 RT_CHANNEL_DOMAIN_5G_FCC7_IC1
= 0x0A, //US, Canada
181 RT_CHANNEL_DOMAIN_5G_KCC1
= 0x0B, //Korea
182 RT_CHANNEL_DOMAIN_5G_MKK1
= 0x0C, //Japan
183 RT_CHANNEL_DOMAIN_5G_MKK2
= 0x0D, //Japan (W52, W53)
184 RT_CHANNEL_DOMAIN_5G_MKK3
= 0x0E, //Japan (W56)
185 RT_CHANNEL_DOMAIN_5G_NCC1
= 0x0F, //Taiwan
186 RT_CHANNEL_DOMAIN_5G_NCC2
= 0x10, //Taiwan o/w DFS
187 //===== Add new channel plan above this line===============//
188 //===== Driver Self Defined =====//
189 RT_CHANNEL_DOMAIN_5G_FCC
= 0x11,
190 RT_CHANNEL_DOMAIN_5G_JAPAN_NO_DFS
= 0x12,
191 RT_CHANNEL_DOMAIN_5G_FCC4_NO_DFS
= 0x13,
192 RT_CHANNEL_DOMAIN_5G_MAX
,
193 }RT_CHANNEL_DOMAIN_5G
, *PRT_CHANNEL_DOMAIN_5G
;
195 #define rtw_is_channel_plan_valid(chplan) (chplan<RT_CHANNEL_DOMAIN_MAX || chplan == RT_CHANNEL_DOMAIN_REALTEK_DEFINE)
197 typedef struct _RT_CHANNEL_PLAN
199 unsigned char Channel
[MAX_CHANNEL_NUM
];
201 }RT_CHANNEL_PLAN
, *PRT_CHANNEL_PLAN
;
203 typedef struct _RT_CHANNEL_PLAN_2G
205 unsigned char Channel
[MAX_CHANNEL_NUM_2G
];
207 }RT_CHANNEL_PLAN_2G
, *PRT_CHANNEL_PLAN_2G
;
209 typedef struct _RT_CHANNEL_PLAN_5G
211 unsigned char Channel
[MAX_CHANNEL_NUM_5G
];
213 }RT_CHANNEL_PLAN_5G
, *PRT_CHANNEL_PLAN_5G
;
215 typedef struct _RT_CHANNEL_PLAN_MAP
217 unsigned char Index2G
;
218 unsigned char Index5G
;
219 }RT_CHANNEL_PLAN_MAP
, *PRT_CHANNEL_PLAN_MAP
;
244 struct mlme_handler
{
247 unsigned int (*func
)(_adapter
*padapter
, union recv_frame
*precv_frame
);
250 struct action_handler
{
253 unsigned int (*func
)(_adapter
*padapter
, union recv_frame
*precv_frame
);
264 NDIS_802_11_SSID ssid
[RTW_SSID_SCAN_AMOUNT
];
265 struct rtw_ieee80211_channel ch
[RTW_CHANNEL_SCAN_AMOUNT
];
268 //#define AP_MODE 0x0C
269 //#define STATION_MODE 0x08
270 //#define AD_HOC_MODE 0x04
271 //#define NO_LINK_MODE 0x00
273 #define WIFI_FW_NULL_STATE _HW_STATE_NOLINK_
274 #define WIFI_FW_STATION_STATE _HW_STATE_STATION_
275 #define WIFI_FW_AP_STATE _HW_STATE_AP_
276 #define WIFI_FW_ADHOC_STATE _HW_STATE_ADHOC_
278 #define WIFI_FW_AUTH_NULL 0x00000100
279 #define WIFI_FW_AUTH_STATE 0x00000200
280 #define WIFI_FW_AUTH_SUCCESS 0x00000400
282 #define WIFI_FW_ASSOC_STATE 0x00002000
283 #define WIFI_FW_ASSOC_SUCCESS 0x00004000
285 #define WIFI_FW_LINKING_STATE (WIFI_FW_AUTH_NULL | WIFI_FW_AUTH_STATE | WIFI_FW_AUTH_SUCCESS |WIFI_FW_ASSOC_STATE)
288 // 1: Write RCR DATA BIT
289 // 2: Issue peer traffic indication
290 // 3: Go back to the channel linked with AP, terminating channel switch procedure
291 // 4: Init channel sensing, receive all data and mgnt frame
292 // 5: Channel sensing and report candidate channel
293 // 6: First time set channel to off channel
294 // 7: Go back tp the channel linked with AP when set base channel as target channel
295 // 8: Set channel back to base channel
296 // 9: Set channel back to off channel
297 // 10: Restore RCR DATA BIT
306 TDLS_INIT_CH_SEN
= 4,
307 TDLS_DONE_CH_SEN
= 5,
323 struct sta_info
*psta
;
327 NDIS_802_11_RATES_EX SupportedRates
;
332 * When one iface acted as AP mode and the other iface is STA mode and scanning,
333 * it should switch back to AP's operating channel periodically.
335 * When the driver scanned RTW_SCAN_NUM_OF_CH channels, it would switch back to AP's operating channel for
336 * RTW_STAY_AP_CH_MILLISECOND * SURVEY_TO milliseconds.
338 * For chip supports 2.4G + 5GHz and AP mode is operating in channel 1,
339 * RTW_SCAN_NUM_OF_CH is 8, RTW_STAY_AP_CH_MILLISECOND is 3 and SURVEY_TO is 100.
340 * When it's STA mode gets set_scan command,
342 * 1. Doing the scan on channel 1.2.3.4.5.6.7.8
343 * 2. Back to channel 1 for 300 milliseconds
344 * 3. Go through doing site survey on channel 9.10.11.36.40.44.48.52
345 * 4. Back to channel 1 for 300 milliseconds
346 * 5. ... and so on, till survey done.
348 #if defined CONFIG_STA_MODE_SCAN_UNDER_AP_MODE && defined CONFIG_CONCURRENT_MODE
349 #define RTW_SCAN_NUM_OF_CH 8
350 #define RTW_STAY_AP_CH_MILLISECOND 3 // this value is a multiplier,for example, when this value is 3, it would stay AP's op ch for
351 // 3 * SURVEY_TO millisecond.
352 #endif //defined CONFIG_STA_MODE_SCAN_UNDER_AP_MODE && defined CONFIG_CONCURRENT_MODE
361 u32 auth_algo
; // 802.11 auth, could be open, shared, auto
363 u32 enc_algo
;//encrypt algorithm;
364 u32 key_index
; // this is only valid for legendary wep, 0~3 for key id.
380 u8 turboMode_cts2self
;
383 u8 agg_enable_bitmap
;
384 u8 ADDBA_retry_count
;
385 u8 candidate_tid_bitmap
;
387 // Accept ADDBA Request
388 BOOLEAN bAcceptAddbaReq
;
392 struct ADDBA_request ADDBA_req
;
393 struct WMM_para_element WMM_param
;
394 struct HT_caps_element HT_caps
;
395 struct HT_info_element HT_info
;
396 WLAN_BSSID_EX network
;//join network or bss_network, if in ap mode, it is the same to cur_network.network
397 struct FW_Sta_Info FW_sta_info
[NUM_STA
];
399 #ifdef CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
401 #endif //CONFIG_STA_MODE_SCAN_UNDER_AP_MODE
404 // The channel information about this channel including joining, scanning, and power constraints.
405 typedef struct _RT_CHANNEL_INFO
407 u8 ChannelNum
; // The channel number.
408 RT_SCAN_TYPE ScanType
; // Scan type such as passive or active scan.
409 //u16 ScanPeriod; // Listen time in millisecond in this channel.
410 //s32 MaxTxPwrDbm; // Max allowed tx power.
411 //u32 ExInfo; // Extended Information for this channel.
412 #ifdef CONFIG_FIND_BEST_CHANNEL
415 }RT_CHANNEL_INFO
, *PRT_CHANNEL_INFO
;
417 int rtw_ch_set_search_ch(RT_CHANNEL_INFO
*ch_set
, const u32 ch
);
418 bool rtw_mlme_band_check(_adapter
*adapter
, const u32 ch
);
420 // P2P_MAX_REG_CLASSES - Maximum number of regulatory classes
421 #define P2P_MAX_REG_CLASSES 10
423 // P2P_MAX_REG_CLASS_CHANNELS - Maximum number of channels per regulatory class
424 #define P2P_MAX_REG_CLASS_CHANNELS 20
426 // struct p2p_channels - List of supported channels
427 struct p2p_channels
{
428 // struct p2p_reg_class - Supported regulatory class
429 struct p2p_reg_class
{
430 // reg_class - Regulatory class (IEEE 802.11-2007, Annex J)
433 // channel - Supported channels
434 u8 channel
[P2P_MAX_REG_CLASS_CHANNELS
];
436 // channels - Number of channel entries in use
438 } reg_class
[P2P_MAX_REG_CLASSES
];
440 // reg_classes - Number of reg_class entries in use
444 struct p2p_oper_class_map
{
445 enum hw_mode
{IEEE80211G
,IEEE80211A
} mode
;
450 enum { BW20
, BW40PLUS
, BW40MINUS
} bw
;
459 #ifdef CONFIG_IEEE80211W
462 u64 mgnt_80211w_IPN_rx
;
463 #endif //CONFIG_IEEE80211W
464 //struct fw_priv fwpriv;
466 unsigned char cur_channel
;
467 unsigned char cur_bwmode
;
468 unsigned char cur_ch_offset
;//PRIME_CHNL_OFFSET
469 unsigned char cur_wireless_mode
;
471 unsigned char max_chan_nums
;
472 RT_CHANNEL_INFO channel_set
[MAX_CHANNEL_NUM
];
473 struct p2p_channels channel_list
;
474 unsigned char basicrate
[NumRates
];
475 unsigned char datarate
[NumRates
];
477 struct ss_res sitesurvey_res
;
478 struct mlme_ext_info mlmext_info
;//for sta/adhoc mode, including current scanning/connecting/connected related info.
479 //for ap mode, network includes ap's cap_info
482 #ifdef CONFIG_IEEE80211W
483 _timer sa_query_timer
;
484 #endif //CONFIG_IEEE80211W
485 //_timer ADDBA_timer;
489 u8 tx_rate
; // TXRATE when USERATE is set.
491 u32 retry
; //retry for issue probereq
495 #ifdef CONFIG_AP_MODE
496 unsigned char bstart_bss
;
499 //recv_decache check for Action_public frame
500 u8 action_public_dialog_token
;
501 u16 action_public_rxseq
;
504 u8 update_channel_plan_by_ap_done
;
507 #ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK
508 u8 active_keep_alive_check
;
513 int init_mlme_ext_priv(_adapter
* padapter
);
514 int init_hw_mlme_ext(_adapter
*padapter
);
515 void free_mlme_ext_priv (struct mlme_ext_priv
*pmlmeext
);
516 extern void init_mlme_ext_timer(_adapter
*padapter
);
517 extern void init_addba_retry_timer(_adapter
*padapter
, struct sta_info
*psta
);
518 extern struct xmit_frame
*alloc_mgtxmitframe(struct xmit_priv
*pxmitpriv
);
519 struct xmit_frame
*alloc_mgtxmitframe_once(struct xmit_priv
*pxmitpriv
);
521 //void fill_fwpriv(_adapter * padapter, struct fw_priv *pfwpriv);
523 unsigned char networktype_to_raid(unsigned char network_type
);
524 int judge_network_type(_adapter
*padapter
, unsigned char *rate
, int ratelen
);
525 void get_rate_set(_adapter
*padapter
, unsigned char *pbssrate
, int *bssrate_len
);
526 void UpdateBrateTbl(_adapter
*padapter
,u8
*mBratesOS
);
527 void UpdateBrateTblForSoftAP(u8
*bssrateset
, u32 bssratelen
);
528 void change_band_update_ie(_adapter
*padapter
, WLAN_BSSID_EX
*pnetwork
);
530 void Save_DM_Func_Flag(_adapter
*padapter
);
531 void Restore_DM_Func_Flag(_adapter
*padapter
);
532 void Switch_DM_Func(_adapter
*padapter
, u8 mode
, u8 enable
);
534 //void Set_NETYPE1_MSR(_adapter *padapter, u8 type);
535 //void Set_NETYPE0_MSR(_adapter *padapter, u8 type);
536 void Set_MSR(_adapter
*padapter
, u8 type
);
538 u8
rtw_get_oper_ch(_adapter
*adapter
);
539 void rtw_set_oper_ch(_adapter
*adapter
, u8 ch
);
540 u8
rtw_get_oper_bw(_adapter
*adapter
);
541 void rtw_set_oper_bw(_adapter
*adapter
, u8 bw
);
542 u8
rtw_get_oper_choffset(_adapter
*adapter
);
543 void rtw_set_oper_choffset(_adapter
*adapter
, u8 offset
);
544 u32
rtw_get_on_oper_ch_time(_adapter
*adapter
);
545 u32
rtw_get_on_cur_ch_time(_adapter
*adapter
);
547 void set_channel_bwmode(_adapter
*padapter
, unsigned char channel
, unsigned char channel_offset
, unsigned short bwmode
);
548 void SelectChannel(_adapter
*padapter
, unsigned char channel
);
549 void SetBWMode(_adapter
*padapter
, unsigned short bwmode
, unsigned char channel_offset
);
551 unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval
);
553 void write_cam(_adapter
*padapter
, u8 entry
, u16 ctrl
, u8
*mac
, u8
*key
);
554 void clear_cam_entry(_adapter
*padapter
, u8 entry
);
556 void invalidate_cam_all(_adapter
*padapter
);
557 void CAM_empty_entry(PADAPTER Adapter
, u8 ucIndex
);
560 int allocate_fw_sta_entry(_adapter
*padapter
);
561 void flush_all_cam_entry(_adapter
*padapter
);
563 BOOLEAN
IsLegal5GChannel(PADAPTER Adapter
, u8 channel
);
565 void site_survey(_adapter
*padapter
);
566 u8
collect_bss_info(_adapter
*padapter
, union recv_frame
*precv_frame
, WLAN_BSSID_EX
*bssid
);
568 int get_bsstype(unsigned short capability
);
569 u8
* get_my_bssid(WLAN_BSSID_EX
*pnetwork
);
570 u16
get_beacon_interval(WLAN_BSSID_EX
*bss
);
572 int is_client_associated_to_ap(_adapter
*padapter
);
573 int is_client_associated_to_ibss(_adapter
*padapter
);
574 int is_IBSS_empty(_adapter
*padapter
);
576 unsigned char check_assoc_AP(u8
*pframe
, uint len
);
578 int WMM_param_handler(_adapter
*padapter
, PNDIS_802_11_VARIABLE_IEs pIE
);
580 int WFD_info_handler(_adapter
*padapter
, PNDIS_802_11_VARIABLE_IEs pIE
);
582 void WMMOnAssocRsp(_adapter
*padapter
);
584 void HT_caps_handler(_adapter
*padapter
, PNDIS_802_11_VARIABLE_IEs pIE
);
585 void HT_info_handler(_adapter
*padapter
, PNDIS_802_11_VARIABLE_IEs pIE
);
586 void HTOnAssocRsp(_adapter
*padapter
);
588 void ERP_IE_handler(_adapter
*padapter
, PNDIS_802_11_VARIABLE_IEs pIE
);
589 void VCS_update(_adapter
*padapter
, struct sta_info
*psta
);
591 void update_beacon_info(_adapter
*padapter
, u8
*pframe
, uint len
, struct sta_info
*psta
);
593 void process_csa_ie(_adapter
*padapter
, u8
*pframe
, uint len
);
595 void update_IOT_info(_adapter
*padapter
);
596 void update_capinfo(PADAPTER Adapter
, u16 updateCap
);
597 void update_wireless_mode(_adapter
* padapter
);
598 void update_tx_basic_rate(_adapter
*padapter
, u8 modulation
);
599 void update_bmc_sta_support_rate(_adapter
*padapter
, u32 mac_id
);
600 int update_sta_support_rate(_adapter
*padapter
, u8
* pvar_ie
, uint var_ie_len
, int cam_idx
);
603 void update_sta_info(_adapter
*padapter
, struct sta_info
*psta
);
604 unsigned int update_basic_rate(unsigned char *ptn
, unsigned int ptn_sz
);
605 unsigned int update_supported_rate(unsigned char *ptn
, unsigned int ptn_sz
);
606 unsigned int update_MSC_rate(struct HT_caps_element
*pHT_caps
);
607 void Update_RA_Entry(_adapter
*padapter
, u32 mac_id
);
608 void set_sta_rate(_adapter
*padapter
, struct sta_info
*psta
);
610 unsigned int receive_disconnect(_adapter
*padapter
, unsigned char *MacAddr
, unsigned short reason
);
612 unsigned char get_highest_rate_idx(u32 mask
);
613 int support_short_GI(_adapter
*padapter
, struct HT_caps_element
*pHT_caps
);
614 unsigned int is_ap_in_tkip(_adapter
*padapter
);
617 void report_join_res(_adapter
*padapter
, int res
);
618 void report_survey_event(_adapter
*padapter
, union recv_frame
*precv_frame
);
619 void report_surveydone_event(_adapter
*padapter
);
620 void report_del_sta_event(_adapter
*padapter
, unsigned char* MacAddr
, unsigned short reason
);
621 void report_add_sta_event(_adapter
*padapter
, unsigned char* MacAddr
, int cam_idx
);
623 void beacon_timing_control(_adapter
*padapter
);
624 extern u8
set_tx_beacon_cmd(_adapter
*padapter
);
625 unsigned int setup_beacon_frame(_adapter
*padapter
, unsigned char *beacon_frame
);
626 void update_mgnt_tx_rate(_adapter
*padapter
, u8 rate
);
627 void update_mgntframe_attrib(_adapter
*padapter
, struct pkt_attrib
*pattrib
);
628 void dump_mgntframe(_adapter
*padapter
, struct xmit_frame
*pmgntframe
);
629 s32
dump_mgntframe_and_wait(_adapter
*padapter
, struct xmit_frame
*pmgntframe
, int timeout_ms
);
630 s32
dump_mgntframe_and_wait_ack(_adapter
*padapter
, struct xmit_frame
*pmgntframe
);
633 void issue_probersp_p2p(_adapter
*padapter
, unsigned char *da
);
634 void issue_p2p_provision_request( _adapter
*padapter
, u8
* pssid
, u8 ussidlen
, u8
* pdev_raddr
);
635 void issue_p2p_GO_request(_adapter
*padapter
, u8
* raddr
);
636 void issue_probereq_p2p(_adapter
*padapter
, u8
*da
);
637 int issue_probereq_p2p_ex(_adapter
*adapter
, u8
*da
, int try_cnt
, int wait_ms
);
638 void issue_p2p_invitation_response(_adapter
*padapter
, u8
* raddr
, u8 dialogToken
, u8 success
);
639 void issue_p2p_invitation_request(_adapter
*padapter
, u8
* raddr
);
641 void issue_beacon(_adapter
*padapter
);
642 void issue_probersp(_adapter
*padapter
, unsigned char *da
, u8 is_valid_p2p_probereq
);
643 void issue_assocreq(_adapter
*padapter
);
644 void issue_asocrsp(_adapter
*padapter
, unsigned short status
, struct sta_info
*pstat
, int pkt_type
);
645 void issue_auth(_adapter
*padapter
, struct sta_info
*psta
, unsigned short status
);
646 void issue_probereq(_adapter
*padapter
, NDIS_802_11_SSID
*pssid
, u8
*da
);
647 s32
issue_probereq_ex(_adapter
*padapter
, NDIS_802_11_SSID
*pssid
, u8
* da
, int try_cnt
, int wait_ms
);
648 int issue_nulldata(_adapter
*padapter
, unsigned char *da
, unsigned int power_mode
, int try_cnt
, int wait_ms
);
649 int issue_qos_nulldata(_adapter
*padapter
, unsigned char *da
, u16 tid
, int try_cnt
, int wait_ms
);
650 int issue_deauth(_adapter
*padapter
, unsigned char *da
, unsigned short reason
);
651 int issue_deauth_ex(_adapter
*padapter
, u8
*da
, unsigned short reason
, int try_cnt
, int wait_ms
);
652 void issue_action_spct_ch_switch(_adapter
*padapter
, u8
*ra
, u8 new_ch
, u8 ch_offset
);
653 void issue_action_BA(_adapter
*padapter
, unsigned char *raddr
, unsigned char action
, unsigned short status
);
654 #ifdef CONFIG_IEEE80211W
655 void issue_action_SA_Query(_adapter
*padapter
, unsigned char *raddr
, unsigned char action
, unsigned short tid
);
656 #endif //CONFIG_IEEE80211W
657 unsigned int send_delba(_adapter
*padapter
, u8 initiator
, u8
*addr
);
658 unsigned int send_beacon(_adapter
*padapter
);
660 void start_clnt_assoc(_adapter
*padapter
);
661 void start_clnt_auth(_adapter
* padapter
);
662 void start_clnt_join(_adapter
* padapter
);
663 void start_create_ibss(_adapter
* padapter
);
665 unsigned int OnAssocReq(_adapter
*padapter
, union recv_frame
*precv_frame
);
666 unsigned int OnAssocRsp(_adapter
*padapter
, union recv_frame
*precv_frame
);
667 unsigned int OnProbeReq(_adapter
*padapter
, union recv_frame
*precv_frame
);
668 unsigned int OnProbeRsp(_adapter
*padapter
, union recv_frame
*precv_frame
);
669 unsigned int DoReserved(_adapter
*padapter
, union recv_frame
*precv_frame
);
670 unsigned int OnBeacon(_adapter
*padapter
, union recv_frame
*precv_frame
);
671 unsigned int OnAtim(_adapter
*padapter
, union recv_frame
*precv_frame
);
672 unsigned int OnDisassoc(_adapter
*padapter
, union recv_frame
*precv_frame
);
673 unsigned int OnAuth(_adapter
*padapter
, union recv_frame
*precv_frame
);
674 unsigned int OnAuthClient(_adapter
*padapter
, union recv_frame
*precv_frame
);
675 unsigned int OnDeAuth(_adapter
*padapter
, union recv_frame
*precv_frame
);
676 unsigned int OnAction(_adapter
*padapter
, union recv_frame
*precv_frame
);
678 unsigned int on_action_spct(_adapter
*padapter
, union recv_frame
*precv_frame
);
679 unsigned int OnAction_qos(_adapter
*padapter
, union recv_frame
*precv_frame
);
680 unsigned int OnAction_dls(_adapter
*padapter
, union recv_frame
*precv_frame
);
681 unsigned int OnAction_back(_adapter
*padapter
, union recv_frame
*precv_frame
);
682 unsigned int on_action_public(_adapter
*padapter
, union recv_frame
*precv_frame
);
683 unsigned int OnAction_ht(_adapter
*padapter
, union recv_frame
*precv_frame
);
684 #ifdef CONFIG_IEEE80211W
685 unsigned int OnAction_sa_query(_adapter
*padapter
, union recv_frame
*precv_frame
);
686 #endif //CONFIG_IEEE80211W
687 unsigned int OnAction_wmm(_adapter
*padapter
, union recv_frame
*precv_frame
);
688 unsigned int OnAction_p2p(_adapter
*padapter
, union recv_frame
*precv_frame
);
691 void mlmeext_joinbss_event_callback(_adapter
*padapter
, int join_res
);
692 void mlmeext_sta_del_event_callback(_adapter
*padapter
);
693 void mlmeext_sta_add_event_callback(_adapter
*padapter
, struct sta_info
*psta
);
695 void linked_status_chk(_adapter
*padapter
);
697 void survey_timer_hdl (_adapter
*padapter
);
698 void link_timer_hdl (_adapter
*padapter
);
699 void addba_timer_hdl(struct sta_info
*psta
);
700 #ifdef CONFIG_IEEE80211W
701 void sa_query_timer_hdl(_adapter
*padapter
);
702 #endif //CONFIG_IEEE80211W
703 //void reauth_timer_hdl(_adapter *padapter);
704 //void reassoc_timer_hdl(_adapter *padapter);
706 #define set_survey_timer(mlmeext, ms) \
708 /*DBG_871X("%s set_survey_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms));*/ \
709 _set_timer(&(mlmeext)->survey_timer, (ms)); \
712 #define set_link_timer(mlmeext, ms) \
714 /*DBG_871X("%s set_link_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms));*/ \
715 _set_timer(&(mlmeext)->link_timer, (ms)); \
717 #ifdef CONFIG_IEEE80211W
718 #define set_sa_query_timer(mlmeext, ms) \
720 DBG_871X("%s set_sa_query_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms)); \
721 _set_timer(&(mlmeext)->sa_query_timer, (ms)); \
723 #endif //CONFIG_IEEE80211W
724 extern int cckrates_included(unsigned char *rate
, int ratelen
);
725 extern int cckratesonly_included(unsigned char *rate
, int ratelen
);
727 extern void process_addba_req(_adapter
*padapter
, u8
*paddba_req
, u8
*addr
);
729 extern void update_TSF(struct mlme_ext_priv
*pmlmeext
, u8
*pframe
, uint len
);
730 extern void correct_TSF(_adapter
*padapter
, struct mlme_ext_priv
*pmlmeext
);
733 #ifdef CONFIG_CONCURRENT_MODE
734 sint
check_buddy_mlmeinfo_state(_adapter
*padapter
, u32 state
);
735 void concurrent_chk_joinbss_done(_adapter
*padapter
, int join_res
);
736 #endif //CONFIG_CONCURRENT_MODE
738 #ifdef CONFIG_DUALMAC_CONCURRENT
739 void dc_SelectChannel(_adapter
*padapter
, unsigned char channel
);
740 void dc_SetBWMode(_adapter
*padapter
, unsigned short bwmode
, unsigned char channel_offset
);
741 void dc_set_channel_bwmode_disconnect(_adapter
*padapter
);
742 u8
dc_handle_join_request(_adapter
*padapter
);
743 void dc_handle_join_done(_adapter
*padapter
, u8 join_res
);
744 sint
dc_check_fwstate(_adapter
*padapter
, sint fw_state
);
745 u8
dc_handle_site_survey(_adapter
*padapter
);
746 void dc_report_survey_event(_adapter
*padapter
, union recv_frame
*precv_frame
);
747 void dc_set_channel_bwmode_survey_done(_adapter
*padapter
);
748 void dc_set_ap_channel_bandwidth(_adapter
*padapter
, u8 channel
, u8 channel_offset
, u8 bwmode
);
749 void dc_resume_xmit(_adapter
*padapter
);
750 u8
dc_check_xmit(_adapter
*padapter
);
753 int rtw_chk_start_clnt_join(_adapter
*padapter
);
754 int rtw_get_ch_setting_union(_adapter
*adapter
, u8
*ch
, u8
*bw
, u8
*offset
);
758 u8 (*h2cfuns
)(struct _ADAPTER
*padapter
, u8
*pbuf
);
762 u8
read_macreg_hdl(_adapter
*padapter
, u8
*pbuf
);
763 u8
write_macreg_hdl(_adapter
*padapter
, u8
*pbuf
);
764 u8
read_bbreg_hdl(_adapter
*padapter
, u8
*pbuf
);
765 u8
write_bbreg_hdl(_adapter
*padapter
, u8
*pbuf
);
766 u8
read_rfreg_hdl(_adapter
*padapter
, u8
*pbuf
);
767 u8
write_rfreg_hdl(_adapter
*padapter
, u8
*pbuf
);
770 u8
NULL_hdl(_adapter
*padapter
, u8
*pbuf
);
771 u8
join_cmd_hdl(_adapter
*padapter
, u8
*pbuf
);
772 u8
disconnect_hdl(_adapter
*padapter
, u8
*pbuf
);
773 u8
createbss_hdl(_adapter
*padapter
, u8
*pbuf
);
774 u8
setopmode_hdl(_adapter
*padapter
, u8
*pbuf
);
775 u8
sitesurvey_cmd_hdl(_adapter
*padapter
, u8
*pbuf
);
776 u8
setauth_hdl(_adapter
*padapter
, u8
*pbuf
);
777 u8
setkey_hdl(_adapter
*padapter
, u8
*pbuf
);
778 u8
set_stakey_hdl(_adapter
*padapter
, u8
*pbuf
);
779 u8
set_assocsta_hdl(_adapter
*padapter
, u8
*pbuf
);
780 u8
del_assocsta_hdl(_adapter
*padapter
, u8
*pbuf
);
781 u8
add_ba_hdl(_adapter
*padapter
, unsigned char *pbuf
);
783 u8
mlme_evt_hdl(_adapter
*padapter
, unsigned char *pbuf
);
784 u8
h2c_msg_hdl(_adapter
*padapter
, unsigned char *pbuf
);
785 u8
tx_beacon_hdl(_adapter
*padapter
, unsigned char *pbuf
);
786 u8
set_ch_hdl(_adapter
*padapter
, u8
*pbuf
);
787 u8
set_chplan_hdl(_adapter
*padapter
, unsigned char *pbuf
);
788 u8
led_blink_hdl(_adapter
*padapter
, unsigned char *pbuf
);
789 u8
set_csa_hdl(_adapter
*padapter
, unsigned char *pbuf
); //Kurt: Handling DFS channel switch announcement ie.
790 u8
tdls_hdl(_adapter
*padapter
, unsigned char *pbuf
);
793 #define GEN_DRV_CMD_HANDLER(size, cmd) {size, &cmd ## _hdl},
794 #define GEN_MLME_EXT_HANDLER(size, cmd) {size, cmd},
798 struct cmd_hdl wlancmds
[] =
800 GEN_DRV_CMD_HANDLER(0, NULL
) /*0*/
801 GEN_DRV_CMD_HANDLER(0, NULL
)
802 GEN_DRV_CMD_HANDLER(0, NULL
)
803 GEN_DRV_CMD_HANDLER(0, NULL
)
804 GEN_DRV_CMD_HANDLER(0, NULL
)
805 GEN_DRV_CMD_HANDLER(0, NULL
)
806 GEN_MLME_EXT_HANDLER(0, NULL
)
807 GEN_MLME_EXT_HANDLER(0, NULL
)
808 GEN_MLME_EXT_HANDLER(0, NULL
)
809 GEN_MLME_EXT_HANDLER(0, NULL
)
810 GEN_MLME_EXT_HANDLER(0, NULL
) /*10*/
811 GEN_MLME_EXT_HANDLER(0, NULL
)
812 GEN_MLME_EXT_HANDLER(0, NULL
)
813 GEN_MLME_EXT_HANDLER(0, NULL
)
814 GEN_MLME_EXT_HANDLER(sizeof (struct joinbss_parm
), join_cmd_hdl
) /*14*/
815 GEN_MLME_EXT_HANDLER(sizeof (struct disconnect_parm
), disconnect_hdl
)
816 GEN_MLME_EXT_HANDLER(sizeof (struct createbss_parm
), createbss_hdl
)
817 GEN_MLME_EXT_HANDLER(sizeof (struct setopmode_parm
), setopmode_hdl
)
818 GEN_MLME_EXT_HANDLER(sizeof (struct sitesurvey_parm
), sitesurvey_cmd_hdl
) /*18*/
819 GEN_MLME_EXT_HANDLER(sizeof (struct setauth_parm
), setauth_hdl
)
820 GEN_MLME_EXT_HANDLER(sizeof (struct setkey_parm
), setkey_hdl
) /*20*/
821 GEN_MLME_EXT_HANDLER(sizeof (struct set_stakey_parm
), set_stakey_hdl
)
822 GEN_MLME_EXT_HANDLER(sizeof (struct set_assocsta_parm
), NULL
)
823 GEN_MLME_EXT_HANDLER(sizeof (struct del_assocsta_parm
), NULL
)
824 GEN_MLME_EXT_HANDLER(sizeof (struct setstapwrstate_parm
), NULL
)
825 GEN_MLME_EXT_HANDLER(sizeof (struct setbasicrate_parm
), NULL
)
826 GEN_MLME_EXT_HANDLER(sizeof (struct getbasicrate_parm
), NULL
)
827 GEN_MLME_EXT_HANDLER(sizeof (struct setdatarate_parm
), NULL
)
828 GEN_MLME_EXT_HANDLER(sizeof (struct getdatarate_parm
), NULL
)
829 GEN_MLME_EXT_HANDLER(sizeof (struct setphyinfo_parm
), NULL
)
830 GEN_MLME_EXT_HANDLER(sizeof (struct getphyinfo_parm
), NULL
) /*30*/
831 GEN_MLME_EXT_HANDLER(sizeof (struct setphy_parm
), NULL
)
832 GEN_MLME_EXT_HANDLER(sizeof (struct getphy_parm
), NULL
)
833 GEN_MLME_EXT_HANDLER(0, NULL
)
834 GEN_MLME_EXT_HANDLER(0, NULL
)
835 GEN_MLME_EXT_HANDLER(0, NULL
)
836 GEN_MLME_EXT_HANDLER(0, NULL
)
837 GEN_MLME_EXT_HANDLER(0, NULL
)
838 GEN_MLME_EXT_HANDLER(0, NULL
)
839 GEN_MLME_EXT_HANDLER(0, NULL
)
840 GEN_MLME_EXT_HANDLER(0, NULL
) /*40*/
841 GEN_MLME_EXT_HANDLER(0, NULL
)
842 GEN_MLME_EXT_HANDLER(0, NULL
)
843 GEN_MLME_EXT_HANDLER(0, NULL
)
844 GEN_MLME_EXT_HANDLER(0, NULL
)
845 GEN_MLME_EXT_HANDLER(sizeof(struct addBaReq_parm
), add_ba_hdl
)
846 GEN_MLME_EXT_HANDLER(sizeof(struct set_ch_parm
), set_ch_hdl
) /* 46 */
847 GEN_MLME_EXT_HANDLER(0, NULL
)
848 GEN_MLME_EXT_HANDLER(0, NULL
)
849 GEN_MLME_EXT_HANDLER(0, NULL
)
850 GEN_MLME_EXT_HANDLER(0, NULL
) /*50*/
851 GEN_MLME_EXT_HANDLER(0, NULL
)
852 GEN_MLME_EXT_HANDLER(0, NULL
)
853 GEN_MLME_EXT_HANDLER(0, NULL
)
854 GEN_MLME_EXT_HANDLER(0, NULL
)
855 GEN_MLME_EXT_HANDLER(sizeof(struct Tx_Beacon_param
), tx_beacon_hdl
) /*55*/
857 GEN_MLME_EXT_HANDLER(0, mlme_evt_hdl
) /*56*/
858 GEN_MLME_EXT_HANDLER(0, rtw_drvextra_cmd_hdl
) /*57*/
860 GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl
) /*58*/
861 GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param
), set_chplan_hdl
) /*59*/
862 GEN_MLME_EXT_HANDLER(sizeof(struct LedBlink_param
), led_blink_hdl
) /*60*/
863 GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelSwitch_param
), set_csa_hdl
) /*61*/
864 GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param
), tdls_hdl
) /*62*/
869 struct C2HEvent_Header
872 #ifdef CONFIG_LITTLE_ENDIAN
878 #elif defined(CONFIG_BIG_ENDIAN)
886 # error "Must be LITTLE or BIG Endian"
894 void rtw_dummy_event_callback(_adapter
*adapter
, u8
*pbuf
);
895 void rtw_fwdbg_event_callback(_adapter
*adapter
, u8
*pbuf
);
899 GEN_EVT_CODE(_Read_MACREG
)=0, /*0*/
900 GEN_EVT_CODE(_Read_BBREG
),
901 GEN_EVT_CODE(_Read_RFREG
),
902 GEN_EVT_CODE(_Read_EEPROM
),
903 GEN_EVT_CODE(_Read_EFUSE
),
904 GEN_EVT_CODE(_Read_CAM
), /*5*/
905 GEN_EVT_CODE(_Get_BasicRate
),
906 GEN_EVT_CODE(_Get_DataRate
),
907 GEN_EVT_CODE(_Survey
), /*8*/
908 GEN_EVT_CODE(_SurveyDone
), /*9*/
910 GEN_EVT_CODE(_JoinBss
) , /*10*/
911 GEN_EVT_CODE(_AddSTA
),
912 GEN_EVT_CODE(_DelSTA
),
913 GEN_EVT_CODE(_AtimDone
) ,
914 GEN_EVT_CODE(_TX_Report
),
915 GEN_EVT_CODE(_CCX_Report
), /*15*/
916 GEN_EVT_CODE(_DTM_Report
),
917 GEN_EVT_CODE(_TX_Rate_Statistics
),
918 GEN_EVT_CODE(_C2HLBK
),
919 GEN_EVT_CODE(_FWDBG
),
920 GEN_EVT_CODE(_C2HFEEDBACK
), /*20*/
921 GEN_EVT_CODE(_ADDBA
),
922 GEN_EVT_CODE(_C2HBCN
),
923 GEN_EVT_CODE(_ReportPwrState
), //filen: only for PCIE, USB
924 GEN_EVT_CODE(_CloseRF
), //filen: only for PCIE, work around ASPM
929 #ifdef _RTW_MLME_EXT_C_
931 static struct fwevent wlanevents
[] =
933 {0, rtw_dummy_event_callback
}, /*0*/
941 {0, &rtw_survey_event_callback
}, /*8*/
942 {sizeof (struct surveydone_event
), &rtw_surveydone_event_callback
}, /*9*/
944 {0, &rtw_joinbss_event_callback
}, /*10*/
945 {sizeof(struct stassoc_event
), &rtw_stassoc_event_callback
},
946 {sizeof(struct stadel_event
), &rtw_stadel_event_callback
},
947 {0, &rtw_atimdone_event_callback
},
948 {0, rtw_dummy_event_callback
},
953 {0, rtw_fwdbg_event_callback
},
957 {0, &rtw_cpwm_event_callback
},
960 #endif//_RTL8192C_CMD_C_