1
2
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
12
13
14
15
16
17#define SURVEY_TO (100)
18#define REAUTH_TO (300)
19#define REASSOC_TO (300)
20
21#define ADDBA_TO (2000)
22
23#define LINKED_TO (1)
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
34
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
50#define DYNAMIC_MAC_EDCA_TURBO BIT(16)
51#define DYNAMIC_MAC_EARLY_MODE BIT(17)
52
53
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
78extern unsigned char RTW_WPA_OUI[];
79extern unsigned char WMM_OUI[];
80extern unsigned char WPS_OUI[];
81extern unsigned char WFD_OUI[];
82extern unsigned char P2P_OUI[];
83
84extern unsigned char WMM_INFO_OUI[];
85extern unsigned char WMM_PARA_OUI[];
86
87
88
89
90
91
92
93
94enum RT_CHANNEL_DOMAIN {
95
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
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
141 RT_CHANNEL_DOMAIN_MAX,
142 RT_CHANNEL_DOMAIN_REALTEK_DEFINE = 0x7F,
143};
144
145enum RT_CHANNEL_DOMAIN_2G {
146 RT_CHANNEL_DOMAIN_2G_WORLD = 0x00,
147 RT_CHANNEL_DOMAIN_2G_ETSI1 = 0x01,
148 RT_CHANNEL_DOMAIN_2G_FCC1 = 0x02,
149 RT_CHANNEL_DOMAIN_2G_MKK1 = 0x03,
150 RT_CHANNEL_DOMAIN_2G_ETSI2 = 0x04,
151 RT_CHANNEL_DOMAIN_2G_NULL = 0x05,
152
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
160struct rt_channel_plan {
161 unsigned char Channel[MAX_CHANNEL_NUM];
162 unsigned char Len;
163};
164
165struct rt_channel_plan_map {
166 unsigned char Index2G;
167};
168
169enum Associated_AP {
170 atherosAP = 0,
171 broadcomAP = 1,
172 ciscoAP = 2,
173 marvellAP = 3,
174 ralinkAP = 4,
175 realtekAP = 5,
176 airgocapAP = 6,
177 unknownAP = 7,
178 maxAP,
179};
180
181enum HT_IOT_PEER {
182 HT_IOT_PEER_UNKNOWN = 0,
183 HT_IOT_PEER_REALTEK = 1,
184 HT_IOT_PEER_REALTEK_92SE = 2,
185 HT_IOT_PEER_BROADCOM = 3,
186 HT_IOT_PEER_RALINK = 4,
187 HT_IOT_PEER_ATHEROS = 5,
188 HT_IOT_PEER_CISCO = 6,
189 HT_IOT_PEER_MERU = 7,
190 HT_IOT_PEER_MARVELL = 8,
191 HT_IOT_PEER_REALTEK_SOFTAP = 9,
192 HT_IOT_PEER_SELF_SOFTAP = 10,
193 HT_IOT_PEER_AIRGO = 11,
194 HT_IOT_PEER_INTEL = 12,
195 HT_IOT_PEER_RTK_APCLIENT = 13,
196 HT_IOT_PEER_REALTEK_81XX = 14,
197 HT_IOT_PEER_REALTEK_WOW = 15,
198 HT_IOT_PEER_TENDA = 16,
199 HT_IOT_PEER_MAX = 17
200};
201
202enum SCAN_STATE {
203 SCAN_DISABLE = 0,
204 SCAN_START = 1,
205 SCAN_TXNULL = 2,
206 SCAN_PROCESS = 3,
207 SCAN_COMPLETE = 4,
208 SCAN_STATE_MAX,
209};
210
211struct mlme_handler {
212 unsigned int num;
213 char *str;
214 unsigned int (*func)(struct adapter *adapt, struct recv_frame *frame);
215};
216
217struct action_handler {
218 unsigned int num;
219 char* str;
220 unsigned int (*func)(struct adapter *adapt, struct recv_frame *frame);
221};
222
223struct ss_res {
224 int state;
225 int bss_cnt;
226 int channel_idx;
227 int scan_mode;
228 u8 ssid_num;
229 u8 ch_num;
230 struct ndis_802_11_ssid ssid[RTW_SSID_SCAN_AMOUNT];
231 struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
232};
233
234
235
236
237
238
239#define WIFI_FW_NULL_STATE _HW_STATE_NOLINK_
240#define WIFI_FW_STATION_STATE _HW_STATE_STATION_
241#define WIFI_FW_AP_STATE _HW_STATE_AP_
242#define WIFI_FW_ADHOC_STATE _HW_STATE_ADHOC_
243
244#define WIFI_FW_AUTH_NULL 0x00000100
245#define WIFI_FW_AUTH_STATE 0x00000200
246#define WIFI_FW_AUTH_SUCCESS 0x00000400
247
248#define WIFI_FW_ASSOC_STATE 0x00002000
249#define WIFI_FW_ASSOC_SUCCESS 0x00004000
250
251#define WIFI_FW_LINKING_STATE (WIFI_FW_AUTH_NULL | \
252 WIFI_FW_AUTH_STATE | \
253 WIFI_FW_AUTH_SUCCESS | \
254 WIFI_FW_ASSOC_STATE)
255
256struct FW_Sta_Info {
257 struct sta_info *psta;
258 u32 status;
259 u32 rx_pkt;
260 u32 retry;
261 unsigned char SupportedRates[NDIS_802_11_LENGTH_RATES_EX];
262};
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284struct mlme_ext_info {
285 u32 state;
286 u32 reauth_count;
287 u32 reassoc_count;
288 u32 link_count;
289 u32 auth_seq;
290 u32 auth_algo;
291 u32 authModeToggle;
292 u32 enc_algo;
293 u32 key_index;
294
295 u32 iv;
296 u8 chg_txt[128];
297 u16 aid;
298 u16 bcn_interval;
299 u16 capability;
300 u8 assoc_AP_vendor;
301 u8 slotTime;
302 u8 preamble_mode;
303 u8 WMM_enable;
304 u8 ERP_enable;
305 u8 ERP_IE;
306 u8 HT_enable;
307 u8 HT_caps_enable;
308 u8 HT_info_enable;
309 u8 HT_protection;
310 u8 turboMode_cts2self;
311 u8 turboMode_rtsen;
312 u8 SM_PS;
313 u8 agg_enable_bitmap;
314 u8 ADDBA_retry_count;
315 u8 candidate_tid_bitmap;
316 u8 dialogToken;
317
318 bool bAcceptAddbaReq;
319 u8 bwmode_updated;
320 u8 hidden_ssid_mode;
321
322 struct ADDBA_request ADDBA_req;
323 struct WMM_para_element WMM_param;
324 struct HT_caps_element HT_caps;
325 struct HT_info_element HT_info;
326 struct wlan_bssid_ex network;
327
328
329 struct FW_Sta_Info FW_sta_info[NUM_STA];
330};
331
332
333
334struct rt_channel_info {
335 u8 ChannelNum;
336 enum rt_scan_type ScanType;
337
338 u32 rx_count;
339};
340
341int rtw_ch_set_search_ch(struct rt_channel_info *ch_set, const u32 ch);
342
343
344#define P2P_MAX_REG_CLASSES 10
345
346
347#define P2P_MAX_REG_CLASS_CHANNELS 20
348
349
350struct p2p_channels {
351
352 struct p2p_reg_class {
353
354 u8 reg_class;
355
356
357 u8 channel[P2P_MAX_REG_CLASS_CHANNELS];
358
359
360 size_t channels;
361 } reg_class[P2P_MAX_REG_CLASSES];
362
363
364 size_t reg_classes;
365};
366
367struct p2p_oper_class_map {
368 enum hw_mode {IEEE80211G} mode;
369 u8 op_class;
370 u8 min_chan;
371 u8 max_chan;
372 u8 inc;
373 enum {BW20, BW40PLUS, BW40MINUS} bw;
374};
375
376struct mlme_ext_priv {
377 struct adapter *padapter;
378 u8 mlmeext_init;
379 atomic_t event_seq;
380 u16 mgnt_seq;
381
382 unsigned char cur_channel;
383 unsigned char cur_bwmode;
384 unsigned char cur_ch_offset;
385 unsigned char cur_wireless_mode;
386
387 unsigned char oper_channel;
388
389 unsigned char oper_bwmode;
390 unsigned char oper_ch_offset;
391
392 unsigned char max_chan_nums;
393 struct rt_channel_info channel_set[MAX_CHANNEL_NUM];
394 struct p2p_channels channel_list;
395 unsigned char basicrate[NumRates];
396 unsigned char datarate[NumRates];
397
398 struct ss_res sitesurvey_res;
399 struct mlme_ext_info mlmext_info;
400
401
402
403 struct timer_list survey_timer;
404 struct timer_list link_timer;
405 u16 chan_scan_time;
406
407 u8 scan_abort;
408 u8 tx_rate;
409
410 u32 retry;
411
412 u64 TSFValue;
413
414 unsigned char bstart_bss;
415 u8 update_channel_plan_by_ap_done;
416
417 u8 action_public_dialog_token;
418 u16 action_public_rxseq;
419 u8 active_keep_alive_check;
420};
421
422int init_mlme_ext_priv(struct adapter *adapter);
423int init_hw_mlme_ext(struct adapter *padapter);
424void free_mlme_ext_priv (struct mlme_ext_priv *pmlmeext);
425extern void init_mlme_ext_timer(struct adapter *padapter);
426extern void init_addba_retry_timer(struct adapter *adapt, struct sta_info *sta);
427extern struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv);
428
429unsigned char networktype_to_raid(unsigned char network_type);
430u8 judge_network_type(struct adapter *padapter, unsigned char *rate, int len);
431void get_rate_set(struct adapter *padapter, unsigned char *pbssrate, int *len);
432void UpdateBrateTbl(struct adapter *padapter, u8 *mBratesOS);
433void UpdateBrateTblForSoftAP(u8 *bssrateset, u32 bssratelen);
434
435void Save_DM_Func_Flag(struct adapter *padapter);
436void Restore_DM_Func_Flag(struct adapter *padapter);
437void Switch_DM_Func(struct adapter *padapter, u32 mode, u8 enable);
438
439void Set_MSR(struct adapter *padapter, u8 type);
440
441u8 rtw_get_oper_ch(struct adapter *adapter);
442void rtw_set_oper_ch(struct adapter *adapter, u8 ch);
443void rtw_set_oper_bw(struct adapter *adapter, u8 bw);
444void rtw_set_oper_choffset(struct adapter *adapter, u8 offset);
445
446void set_channel_bwmode(struct adapter *padapter, unsigned char channel,
447 unsigned char channel_offset, unsigned short bwmode);
448void SelectChannel(struct adapter *padapter, unsigned char channel);
449void SetBWMode(struct adapter *padapter, unsigned short bwmode,
450 unsigned char channel_offset);
451
452unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval);
453
454void write_cam(struct adapter *padapter, u8 entry, u16 ctrl, u8 *mac, u8 *key);
455void clear_cam_entry(struct adapter *padapter, u8 entry);
456
457void invalidate_cam_all(struct adapter *padapter);
458
459int allocate_fw_sta_entry(struct adapter *padapter);
460void flush_all_cam_entry(struct adapter *padapter);
461
462void site_survey(struct adapter *padapter);
463u8 collect_bss_info(struct adapter *padapter, struct recv_frame *precv_frame,
464 struct wlan_bssid_ex *bssid);
465void update_network(struct wlan_bssid_ex *dst, struct wlan_bssid_ex *src,
466 struct adapter *adapter, bool update_ie);
467
468u8 *get_my_bssid(struct wlan_bssid_ex *pnetwork);
469u16 get_beacon_interval(struct wlan_bssid_ex *bss);
470
471int is_client_associated_to_ap(struct adapter *padapter);
472int is_client_associated_to_ibss(struct adapter *padapter);
473int is_IBSS_empty(struct adapter *padapter);
474
475unsigned char check_assoc_AP(u8 *pframe, uint len);
476
477int WMM_param_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE);
478void WMMOnAssocRsp(struct adapter *padapter);
479
480void HT_caps_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE);
481void HT_info_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE);
482void HTOnAssocRsp(struct adapter *padapter);
483
484void ERP_IE_handler(struct adapter *padapter, struct ndis_802_11_var_ie *pIE);
485void VCS_update(struct adapter *padapter, struct sta_info *psta);
486
487void update_beacon_info(struct adapter *padapter, u8 *pframe, uint len,
488 struct sta_info *psta);
489int rtw_check_bcn_info(struct adapter *Adapter, u8 *pframe, u32 packet_len);
490void update_IOT_info(struct adapter *padapter);
491void update_capinfo(struct adapter *adapter, u16 updatecap);
492void update_wireless_mode(struct adapter *padapter);
493void update_tx_basic_rate(struct adapter *padapter, u8 modulation);
494void update_bmc_sta_support_rate(struct adapter *padapter, u32 mac_id);
495int update_sta_support_rate(struct adapter *padapter, u8 *pvar_ie,
496 uint var_ie_len, int cam_idx);
497
498
499void update_sta_info(struct adapter *padapter, struct sta_info *psta);
500unsigned int update_basic_rate(unsigned char *ptn, unsigned int ptn_sz);
501unsigned int update_supported_rate(unsigned char *ptn, unsigned int ptn_sz);
502unsigned int update_MSC_rate(struct HT_caps_element *pHT_caps);
503void Update_RA_Entry(struct adapter *padapter, u32 mac_id);
504void set_sta_rate(struct adapter *padapter, struct sta_info *psta);
505
506unsigned int receive_disconnect(struct adapter *padapter,
507 unsigned char *macaddr, unsigned short reason);
508
509unsigned char get_highest_rate_idx(u32 mask);
510int support_short_GI(struct adapter *padapter, struct HT_caps_element *caps);
511bool is_ap_in_tkip(struct adapter *padapter);
512
513void report_join_res(struct adapter *padapter, int res);
514void report_survey_event(struct adapter *padapter, struct recv_frame *precv_frame);
515void report_surveydone_event(struct adapter *padapter);
516void report_del_sta_event(struct adapter *padapter,
517 unsigned char *addr, unsigned short reason);
518void report_add_sta_event(struct adapter *padapter, unsigned char* addr,
519 int cam_idx);
520
521void beacon_timing_control(struct adapter *padapter);
522extern u8 set_tx_beacon_cmd(struct adapter*padapter);
523unsigned int setup_beacon_frame(struct adapter *padapter,
524 unsigned char *beacon_frame);
525void update_mgnt_tx_rate(struct adapter *padapter, u8 rate);
526void update_mgntframe_attrib(struct adapter *padapter,
527 struct pkt_attrib *pattrib);
528void dump_mgntframe(struct adapter *padapter, struct xmit_frame *pmgntframe);
529s32 dump_mgntframe_and_wait(struct adapter *padapter,
530 struct xmit_frame *pmgntframe, int timeout_ms);
531s32 dump_mgntframe_and_wait_ack(struct adapter *padapter,
532 struct xmit_frame *pmgntframe);
533
534void issue_probersp_p2p(struct adapter *padapter, unsigned char *da);
535void issue_p2p_provision_request(struct adapter *padapter, u8 *pssid,
536 u8 ussidlen, u8 *pdev_raddr);
537void issue_p2p_GO_request(struct adapter *padapter, u8 *raddr);
538void issue_probereq_p2p(struct adapter *padapter, u8 *da);
539void issue_p2p_invitation_response(struct adapter *padapter, u8 *raddr,
540 u8 dialogToken, u8 success);
541void issue_p2p_invitation_request(struct adapter *padapter, u8* raddr);
542void issue_beacon(struct adapter *padapter, int timeout_ms);
543void issue_probersp(struct adapter *padapter, unsigned char *da,
544 u8 is_valid_p2p_probereq);
545void issue_assocreq(struct adapter *padapter);
546void issue_asocrsp(struct adapter *padapter, unsigned short status,
547 struct sta_info *pstat, int pkt_type);
548void issue_auth(struct adapter *padapter, struct sta_info *psta,
549 unsigned short status);
550void issue_probereq(struct adapter *padapter, struct ndis_802_11_ssid *pssid,
551 u8 *da);
552s32 issue_probereq_ex(struct adapter *adapter, struct ndis_802_11_ssid *pssid,
553 u8* da, int try_cnt, int wait_ms);
554int issue_nulldata(struct adapter *padapter, unsigned char *da,
555 unsigned int power_mode, int try_cnt, int wait_ms);
556int issue_qos_nulldata(struct adapter *padapter, unsigned char *da,
557 u16 tid, int try_cnt, int wait_ms);
558int issue_deauth(struct adapter *padapter, unsigned char *da,
559 unsigned short reason);
560int issue_deauth_ex(struct adapter *padapter, u8 *da, unsigned short reason,
561 int try_cnt, int wait_ms);
562void issue_action_BA(struct adapter *padapter, unsigned char *raddr,
563 unsigned char action, unsigned short status);
564unsigned int send_delba(struct adapter *padapter, u8 initiator, u8 *addr);
565unsigned int send_beacon(struct adapter *padapter);
566
567void start_clnt_assoc(struct adapter *padapter);
568void start_clnt_auth(struct adapter *padapter);
569void start_clnt_join(struct adapter *padapter);
570void start_create_ibss(struct adapter *padapter);
571
572unsigned int OnAssocReq(struct adapter *padapter,
573 struct recv_frame *precv_frame);
574unsigned int OnAssocRsp(struct adapter *padapter,
575 struct recv_frame *precv_frame);
576unsigned int OnProbeReq(struct adapter *padapter,
577 struct recv_frame *precv_frame);
578unsigned int OnProbeRsp(struct adapter *padapter,
579 struct recv_frame *precv_frame);
580unsigned int DoReserved(struct adapter *padapter,
581 struct recv_frame *precv_frame);
582unsigned int OnBeacon(struct adapter *padapter,
583 struct recv_frame *precv_frame);
584unsigned int OnAtim(struct adapter *padapter,
585 struct recv_frame *precv_frame);
586unsigned int OnDisassoc(struct adapter *padapter,
587 struct recv_frame *precv_frame);
588unsigned int OnAuth(struct adapter *padapter,
589 struct recv_frame *precv_frame);
590unsigned int OnAuthClient(struct adapter *padapter,
591 struct recv_frame *precv_frame);
592unsigned int OnDeAuth(struct adapter *padapter,
593 struct recv_frame *precv_frame);
594unsigned int OnAction(struct adapter *padapter,
595 struct recv_frame *precv_frame);
596
597unsigned int on_action_spct(struct adapter *padapter,
598 struct recv_frame *precv_frame);
599unsigned int OnAction_qos(struct adapter *padapter,
600 struct recv_frame *precv_frame);
601unsigned int OnAction_dls(struct adapter *padapter,
602 struct recv_frame *precv_frame);
603unsigned int OnAction_back(struct adapter *padapter,
604 struct recv_frame *precv_frame);
605unsigned int on_action_public(struct adapter *padapter,
606 struct recv_frame *precv_frame);
607unsigned int OnAction_ht(struct adapter *padapter,
608 struct recv_frame *precv_frame);
609unsigned int OnAction_wmm(struct adapter *padapter,
610 struct recv_frame *precv_frame);
611unsigned int OnAction_p2p(struct adapter *padapter,
612 struct recv_frame *precv_frame);
613
614void mlmeext_joinbss_event_callback(struct adapter *padapter, int join_res);
615void mlmeext_sta_del_event_callback(struct adapter *padapter);
616void mlmeext_sta_add_event_callback(struct adapter *padapter,
617 struct sta_info *psta);
618
619void linked_status_chk(struct adapter *padapter);
620
621void survey_timer_hdl (struct adapter *padapter);
622void link_timer_hdl (struct adapter *padapter);
623void addba_timer_hdl(struct sta_info *psta);
624
625#define set_survey_timer(mlmeext, ms) \
626 do { \
627 _set_timer(&(mlmeext)->survey_timer, (ms)); \
628 } while (0)
629
630#define set_link_timer(mlmeext, ms) \
631 do { \
632 _set_timer(&(mlmeext)->link_timer, (ms)); \
633 } while (0)
634
635bool cckrates_included(unsigned char *rate, int ratelen);
636bool cckratesonly_included(unsigned char *rate, int ratelen);
637
638void process_addba_req(struct adapter *padapter, u8 *paddba_req, u8 *addr);
639
640void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len);
641void correct_TSF(struct adapter *padapter, struct mlme_ext_priv *pmlmeext);
642
643struct cmd_hdl {
644 uint parmsize;
645 u8 (*h2cfuns)(struct adapter *padapter, u8 *pbuf);
646};
647
648u8 read_macreg_hdl(struct adapter *padapter, u8 *pbuf);
649u8 write_macreg_hdl(struct adapter *padapter, u8 *pbuf);
650u8 read_bbreg_hdl(struct adapter *padapter, u8 *pbuf);
651u8 write_bbreg_hdl(struct adapter *padapter, u8 *pbuf);
652u8 read_rfreg_hdl(struct adapter *padapter, u8 *pbuf);
653u8 write_rfreg_hdl(struct adapter *padapter, u8 *pbuf);
654u8 NULL_hdl(struct adapter *padapter, u8 *pbuf);
655u8 join_cmd_hdl(struct adapter *padapter, u8 *pbuf);
656u8 disconnect_hdl(struct adapter *padapter, u8 *pbuf);
657u8 createbss_hdl(struct adapter *padapter, u8 *pbuf);
658u8 setopmode_hdl(struct adapter *padapter, u8 *pbuf);
659u8 sitesurvey_cmd_hdl(struct adapter *padapter, u8 *pbuf);
660u8 setauth_hdl(struct adapter *padapter, u8 *pbuf);
661u8 setkey_hdl(struct adapter *padapter, u8 *pbuf);
662u8 set_stakey_hdl(struct adapter *padapter, u8 *pbuf);
663u8 set_assocsta_hdl(struct adapter *padapter, u8 *pbuf);
664u8 del_assocsta_hdl(struct adapter *padapter, u8 *pbuf);
665u8 add_ba_hdl(struct adapter *padapter, unsigned char *pbuf);
666
667u8 mlme_evt_hdl(struct adapter *padapter, unsigned char *pbuf);
668u8 h2c_msg_hdl(struct adapter *padapter, unsigned char *pbuf);
669u8 tx_beacon_hdl(struct adapter *padapter, unsigned char *pbuf);
670u8 set_ch_hdl(struct adapter *padapter, u8 *pbuf);
671u8 set_chplan_hdl(struct adapter *padapter, unsigned char *pbuf);
672u8 led_blink_hdl(struct adapter *padapter, unsigned char *pbuf);
673
674u8 set_csa_hdl(struct adapter *padapter, unsigned char *pbuf);
675u8 tdls_hdl(struct adapter *padapter, unsigned char *pbuf);
676
677#define GEN_DRV_CMD_HANDLER(size, cmd) {size, &cmd ## _hdl},
678#define GEN_MLME_EXT_HANDLER(size, cmd) {size, cmd},
679
680#ifdef _RTW_CMD_C_
681
682static struct cmd_hdl wlancmds[] = {
683 GEN_DRV_CMD_HANDLER(0, NULL)
684 GEN_DRV_CMD_HANDLER(0, NULL)
685 GEN_DRV_CMD_HANDLER(0, NULL)
686 GEN_DRV_CMD_HANDLER(0, NULL)
687 GEN_DRV_CMD_HANDLER(0, NULL)
688 GEN_DRV_CMD_HANDLER(0, NULL)
689 GEN_MLME_EXT_HANDLER(0, NULL)
690 GEN_MLME_EXT_HANDLER(0, NULL)
691 GEN_MLME_EXT_HANDLER(0, NULL)
692 GEN_MLME_EXT_HANDLER(0, NULL)
693 GEN_MLME_EXT_HANDLER(0, NULL)
694 GEN_MLME_EXT_HANDLER(0, NULL)
695 GEN_MLME_EXT_HANDLER(0, NULL)
696 GEN_MLME_EXT_HANDLER(0, NULL)
697 GEN_MLME_EXT_HANDLER(sizeof (struct joinbss_parm), join_cmd_hdl)
698 GEN_MLME_EXT_HANDLER(sizeof (struct disconnect_parm), disconnect_hdl)
699 GEN_MLME_EXT_HANDLER(sizeof (struct createbss_parm), createbss_hdl)
700 GEN_MLME_EXT_HANDLER(sizeof (struct setopmode_parm), setopmode_hdl)
701 GEN_MLME_EXT_HANDLER(sizeof (struct sitesurvey_parm),
702 sitesurvey_cmd_hdl)
703 GEN_MLME_EXT_HANDLER(sizeof (struct setauth_parm), setauth_hdl)
704 GEN_MLME_EXT_HANDLER(sizeof (struct setkey_parm), setkey_hdl)
705 GEN_MLME_EXT_HANDLER(sizeof (struct set_stakey_parm), set_stakey_hdl)
706 GEN_MLME_EXT_HANDLER(sizeof (struct set_assocsta_parm), NULL)
707 GEN_MLME_EXT_HANDLER(sizeof (struct del_assocsta_parm), NULL)
708 GEN_MLME_EXT_HANDLER(sizeof (struct setstapwrstate_parm), NULL)
709 GEN_MLME_EXT_HANDLER(sizeof (struct setbasicrate_parm), NULL)
710 GEN_MLME_EXT_HANDLER(sizeof (struct getbasicrate_parm), NULL)
711 GEN_MLME_EXT_HANDLER(sizeof (struct setdatarate_parm), NULL)
712 GEN_MLME_EXT_HANDLER(sizeof (struct getdatarate_parm), NULL)
713 GEN_MLME_EXT_HANDLER(sizeof (struct setphyinfo_parm), NULL)
714 GEN_MLME_EXT_HANDLER(sizeof (struct getphyinfo_parm), NULL)
715 GEN_MLME_EXT_HANDLER(sizeof (struct setphy_parm), NULL)
716 GEN_MLME_EXT_HANDLER(sizeof (struct getphy_parm), NULL)
717 GEN_MLME_EXT_HANDLER(0, NULL)
718 GEN_MLME_EXT_HANDLER(0, NULL)
719 GEN_MLME_EXT_HANDLER(0, NULL)
720 GEN_MLME_EXT_HANDLER(0, NULL)
721 GEN_MLME_EXT_HANDLER(0, NULL)
722 GEN_MLME_EXT_HANDLER(0, NULL)
723 GEN_MLME_EXT_HANDLER(0, NULL)
724 GEN_MLME_EXT_HANDLER(0, NULL)
725 GEN_MLME_EXT_HANDLER(0, NULL)
726 GEN_MLME_EXT_HANDLER(0, NULL)
727 GEN_MLME_EXT_HANDLER(0, NULL)
728 GEN_MLME_EXT_HANDLER(0, NULL)
729 GEN_MLME_EXT_HANDLER(sizeof(struct addBaReq_parm), add_ba_hdl)
730 GEN_MLME_EXT_HANDLER(sizeof(struct set_ch_parm), set_ch_hdl)
731 GEN_MLME_EXT_HANDLER(0, NULL)
732 GEN_MLME_EXT_HANDLER(0, NULL)
733 GEN_MLME_EXT_HANDLER(0, NULL)
734 GEN_MLME_EXT_HANDLER(0, NULL)
735 GEN_MLME_EXT_HANDLER(0, 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(sizeof(struct Tx_Beacon_param),
740 tx_beacon_hdl)
741
742 GEN_MLME_EXT_HANDLER(0, mlme_evt_hdl)
743 GEN_MLME_EXT_HANDLER(0, rtw_drvextra_cmd_hdl)
744
745 GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl)
746 GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param),
747 set_chplan_hdl)
748 GEN_MLME_EXT_HANDLER(sizeof(struct LedBlink_param),
749 led_blink_hdl)
750
751 GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelSwitch_param),
752 set_csa_hdl)
753 GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param),
754 tdls_hdl)
755};
756
757#endif
758
759struct C2HEvent_Header {
760#ifdef __LITTLE_ENDIAN
761 unsigned int len:16;
762 unsigned int ID:8;
763 unsigned int seq:8;
764#elif defined(__BIG_ENDIAN)
765 unsigned int seq:8;
766 unsigned int ID:8;
767 unsigned int len:16;
768#endif
769 unsigned int rsvd;
770};
771
772void rtw_dummy_event_callback(struct adapter *adapter, u8 *pbuf);
773void rtw_fwdbg_event_callback(struct adapter *adapter, u8 *pbuf);
774
775enum rtw_c2h_event {
776 GEN_EVT_CODE(_Read_MACREG) = 0,
777 GEN_EVT_CODE(_Read_BBREG),
778 GEN_EVT_CODE(_Read_RFREG),
779 GEN_EVT_CODE(_Read_EEPROM),
780 GEN_EVT_CODE(_Read_EFUSE),
781 GEN_EVT_CODE(_Read_CAM),
782 GEN_EVT_CODE(_Get_BasicRate),
783 GEN_EVT_CODE(_Get_DataRate),
784 GEN_EVT_CODE(_Survey),
785 GEN_EVT_CODE(_SurveyDone),
786
787 GEN_EVT_CODE(_JoinBss) ,
788 GEN_EVT_CODE(_AddSTA),
789 GEN_EVT_CODE(_DelSTA),
790 GEN_EVT_CODE(_AtimDone),
791 GEN_EVT_CODE(_TX_Report),
792 GEN_EVT_CODE(_CCX_Report),
793 GEN_EVT_CODE(_DTM_Report),
794 GEN_EVT_CODE(_TX_Rate_Statistics),
795 GEN_EVT_CODE(_C2HLBK),
796 GEN_EVT_CODE(_FWDBG),
797 GEN_EVT_CODE(_C2HFEEDBACK),
798 GEN_EVT_CODE(_ADDBA),
799 GEN_EVT_CODE(_C2HBCN),
800 GEN_EVT_CODE(_ReportPwrState),
801 GEN_EVT_CODE(_CloseRF),
802
803 MAX_C2HEVT
804};
805
806#ifdef _RTW_MLME_EXT_C_
807
808static struct fwevent wlanevents[] = {
809 {0, rtw_dummy_event_callback},
810 {0, NULL},
811 {0, NULL},
812 {0, NULL},
813 {0, NULL},
814 {0, NULL},
815 {0, NULL},
816 {0, NULL},
817 {0, &rtw_survey_event_callback},
818 {sizeof (struct surveydone_event), &rtw_surveydone_event_callback},
819 {0, &rtw_joinbss_event_callback},
820 {sizeof(struct stassoc_event), &rtw_stassoc_event_callback},
821 {sizeof(struct stadel_event), &rtw_stadel_event_callback},
822 {0, NULL},
823 {0, rtw_dummy_event_callback},
824 {0, NULL},
825 {0, NULL},
826 {0, NULL},
827 {0, NULL},
828 {0, rtw_fwdbg_event_callback},
829 {0, NULL},
830 {0, NULL},
831 {0, NULL},
832 {0, NULL},
833 {0, NULL},
834};
835
836#endif
837
838#endif
839