rtw_mlme_ext.h 47 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2007 - 2017 Realtek Corporation.
  4. *
  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.
  8. *
  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
  12. * more details.
  13. *
  14. *****************************************************************************/
  15. #ifndef __RTW_MLME_EXT_H_
  16. #define __RTW_MLME_EXT_H_
  17. /* Commented by Albert 20101105
  18. * Increase the SURVEY_TO value from 100 to 150 ( 100ms to 150ms )
  19. * The Realtek 8188CE SoftAP will spend around 100ms to send the probe response after receiving the probe request.
  20. * So, this driver tried to extend the dwell time for each scanning channel.
  21. * This will increase the chance to receive the probe response from SoftAP. */
  22. #define SURVEY_TO (100)
  23. #define REAUTH_TO (300) /* (50) */
  24. #define REASSOC_TO (300) /* (50) */
  25. /* #define DISCONNECT_TO (3000) */
  26. #define ADDBA_TO (2000)
  27. #define LINKED_TO (1) /* unit:2 sec, 1x2 = 2 sec */
  28. #define REAUTH_LIMIT (4)
  29. #define REASSOC_LIMIT (4)
  30. #define READDBA_LIMIT (2)
  31. #ifdef CONFIG_GSPI_HCI
  32. #define ROAMING_LIMIT 5
  33. #else
  34. #define ROAMING_LIMIT 8
  35. #endif
  36. /* #define IOCMD_REG0 0x10250370 */
  37. /* #define IOCMD_REG1 0x10250374 */
  38. /* #define IOCMD_REG2 0x10250378 */
  39. /* #define FW_DYNAMIC_FUN_SWITCH 0x10250364 */
  40. /* #define WRITE_BB_CMD 0xF0000001 */
  41. /* #define SET_CHANNEL_CMD 0xF3000000 */
  42. /* #define UPDATE_RA_CMD 0xFD0000A2 */
  43. #define _HW_STATE_NOLINK_ 0x00
  44. #define _HW_STATE_ADHOC_ 0x01
  45. #define _HW_STATE_STATION_ 0x02
  46. #define _HW_STATE_AP_ 0x03
  47. #define _HW_STATE_MONITOR_ 0x04
  48. #define _1M_RATE_ 0
  49. #define _2M_RATE_ 1
  50. #define _5M_RATE_ 2
  51. #define _11M_RATE_ 3
  52. #define _6M_RATE_ 4
  53. #define _9M_RATE_ 5
  54. #define _12M_RATE_ 6
  55. #define _18M_RATE_ 7
  56. #define _24M_RATE_ 8
  57. #define _36M_RATE_ 9
  58. #define _48M_RATE_ 10
  59. #define _54M_RATE_ 11
  60. /********************************************************
  61. MCS rate definitions
  62. *********************************************************/
  63. #define MCS_RATE_1R (0x000000ff)
  64. #define MCS_RATE_2R (0x0000ffff)
  65. #define MCS_RATE_3R (0x00ffffff)
  66. #define MCS_RATE_4R (0xffffffff)
  67. #define MCS_RATE_2R_13TO15_OFF (0x00001fff)
  68. extern unsigned char RTW_WPA_OUI[];
  69. extern unsigned char WMM_OUI[];
  70. extern unsigned char WPS_OUI[];
  71. extern unsigned char WFD_OUI[];
  72. extern unsigned char P2P_OUI[];
  73. extern unsigned char WMM_INFO_OUI[];
  74. extern unsigned char WMM_PARA_OUI[];
  75. typedef struct _RT_CHANNEL_PLAN {
  76. unsigned char Channel[MAX_CHANNEL_NUM];
  77. unsigned char Len;
  78. } RT_CHANNEL_PLAN, *PRT_CHANNEL_PLAN;
  79. enum Associated_AP {
  80. atherosAP = 0,
  81. broadcomAP = 1,
  82. ciscoAP = 2,
  83. marvellAP = 3,
  84. ralinkAP = 4,
  85. realtekAP = 5,
  86. airgocapAP = 6,
  87. unknownAP = 7,
  88. maxAP,
  89. };
  90. typedef enum _HT_IOT_PEER {
  91. HT_IOT_PEER_UNKNOWN = 0,
  92. HT_IOT_PEER_REALTEK = 1,
  93. HT_IOT_PEER_REALTEK_92SE = 2,
  94. HT_IOT_PEER_BROADCOM = 3,
  95. HT_IOT_PEER_RALINK = 4,
  96. HT_IOT_PEER_ATHEROS = 5,
  97. HT_IOT_PEER_CISCO = 6,
  98. HT_IOT_PEER_MERU = 7,
  99. HT_IOT_PEER_MARVELL = 8,
  100. HT_IOT_PEER_REALTEK_SOFTAP = 9,/* peer is RealTek SOFT_AP, by Bohn, 2009.12.17 */
  101. HT_IOT_PEER_SELF_SOFTAP = 10, /* Self is SoftAP */
  102. HT_IOT_PEER_AIRGO = 11,
  103. HT_IOT_PEER_INTEL = 12,
  104. HT_IOT_PEER_RTK_APCLIENT = 13,
  105. HT_IOT_PEER_REALTEK_81XX = 14,
  106. HT_IOT_PEER_REALTEK_WOW = 15,
  107. HT_IOT_PEER_REALTEK_JAGUAR_BCUTAP = 16,
  108. HT_IOT_PEER_REALTEK_JAGUAR_CCUTAP = 17,
  109. HT_IOT_PEER_MAX = 18
  110. } HT_IOT_PEER_E, *PHTIOT_PEER_E;
  111. typedef enum _RT_HT_INF0_CAP {
  112. RT_HT_CAP_USE_TURBO_AGGR = 0x01,
  113. RT_HT_CAP_USE_LONG_PREAMBLE = 0x02,
  114. RT_HT_CAP_USE_AMPDU = 0x04,
  115. RT_HT_CAP_USE_WOW = 0x8,
  116. RT_HT_CAP_USE_SOFTAP = 0x10,
  117. RT_HT_CAP_USE_92SE = 0x20,
  118. RT_HT_CAP_USE_88C_92C = 0x40,
  119. RT_HT_CAP_USE_AP_CLIENT_MODE = 0x80, /* AP team request to reserve this bit, by Emily */
  120. } RT_HT_INF0_CAPBILITY, *PRT_HT_INF0_CAPBILITY;
  121. typedef enum _RT_HT_INF1_CAP {
  122. RT_HT_CAP_USE_VIDEO_CLIENT = 0x01,
  123. RT_HT_CAP_USE_JAGUAR_BCUT = 0x02,
  124. RT_HT_CAP_USE_JAGUAR_CCUT = 0x04,
  125. } RT_HT_INF1_CAPBILITY, *PRT_HT_INF1_CAPBILITY;
  126. struct mlme_handler {
  127. unsigned int num;
  128. char *str;
  129. unsigned int (*func)(_adapter *padapter, union recv_frame *precv_frame);
  130. };
  131. struct action_handler {
  132. unsigned int num;
  133. char *str;
  134. unsigned int (*func)(_adapter *padapter, union recv_frame *precv_frame);
  135. };
  136. enum SCAN_STATE {
  137. SCAN_DISABLE = 0,
  138. SCAN_START = 1,
  139. SCAN_PS_ANNC_WAIT = 2,
  140. SCAN_ENTER = 3,
  141. SCAN_PROCESS = 4,
  142. /* backop */
  143. SCAN_BACKING_OP = 5,
  144. SCAN_BACK_OP = 6,
  145. SCAN_LEAVING_OP = 7,
  146. SCAN_LEAVE_OP = 8,
  147. /* SW antenna diversity (before linked) */
  148. SCAN_SW_ANTDIV_BL = 9,
  149. /* legacy p2p */
  150. SCAN_TO_P2P_LISTEN = 10,
  151. SCAN_P2P_LISTEN = 11,
  152. SCAN_COMPLETE = 12,
  153. SCAN_STATE_MAX,
  154. };
  155. const char *scan_state_str(u8 state);
  156. enum ss_backop_flag {
  157. SS_BACKOP_EN = BIT0, /* backop when linked */
  158. SS_BACKOP_EN_NL = BIT1, /* backop even when no linked */
  159. SS_BACKOP_PS_ANNC = BIT4,
  160. SS_BACKOP_TX_RESUME = BIT5,
  161. };
  162. struct ss_res {
  163. u8 state;
  164. u8 next_state; /* will set to state on next cmd hdl */
  165. int bss_cnt;
  166. int channel_idx;
  167. #ifdef CONFIG_DFS
  168. u8 dfs_ch_ssid_scan;
  169. #endif
  170. int scan_mode;
  171. u16 scan_ch_ms;
  172. u32 scan_timeout_ms;
  173. u8 rx_ampdu_accept;
  174. u8 rx_ampdu_size;
  175. u8 igi_scan;
  176. u8 igi_before_scan; /* used for restoring IGI value without enable DIG & FA_CNT */
  177. #ifdef CONFIG_SCAN_BACKOP
  178. u8 backop_flags_sta; /* policy for station mode*/
  179. #ifdef CONFIG_AP_MODE
  180. u8 backop_flags_ap; /* policy for ap mode */
  181. #endif
  182. #ifdef CONFIG_RTW_MESH
  183. u8 backop_flags_mesh; /* policy for mesh mode */
  184. #endif
  185. u8 backop_flags; /* per backop runtime decision */
  186. u8 scan_cnt;
  187. u8 scan_cnt_max;
  188. systime backop_time; /* the start time of backop */
  189. u16 backop_ms;
  190. #endif
  191. #if defined(CONFIG_ANTENNA_DIVERSITY) || defined(DBG_SCAN_SW_ANTDIV_BL)
  192. u8 is_sw_antdiv_bl_scan;
  193. #endif
  194. u8 ssid_num;
  195. u8 ch_num;
  196. NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
  197. struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
  198. u32 token; /* 0: use to identify caller */
  199. u16 duration; /* 0: use default */
  200. u8 igi; /* 0: use defalut */
  201. u8 bw; /* 0: use default */
  202. };
  203. /* #define AP_MODE 0x0C */
  204. /* #define STATION_MODE 0x08 */
  205. /* #define AD_HOC_MODE 0x04 */
  206. /* #define NO_LINK_MODE 0x00 */
  207. #define WIFI_FW_NULL_STATE _HW_STATE_NOLINK_
  208. #define WIFI_FW_STATION_STATE _HW_STATE_STATION_
  209. #define WIFI_FW_AP_STATE _HW_STATE_AP_
  210. #define WIFI_FW_ADHOC_STATE _HW_STATE_ADHOC_
  211. #define WIFI_FW_PRE_LINK 0x00000800
  212. #define WIFI_FW_AUTH_NULL 0x00000100
  213. #define WIFI_FW_AUTH_STATE 0x00000200
  214. #define WIFI_FW_AUTH_SUCCESS 0x00000400
  215. #define WIFI_FW_ASSOC_STATE 0x00002000
  216. #define WIFI_FW_ASSOC_SUCCESS 0x00004000
  217. #define WIFI_FW_LINKING_STATE (WIFI_FW_AUTH_NULL | WIFI_FW_AUTH_STATE | WIFI_FW_AUTH_SUCCESS | WIFI_FW_ASSOC_STATE)
  218. #ifdef CONFIG_TDLS
  219. enum TDLS_option {
  220. TDLS_ESTABLISHED = 1,
  221. TDLS_ISSUE_PTI,
  222. TDLS_CH_SW_RESP,
  223. TDLS_CH_SW_PREPARE,
  224. TDLS_CH_SW_START,
  225. TDLS_CH_SW_TO_OFF_CHNL,
  226. TDLS_CH_SW_TO_BASE_CHNL_UNSOLICITED,
  227. TDLS_CH_SW_TO_BASE_CHNL,
  228. TDLS_CH_SW_END_TO_BASE_CHNL,
  229. TDLS_CH_SW_END,
  230. TDLS_RS_RCR,
  231. TDLS_TEARDOWN_STA,
  232. TDLS_TEARDOWN_STA_NO_WAIT,
  233. TDLS_TEARDOWN_STA_LOCALLY,
  234. TDLS_TEARDOWN_STA_LOCALLY_POST,
  235. maxTDLS,
  236. };
  237. #endif /* CONFIG_TDLS */
  238. /*
  239. * Usage:
  240. * When one iface acted as AP mode and the other iface is STA mode and scanning,
  241. * it should switch back to AP's operating channel periodically.
  242. * Parameters info:
  243. * When the driver scanned RTW_SCAN_NUM_OF_CH channels, it would switch back to AP's operating channel for
  244. * RTW_BACK_OP_CH_MS milliseconds.
  245. * Example:
  246. * For chip supports 2.4G + 5GHz and AP mode is operating in channel 1,
  247. * RTW_SCAN_NUM_OF_CH is 8, RTW_BACK_OP_CH_MS is 300
  248. * When it's STA mode gets set_scan command,
  249. * it would
  250. * 1. Doing the scan on channel 1.2.3.4.5.6.7.8
  251. * 2. Back to channel 1 for 300 milliseconds
  252. * 3. Go through doing site survey on channel 9.10.11.36.40.44.48.52
  253. * 4. Back to channel 1 for 300 milliseconds
  254. * 5. ... and so on, till survey done.
  255. */
  256. #if defined(CONFIG_ATMEL_RC_PATCH)
  257. #define RTW_SCAN_NUM_OF_CH 2
  258. #define RTW_BACK_OP_CH_MS 200
  259. #else
  260. #define RTW_SCAN_NUM_OF_CH 3
  261. #define RTW_BACK_OP_CH_MS 400
  262. #endif
  263. #define RTW_IP_ADDR_LEN 4
  264. #define RTW_IPv6_ADDR_LEN 16
  265. struct mlme_ext_info {
  266. u32 state;
  267. #ifdef CONFIG_MI_WITH_MBSSID_CAM
  268. u8 hw_media_state;
  269. #endif
  270. u32 reauth_count;
  271. u32 reassoc_count;
  272. u32 link_count;
  273. u32 auth_seq;
  274. u32 auth_algo; /* 802.11 auth, could be open, shared, auto */
  275. u16 auth_status;
  276. u32 authModeToggle;
  277. u32 enc_algo;/* encrypt algorithm; */
  278. u32 key_index; /* this is only valid for legendary wep, 0~3 for key id. */
  279. u32 iv;
  280. u8 chg_txt[128];
  281. u16 aid;
  282. u16 bcn_interval;
  283. u16 capability;
  284. u8 assoc_AP_vendor;
  285. u8 slotTime;
  286. u8 preamble_mode;
  287. u8 WMM_enable;
  288. u8 ERP_enable;
  289. u8 ERP_IE;
  290. u8 HT_enable;
  291. u8 HT_caps_enable;
  292. u8 HT_info_enable;
  293. u8 HT_protection;
  294. u8 turboMode_cts2self;
  295. u8 turboMode_rtsen;
  296. u8 SM_PS;
  297. u8 agg_enable_bitmap;
  298. u8 ADDBA_retry_count;
  299. u8 candidate_tid_bitmap;
  300. u8 dialogToken;
  301. /* Accept ADDBA Request */
  302. BOOLEAN bAcceptAddbaReq;
  303. u8 bwmode_updated;
  304. u8 hidden_ssid_mode;
  305. u8 VHT_enable;
  306. u8 ip_addr[RTW_IP_ADDR_LEN];
  307. u8 ip6_addr[RTW_IPv6_ADDR_LEN];
  308. struct ADDBA_request ADDBA_req;
  309. struct WMM_para_element WMM_param;
  310. struct HT_caps_element HT_caps;
  311. struct HT_info_element HT_info;
  312. WLAN_BSSID_EX network;/* join network or bss_network, if in ap mode, it is the same to cur_network.network */
  313. #ifdef ROKU_PRIVATE
  314. /*infra mode, store supported rates from AssocRsp*/
  315. NDIS_802_11_RATES_EX SupportedRates_infra_ap;
  316. u8 ht_vht_received;/*ht_vht_received used to show debug msg BIT(0):HT BIT(1):VHT */
  317. #endif /* ROKU_PRIVATE */
  318. };
  319. /* The channel information about this channel including joining, scanning, and power constraints. */
  320. typedef struct _RT_CHANNEL_INFO {
  321. u8 ChannelNum; /* The channel number. */
  322. RT_SCAN_TYPE ScanType; /* Scan type such as passive or active scan. */
  323. /* u16 ScanPeriod; */ /* Listen time in millisecond in this channel. */
  324. /* s32 MaxTxPwrDbm; */ /* Max allowed tx power. */
  325. /* u32 ExInfo; */ /* Extended Information for this channel. */
  326. #ifdef CONFIG_FIND_BEST_CHANNEL
  327. u32 rx_count;
  328. #endif
  329. #ifdef CONFIG_DFS
  330. #ifdef CONFIG_DFS_MASTER
  331. systime non_ocp_end_time;
  332. #endif
  333. u8 hidden_bss_cnt; /* per scan count */
  334. #endif
  335. } RT_CHANNEL_INFO, *PRT_CHANNEL_INFO;
  336. #define CAC_TIME_MS (60*1000)
  337. #define CAC_TIME_CE_MS (10*60*1000)
  338. #define NON_OCP_TIME_MS (30*60*1000)
  339. #ifdef CONFIG_TXPWR_LIMIT
  340. void rtw_txpwr_init_regd(struct rf_ctl_t *rfctl);
  341. #endif
  342. void rtw_rfctl_init(_adapter *adapter);
  343. void rtw_rfctl_deinit(_adapter *adapter);
  344. #ifdef CONFIG_DFS_MASTER
  345. struct rf_ctl_t;
  346. #define CH_IS_NON_OCP(rt_ch_info) (rtw_time_after((rt_ch_info)->non_ocp_end_time, rtw_get_current_time()))
  347. bool rtw_is_cac_reset_needed(struct rf_ctl_t *rfctl, u8 ch, u8 bw, u8 offset);
  348. bool _rtw_rfctl_overlap_radar_detect_ch(struct rf_ctl_t *rfctl, u8 ch, u8 bw, u8 offset);
  349. bool rtw_rfctl_overlap_radar_detect_ch(struct rf_ctl_t *rfctl);
  350. bool rtw_rfctl_is_tx_blocked_by_ch_waiting(struct rf_ctl_t *rfctl);
  351. bool rtw_chset_is_chbw_non_ocp(RT_CHANNEL_INFO *ch_set, u8 ch, u8 bw, u8 offset);
  352. bool rtw_chset_is_ch_non_ocp(RT_CHANNEL_INFO *ch_set, u8 ch);
  353. void rtw_chset_update_non_ocp(RT_CHANNEL_INFO *ch_set, u8 ch, u8 bw, u8 offset);
  354. void rtw_chset_update_non_ocp_ms(RT_CHANNEL_INFO *ch_set, u8 ch, u8 bw, u8 offset, int ms);
  355. u32 rtw_get_ch_waiting_ms(struct rf_ctl_t *rfctl, u8 ch, u8 bw, u8 offset, u32 *r_non_ocp_ms, u32 *r_cac_ms);
  356. void rtw_reset_cac(struct rf_ctl_t *rfctl, u8 ch, u8 bw, u8 offset);
  357. u32 rtw_force_stop_cac(struct rf_ctl_t *rfctl, u32 timeout_ms);
  358. #else
  359. #define CH_IS_NON_OCP(rt_ch_info) 0
  360. #define rtw_chset_is_chbw_non_ocp(ch_set, ch, bw, offset) _FALSE
  361. #define rtw_chset_is_ch_non_ocp(ch_set, ch) _FALSE
  362. #define rtw_rfctl_is_tx_blocked_by_ch_waiting(rfctl) _FALSE
  363. #endif
  364. enum {
  365. RTW_CHF_2G = BIT0,
  366. RTW_CHF_5G = BIT1,
  367. RTW_CHF_DFS = BIT2,
  368. RTW_CHF_LONG_CAC = BIT3,
  369. RTW_CHF_NON_DFS = BIT4,
  370. RTW_CHF_NON_LONG_CAC = BIT5,
  371. RTW_CHF_NON_OCP = BIT6,
  372. };
  373. bool rtw_choose_shortest_waiting_ch(struct rf_ctl_t *rfctl, u8 sel_ch, u8 max_bw
  374. , u8 *dec_ch, u8 *dec_bw, u8 *dec_offset
  375. , u8 d_flags, u8 cur_ch, u8 same_band_prefer, u8 mesh_only);
  376. void dump_chset(void *sel, RT_CHANNEL_INFO *ch_set);
  377. void dump_cur_chset(void *sel, struct rf_ctl_t *rfctl);
  378. int rtw_chset_search_ch(RT_CHANNEL_INFO *ch_set, const u32 ch);
  379. u8 rtw_chset_is_chbw_valid(RT_CHANNEL_INFO *ch_set, u8 ch, u8 bw, u8 offset);
  380. void rtw_chset_sync_chbw(RT_CHANNEL_INFO *ch_set, u8 *req_ch, u8 *req_bw, u8 *req_offset
  381. , u8 *g_ch, u8 *g_bw, u8 *g_offset);
  382. bool rtw_mlme_band_check(_adapter *adapter, const u32 ch);
  383. enum {
  384. BAND_24G = BIT0,
  385. BAND_5G = BIT1,
  386. };
  387. void RTW_SET_SCAN_BAND_SKIP(_adapter *padapter, int skip_band);
  388. void RTW_CLR_SCAN_BAND_SKIP(_adapter *padapter, int skip_band);
  389. int RTW_GET_SCAN_BAND_SKIP(_adapter *padapter);
  390. bool rtw_mlme_ignore_chan(_adapter *adapter, const u32 ch);
  391. /* P2P_MAX_REG_CLASSES - Maximum number of regulatory classes */
  392. #define P2P_MAX_REG_CLASSES 10
  393. /* P2P_MAX_REG_CLASS_CHANNELS - Maximum number of channels per regulatory class */
  394. #define P2P_MAX_REG_CLASS_CHANNELS 20
  395. /* struct p2p_channels - List of supported channels */
  396. struct p2p_channels {
  397. /* struct p2p_reg_class - Supported regulatory class */
  398. struct p2p_reg_class {
  399. /* reg_class - Regulatory class (IEEE 802.11-2007, Annex J) */
  400. u8 reg_class;
  401. /* channel - Supported channels */
  402. u8 channel[P2P_MAX_REG_CLASS_CHANNELS];
  403. /* channels - Number of channel entries in use */
  404. size_t channels;
  405. } reg_class[P2P_MAX_REG_CLASSES];
  406. /* reg_classes - Number of reg_class entries in use */
  407. size_t reg_classes;
  408. };
  409. struct p2p_oper_class_map {
  410. enum hw_mode {IEEE80211G, IEEE80211A} mode;
  411. u8 op_class;
  412. u8 min_chan;
  413. u8 max_chan;
  414. u8 inc;
  415. enum { BW20, BW40PLUS, BW40MINUS } bw;
  416. };
  417. struct mlme_ext_priv {
  418. _adapter *padapter;
  419. u8 mlmeext_init;
  420. ATOMIC_T event_seq;
  421. u16 mgnt_seq;
  422. #ifdef CONFIG_IEEE80211W
  423. u16 sa_query_seq;
  424. #endif
  425. /* struct fw_priv fwpriv; */
  426. unsigned char cur_channel;
  427. unsigned char cur_bwmode;
  428. unsigned char cur_ch_offset;/* PRIME_CHNL_OFFSET */
  429. unsigned char cur_wireless_mode; /* NETWORK_TYPE */
  430. unsigned char basicrate[NumRates];
  431. unsigned char datarate[NumRates];
  432. #ifdef CONFIG_80211N_HT
  433. unsigned char default_supported_mcs_set[16];
  434. #endif
  435. struct ss_res sitesurvey_res;
  436. struct mlme_ext_info mlmext_info;/* for sta/adhoc mode, including current scanning/connecting/connected related info.
  437. * for ap mode, network includes ap's cap_info */
  438. _timer survey_timer;
  439. _timer link_timer;
  440. #ifdef CONFIG_RTW_REPEATER_SON
  441. _timer rson_scan_timer;
  442. #endif
  443. #ifdef CONFIG_RTW_80211R
  444. _timer ft_link_timer;
  445. _timer ft_roam_timer;
  446. #endif
  447. systime last_scan_time;
  448. u8 scan_abort;
  449. u8 join_abort;
  450. u8 tx_rate; /* TXRATE when USERATE is set. */
  451. u32 retry; /* retry for issue probereq */
  452. u64 TSFValue;
  453. u32 bcn_cnt;
  454. u32 last_bcn_cnt;
  455. u8 cur_bcn_cnt;/*2s*/
  456. u8 dtim;/*DTIM Period*/
  457. #ifdef DBG_RX_BCN
  458. u8 tim[4];
  459. #endif
  460. #ifdef CONFIG_BCN_RECV_TIME
  461. u16 bcn_rx_time;
  462. #endif
  463. #ifdef CONFIG_AP_MODE
  464. unsigned char bstart_bss;
  465. #endif
  466. #ifdef CONFIG_80211D
  467. u8 update_channel_plan_by_ap_done;
  468. #endif
  469. /* recv_decache check for Action_public frame */
  470. u8 action_public_dialog_token;
  471. u16 action_public_rxseq;
  472. /* #ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK */
  473. u8 active_keep_alive_check;
  474. /* #endif */
  475. #ifdef DBG_FIXED_CHAN
  476. u8 fixed_chan;
  477. #endif
  478. u8 tsf_update_required:1;
  479. u8 en_hw_update_tsf:1; /* set hw sync bcn tsf register or not */
  480. systime tsf_update_pause_stime;
  481. u8 tsf_update_pause_factor; /* num of bcn intervals to stay TSF update pause status */
  482. u8 tsf_update_restore_factor; /* num of bcn interval to stay TSF update restore status */
  483. };
  484. struct support_rate_handler {
  485. u8 rate;
  486. bool basic;
  487. bool existence;
  488. };
  489. static inline u8 check_mlmeinfo_state(struct mlme_ext_priv *plmeext, sint state)
  490. {
  491. if ((plmeext->mlmext_info.state & 0x03) == state)
  492. return _TRUE;
  493. return _FALSE;
  494. }
  495. void sitesurvey_set_offch_state(_adapter *adapter, u8 scan_state);
  496. #define mlmeext_msr(mlmeext) ((mlmeext)->mlmext_info.state & 0x03)
  497. #define mlmeext_scan_state(mlmeext) ((mlmeext)->sitesurvey_res.state)
  498. #define mlmeext_scan_state_str(mlmeext) scan_state_str((mlmeext)->sitesurvey_res.state)
  499. #define mlmeext_chk_scan_state(mlmeext, _state) ((mlmeext)->sitesurvey_res.state == (_state))
  500. #define mlmeext_set_scan_state(mlmeext, _state) \
  501. do { \
  502. ((mlmeext)->sitesurvey_res.state = (_state)); \
  503. ((mlmeext)->sitesurvey_res.next_state = (_state)); \
  504. rtw_mi_update_iface_status(&((container_of(mlmeext, _adapter, mlmeextpriv)->mlmepriv)), 0); \
  505. /* RTW_INFO("set_scan_state:%s\n", scan_state_str(_state)); */ \
  506. sitesurvey_set_offch_state(container_of(mlmeext, _adapter, mlmeextpriv), _state); \
  507. } while (0)
  508. #define mlmeext_scan_next_state(mlmeext) ((mlmeext)->sitesurvey_res.next_state)
  509. #define mlmeext_set_scan_next_state(mlmeext, _state) \
  510. do { \
  511. ((mlmeext)->sitesurvey_res.next_state = (_state)); \
  512. /* RTW_INFO("set_scan_next_state:%s\n", scan_state_str(_state)); */ \
  513. } while (0)
  514. #ifdef CONFIG_SCAN_BACKOP
  515. #define mlmeext_scan_backop_flags(mlmeext) ((mlmeext)->sitesurvey_res.backop_flags)
  516. #define mlmeext_chk_scan_backop_flags(mlmeext, flags) ((mlmeext)->sitesurvey_res.backop_flags & (flags))
  517. #define mlmeext_assign_scan_backop_flags(mlmeext, flags) \
  518. do { \
  519. ((mlmeext)->sitesurvey_res.backop_flags = (flags)); \
  520. RTW_INFO("assign_scan_backop_flags:0x%02x\n", (mlmeext)->sitesurvey_res.backop_flags); \
  521. } while (0)
  522. #define mlmeext_scan_backop_flags_sta(mlmeext) ((mlmeext)->sitesurvey_res.backop_flags_sta)
  523. #define mlmeext_chk_scan_backop_flags_sta(mlmeext, flags) ((mlmeext)->sitesurvey_res.backop_flags_sta & (flags))
  524. #define mlmeext_assign_scan_backop_flags_sta(mlmeext, flags) \
  525. do { \
  526. ((mlmeext)->sitesurvey_res.backop_flags_sta = (flags)); \
  527. } while (0)
  528. #else
  529. #define mlmeext_scan_backop_flags(mlmeext) (0)
  530. #define mlmeext_chk_scan_backop_flags(mlmeext, flags) (0)
  531. #define mlmeext_assign_scan_backop_flags(mlmeext, flags) do {} while (0)
  532. #define mlmeext_scan_backop_flags_sta(mlmeext) (0)
  533. #define mlmeext_chk_scan_backop_flags_sta(mlmeext, flags) (0)
  534. #define mlmeext_assign_scan_backop_flags_sta(mlmeext, flags) do {} while (0)
  535. #endif /* CONFIG_SCAN_BACKOP */
  536. #if defined(CONFIG_SCAN_BACKOP) && defined(CONFIG_AP_MODE)
  537. #define mlmeext_scan_backop_flags_ap(mlmeext) ((mlmeext)->sitesurvey_res.backop_flags_ap)
  538. #define mlmeext_chk_scan_backop_flags_ap(mlmeext, flags) ((mlmeext)->sitesurvey_res.backop_flags_ap & (flags))
  539. #define mlmeext_assign_scan_backop_flags_ap(mlmeext, flags) \
  540. do { \
  541. ((mlmeext)->sitesurvey_res.backop_flags_ap = (flags)); \
  542. } while (0)
  543. #else
  544. #define mlmeext_scan_backop_flags_ap(mlmeext) (0)
  545. #define mlmeext_chk_scan_backop_flags_ap(mlmeext, flags) (0)
  546. #define mlmeext_assign_scan_backop_flags_ap(mlmeext, flags) do {} while (0)
  547. #endif /* defined(CONFIG_SCAN_BACKOP) && defined(CONFIG_AP_MODE) */
  548. #if defined(CONFIG_SCAN_BACKOP) && defined(CONFIG_RTW_MESH)
  549. #define mlmeext_scan_backop_flags_mesh(mlmeext) ((mlmeext)->sitesurvey_res.backop_flags_mesh)
  550. #define mlmeext_chk_scan_backop_flags_mesh(mlmeext, flags) ((mlmeext)->sitesurvey_res.backop_flags_mesh & (flags))
  551. #define mlmeext_assign_scan_backop_flags_mesh(mlmeext, flags) \
  552. do { \
  553. ((mlmeext)->sitesurvey_res.backop_flags_mesh = (flags)); \
  554. } while (0)
  555. #else
  556. #define mlmeext_scan_backop_flags_mesh(mlmeext) (0)
  557. #define mlmeext_chk_scan_backop_flags_mesh(mlmeext, flags) (0)
  558. #define mlmeext_assign_scan_backop_flags_mesh(mlmeext, flags) do {} while (0)
  559. #endif /* defined(CONFIG_SCAN_BACKOP) && defined(CONFIG_RTW_MESH) */
  560. u32 rtw_scan_timeout_decision(_adapter *padapter);
  561. void init_mlme_default_rate_set(_adapter *padapter);
  562. int init_mlme_ext_priv(_adapter *padapter);
  563. int init_hw_mlme_ext(_adapter *padapter);
  564. void free_mlme_ext_priv(struct mlme_ext_priv *pmlmeext);
  565. extern struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv);
  566. struct xmit_frame *alloc_mgtxmitframe_once(struct xmit_priv *pxmitpriv);
  567. /* void fill_fwpriv(_adapter * padapter, struct fw_priv *pfwpriv); */
  568. u8 judge_network_type(_adapter *padapter, unsigned char *rate, int ratelen);
  569. void get_rate_set(_adapter *padapter, unsigned char *pbssrate, int *bssrate_len);
  570. void set_mcs_rate_by_mask(u8 *mcs_set, u32 mask);
  571. void UpdateBrateTbl(_adapter *padapter, u8 *mBratesOS);
  572. void UpdateBrateTblForSoftAP(u8 *bssrateset, u32 bssratelen);
  573. void change_band_update_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 ch);
  574. void Set_MSR(_adapter *padapter, u8 type);
  575. u8 rtw_get_oper_ch(_adapter *adapter);
  576. void rtw_set_oper_ch(_adapter *adapter, u8 ch);
  577. u8 rtw_get_oper_bw(_adapter *adapter);
  578. void rtw_set_oper_bw(_adapter *adapter, u8 bw);
  579. u8 rtw_get_oper_choffset(_adapter *adapter);
  580. void rtw_set_oper_choffset(_adapter *adapter, u8 offset);
  581. u8 rtw_get_center_ch(u8 channel, u8 chnl_bw, u8 chnl_offset);
  582. systime rtw_get_on_oper_ch_time(_adapter *adapter);
  583. systime rtw_get_on_cur_ch_time(_adapter *adapter);
  584. u8 rtw_get_offset_by_chbw(u8 ch, u8 bw, u8 *r_offset);
  585. void set_channel_bwmode(_adapter *padapter, unsigned char channel, unsigned char channel_offset, unsigned short bwmode);
  586. unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval);
  587. void _clear_cam_entry(_adapter *padapter, u8 entry);
  588. void write_cam_from_cache(_adapter *adapter, u8 id);
  589. void rtw_sec_cam_swap(_adapter *adapter, u8 cam_id_a, u8 cam_id_b);
  590. void rtw_clean_dk_section(_adapter *adapter);
  591. void rtw_clean_hw_dk_cam(_adapter *adapter);
  592. /* modify both HW and cache */
  593. void write_cam(_adapter *padapter, u8 id, u16 ctrl, u8 *mac, u8 *key);
  594. void clear_cam_entry(_adapter *padapter, u8 id);
  595. /* modify cache only */
  596. void write_cam_cache(_adapter *adapter, u8 id, u16 ctrl, u8 *mac, u8 *key);
  597. void clear_cam_cache(_adapter *adapter, u8 id);
  598. void invalidate_cam_all(_adapter *padapter);
  599. void CAM_empty_entry(PADAPTER Adapter, u8 ucIndex);
  600. void flush_all_cam_entry(_adapter *padapter);
  601. BOOLEAN IsLegal5GChannel(PADAPTER Adapter, u8 channel);
  602. void site_survey(_adapter *padapter, u8 survey_channel, RT_SCAN_TYPE ScanType);
  603. u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSID_EX *bssid);
  604. void update_network(WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src, _adapter *padapter, bool update_ie);
  605. u8 *get_my_bssid(WLAN_BSSID_EX *pnetwork);
  606. u16 get_beacon_interval(WLAN_BSSID_EX *bss);
  607. int is_client_associated_to_ap(_adapter *padapter);
  608. int is_client_associated_to_ibss(_adapter *padapter);
  609. int is_IBSS_empty(_adapter *padapter);
  610. unsigned char check_assoc_AP(u8 *pframe, uint len);
  611. void get_assoc_AP_Vendor(char *vendor, u8 assoc_AP_vendor);
  612. #ifdef CONFIG_80211AC_VHT
  613. unsigned char get_vht_mu_bfer_cap(u8 *pframe, uint len);
  614. #endif
  615. int WMM_param_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
  616. #ifdef CONFIG_WFD
  617. void rtw_process_wfd_ie(_adapter *adapter, u8 *ie, u8 ie_len, const char *tag);
  618. void rtw_process_wfd_ies(_adapter *adapter, u8 *ies, u8 ies_len, const char *tag);
  619. #endif
  620. void WMMOnAssocRsp(_adapter *padapter);
  621. void HT_caps_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
  622. #ifdef ROKU_PRIVATE
  623. void HT_caps_handler_infra_ap(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
  624. #endif
  625. void HT_info_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
  626. void HTOnAssocRsp(_adapter *padapter);
  627. #ifdef ROKU_PRIVATE
  628. void Supported_rate_infra_ap(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
  629. void Extended_Supported_rate_infra_ap(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
  630. #endif
  631. void ERP_IE_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
  632. void VCS_update(_adapter *padapter, struct sta_info *psta);
  633. void update_ldpc_stbc_cap(struct sta_info *psta);
  634. bool rtw_validate_value(u16 EID, u8 *p, u16 len);
  635. bool hidden_ssid_ap(WLAN_BSSID_EX *snetwork);
  636. void rtw_absorb_ssid_ifneed(_adapter *padapter, WLAN_BSSID_EX *bssid, u8 *pframe);
  637. int rtw_get_bcn_keys(ADAPTER *Adapter, u8 *pframe, u32 packet_len,
  638. struct beacon_keys *recv_beacon);
  639. int validate_beacon_len(u8 *pframe, uint len);
  640. void rtw_dump_bcn_keys(struct beacon_keys *recv_beacon);
  641. int rtw_check_bcn_info(ADAPTER *Adapter, u8 *pframe, u32 packet_len);
  642. void update_beacon_info(_adapter *padapter, u8 *pframe, uint len, struct sta_info *psta);
  643. #ifdef CONFIG_DFS
  644. void process_csa_ie(_adapter *padapter, u8 *ies, uint ies_len);
  645. #endif /* CONFIG_DFS */
  646. void update_capinfo(PADAPTER Adapter, u16 updateCap);
  647. void update_wireless_mode(_adapter *padapter);
  648. void update_tx_basic_rate(_adapter *padapter, u8 modulation);
  649. void update_sta_basic_rate(struct sta_info *psta, u8 wireless_mode);
  650. int rtw_ies_get_supported_rate(u8 *ies, uint ies_len, u8 *rate_set, u8 *rate_num);
  651. /* for sta/adhoc mode */
  652. void update_sta_info(_adapter *padapter, struct sta_info *psta);
  653. unsigned int update_basic_rate(unsigned char *ptn, unsigned int ptn_sz);
  654. unsigned int update_supported_rate(unsigned char *ptn, unsigned int ptn_sz);
  655. void Update_RA_Entry(_adapter *padapter, struct sta_info *psta);
  656. void set_sta_rate(_adapter *padapter, struct sta_info *psta);
  657. unsigned int receive_disconnect(_adapter *padapter, unsigned char *MacAddr, unsigned short reason, u8 locally_generated);
  658. unsigned char get_highest_rate_idx(u64 mask);
  659. unsigned char get_lowest_rate_idx_ex(u64 mask, int start_bit);
  660. #define get_lowest_rate_idx(mask) get_lowest_rate_idx_ex(mask, 0)
  661. int support_short_GI(_adapter *padapter, struct HT_caps_element *pHT_caps, u8 bwmode);
  662. unsigned int is_ap_in_tkip(_adapter *padapter);
  663. unsigned int is_ap_in_wep(_adapter *padapter);
  664. unsigned int should_forbid_n_rate(_adapter *padapter);
  665. void parsing_eapol_packet(_adapter *padapter, u8 *key_payload, struct sta_info *psta, u8 trx_type);
  666. bool _rtw_camctl_chk_cap(_adapter *adapter, u8 cap);
  667. void _rtw_camctl_set_flags(_adapter *adapter, u32 flags);
  668. void rtw_camctl_set_flags(_adapter *adapter, u32 flags);
  669. void _rtw_camctl_clr_flags(_adapter *adapter, u32 flags);
  670. void rtw_camctl_clr_flags(_adapter *adapter, u32 flags);
  671. bool _rtw_camctl_chk_flags(_adapter *adapter, u32 flags);
  672. struct sec_cam_bmp;
  673. void dump_sec_cam_map(void *sel, struct sec_cam_bmp *map, u8 max_num);
  674. void rtw_sec_cam_map_clr_all(struct sec_cam_bmp *map);
  675. bool _rtw_camid_is_gk(_adapter *adapter, u8 cam_id);
  676. bool rtw_camid_is_gk(_adapter *adapter, u8 cam_id);
  677. s16 rtw_camid_search(_adapter *adapter, u8 *addr, s16 kid, s8 gk);
  678. s16 rtw_camid_alloc(_adapter *adapter, struct sta_info *sta, u8 kid, u8 gk, bool *used);
  679. void rtw_camid_free(_adapter *adapter, u8 cam_id);
  680. u8 rtw_get_sec_camid(_adapter *adapter, u8 max_bk_key_num, u8 *sec_key_id);
  681. struct macid_bmp;
  682. struct macid_ctl_t;
  683. void dump_macid_map(void *sel, struct macid_bmp *map, u8 max_num);
  684. bool rtw_macid_is_set(struct macid_bmp *map, u8 id);
  685. void rtw_macid_map_clr(struct macid_bmp *map, u8 id);
  686. bool rtw_macid_is_used(struct macid_ctl_t *macid_ctl, u8 id);
  687. bool rtw_macid_is_bmc(struct macid_ctl_t *macid_ctl, u8 id);
  688. u8 rtw_macid_get_iface_bmp(struct macid_ctl_t *macid_ctl, u8 id);
  689. bool rtw_macid_is_iface_shared(struct macid_ctl_t *macid_ctl, u8 id);
  690. bool rtw_macid_is_iface_specific(struct macid_ctl_t *macid_ctl, u8 id, _adapter *adapter);
  691. s8 rtw_macid_get_ch_g(struct macid_ctl_t *macid_ctl, u8 id);
  692. void rtw_alloc_macid(_adapter *padapter, struct sta_info *psta);
  693. void rtw_release_macid(_adapter *padapter, struct sta_info *psta);
  694. u8 rtw_search_max_mac_id(_adapter *padapter);
  695. void rtw_macid_ctl_set_h2c_msr(struct macid_ctl_t *macid_ctl, u8 id, u8 h2c_msr);
  696. void rtw_macid_ctl_set_bw(struct macid_ctl_t *macid_ctl, u8 id, u8 bw);
  697. void rtw_macid_ctl_set_vht_en(struct macid_ctl_t *macid_ctl, u8 id, u8 en);
  698. void rtw_macid_ctl_set_rate_bmp0(struct macid_ctl_t *macid_ctl, u8 id, u32 bmp);
  699. void rtw_macid_ctl_set_rate_bmp1(struct macid_ctl_t *macid_ctl, u8 id, u32 bmp);
  700. void rtw_macid_ctl_init_sleep_reg(struct macid_ctl_t *macid_ctl, u16 m0, u16 m1, u16 m2, u16 m3);
  701. void rtw_macid_ctl_init(struct macid_ctl_t *macid_ctl);
  702. void rtw_macid_ctl_deinit(struct macid_ctl_t *macid_ctl);
  703. u8 rtw_iface_bcmc_id_get(_adapter *padapter);
  704. void rtw_iface_bcmc_id_set(_adapter *padapter, u8 mac_id);
  705. #if defined(DBG_CONFIG_ERROR_RESET) && defined(CONFIG_CONCURRENT_MODE)
  706. void rtw_iface_bcmc_sec_cam_map_restore(_adapter *adapter);
  707. #endif
  708. bool rtw_bmp_is_set(const u8 *bmp, u8 bmp_len, u8 id);
  709. void rtw_bmp_set(u8 *bmp, u8 bmp_len, u8 id);
  710. void rtw_bmp_clear(u8 *bmp, u8 bmp_len, u8 id);
  711. bool rtw_bmp_not_empty(const u8 *bmp, u8 bmp_len);
  712. bool rtw_bmp_not_empty_exclude_bit0(const u8 *bmp, u8 bmp_len);
  713. #ifdef CONFIG_AP_MODE
  714. bool rtw_tim_map_is_set(_adapter *padapter, const u8 *map, u8 id);
  715. void rtw_tim_map_set(_adapter *padapter, u8 *map, u8 id);
  716. void rtw_tim_map_clear(_adapter *padapter, u8 *map, u8 id);
  717. bool rtw_tim_map_anyone_be_set(_adapter *padapter, const u8 *map);
  718. bool rtw_tim_map_anyone_be_set_exclude_aid0(_adapter *padapter, const u8 *map);
  719. #endif /* CONFIG_AP_MODE */
  720. u32 report_join_res(_adapter *padapter, int aid_res, u16 status);
  721. void report_survey_event(_adapter *padapter, union recv_frame *precv_frame);
  722. void report_surveydone_event(_adapter *padapter);
  723. u32 report_del_sta_event(_adapter *padapter, unsigned char *MacAddr, unsigned short reason, bool enqueue, u8 locally_generated);
  724. void report_add_sta_event(_adapter *padapter, unsigned char *MacAddr);
  725. bool rtw_port_switch_chk(_adapter *adapter);
  726. void report_wmm_edca_update(_adapter *padapter);
  727. void beacon_timing_control(_adapter *padapter);
  728. u8 chk_bmc_sleepq_cmd(_adapter *padapter);
  729. extern u8 set_tx_beacon_cmd(_adapter *padapter);
  730. unsigned int setup_beacon_frame(_adapter *padapter, unsigned char *beacon_frame);
  731. void update_mgnt_tx_rate(_adapter *padapter, u8 rate);
  732. void update_monitor_frame_attrib(_adapter *padapter, struct pkt_attrib *pattrib);
  733. void update_mgntframe_attrib(_adapter *padapter, struct pkt_attrib *pattrib);
  734. void update_mgntframe_attrib_addr(_adapter *padapter, struct xmit_frame *pmgntframe);
  735. void dump_mgntframe(_adapter *padapter, struct xmit_frame *pmgntframe);
  736. s32 dump_mgntframe_and_wait(_adapter *padapter, struct xmit_frame *pmgntframe, int timeout_ms);
  737. s32 dump_mgntframe_and_wait_ack(_adapter *padapter, struct xmit_frame *pmgntframe);
  738. s32 dump_mgntframe_and_wait_ack_timeout(_adapter *padapter, struct xmit_frame *pmgntframe, int timeout_ms);
  739. #ifdef CONFIG_P2P
  740. int get_reg_classes_full_count(struct p2p_channels *channel_list);
  741. void issue_probersp_p2p(_adapter *padapter, unsigned char *da);
  742. void issue_p2p_provision_request(_adapter *padapter, u8 *pssid, u8 ussidlen, u8 *pdev_raddr);
  743. void issue_p2p_GO_request(_adapter *padapter, u8 *raddr);
  744. void issue_probereq_p2p(_adapter *padapter, u8 *da);
  745. int issue_probereq_p2p_ex(_adapter *adapter, u8 *da, int try_cnt, int wait_ms);
  746. void issue_p2p_invitation_response(_adapter *padapter, u8 *raddr, u8 dialogToken, u8 success);
  747. void issue_p2p_invitation_request(_adapter *padapter, u8 *raddr);
  748. #endif /* CONFIG_P2P */
  749. void issue_beacon(_adapter *padapter, int timeout_ms);
  750. void issue_probersp(_adapter *padapter, unsigned char *da, u8 is_valid_p2p_probereq);
  751. void _issue_assocreq(_adapter *padapter, u8 is_assoc);
  752. void issue_assocreq(_adapter *padapter);
  753. void issue_reassocreq(_adapter *padapter);
  754. void issue_asocrsp(_adapter *padapter, unsigned short status, struct sta_info *pstat, int pkt_type);
  755. void issue_auth(_adapter *padapter, struct sta_info *psta, unsigned short status);
  756. void issue_probereq(_adapter *padapter, const NDIS_802_11_SSID *pssid, const u8 *da);
  757. s32 issue_probereq_ex(_adapter *padapter, const NDIS_802_11_SSID *pssid, const u8 *da, u8 ch, bool append_wps, int try_cnt, int wait_ms);
  758. int issue_nulldata(_adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms);
  759. int issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid, u8 ps, int try_cnt, int wait_ms);
  760. int issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason);
  761. int issue_deauth_ex(_adapter *padapter, u8 *da, unsigned short reason, int try_cnt, int wait_ms);
  762. void issue_action_spct_ch_switch(_adapter *padapter, u8 *ra, u8 new_ch, u8 ch_offset);
  763. void issue_addba_req(_adapter *adapter, unsigned char *ra, u8 tid);
  764. void issue_addba_rsp(_adapter *adapter, unsigned char *ra, u8 tid, u16 status, u8 size);
  765. u8 issue_addba_rsp_wait_ack(_adapter *adapter, unsigned char *ra, u8 tid, u16 status, u8 size, int try_cnt, int wait_ms);
  766. void issue_del_ba(_adapter *adapter, unsigned char *ra, u8 tid, u16 reason, u8 initiator);
  767. int issue_del_ba_ex(_adapter *adapter, unsigned char *ra, u8 tid, u16 reason, u8 initiator, int try_cnt, int wait_ms);
  768. void issue_action_BSSCoexistPacket(_adapter *padapter);
  769. #ifdef CONFIG_IEEE80211W
  770. void issue_action_SA_Query(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short tid, u8 key_type);
  771. int issue_deauth_11w(_adapter *padapter, unsigned char *da, unsigned short reason, u8 key_type);
  772. #endif /* CONFIG_IEEE80211W */
  773. int issue_action_SM_PS(_adapter *padapter , unsigned char *raddr , u8 NewMimoPsMode);
  774. int issue_action_SM_PS_wait_ack(_adapter *padapter, unsigned char *raddr, u8 NewMimoPsMode, int try_cnt, int wait_ms);
  775. unsigned int send_delba_sta_tid(_adapter *adapter, u8 initiator, struct sta_info *sta, u8 tid, u8 force);
  776. unsigned int send_delba_sta_tid_wait_ack(_adapter *adapter, u8 initiator, struct sta_info *sta, u8 tid, u8 force);
  777. unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr);
  778. unsigned int send_beacon(_adapter *padapter);
  779. void start_clnt_assoc(_adapter *padapter);
  780. void start_clnt_auth(_adapter *padapter);
  781. void start_clnt_join(_adapter *padapter);
  782. void start_create_ibss(_adapter *padapter);
  783. unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame);
  784. unsigned int OnAssocRsp(_adapter *padapter, union recv_frame *precv_frame);
  785. unsigned int OnProbeReq(_adapter *padapter, union recv_frame *precv_frame);
  786. unsigned int OnProbeRsp(_adapter *padapter, union recv_frame *precv_frame);
  787. unsigned int DoReserved(_adapter *padapter, union recv_frame *precv_frame);
  788. unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame);
  789. unsigned int OnAtim(_adapter *padapter, union recv_frame *precv_frame);
  790. unsigned int OnDisassoc(_adapter *padapter, union recv_frame *precv_frame);
  791. unsigned int OnAuth(_adapter *padapter, union recv_frame *precv_frame);
  792. unsigned int OnAuthClient(_adapter *padapter, union recv_frame *precv_frame);
  793. unsigned int OnDeAuth(_adapter *padapter, union recv_frame *precv_frame);
  794. unsigned int OnAction(_adapter *padapter, union recv_frame *precv_frame);
  795. unsigned int on_action_spct(_adapter *padapter, union recv_frame *precv_frame);
  796. unsigned int OnAction_qos(_adapter *padapter, union recv_frame *precv_frame);
  797. unsigned int OnAction_dls(_adapter *padapter, union recv_frame *precv_frame);
  798. #ifdef CONFIG_RTW_WNM
  799. unsigned int on_action_wnm(_adapter *adapter, union recv_frame *rframe);
  800. #endif
  801. #define RX_AMPDU_ACCEPT_INVALID 0xFF
  802. #define RX_AMPDU_SIZE_INVALID 0xFF
  803. enum rx_ampdu_reason {
  804. RX_AMPDU_DRV_FIXED = 1,
  805. RX_AMPDU_BTCOEX = 2, /* not used, because BTCOEX has its own variable management */
  806. RX_AMPDU_DRV_SCAN = 3,
  807. };
  808. u8 rtw_rx_ampdu_size(_adapter *adapter);
  809. bool rtw_rx_ampdu_is_accept(_adapter *adapter);
  810. bool rtw_rx_ampdu_set_size(_adapter *adapter, u8 size, u8 reason);
  811. bool rtw_rx_ampdu_set_accept(_adapter *adapter, u8 accept, u8 reason);
  812. u8 rx_ampdu_apply_sta_tid(_adapter *adapter, struct sta_info *sta, u8 tid, u8 accept, u8 size);
  813. u8 rx_ampdu_size_sta_limit(_adapter *adapter, struct sta_info *sta);
  814. u8 rx_ampdu_apply_sta(_adapter *adapter, struct sta_info *sta, u8 accept, u8 size);
  815. u16 rtw_rx_ampdu_apply(_adapter *adapter);
  816. unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame);
  817. unsigned int on_action_public(_adapter *padapter, union recv_frame *precv_frame);
  818. unsigned int OnAction_ft(_adapter *padapter, union recv_frame *precv_frame);
  819. unsigned int OnAction_ht(_adapter *padapter, union recv_frame *precv_frame);
  820. #ifdef CONFIG_IEEE80211W
  821. unsigned int OnAction_sa_query(_adapter *padapter, union recv_frame *precv_frame);
  822. #endif /* CONFIG_IEEE80211W */
  823. unsigned int on_action_rm(_adapter *padapter, union recv_frame *precv_frame);
  824. unsigned int OnAction_wmm(_adapter *padapter, union recv_frame *precv_frame);
  825. unsigned int OnAction_vht(_adapter *padapter, union recv_frame *precv_frame);
  826. unsigned int OnAction_p2p(_adapter *padapter, union recv_frame *precv_frame);
  827. #ifdef CONFIG_RTW_80211R
  828. void rtw_ft_update_bcn(_adapter *padapter, union recv_frame *precv_frame);
  829. void rtw_ft_start_clnt_join(_adapter *padapter);
  830. u8 rtw_ft_update_rsnie(_adapter *padapter, u8 bwrite,
  831. struct pkt_attrib *pattrib, u8 **pframe);
  832. void rtw_ft_build_auth_req_ies(_adapter *padapter,
  833. struct pkt_attrib *pattrib, u8 **pframe);
  834. void rtw_ft_build_assoc_req_ies(_adapter *padapter,
  835. u8 is_reassoc, struct pkt_attrib *pattrib, u8 **pframe);
  836. u8 rtw_ft_update_auth_rsp_ies(_adapter *padapter, u8 *pframe, u32 len);
  837. void rtw_ft_start_roam(_adapter *padapter, u8 *pTargetAddr);
  838. void rtw_ft_issue_action_req(_adapter *padapter, u8 *pTargetAddr);
  839. void rtw_ft_report_evt(_adapter *padapter);
  840. void rtw_ft_report_reassoc_evt(_adapter *padapter, u8 *pMacAddr);
  841. void rtw_ft_link_timer_hdl(void *ctx);
  842. void rtw_ft_roam_timer_hdl(void *ctx);
  843. void rtw_ft_roam_status_reset(_adapter *padapter);
  844. #endif
  845. #ifdef CONFIG_RTW_WNM
  846. void rtw_wnm_roam_scan_hdl(void *ctx);
  847. void rtw_wnm_process_btm_req(_adapter *padapter, u8* pframe, u32 frame_len);
  848. void rtw_wnm_reset_btm_candidate(struct roam_nb_info *pnb);
  849. void rtw_wnm_reset_btm_state(_adapter *padapter);
  850. void rtw_wnm_issue_action(_adapter *padapter, u8 action, u8 reason);
  851. #endif
  852. #if defined(CONFIG_RTW_WNM) || defined(CONFIG_RTW_80211K)
  853. u32 rtw_wnm_btm_candidates_survey(_adapter *padapter, u8* pframe, u32 elem_len, u8 is_preference);
  854. #endif
  855. void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res);
  856. void mlmeext_sta_del_event_callback(_adapter *padapter);
  857. void mlmeext_sta_add_event_callback(_adapter *padapter, struct sta_info *psta);
  858. void linked_status_chk(_adapter *padapter, u8 from_timer);
  859. #define rtw_get_bcn_cnt(adapter) (adapter->mlmeextpriv.cur_bcn_cnt)
  860. void rtw_collect_bcn_info(_adapter *adapter);
  861. void _linked_info_dump(_adapter *padapter);
  862. void survey_timer_hdl(void *ctx);
  863. #ifdef CONFIG_RTW_REPEATER_SON
  864. void rson_timer_hdl(void *ctx);
  865. #endif
  866. void link_timer_hdl(void *ctx);
  867. void addba_timer_hdl(void *ctx);
  868. #ifdef CONFIG_IEEE80211W
  869. void sa_query_timer_hdl(void *ctx);
  870. #endif /* CONFIG_IEEE80211W */
  871. #if 0
  872. void reauth_timer_hdl(_adapter *padapter);
  873. void reassoc_timer_hdl(_adapter *padapter);
  874. #endif
  875. #define set_survey_timer(mlmeext, ms) \
  876. do { \
  877. /*RTW_INFO("%s set_survey_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms));*/ \
  878. _set_timer(&(mlmeext)->survey_timer, (ms)); \
  879. } while (0)
  880. #define set_link_timer(mlmeext, ms) \
  881. do { \
  882. /*RTW_INFO("%s set_link_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms));*/ \
  883. _set_timer(&(mlmeext)->link_timer, (ms)); \
  884. } while (0)
  885. bool rtw_is_basic_rate_cck(u8 rate);
  886. bool rtw_is_basic_rate_ofdm(u8 rate);
  887. bool rtw_is_basic_rate_mix(u8 rate);
  888. extern int cckrates_included(unsigned char *rate, int ratelen);
  889. extern int cckratesonly_included(unsigned char *rate, int ratelen);
  890. extern void process_addba_req(_adapter *padapter, u8 *paddba_req, u8 *addr);
  891. extern void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len);
  892. extern void correct_TSF(_adapter *padapter, u8 mlme_state);
  893. #ifdef CONFIG_BCN_RECV_TIME
  894. void rtw_rx_bcn_time_update(_adapter *adapter, uint bcn_len, u8 data_rate);
  895. #endif
  896. extern u8 traffic_status_watchdog(_adapter *padapter, u8 from_timer);
  897. void rtw_process_bar_frame(_adapter *padapter, union recv_frame *precv_frame);
  898. void rtw_join_done_chk_ch(_adapter *padapter, int join_res);
  899. int rtw_chk_start_clnt_join(_adapter *padapter, u8 *ch, u8 *bw, u8 *offset);
  900. #ifdef CONFIG_PLATFORM_ARM_SUN8I
  901. #define BUSY_TRAFFIC_SCAN_DENY_PERIOD 8000
  902. #else
  903. #define BUSY_TRAFFIC_SCAN_DENY_PERIOD 12000
  904. #endif
  905. struct cmd_hdl {
  906. uint parmsize;
  907. u8(*h2cfuns)(struct _ADAPTER *padapter, u8 *pbuf);
  908. };
  909. void rtw_leave_opch(_adapter *adapter);
  910. void rtw_back_opch(_adapter *adapter);
  911. u8 read_macreg_hdl(_adapter *padapter, u8 *pbuf);
  912. u8 write_macreg_hdl(_adapter *padapter, u8 *pbuf);
  913. u8 read_bbreg_hdl(_adapter *padapter, u8 *pbuf);
  914. u8 write_bbreg_hdl(_adapter *padapter, u8 *pbuf);
  915. u8 read_rfreg_hdl(_adapter *padapter, u8 *pbuf);
  916. u8 write_rfreg_hdl(_adapter *padapter, u8 *pbuf);
  917. u8 NULL_hdl(_adapter *padapter, u8 *pbuf);
  918. u8 join_cmd_hdl(_adapter *padapter, u8 *pbuf);
  919. u8 disconnect_hdl(_adapter *padapter, u8 *pbuf);
  920. u8 createbss_hdl(_adapter *padapter, u8 *pbuf);
  921. u8 setopmode_hdl(_adapter *padapter, u8 *pbuf);
  922. u8 sitesurvey_cmd_hdl(_adapter *padapter, u8 *pbuf);
  923. u8 setauth_hdl(_adapter *padapter, u8 *pbuf);
  924. u8 setkey_hdl(_adapter *padapter, u8 *pbuf);
  925. u8 set_stakey_hdl(_adapter *padapter, u8 *pbuf);
  926. u8 set_assocsta_hdl(_adapter *padapter, u8 *pbuf);
  927. u8 del_assocsta_hdl(_adapter *padapter, u8 *pbuf);
  928. u8 add_ba_hdl(_adapter *padapter, unsigned char *pbuf);
  929. u8 add_ba_rsp_hdl(_adapter *padapter, unsigned char *pbuf);
  930. void rtw_ap_wep_pk_setting(_adapter *adapter, struct sta_info *psta);
  931. u8 mlme_evt_hdl(_adapter *padapter, unsigned char *pbuf);
  932. u8 h2c_msg_hdl(_adapter *padapter, unsigned char *pbuf);
  933. u8 chk_bmc_sleepq_hdl(_adapter *padapter, unsigned char *pbuf);
  934. u8 tx_beacon_hdl(_adapter *padapter, unsigned char *pbuf);
  935. u8 rtw_set_chbw_hdl(_adapter *padapter, u8 *pbuf);
  936. u8 set_chplan_hdl(_adapter *padapter, unsigned char *pbuf);
  937. u8 led_blink_hdl(_adapter *padapter, unsigned char *pbuf);
  938. u8 set_csa_hdl(_adapter *padapter, unsigned char *pbuf); /* Kurt: Handling DFS channel switch announcement ie. */
  939. u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf);
  940. u8 run_in_thread_hdl(_adapter *padapter, u8 *pbuf);
  941. u8 rtw_getmacreg_hdl(_adapter *padapter, u8 *pbuf);
  942. #define GEN_DRV_CMD_HANDLER(size, cmd) {size, &cmd ## _hdl},
  943. #define GEN_MLME_EXT_HANDLER(size, cmd) {size, cmd},
  944. #ifdef _RTW_CMD_C_
  945. struct cmd_hdl wlancmds[] = {
  946. GEN_DRV_CMD_HANDLER(sizeof(struct readMAC_parm), rtw_getmacreg) /*0*/
  947. GEN_DRV_CMD_HANDLER(0, NULL)
  948. GEN_DRV_CMD_HANDLER(0, NULL)
  949. GEN_DRV_CMD_HANDLER(0, NULL)
  950. GEN_DRV_CMD_HANDLER(0, NULL)
  951. GEN_DRV_CMD_HANDLER(0, NULL)
  952. GEN_MLME_EXT_HANDLER(0, NULL)
  953. GEN_MLME_EXT_HANDLER(0, NULL)
  954. GEN_MLME_EXT_HANDLER(0, NULL)
  955. GEN_MLME_EXT_HANDLER(0, NULL)
  956. GEN_MLME_EXT_HANDLER(0, NULL) /*10*/
  957. GEN_MLME_EXT_HANDLER(0, NULL)
  958. GEN_MLME_EXT_HANDLER(0, NULL)
  959. GEN_MLME_EXT_HANDLER(0, NULL)
  960. GEN_MLME_EXT_HANDLER(sizeof(struct joinbss_parm), join_cmd_hdl) /*14*/
  961. GEN_MLME_EXT_HANDLER(sizeof(struct disconnect_parm), disconnect_hdl)
  962. GEN_MLME_EXT_HANDLER(sizeof(struct createbss_parm), createbss_hdl)
  963. GEN_MLME_EXT_HANDLER(sizeof(struct setopmode_parm), setopmode_hdl)
  964. GEN_MLME_EXT_HANDLER(sizeof(struct sitesurvey_parm), sitesurvey_cmd_hdl) /*18*/
  965. GEN_MLME_EXT_HANDLER(sizeof(struct setauth_parm), setauth_hdl)
  966. GEN_MLME_EXT_HANDLER(sizeof(struct setkey_parm), setkey_hdl) /*20*/
  967. GEN_MLME_EXT_HANDLER(sizeof(struct set_stakey_parm), set_stakey_hdl)
  968. GEN_MLME_EXT_HANDLER(sizeof(struct set_assocsta_parm), NULL)
  969. GEN_MLME_EXT_HANDLER(sizeof(struct del_assocsta_parm), NULL)
  970. GEN_MLME_EXT_HANDLER(sizeof(struct setstapwrstate_parm), NULL)
  971. GEN_MLME_EXT_HANDLER(sizeof(struct setbasicrate_parm), NULL)
  972. GEN_MLME_EXT_HANDLER(sizeof(struct getbasicrate_parm), NULL)
  973. GEN_MLME_EXT_HANDLER(sizeof(struct setdatarate_parm), NULL)
  974. GEN_MLME_EXT_HANDLER(sizeof(struct getdatarate_parm), NULL)
  975. GEN_MLME_EXT_HANDLER(0, NULL)
  976. GEN_MLME_EXT_HANDLER(0, NULL) /*30*/
  977. GEN_MLME_EXT_HANDLER(sizeof(struct setphy_parm), NULL)
  978. GEN_MLME_EXT_HANDLER(sizeof(struct getphy_parm), NULL)
  979. GEN_MLME_EXT_HANDLER(0, NULL)
  980. GEN_MLME_EXT_HANDLER(0, NULL)
  981. GEN_MLME_EXT_HANDLER(0, NULL)
  982. GEN_MLME_EXT_HANDLER(0, NULL)
  983. GEN_MLME_EXT_HANDLER(0, NULL)
  984. GEN_MLME_EXT_HANDLER(0, NULL)
  985. GEN_MLME_EXT_HANDLER(0, NULL)
  986. GEN_MLME_EXT_HANDLER(0, NULL) /*40*/
  987. GEN_MLME_EXT_HANDLER(0, NULL)
  988. GEN_MLME_EXT_HANDLER(0, NULL)
  989. GEN_MLME_EXT_HANDLER(0, NULL)
  990. GEN_MLME_EXT_HANDLER(0, NULL)
  991. GEN_MLME_EXT_HANDLER(sizeof(struct addBaReq_parm), add_ba_hdl)
  992. GEN_MLME_EXT_HANDLER(sizeof(struct set_ch_parm), rtw_set_chbw_hdl) /* 46 */
  993. GEN_MLME_EXT_HANDLER(0, NULL)
  994. GEN_MLME_EXT_HANDLER(0, NULL)
  995. GEN_MLME_EXT_HANDLER(0, NULL)
  996. GEN_MLME_EXT_HANDLER(0, NULL) /*50*/
  997. GEN_MLME_EXT_HANDLER(0, NULL)
  998. GEN_MLME_EXT_HANDLER(0, NULL)
  999. GEN_MLME_EXT_HANDLER(0, NULL)
  1000. GEN_MLME_EXT_HANDLER(0, NULL)
  1001. GEN_MLME_EXT_HANDLER(sizeof(struct Tx_Beacon_param), tx_beacon_hdl) /*55*/
  1002. GEN_MLME_EXT_HANDLER(0, mlme_evt_hdl) /*56*/
  1003. GEN_MLME_EXT_HANDLER(0, rtw_drvextra_cmd_hdl) /*57*/
  1004. GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl) /*58*/
  1005. GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param), set_chplan_hdl) /*59*/
  1006. GEN_MLME_EXT_HANDLER(sizeof(struct LedBlink_param), led_blink_hdl) /*60*/
  1007. GEN_MLME_EXT_HANDLER(0, set_csa_hdl) /*61*/
  1008. GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param), tdls_hdl) /*62*/
  1009. GEN_MLME_EXT_HANDLER(0, chk_bmc_sleepq_hdl) /*63*/
  1010. GEN_MLME_EXT_HANDLER(sizeof(struct RunInThread_param), run_in_thread_hdl) /*64*/
  1011. GEN_MLME_EXT_HANDLER(sizeof(struct addBaRsp_parm), add_ba_rsp_hdl) /* 65 */
  1012. GEN_MLME_EXT_HANDLER(sizeof(struct rm_event), rm_post_event_hdl) /* 66 */
  1013. };
  1014. #endif
  1015. struct C2HEvent_Header {
  1016. #ifdef CONFIG_LITTLE_ENDIAN
  1017. unsigned int len:16;
  1018. unsigned int ID:8;
  1019. unsigned int seq:8;
  1020. #elif defined(CONFIG_BIG_ENDIAN)
  1021. unsigned int seq:8;
  1022. unsigned int ID:8;
  1023. unsigned int len:16;
  1024. #else
  1025. # error "Must be LITTLE or BIG Endian"
  1026. #endif
  1027. unsigned int rsvd;
  1028. };
  1029. void rtw_dummy_event_callback(_adapter *adapter , u8 *pbuf);
  1030. void rtw_fwdbg_event_callback(_adapter *adapter , u8 *pbuf);
  1031. enum rtw_c2h_event {
  1032. GEN_EVT_CODE(_Read_MACREG) = 0, /*0*/
  1033. GEN_EVT_CODE(_Read_BBREG),
  1034. GEN_EVT_CODE(_Read_RFREG),
  1035. GEN_EVT_CODE(_Read_EEPROM),
  1036. GEN_EVT_CODE(_Read_EFUSE),
  1037. GEN_EVT_CODE(_Read_CAM), /*5*/
  1038. GEN_EVT_CODE(_Get_BasicRate),
  1039. GEN_EVT_CODE(_Get_DataRate),
  1040. GEN_EVT_CODE(_Survey), /*8*/
  1041. GEN_EVT_CODE(_SurveyDone), /*9*/
  1042. GEN_EVT_CODE(_JoinBss) , /*10*/
  1043. GEN_EVT_CODE(_AddSTA),
  1044. GEN_EVT_CODE(_DelSTA),
  1045. GEN_EVT_CODE(_AtimDone) ,
  1046. GEN_EVT_CODE(_TX_Report),
  1047. GEN_EVT_CODE(_CCX_Report), /*15*/
  1048. GEN_EVT_CODE(_DTM_Report),
  1049. GEN_EVT_CODE(_TX_Rate_Statistics),
  1050. GEN_EVT_CODE(_C2HLBK),
  1051. GEN_EVT_CODE(_FWDBG),
  1052. GEN_EVT_CODE(_C2HFEEDBACK), /*20*/
  1053. GEN_EVT_CODE(_ADDBA),
  1054. GEN_EVT_CODE(_C2HBCN),
  1055. GEN_EVT_CODE(_ReportPwrState), /* filen: only for PCIE, USB */
  1056. GEN_EVT_CODE(_CloseRF), /* filen: only for PCIE, work around ASPM */
  1057. GEN_EVT_CODE(_WMM), /*25*/
  1058. #ifdef CONFIG_IEEE80211W
  1059. GEN_EVT_CODE(_TimeoutSTA),
  1060. #endif /* CONFIG_IEEE80211W */
  1061. #ifdef CONFIG_RTW_80211R
  1062. GEN_EVT_CODE(_FT_REASSOC),
  1063. #endif
  1064. MAX_C2HEVT
  1065. };
  1066. #ifdef _RTW_MLME_EXT_C_
  1067. static struct fwevent wlanevents[] = {
  1068. {0, rtw_dummy_event_callback}, /*0*/
  1069. {0, NULL},
  1070. {0, NULL},
  1071. {0, NULL},
  1072. {0, NULL},
  1073. {0, NULL},
  1074. {0, NULL},
  1075. {0, NULL},
  1076. {0, &rtw_survey_event_callback}, /*8*/
  1077. {sizeof(struct surveydone_event), &rtw_surveydone_event_callback}, /*9*/
  1078. {0, &rtw_joinbss_event_callback}, /*10*/
  1079. {sizeof(struct stassoc_event), &rtw_stassoc_event_callback},
  1080. {sizeof(struct stadel_event), &rtw_stadel_event_callback},
  1081. {0, &rtw_atimdone_event_callback},
  1082. {0, rtw_dummy_event_callback},
  1083. {0, NULL}, /*15*/
  1084. {0, NULL},
  1085. {0, NULL},
  1086. {0, NULL},
  1087. {0, rtw_fwdbg_event_callback},
  1088. {0, NULL}, /*20*/
  1089. {0, NULL},
  1090. {0, NULL},
  1091. {0, &rtw_cpwm_event_callback},
  1092. {0, NULL},
  1093. {0, &rtw_wmm_event_callback}, /*25*/
  1094. #ifdef CONFIG_IEEE80211W
  1095. {sizeof(struct stadel_event), &rtw_sta_timeout_event_callback},
  1096. #endif /* CONFIG_IEEE80211W */
  1097. #ifdef CONFIG_RTW_80211R
  1098. {sizeof(struct stassoc_event), &rtw_ft_reassoc_event_callback},
  1099. #endif
  1100. };
  1101. #endif/* _RTW_MLME_EXT_C_ */
  1102. #endif