rtw_mlme_ext.h 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320
  1. /******************************************************************************
  2. *
  3. * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved.
  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. * 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
  17. *
  18. *
  19. ******************************************************************************/
  20. #ifndef __RTW_MLME_EXT_H_
  21. #define __RTW_MLME_EXT_H_
  22. /* Commented by Albert 20101105
  23. * Increase the SURVEY_TO value from 100 to 150 ( 100ms to 150ms )
  24. * The Realtek 8188CE SoftAP will spend around 100ms to send the probe response after receiving the probe request.
  25. * So, this driver tried to extend the dwell time for each scanning channel.
  26. * This will increase the chance to receive the probe response from SoftAP. */
  27. #define SURVEY_TO (100)
  28. #define REAUTH_TO (300) /* (50) */
  29. #define REASSOC_TO (300) /* (50) */
  30. /* #define DISCONNECT_TO (3000) */
  31. #define ADDBA_TO (2000)
  32. #define LINKED_TO (1) /* unit:2 sec, 1x2 = 2 sec */
  33. #define REAUTH_LIMIT (4)
  34. #define REASSOC_LIMIT (4)
  35. #define READDBA_LIMIT (2)
  36. #ifdef CONFIG_GSPI_HCI
  37. #define ROAMING_LIMIT 5
  38. #else
  39. #define ROAMING_LIMIT 8
  40. #endif
  41. /* #define IOCMD_REG0 0x10250370 */
  42. /* #define IOCMD_REG1 0x10250374 */
  43. /* #define IOCMD_REG2 0x10250378 */
  44. /* #define FW_DYNAMIC_FUN_SWITCH 0x10250364 */
  45. /* #define WRITE_BB_CMD 0xF0000001 */
  46. /* #define SET_CHANNEL_CMD 0xF3000000 */
  47. /* #define UPDATE_RA_CMD 0xFD0000A2 */
  48. #define _HW_STATE_NOLINK_ 0x00
  49. #define _HW_STATE_ADHOC_ 0x01
  50. #define _HW_STATE_STATION_ 0x02
  51. #define _HW_STATE_AP_ 0x03
  52. #define _HW_STATE_MONITOR_ 0x04
  53. #define _1M_RATE_ 0
  54. #define _2M_RATE_ 1
  55. #define _5M_RATE_ 2
  56. #define _11M_RATE_ 3
  57. #define _6M_RATE_ 4
  58. #define _9M_RATE_ 5
  59. #define _12M_RATE_ 6
  60. #define _18M_RATE_ 7
  61. #define _24M_RATE_ 8
  62. #define _36M_RATE_ 9
  63. #define _48M_RATE_ 10
  64. #define _54M_RATE_ 11
  65. /********************************************************
  66. MCS rate definitions
  67. *********************************************************/
  68. #define MCS_RATE_1R (0x000000ff)
  69. #define MCS_RATE_2R (0x0000ffff)
  70. #define MCS_RATE_3R (0x00ffffff)
  71. #define MCS_RATE_4R (0xffffffff)
  72. #define MCS_RATE_2R_13TO15_OFF (0x00001fff)
  73. extern unsigned char RTW_WPA_OUI[];
  74. extern unsigned char WMM_OUI[];
  75. extern unsigned char WPS_OUI[];
  76. extern unsigned char WFD_OUI[];
  77. extern unsigned char P2P_OUI[];
  78. extern unsigned char WMM_INFO_OUI[];
  79. extern unsigned char WMM_PARA_OUI[];
  80. typedef enum _RT_CHANNEL_DOMAIN {
  81. /* ===== 0x00 ~ 0x1F, legacy channel plan ===== */
  82. RTW_CHPLAN_FCC = 0x00,
  83. RTW_CHPLAN_IC = 0x01,
  84. RTW_CHPLAN_ETSI = 0x02,
  85. RTW_CHPLAN_SPAIN = 0x03,
  86. RTW_CHPLAN_FRANCE = 0x04,
  87. RTW_CHPLAN_MKK = 0x05,
  88. RTW_CHPLAN_MKK1 = 0x06,
  89. RTW_CHPLAN_ISRAEL = 0x07,
  90. RTW_CHPLAN_TELEC = 0x08,
  91. RTW_CHPLAN_GLOBAL_DOAMIN = 0x09,
  92. RTW_CHPLAN_WORLD_WIDE_13 = 0x0A,
  93. RTW_CHPLAN_TAIWAN = 0x0B,
  94. RTW_CHPLAN_CHINA = 0x0C,
  95. RTW_CHPLAN_SINGAPORE_INDIA_MEXICO = 0x0D,
  96. RTW_CHPLAN_KOREA = 0x0E,
  97. RTW_CHPLAN_TURKEY = 0x0F,
  98. RTW_CHPLAN_JAPAN = 0x10,
  99. RTW_CHPLAN_FCC_NO_DFS = 0x11,
  100. RTW_CHPLAN_JAPAN_NO_DFS = 0x12,
  101. RTW_CHPLAN_WORLD_WIDE_5G = 0x13,
  102. RTW_CHPLAN_TAIWAN_NO_DFS = 0x14,
  103. /* ===== 0x20 ~ 0x7F, new channel plan ===== */
  104. RTW_CHPLAN_WORLD_NULL = 0x20,
  105. RTW_CHPLAN_ETSI1_NULL = 0x21,
  106. RTW_CHPLAN_FCC1_NULL = 0x22,
  107. RTW_CHPLAN_MKK1_NULL = 0x23,
  108. RTW_CHPLAN_ETSI2_NULL = 0x24,
  109. RTW_CHPLAN_FCC1_FCC1 = 0x25,
  110. RTW_CHPLAN_WORLD_ETSI1 = 0x26,
  111. RTW_CHPLAN_MKK1_MKK1 = 0x27,
  112. RTW_CHPLAN_WORLD_KCC1 = 0x28,
  113. RTW_CHPLAN_WORLD_FCC2 = 0x29,
  114. RTW_CHPLAN_FCC2_NULL = 0x2A,
  115. RTW_CHPLAN_WORLD_FCC3 = 0x30,
  116. RTW_CHPLAN_WORLD_FCC4 = 0x31,
  117. RTW_CHPLAN_WORLD_FCC5 = 0x32,
  118. RTW_CHPLAN_WORLD_FCC6 = 0x33,
  119. RTW_CHPLAN_FCC1_FCC7 = 0x34,
  120. RTW_CHPLAN_WORLD_ETSI2 = 0x35,
  121. RTW_CHPLAN_WORLD_ETSI3 = 0x36,
  122. RTW_CHPLAN_MKK1_MKK2 = 0x37,
  123. RTW_CHPLAN_MKK1_MKK3 = 0x38,
  124. RTW_CHPLAN_FCC1_NCC1 = 0x39,
  125. RTW_CHPLAN_FCC1_NCC2 = 0x40,
  126. RTW_CHPLAN_GLOBAL_NULL = 0x41,
  127. RTW_CHPLAN_ETSI1_ETSI4 = 0x42,
  128. RTW_CHPLAN_FCC1_FCC2 = 0x43,
  129. RTW_CHPLAN_FCC1_NCC3 = 0x44,
  130. RTW_CHPLAN_WORLD_ETSI5 = 0x45,
  131. RTW_CHPLAN_FCC1_FCC8 = 0x46,
  132. RTW_CHPLAN_WORLD_ETSI6 = 0x47,
  133. RTW_CHPLAN_WORLD_ETSI7 = 0x48,
  134. RTW_CHPLAN_WORLD_ETSI8 = 0x49,
  135. RTW_CHPLAN_WORLD_ETSI9 = 0x50,
  136. RTW_CHPLAN_WORLD_ETSI10 = 0x51,
  137. RTW_CHPLAN_WORLD_ETSI11 = 0x52,
  138. RTW_CHPLAN_FCC1_NCC4 = 0x53,
  139. RTW_CHPLAN_WORLD_ETSI12 = 0x54,
  140. RTW_CHPLAN_FCC1_FCC9 = 0x55,
  141. RTW_CHPLAN_WORLD_ETSI13 = 0x56,
  142. RTW_CHPLAN_FCC1_FCC10 = 0x57,
  143. RTW_CHPLAN_MKK2_MKK4 = 0x58,
  144. RTW_CHPLAN_WORLD_ETSI14 = 0x59,
  145. RTW_CHPLAN_FCC1_FCC5 = 0x60,
  146. RTW_CHPLAN_FCC2_FCC7 = 0x61,
  147. RTW_CHPLAN_FCC2_FCC1 = 0x62,
  148. RTW_CHPLAN_WORLD_ETSI15 = 0x63,
  149. RTW_CHPLAN_MKK2_MKK5 = 0x64,
  150. RTW_CHPLAN_ETSI1_ETSI16 = 0x65,
  151. RTW_CHPLAN_FCC1_FCC14 = 0x66,
  152. RTW_CHPLAN_FCC1_FCC12 = 0x67,
  153. RTW_CHPLAN_FCC2_FCC14 = 0x68,
  154. RTW_CHPLAN_FCC2_FCC12 = 0x69,
  155. RTW_CHPLAN_ETSI1_ETSI17 = 0x6A,
  156. RTW_CHPLAN_WORLD_FCC16 = 0x6B,
  157. RTW_CHPLAN_WORLD_FCC13 = 0x6C,
  158. RTW_CHPLAN_FCC2_FCC15 = 0x6D,
  159. RTW_CHPLAN_WORLD_FCC12 = 0x6E,
  160. RTW_CHPLAN_NULL_ETSI8 = 0x6F,
  161. RTW_CHPLAN_NULL_ETSI18 = 0x70,
  162. RTW_CHPLAN_NULL_ETSI17 = 0x71,
  163. RTW_CHPLAN_NULL_ETSI19 = 0x72,
  164. RTW_CHPLAN_MAX,
  165. RTW_CHPLAN_REALTEK_DEFINE = 0x7F,
  166. } RT_CHANNEL_DOMAIN, *PRT_CHANNEL_DOMAIN;
  167. typedef enum _RT_CHANNEL_DOMAIN_2G {
  168. RTW_RD_2G_NULL = 0,
  169. RTW_RD_2G_WORLD = 1, /* Worldwird 13 */
  170. RTW_RD_2G_ETSI1 = 2, /* Europe */
  171. RTW_RD_2G_FCC1 = 3, /* US */
  172. RTW_RD_2G_MKK1 = 4, /* Japan */
  173. RTW_RD_2G_ETSI2 = 5, /* France */
  174. RTW_RD_2G_GLOBAL = 6, /* Global domain */
  175. RTW_RD_2G_MKK2 = 7, /* Japan */
  176. RTW_RD_2G_FCC2 = 8, /* US */
  177. RTW_RD_2G_MAX,
  178. } RT_CHANNEL_DOMAIN_2G, *PRT_CHANNEL_DOMAIN_2G;
  179. typedef enum _RT_CHANNEL_DOMAIN_5G {
  180. RTW_RD_5G_NULL = 0, /* */
  181. RTW_RD_5G_ETSI1 = 1, /* Europe */
  182. RTW_RD_5G_ETSI2 = 2, /* Australia, New Zealand */
  183. RTW_RD_5G_ETSI3 = 3, /* Russia */
  184. RTW_RD_5G_FCC1 = 4, /* US */
  185. RTW_RD_5G_FCC2 = 5, /* FCC w/o DFS Channels */
  186. RTW_RD_5G_FCC3 = 6, /* Bolivia, Chile, El Salvador, Venezuela */
  187. RTW_RD_5G_FCC4 = 7, /* Venezuela */
  188. RTW_RD_5G_FCC5 = 8, /* China */
  189. RTW_RD_5G_FCC6 = 9, /* */
  190. RTW_RD_5G_FCC7 = 10, /* US Canada(w/o Weather radar) */
  191. RTW_RD_5G_KCC1 = 11, /* Korea */
  192. RTW_RD_5G_MKK1 = 12, /* Japan */
  193. RTW_RD_5G_MKK2 = 13, /* Japan (W52, W53) */
  194. RTW_RD_5G_MKK3 = 14, /* Japan (W56) */
  195. RTW_RD_5G_NCC1 = 15, /* Taiwan, (w/o Weather radar) */
  196. RTW_RD_5G_NCC2 = 16, /* Taiwan, Band2, Band4 */
  197. RTW_RD_5G_NCC3 = 17, /* Taiwan w/o DFS, Band4 only */
  198. RTW_RD_5G_ETSI4 = 18, /* Europe w/o DFS, Band1 only */
  199. RTW_RD_5G_ETSI5 = 19, /* Australia, New Zealand(w/o Weather radar) */
  200. RTW_RD_5G_FCC8 = 20, /* Latin America */
  201. RTW_RD_5G_ETSI6 = 21, /* Israel, Bahrain, Egypt, India, China, Malaysia */
  202. RTW_RD_5G_ETSI7 = 22, /* China */
  203. RTW_RD_5G_ETSI8 = 23, /* Jordan */
  204. RTW_RD_5G_ETSI9 = 24, /* Lebanon */
  205. RTW_RD_5G_ETSI10 = 25, /* Qatar */
  206. RTW_RD_5G_ETSI11 = 26, /* Russia */
  207. RTW_RD_5G_NCC4 = 27, /* Taiwan, (w/o Weather radar) */
  208. RTW_RD_5G_ETSI12 = 28, /* Indonesia */
  209. RTW_RD_5G_FCC9 = 29, /* (w/o Weather radar) */
  210. RTW_RD_5G_ETSI13 = 30, /* (w/o Weather radar) */
  211. RTW_RD_5G_FCC10 = 31, /* Argentina(w/o Weather radar) */
  212. RTW_RD_5G_MKK4 = 32, /* Japan (W52) */
  213. RTW_RD_5G_ETSI14 = 33, /* Russia */
  214. RTW_RD_5G_FCC11 = 34, /* US(include CH144) */
  215. RTW_RD_5G_ETSI15 = 35, /* Malaysia */
  216. RTW_RD_5G_MKK5 = 36, /* Japan */
  217. RTW_RD_5G_ETSI16 = 37, /* Europe */
  218. RTW_RD_5G_ETSI17 = 38, /* Europe */
  219. RTW_RD_5G_FCC12 = 39, /* FCC */
  220. RTW_RD_5G_FCC13 = 40, /* FCC */
  221. RTW_RD_5G_FCC14 = 41, /* FCC w/o Weather radar(w/o 5600~5650MHz) */
  222. RTW_RD_5G_FCC15 = 42, /* FCC w/o Band3 */
  223. RTW_RD_5G_FCC16 = 43, /* FCC w/o Band3 */
  224. RTW_RD_5G_ETSI18 = 44, /* ETSI w/o DFS Band2&3 */
  225. RTW_RD_5G_ETSI19 = 45, /* Europe */
  226. /* === Below are driver defined for legacy channel plan compatible, DON'T assign index ==== */
  227. RTW_RD_5G_OLD_FCC1,
  228. RTW_RD_5G_OLD_NCC1,
  229. RTW_RD_5G_OLD_KCC1,
  230. RTW_RD_5G_MAX,
  231. } RT_CHANNEL_DOMAIN_5G, *PRT_CHANNEL_DOMAIN_5G;
  232. bool rtw_chplan_is_empty(u8 id);
  233. #define rtw_is_channel_plan_valid(chplan) (((chplan) < RTW_CHPLAN_MAX || (chplan) == RTW_CHPLAN_REALTEK_DEFINE) && !rtw_chplan_is_empty(chplan))
  234. #define rtw_is_legacy_channel_plan(chplan) ((chplan) < 0x20)
  235. typedef struct _RT_CHANNEL_PLAN {
  236. unsigned char Channel[MAX_CHANNEL_NUM];
  237. unsigned char Len;
  238. } RT_CHANNEL_PLAN, *PRT_CHANNEL_PLAN;
  239. struct ch_list_t {
  240. u8 *len_ch;
  241. };
  242. #define CH_LIST_ENT(_len, arg...) \
  243. {.len_ch = (u8[_len + 1]) {_len, ##arg}, }
  244. #define CH_LIST_LEN(_ch_list) (_ch_list.len_ch[0])
  245. #define CH_LIST_CH(_ch_list, _i) (_ch_list.len_ch[_i + 1])
  246. typedef struct _RT_CHANNEL_PLAN_MAP {
  247. u8 Index2G;
  248. #ifdef CONFIG_IEEE80211_BAND_5GHZ
  249. u8 Index5G;
  250. #endif
  251. u8 regd; /* value of REGULATION_TXPWR_LMT */
  252. } RT_CHANNEL_PLAN_MAP, *PRT_CHANNEL_PLAN_MAP;
  253. #ifdef CONFIG_IEEE80211_BAND_5GHZ
  254. #define CHPLAN_ENT(i2g, i5g, regd) {i2g, i5g, regd}
  255. #else
  256. #define CHPLAN_ENT(i2g, i5g, regd) {i2g, regd}
  257. #endif
  258. enum Associated_AP {
  259. atherosAP = 0,
  260. broadcomAP = 1,
  261. ciscoAP = 2,
  262. marvellAP = 3,
  263. ralinkAP = 4,
  264. realtekAP = 5,
  265. airgocapAP = 6,
  266. unknownAP = 7,
  267. maxAP,
  268. };
  269. typedef enum _HT_IOT_PEER {
  270. HT_IOT_PEER_UNKNOWN = 0,
  271. HT_IOT_PEER_REALTEK = 1,
  272. HT_IOT_PEER_REALTEK_92SE = 2,
  273. HT_IOT_PEER_BROADCOM = 3,
  274. HT_IOT_PEER_RALINK = 4,
  275. HT_IOT_PEER_ATHEROS = 5,
  276. HT_IOT_PEER_CISCO = 6,
  277. HT_IOT_PEER_MERU = 7,
  278. HT_IOT_PEER_MARVELL = 8,
  279. HT_IOT_PEER_REALTEK_SOFTAP = 9,/* peer is RealTek SOFT_AP, by Bohn, 2009.12.17 */
  280. HT_IOT_PEER_SELF_SOFTAP = 10, /* Self is SoftAP */
  281. HT_IOT_PEER_AIRGO = 11,
  282. HT_IOT_PEER_INTEL = 12,
  283. HT_IOT_PEER_RTK_APCLIENT = 13,
  284. HT_IOT_PEER_REALTEK_81XX = 14,
  285. HT_IOT_PEER_REALTEK_WOW = 15,
  286. HT_IOT_PEER_REALTEK_JAGUAR_BCUTAP = 16,
  287. HT_IOT_PEER_REALTEK_JAGUAR_CCUTAP = 17,
  288. HT_IOT_PEER_MAX = 18
  289. } HT_IOT_PEER_E, *PHTIOT_PEER_E;
  290. struct mlme_handler {
  291. unsigned int num;
  292. char *str;
  293. unsigned int (*func)(_adapter *padapter, union recv_frame *precv_frame);
  294. };
  295. struct action_handler {
  296. unsigned int num;
  297. char *str;
  298. unsigned int (*func)(_adapter *padapter, union recv_frame *precv_frame);
  299. };
  300. enum SCAN_STATE {
  301. SCAN_DISABLE = 0,
  302. SCAN_START = 1,
  303. SCAN_PS_ANNC_WAIT = 2,
  304. SCAN_ENTER = 3,
  305. SCAN_PROCESS = 4,
  306. /* backop */
  307. SCAN_BACKING_OP = 5,
  308. SCAN_BACK_OP = 6,
  309. SCAN_LEAVING_OP = 7,
  310. SCAN_LEAVE_OP = 8,
  311. /* SW antenna diversity (before linked) */
  312. SCAN_SW_ANTDIV_BL = 9,
  313. /* legacy p2p */
  314. SCAN_TO_P2P_LISTEN = 10,
  315. SCAN_P2P_LISTEN = 11,
  316. SCAN_COMPLETE = 12,
  317. SCAN_STATE_MAX,
  318. };
  319. const char *scan_state_str(u8 state);
  320. enum ss_backop_flag {
  321. SS_BACKOP_EN = BIT0, /* backop when linked */
  322. SS_BACKOP_EN_NL = BIT1, /* backop even when no linked */
  323. SS_BACKOP_PS_ANNC = BIT4,
  324. SS_BACKOP_TX_RESUME = BIT5,
  325. };
  326. struct ss_res {
  327. u8 state;
  328. u8 next_state; /* will set to state on next cmd hdl */
  329. int bss_cnt;
  330. int channel_idx;
  331. #ifdef CONFIG_DFS
  332. u8 dfs_ch_ssid_scan;
  333. #endif
  334. int scan_mode;
  335. u16 scan_ch_ms;
  336. u8 rx_ampdu_accept;
  337. u8 rx_ampdu_size;
  338. u8 igi_scan;
  339. u8 igi_before_scan; /* used for restoring IGI value without enable DIG & FA_CNT */
  340. #ifdef CONFIG_SCAN_BACKOP
  341. u8 backop_flags_sta; /* policy for station mode*/
  342. u8 backop_flags_ap; /* policy for ap mode */
  343. u8 backop_flags; /* per backop runtime decision */
  344. u8 scan_cnt;
  345. u8 scan_cnt_max;
  346. u32 backop_time; /* the start time of backop */
  347. u16 backop_ms;
  348. #endif
  349. #if defined(CONFIG_ANTENNA_DIVERSITY) || defined(DBG_SCAN_SW_ANTDIV_BL)
  350. u8 is_sw_antdiv_bl_scan;
  351. #endif
  352. u8 ssid_num;
  353. u8 ch_num;
  354. NDIS_802_11_SSID ssid[RTW_SSID_SCAN_AMOUNT];
  355. struct rtw_ieee80211_channel ch[RTW_CHANNEL_SCAN_AMOUNT];
  356. };
  357. /* #define AP_MODE 0x0C */
  358. /* #define STATION_MODE 0x08 */
  359. /* #define AD_HOC_MODE 0x04 */
  360. /* #define NO_LINK_MODE 0x00 */
  361. #define WIFI_FW_NULL_STATE _HW_STATE_NOLINK_
  362. #define WIFI_FW_STATION_STATE _HW_STATE_STATION_
  363. #define WIFI_FW_AP_STATE _HW_STATE_AP_
  364. #define WIFI_FW_ADHOC_STATE _HW_STATE_ADHOC_
  365. #define WIFI_FW_PRE_LINK 0x00000800
  366. #define WIFI_FW_AUTH_NULL 0x00000100
  367. #define WIFI_FW_AUTH_STATE 0x00000200
  368. #define WIFI_FW_AUTH_SUCCESS 0x00000400
  369. #define WIFI_FW_ASSOC_STATE 0x00002000
  370. #define WIFI_FW_ASSOC_SUCCESS 0x00004000
  371. #define WIFI_FW_LINKING_STATE (WIFI_FW_AUTH_NULL | WIFI_FW_AUTH_STATE | WIFI_FW_AUTH_SUCCESS | WIFI_FW_ASSOC_STATE)
  372. #ifdef CONFIG_TDLS
  373. enum TDLS_option {
  374. TDLS_ESTABLISHED = 1,
  375. TDLS_ISSUE_PTI,
  376. TDLS_CH_SW_RESP,
  377. TDLS_CH_SW_PREPARE,
  378. TDLS_CH_SW_START,
  379. TDLS_CH_SW_TO_OFF_CHNL,
  380. TDLS_CH_SW_TO_BASE_CHNL_UNSOLICITED,
  381. TDLS_CH_SW_TO_BASE_CHNL,
  382. TDLS_CH_SW_END_TO_BASE_CHNL,
  383. TDLS_CH_SW_END,
  384. TDLS_RS_RCR,
  385. TDLS_TEARDOWN_STA,
  386. TDLS_TEARDOWN_STA_LOCALLY,
  387. maxTDLS,
  388. };
  389. #endif /* CONFIG_TDLS */
  390. /*
  391. * Usage:
  392. * When one iface acted as AP mode and the other iface is STA mode and scanning,
  393. * it should switch back to AP's operating channel periodically.
  394. * Parameters info:
  395. * When the driver scanned RTW_SCAN_NUM_OF_CH channels, it would switch back to AP's operating channel for
  396. * RTW_BACK_OP_CH_MS milliseconds.
  397. * Example:
  398. * For chip supports 2.4G + 5GHz and AP mode is operating in channel 1,
  399. * RTW_SCAN_NUM_OF_CH is 8, RTW_BACK_OP_CH_MS is 300
  400. * When it's STA mode gets set_scan command,
  401. * it would
  402. * 1. Doing the scan on channel 1.2.3.4.5.6.7.8
  403. * 2. Back to channel 1 for 300 milliseconds
  404. * 3. Go through doing site survey on channel 9.10.11.36.40.44.48.52
  405. * 4. Back to channel 1 for 300 milliseconds
  406. * 5. ... and so on, till survey done.
  407. */
  408. #if defined(CONFIG_ATMEL_RC_PATCH)
  409. #define RTW_SCAN_NUM_OF_CH 2
  410. #define RTW_BACK_OP_CH_MS 200
  411. #else
  412. #define RTW_SCAN_NUM_OF_CH 3
  413. #define RTW_BACK_OP_CH_MS 400
  414. #endif
  415. struct mlme_ext_info {
  416. u32 state;
  417. #ifdef CONFIG_MI_WITH_MBSSID_CAM
  418. u8 hw_media_state;
  419. #endif
  420. u32 reauth_count;
  421. u32 reassoc_count;
  422. u32 link_count;
  423. u32 auth_seq;
  424. u32 auth_algo; /* 802.11 auth, could be open, shared, auto */
  425. u32 authModeToggle;
  426. u32 enc_algo;/* encrypt algorithm; */
  427. u32 key_index; /* this is only valid for legendary wep, 0~3 for key id. */
  428. u32 iv;
  429. u8 chg_txt[128];
  430. u16 aid;
  431. u16 bcn_interval;
  432. u16 capability;
  433. u8 assoc_AP_vendor;
  434. u8 slotTime;
  435. u8 preamble_mode;
  436. u8 WMM_enable;
  437. u8 ERP_enable;
  438. u8 ERP_IE;
  439. u8 HT_enable;
  440. u8 HT_caps_enable;
  441. u8 HT_info_enable;
  442. u8 HT_protection;
  443. u8 turboMode_cts2self;
  444. u8 turboMode_rtsen;
  445. u8 SM_PS;
  446. u8 agg_enable_bitmap;
  447. u8 ADDBA_retry_count;
  448. u8 candidate_tid_bitmap;
  449. u8 dialogToken;
  450. /* Accept ADDBA Request */
  451. BOOLEAN bAcceptAddbaReq;
  452. u8 bwmode_updated;
  453. u8 hidden_ssid_mode;
  454. u8 VHT_enable;
  455. struct ADDBA_request ADDBA_req;
  456. struct WMM_para_element WMM_param;
  457. struct HT_caps_element HT_caps;
  458. struct HT_info_element HT_info;
  459. WLAN_BSSID_EX network;/* join network or bss_network, if in ap mode, it is the same to cur_network.network */
  460. };
  461. /* The channel information about this channel including joining, scanning, and power constraints. */
  462. typedef struct _RT_CHANNEL_INFO {
  463. u8 ChannelNum; /* The channel number. */
  464. RT_SCAN_TYPE ScanType; /* Scan type such as passive or active scan. */
  465. /* u16 ScanPeriod; */ /* Listen time in millisecond in this channel. */
  466. /* s32 MaxTxPwrDbm; */ /* Max allowed tx power. */
  467. /* u32 ExInfo; */ /* Extended Information for this channel. */
  468. #ifdef CONFIG_FIND_BEST_CHANNEL
  469. u32 rx_count;
  470. #endif
  471. #ifdef CONFIG_DFS
  472. #ifdef CONFIG_DFS_MASTER
  473. u32 non_ocp_end_time;
  474. #endif
  475. u8 hidden_bss_cnt; /* per scan count */
  476. #endif
  477. } RT_CHANNEL_INFO, *PRT_CHANNEL_INFO;
  478. #define DFS_MASTER_TIMER_MS 100
  479. #define CAC_TIME_MS (60*1000)
  480. #define CAC_TIME_CE_MS (10*60*1000)
  481. #define NON_OCP_TIME_MS (30*60*1000)
  482. void rtw_rfctl_init(_adapter *adapter);
  483. #ifdef CONFIG_DFS_MASTER
  484. struct rf_ctl_t;
  485. #define CH_IS_NON_OCP(rt_ch_info) (time_after((unsigned long)(rt_ch_info)->non_ocp_end_time, (unsigned long)rtw_get_current_time()))
  486. bool rtw_is_cac_reset_needed(_adapter *adapter, u8 ch, u8 bw, u8 offset);
  487. bool _rtw_rfctl_overlap_radar_detect_ch(struct rf_ctl_t *rfctl, u8 ch, u8 bw, u8 offset);
  488. bool rtw_rfctl_overlap_radar_detect_ch(struct rf_ctl_t *rfctl);
  489. bool rtw_rfctl_is_tx_blocked_by_ch_waiting(struct rf_ctl_t *rfctl);
  490. bool rtw_chset_is_ch_non_ocp(RT_CHANNEL_INFO *ch_set, u8 ch, u8 bw, u8 offset);
  491. void rtw_chset_update_non_ocp(RT_CHANNEL_INFO *ch_set, u8 ch, u8 bw, u8 offset);
  492. void rtw_chset_update_non_ocp_ms(RT_CHANNEL_INFO *ch_set, u8 ch, u8 bw, u8 offset, int ms);
  493. u32 rtw_get_ch_waiting_ms(_adapter *adapter, u8 ch, u8 bw, u8 offset, u32 *r_non_ocp_ms, u32 *r_cac_ms);
  494. void rtw_reset_cac(_adapter *adapter, u8 ch, u8 bw, u8 offset);
  495. #else
  496. #define CH_IS_NON_OCP(rt_ch_info) 0
  497. #define rtw_chset_is_ch_non_ocp(ch_set, ch, bw, offset) _FALSE
  498. #define rtw_rfctl_is_tx_blocked_by_ch_waiting(rfctl) _FALSE
  499. #endif
  500. enum {
  501. RTW_CHF_2G = BIT0,
  502. RTW_CHF_5G = BIT1,
  503. RTW_CHF_DFS = BIT2,
  504. RTW_CHF_LONG_CAC = BIT3,
  505. RTW_CHF_NON_DFS = BIT4,
  506. RTW_CHF_NON_LONG_CAC = BIT5,
  507. RTW_CHF_NON_OCP = BIT6,
  508. };
  509. bool rtw_choose_shortest_waiting_ch(_adapter *adapter, u8 req_bw, u8 *dec_ch, u8 *dec_bw, u8 *dec_offset, u8 d_flags);
  510. void dump_country_chplan(void *sel, const struct country_chplan *ent);
  511. void dump_country_chplan_map(void *sel);
  512. void dump_chplan_id_list(void *sel);
  513. void dump_chplan_test(void *sel);
  514. void dump_chset(void *sel, RT_CHANNEL_INFO *ch_set);
  515. void dump_cur_chset(void *sel, _adapter *adapter);
  516. int rtw_chset_search_ch(RT_CHANNEL_INFO *ch_set, const u32 ch);
  517. u8 rtw_chset_is_chbw_valid(RT_CHANNEL_INFO *ch_set, u8 ch, u8 bw, u8 offset);
  518. bool rtw_mlme_band_check(_adapter *adapter, const u32 ch);
  519. enum {
  520. BAND_24G = BIT0,
  521. BAND_5G = BIT1,
  522. };
  523. void RTW_SET_SCAN_BAND_SKIP(_adapter *padapter, int skip_band);
  524. void RTW_CLR_SCAN_BAND_SKIP(_adapter *padapter, int skip_band);
  525. int RTW_GET_SCAN_BAND_SKIP(_adapter *padapter);
  526. bool rtw_mlme_ignore_chan(_adapter *adapter, const u32 ch);
  527. /* P2P_MAX_REG_CLASSES - Maximum number of regulatory classes */
  528. #define P2P_MAX_REG_CLASSES 10
  529. /* P2P_MAX_REG_CLASS_CHANNELS - Maximum number of channels per regulatory class */
  530. #define P2P_MAX_REG_CLASS_CHANNELS 20
  531. /* struct p2p_channels - List of supported channels */
  532. struct p2p_channels {
  533. /* struct p2p_reg_class - Supported regulatory class */
  534. struct p2p_reg_class {
  535. /* reg_class - Regulatory class (IEEE 802.11-2007, Annex J) */
  536. u8 reg_class;
  537. /* channel - Supported channels */
  538. u8 channel[P2P_MAX_REG_CLASS_CHANNELS];
  539. /* channels - Number of channel entries in use */
  540. size_t channels;
  541. } reg_class[P2P_MAX_REG_CLASSES];
  542. /* reg_classes - Number of reg_class entries in use */
  543. size_t reg_classes;
  544. };
  545. struct p2p_oper_class_map {
  546. enum hw_mode {IEEE80211G, IEEE80211A} mode;
  547. u8 op_class;
  548. u8 min_chan;
  549. u8 max_chan;
  550. u8 inc;
  551. enum { BW20, BW40PLUS, BW40MINUS } bw;
  552. };
  553. struct mlme_ext_priv {
  554. _adapter *padapter;
  555. u8 mlmeext_init;
  556. ATOMIC_T event_seq;
  557. u16 mgnt_seq;
  558. #ifdef CONFIG_IEEE80211W
  559. u16 sa_query_seq;
  560. u64 mgnt_80211w_IPN;
  561. u64 mgnt_80211w_IPN_rx;
  562. #endif /* CONFIG_IEEE80211W */
  563. /* struct fw_priv fwpriv; */
  564. unsigned char cur_channel;
  565. unsigned char cur_bwmode;
  566. unsigned char cur_ch_offset;/* PRIME_CHNL_OFFSET */
  567. unsigned char cur_wireless_mode; /* NETWORK_TYPE */
  568. unsigned char max_chan_nums;
  569. RT_CHANNEL_INFO channel_set[MAX_CHANNEL_NUM];
  570. struct p2p_channels channel_list;
  571. unsigned char basicrate[NumRates];
  572. unsigned char datarate[NumRates];
  573. #ifdef CONFIG_80211N_HT
  574. unsigned char default_supported_mcs_set[16];
  575. #endif
  576. struct ss_res sitesurvey_res;
  577. struct mlme_ext_info mlmext_info;/* for sta/adhoc mode, including current scanning/connecting/connected related info.
  578. * for ap mode, network includes ap's cap_info */
  579. _timer survey_timer;
  580. _timer link_timer;
  581. #ifdef CONFIG_RTW_80211R
  582. _timer ft_link_timer;
  583. _timer ft_roam_timer;
  584. #endif
  585. u32 last_scan_time;
  586. u8 scan_abort;
  587. u8 tx_rate; /* TXRATE when USERATE is set. */
  588. u32 retry; /* retry for issue probereq */
  589. u64 TSFValue;
  590. /* for LPS-32K to adaptive bcn early and timeout */
  591. u8 adaptive_tsf_done;
  592. u32 bcn_delay_cnt[9];
  593. u32 bcn_delay_ratio[9];
  594. u32 bcn_cnt;
  595. u8 DrvBcnEarly;
  596. u8 DrvBcnTimeOut;
  597. #ifdef CONFIG_AP_MODE
  598. unsigned char bstart_bss;
  599. #endif
  600. #ifdef CONFIG_80211D
  601. u8 update_channel_plan_by_ap_done;
  602. #endif
  603. /* recv_decache check for Action_public frame */
  604. u8 action_public_dialog_token;
  605. u16 action_public_rxseq;
  606. /* #ifdef CONFIG_ACTIVE_KEEP_ALIVE_CHECK */
  607. u8 active_keep_alive_check;
  608. /* #endif */
  609. #ifdef DBG_FIXED_CHAN
  610. u8 fixed_chan;
  611. #endif
  612. /* set hw sync bcn tsf register or not */
  613. u8 en_hw_update_tsf;
  614. };
  615. static inline u8 check_mlmeinfo_state(struct mlme_ext_priv *plmeext, sint state)
  616. {
  617. if ((plmeext->mlmext_info.state & 0x03) == state)
  618. return _TRUE;
  619. return _FALSE;
  620. }
  621. #define mlmeext_msr(mlmeext) ((mlmeext)->mlmext_info.state & 0x03)
  622. #define mlmeext_scan_state(mlmeext) ((mlmeext)->sitesurvey_res.state)
  623. #define mlmeext_scan_state_str(mlmeext) scan_state_str((mlmeext)->sitesurvey_res.state)
  624. #define mlmeext_chk_scan_state(mlmeext, _state) ((mlmeext)->sitesurvey_res.state == (_state))
  625. #define mlmeext_set_scan_state(mlmeext, _state) \
  626. do { \
  627. ((mlmeext)->sitesurvey_res.state = (_state)); \
  628. ((mlmeext)->sitesurvey_res.next_state = (_state)); \
  629. /* RTW_INFO("set_scan_state:%s\n", scan_state_str(_state)); */ \
  630. } while (0)
  631. #define mlmeext_scan_next_state(mlmeext) ((mlmeext)->sitesurvey_res.next_state)
  632. #define mlmeext_set_scan_next_state(mlmeext, _state) \
  633. do { \
  634. ((mlmeext)->sitesurvey_res.next_state = (_state)); \
  635. /* RTW_INFO("set_scan_next_state:%s\n", scan_state_str(_state)); */ \
  636. } while (0)
  637. #ifdef CONFIG_SCAN_BACKOP
  638. #define mlmeext_scan_backop_flags(mlmeext) ((mlmeext)->sitesurvey_res.backop_flags)
  639. #define mlmeext_chk_scan_backop_flags(mlmeext, flags) ((mlmeext)->sitesurvey_res.backop_flags & (flags))
  640. #define mlmeext_assign_scan_backop_flags(mlmeext, flags) \
  641. do { \
  642. ((mlmeext)->sitesurvey_res.backop_flags = (flags)); \
  643. RTW_INFO("assign_scan_backop_flags:0x%02x\n", (mlmeext)->sitesurvey_res.backop_flags); \
  644. } while (0)
  645. #define mlmeext_scan_backop_flags_sta(mlmeext) ((mlmeext)->sitesurvey_res.backop_flags_sta)
  646. #define mlmeext_chk_scan_backop_flags_sta(mlmeext, flags) ((mlmeext)->sitesurvey_res.backop_flags_sta & (flags))
  647. #define mlmeext_assign_scan_backop_flags_sta(mlmeext, flags) \
  648. do { \
  649. ((mlmeext)->sitesurvey_res.backop_flags_sta = (flags)); \
  650. } while (0)
  651. #define mlmeext_scan_backop_flags_ap(mlmeext) ((mlmeext)->sitesurvey_res.backop_flags_ap)
  652. #define mlmeext_chk_scan_backop_flags_ap(mlmeext, flags) ((mlmeext)->sitesurvey_res.backop_flags_ap & (flags))
  653. #define mlmeext_assign_scan_backop_flags_ap(mlmeext, flags) \
  654. do { \
  655. ((mlmeext)->sitesurvey_res.backop_flags_ap = (flags)); \
  656. } while (0)
  657. #else
  658. #define mlmeext_scan_backop_flags(mlmeext) (0)
  659. #define mlmeext_chk_scan_backop_flags(mlmeext, flags) (0)
  660. #define mlmeext_assign_scan_backop_flags(mlmeext, flags) do {} while (0)
  661. #define mlmeext_scan_backop_flags_sta(mlmeext) (0)
  662. #define mlmeext_chk_scan_backop_flags_sta(mlmeext, flags) (0)
  663. #define mlmeext_assign_scan_backop_flags_sta(mlmeext, flags) do {} while (0)
  664. #define mlmeext_scan_backop_flags_ap(mlmeext) (0)
  665. #define mlmeext_chk_scan_backop_flags_ap(mlmeext, flags) (0)
  666. #define mlmeext_assign_scan_backop_flags_ap(mlmeext, flags) do {} while (0)
  667. #endif
  668. void init_mlme_default_rate_set(_adapter *padapter);
  669. int init_mlme_ext_priv(_adapter *padapter);
  670. int init_hw_mlme_ext(_adapter *padapter);
  671. void free_mlme_ext_priv(struct mlme_ext_priv *pmlmeext);
  672. extern struct xmit_frame *alloc_mgtxmitframe(struct xmit_priv *pxmitpriv);
  673. struct xmit_frame *alloc_mgtxmitframe_once(struct xmit_priv *pxmitpriv);
  674. /* void fill_fwpriv(_adapter * padapter, struct fw_priv *pfwpriv); */
  675. #ifdef CONFIG_GET_RAID_BY_DRV
  676. unsigned char networktype_to_raid(_adapter *adapter, struct sta_info *psta);
  677. unsigned char networktype_to_raid_ex(_adapter *adapter, struct sta_info *psta);
  678. #endif
  679. u8 judge_network_type(_adapter *padapter, unsigned char *rate, int ratelen);
  680. void get_rate_set(_adapter *padapter, unsigned char *pbssrate, int *bssrate_len);
  681. void set_mcs_rate_by_mask(u8 *mcs_set, u32 mask);
  682. void UpdateBrateTbl(_adapter *padapter, u8 *mBratesOS);
  683. void UpdateBrateTblForSoftAP(u8 *bssrateset, u32 bssratelen);
  684. void change_band_update_ie(_adapter *padapter, WLAN_BSSID_EX *pnetwork, u8 ch);
  685. void Set_MSR(_adapter *padapter, u8 type);
  686. u8 rtw_get_oper_ch(_adapter *adapter);
  687. void rtw_set_oper_ch(_adapter *adapter, u8 ch);
  688. u8 rtw_get_oper_bw(_adapter *adapter);
  689. void rtw_set_oper_bw(_adapter *adapter, u8 bw);
  690. u8 rtw_get_oper_choffset(_adapter *adapter);
  691. void rtw_set_oper_choffset(_adapter *adapter, u8 offset);
  692. u8 rtw_get_center_ch(u8 channel, u8 chnl_bw, u8 chnl_offset);
  693. u32 rtw_get_on_oper_ch_time(_adapter *adapter);
  694. u32 rtw_get_on_cur_ch_time(_adapter *adapter);
  695. u8 rtw_get_offset_by_chbw(u8 ch, u8 bw, u8 *r_offset);
  696. u8 rtw_get_offset_by_ch(u8 channel);
  697. void set_channel_bwmode(_adapter *padapter, unsigned char channel, unsigned char channel_offset, unsigned short bwmode);
  698. unsigned int decide_wait_for_beacon_timeout(unsigned int bcn_interval);
  699. void _clear_cam_entry(_adapter *padapter, u8 entry);
  700. void write_cam_from_cache(_adapter *adapter, u8 id);
  701. void rtw_sec_cam_swap(_adapter *adapter, u8 cam_id_a, u8 cam_id_b);
  702. void rtw_clean_dk_section(_adapter *adapter);
  703. void rtw_clean_hw_dk_cam(_adapter *adapter);
  704. /* modify both HW and cache */
  705. void write_cam(_adapter *padapter, u8 id, u16 ctrl, u8 *mac, u8 *key);
  706. void clear_cam_entry(_adapter *padapter, u8 id);
  707. /* modify cache only */
  708. void write_cam_cache(_adapter *adapter, u8 id, u16 ctrl, u8 *mac, u8 *key);
  709. void clear_cam_cache(_adapter *adapter, u8 id);
  710. void invalidate_cam_all(_adapter *padapter);
  711. void CAM_empty_entry(PADAPTER Adapter, u8 ucIndex);
  712. void flush_all_cam_entry(_adapter *padapter);
  713. BOOLEAN IsLegal5GChannel(PADAPTER Adapter, u8 channel);
  714. void site_survey(_adapter *padapter, u8 survey_channel, RT_SCAN_TYPE ScanType);
  715. u8 collect_bss_info(_adapter *padapter, union recv_frame *precv_frame, WLAN_BSSID_EX *bssid);
  716. void update_network(WLAN_BSSID_EX *dst, WLAN_BSSID_EX *src, _adapter *padapter, bool update_ie);
  717. int get_bsstype(unsigned short capability);
  718. u8 *get_my_bssid(WLAN_BSSID_EX *pnetwork);
  719. u16 get_beacon_interval(WLAN_BSSID_EX *bss);
  720. int is_client_associated_to_ap(_adapter *padapter);
  721. int is_client_associated_to_ibss(_adapter *padapter);
  722. int is_IBSS_empty(_adapter *padapter);
  723. unsigned char check_assoc_AP(u8 *pframe, uint len);
  724. int WMM_param_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
  725. #ifdef CONFIG_WFD
  726. void rtw_process_wfd_ie(_adapter *adapter, u8 *ie, u8 ie_len, const char *tag);
  727. void rtw_process_wfd_ies(_adapter *adapter, u8 *ies, u8 ies_len, const char *tag);
  728. #endif
  729. void WMMOnAssocRsp(_adapter *padapter);
  730. void HT_caps_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
  731. void HT_info_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
  732. void HTOnAssocRsp(_adapter *padapter);
  733. void ERP_IE_handler(_adapter *padapter, PNDIS_802_11_VARIABLE_IEs pIE);
  734. void VCS_update(_adapter *padapter, struct sta_info *psta);
  735. void update_ldpc_stbc_cap(struct sta_info *psta);
  736. int rtw_get_bcn_keys(ADAPTER *Adapter, u8 *pframe, u32 packet_len,
  737. struct beacon_keys *recv_beacon);
  738. int validate_beacon_len(u8 *pframe, uint len);
  739. void rtw_dump_bcn_keys(struct beacon_keys *recv_beacon);
  740. int rtw_check_bcn_info(ADAPTER *Adapter, u8 *pframe, u32 packet_len);
  741. void update_beacon_info(_adapter *padapter, u8 *pframe, uint len, struct sta_info *psta);
  742. #ifdef CONFIG_DFS
  743. void process_csa_ie(_adapter *padapter, u8 *pframe, uint len);
  744. #endif /* CONFIG_DFS */
  745. void update_capinfo(PADAPTER Adapter, u16 updateCap);
  746. void update_wireless_mode(_adapter *padapter);
  747. void update_tx_basic_rate(_adapter *padapter, u8 modulation);
  748. void update_sta_basic_rate(struct sta_info *psta, u8 wireless_mode);
  749. int rtw_ies_get_supported_rate(u8 *ies, uint ies_len, u8 *rate_set, u8 *rate_num);
  750. /* for sta/adhoc mode */
  751. void update_sta_info(_adapter *padapter, struct sta_info *psta);
  752. unsigned int update_basic_rate(unsigned char *ptn, unsigned int ptn_sz);
  753. unsigned int update_supported_rate(unsigned char *ptn, unsigned int ptn_sz);
  754. void Update_RA_Entry(_adapter *padapter, struct sta_info *psta);
  755. void set_sta_rate(_adapter *padapter, struct sta_info *psta);
  756. unsigned int receive_disconnect(_adapter *padapter, unsigned char *MacAddr, unsigned short reason, u8 locally_generated);
  757. unsigned char get_highest_rate_idx(u32 mask);
  758. int support_short_GI(_adapter *padapter, struct HT_caps_element *pHT_caps, u8 bwmode);
  759. unsigned int is_ap_in_tkip(_adapter *padapter);
  760. unsigned int is_ap_in_wep(_adapter *padapter);
  761. unsigned int should_forbid_n_rate(_adapter *padapter);
  762. bool _rtw_camctl_chk_cap(_adapter *adapter, u8 cap);
  763. void _rtw_camctl_set_flags(_adapter *adapter, u32 flags);
  764. void rtw_camctl_set_flags(_adapter *adapter, u32 flags);
  765. void _rtw_camctl_clr_flags(_adapter *adapter, u32 flags);
  766. void rtw_camctl_clr_flags(_adapter *adapter, u32 flags);
  767. bool _rtw_camctl_chk_flags(_adapter *adapter, u32 flags);
  768. struct sec_cam_bmp;
  769. void dump_sec_cam_map(void *sel, struct sec_cam_bmp *map, u8 max_num);
  770. void rtw_sec_cam_map_clr_all(struct sec_cam_bmp *map);
  771. bool _rtw_camid_is_gk(_adapter *adapter, u8 cam_id);
  772. bool rtw_camid_is_gk(_adapter *adapter, u8 cam_id);
  773. s16 rtw_camid_search(_adapter *adapter, u8 *addr, s16 kid, s8 gk);
  774. s16 rtw_camid_alloc(_adapter *adapter, struct sta_info *sta, u8 kid, bool *used);
  775. void rtw_camid_free(_adapter *adapter, u8 cam_id);
  776. u8 rtw_get_sec_camid(_adapter *adapter, u8 max_bk_key_num, u8 *sec_key_id);
  777. struct macid_bmp;
  778. struct macid_ctl_t;
  779. void dump_macid_map(void *sel, struct macid_bmp *map, u8 max_num);
  780. bool rtw_macid_is_set(struct macid_bmp *map, u8 id);
  781. bool rtw_macid_is_used(struct macid_ctl_t *macid_ctl, u8 id);
  782. bool rtw_macid_is_bmc(struct macid_ctl_t *macid_ctl, u8 id);
  783. s8 rtw_macid_get_if_g(struct macid_ctl_t *macid_ctl, u8 id);
  784. s8 rtw_macid_get_ch_g(struct macid_ctl_t *macid_ctl, u8 id);
  785. void rtw_alloc_macid(_adapter *padapter, struct sta_info *psta);
  786. void rtw_release_macid(_adapter *padapter, struct sta_info *psta);
  787. u8 rtw_search_max_mac_id(_adapter *padapter);
  788. void rtw_macid_ctl_set_h2c_msr(struct macid_ctl_t *macid_ctl, u8 id, u8 h2c_msr);
  789. void rtw_macid_ctl_set_bw(struct macid_ctl_t *macid_ctl, u8 id, u8 bw);
  790. void rtw_macid_ctl_set_vht_en(struct macid_ctl_t *macid_ctl, u8 id, u8 en);
  791. void rtw_macid_ctl_set_rate_bmp0(struct macid_ctl_t *macid_ctl, u8 id, u32 bmp);
  792. void rtw_macid_ctl_set_rate_bmp1(struct macid_ctl_t *macid_ctl, u8 id, u32 bmp);
  793. void rtw_macid_ctl_init(struct macid_ctl_t *macid_ctl);
  794. void rtw_macid_ctl_deinit(struct macid_ctl_t *macid_ctl);
  795. u8 rtw_iface_bcmc_id_get(_adapter *padapter);
  796. u32 report_join_res(_adapter *padapter, int res);
  797. void report_survey_event(_adapter *padapter, union recv_frame *precv_frame);
  798. void report_surveydone_event(_adapter *padapter);
  799. u32 report_del_sta_event(_adapter *padapter, unsigned char *MacAddr, unsigned short reason, bool enqueue, u8 locally_generated);
  800. void report_add_sta_event(_adapter *padapter, unsigned char *MacAddr);
  801. bool rtw_port_switch_chk(_adapter *adapter);
  802. void report_wmm_edca_update(_adapter *padapter);
  803. void beacon_timing_control(_adapter *padapter);
  804. u8 chk_bmc_sleepq_cmd(_adapter *padapter);
  805. extern u8 set_tx_beacon_cmd(_adapter *padapter);
  806. unsigned int setup_beacon_frame(_adapter *padapter, unsigned char *beacon_frame);
  807. void update_mgnt_tx_rate(_adapter *padapter, u8 rate);
  808. void update_monitor_frame_attrib(_adapter *padapter, struct pkt_attrib *pattrib);
  809. void update_mgntframe_attrib(_adapter *padapter, struct pkt_attrib *pattrib);
  810. void update_mgntframe_attrib_addr(_adapter *padapter, struct xmit_frame *pmgntframe);
  811. void dump_mgntframe(_adapter *padapter, struct xmit_frame *pmgntframe);
  812. s32 dump_mgntframe_and_wait(_adapter *padapter, struct xmit_frame *pmgntframe, int timeout_ms);
  813. s32 dump_mgntframe_and_wait_ack(_adapter *padapter, struct xmit_frame *pmgntframe);
  814. s32 dump_mgntframe_and_wait_ack_timeout(_adapter *padapter, struct xmit_frame *pmgntframe, int timeout_ms);
  815. #ifdef CONFIG_P2P
  816. void issue_probersp_p2p(_adapter *padapter, unsigned char *da);
  817. void issue_p2p_provision_request(_adapter *padapter, u8 *pssid, u8 ussidlen, u8 *pdev_raddr);
  818. void issue_p2p_GO_request(_adapter *padapter, u8 *raddr);
  819. void issue_probereq_p2p(_adapter *padapter, u8 *da);
  820. int issue_probereq_p2p_ex(_adapter *adapter, u8 *da, int try_cnt, int wait_ms);
  821. void issue_p2p_invitation_response(_adapter *padapter, u8 *raddr, u8 dialogToken, u8 success);
  822. void issue_p2p_invitation_request(_adapter *padapter, u8 *raddr);
  823. #endif /* CONFIG_P2P */
  824. void issue_beacon(_adapter *padapter, int timeout_ms);
  825. void issue_probersp(_adapter *padapter, unsigned char *da, u8 is_valid_p2p_probereq);
  826. void _issue_assocreq(_adapter *padapter, u8 is_assoc);
  827. void issue_assocreq(_adapter *padapter);
  828. void issue_reassocreq(_adapter *padapter);
  829. void issue_asocrsp(_adapter *padapter, unsigned short status, struct sta_info *pstat, int pkt_type);
  830. void issue_auth(_adapter *padapter, struct sta_info *psta, unsigned short status);
  831. void issue_probereq(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 *da);
  832. s32 issue_probereq_ex(_adapter *padapter, NDIS_802_11_SSID *pssid, u8 *da, u8 ch, bool append_wps, int try_cnt, int wait_ms);
  833. int issue_nulldata(_adapter *padapter, unsigned char *da, unsigned int power_mode, int try_cnt, int wait_ms);
  834. s32 issue_nulldata_in_interrupt(PADAPTER padapter, u8 *da, unsigned int power_mode);
  835. int issue_qos_nulldata(_adapter *padapter, unsigned char *da, u16 tid, int try_cnt, int wait_ms);
  836. int issue_deauth(_adapter *padapter, unsigned char *da, unsigned short reason);
  837. int issue_deauth_ex(_adapter *padapter, u8 *da, unsigned short reason, int try_cnt, int wait_ms);
  838. void issue_action_spct_ch_switch(_adapter *padapter, u8 *ra, u8 new_ch, u8 ch_offset);
  839. void issue_addba_req(_adapter *adapter, unsigned char *ra, u8 tid);
  840. void issue_addba_rsp(_adapter *adapter, unsigned char *ra, u8 tid, u16 status, u8 size);
  841. u8 issue_addba_rsp_wait_ack(_adapter *adapter, unsigned char *ra, u8 tid, u16 status, u8 size, int try_cnt, int wait_ms);
  842. void issue_del_ba(_adapter *adapter, unsigned char *ra, u8 tid, u16 reason, u8 initiator);
  843. int issue_del_ba_ex(_adapter *adapter, unsigned char *ra, u8 tid, u16 reason, u8 initiator, int try_cnt, int wait_ms);
  844. #ifdef CONFIG_IEEE80211W
  845. void issue_action_SA_Query(_adapter *padapter, unsigned char *raddr, unsigned char action, unsigned short tid, u8 key_type);
  846. int issue_deauth_11w(_adapter *padapter, unsigned char *da, unsigned short reason, u8 key_type);
  847. #endif /* CONFIG_IEEE80211W */
  848. int issue_action_SM_PS(_adapter *padapter , unsigned char *raddr , u8 NewMimoPsMode);
  849. int issue_action_SM_PS_wait_ack(_adapter *padapter, unsigned char *raddr, u8 NewMimoPsMode, int try_cnt, int wait_ms);
  850. unsigned int send_delba_sta_tid(_adapter *adapter, u8 initiator, struct sta_info *sta, u8 tid, u8 force);
  851. unsigned int send_delba_sta_tid_wait_ack(_adapter *adapter, u8 initiator, struct sta_info *sta, u8 tid, u8 force);
  852. unsigned int send_delba(_adapter *padapter, u8 initiator, u8 *addr);
  853. unsigned int send_beacon(_adapter *padapter);
  854. void start_clnt_assoc(_adapter *padapter);
  855. void start_clnt_auth(_adapter *padapter);
  856. void start_clnt_join(_adapter *padapter);
  857. void start_create_ibss(_adapter *padapter);
  858. unsigned int OnAssocReq(_adapter *padapter, union recv_frame *precv_frame);
  859. unsigned int OnAssocRsp(_adapter *padapter, union recv_frame *precv_frame);
  860. unsigned int OnProbeReq(_adapter *padapter, union recv_frame *precv_frame);
  861. unsigned int OnProbeRsp(_adapter *padapter, union recv_frame *precv_frame);
  862. unsigned int DoReserved(_adapter *padapter, union recv_frame *precv_frame);
  863. unsigned int OnBeacon(_adapter *padapter, union recv_frame *precv_frame);
  864. unsigned int OnAtim(_adapter *padapter, union recv_frame *precv_frame);
  865. unsigned int OnDisassoc(_adapter *padapter, union recv_frame *precv_frame);
  866. unsigned int OnAuth(_adapter *padapter, union recv_frame *precv_frame);
  867. unsigned int OnAuthClient(_adapter *padapter, union recv_frame *precv_frame);
  868. unsigned int OnDeAuth(_adapter *padapter, union recv_frame *precv_frame);
  869. unsigned int OnAction(_adapter *padapter, union recv_frame *precv_frame);
  870. unsigned int on_action_spct(_adapter *padapter, union recv_frame *precv_frame);
  871. unsigned int OnAction_qos(_adapter *padapter, union recv_frame *precv_frame);
  872. unsigned int OnAction_dls(_adapter *padapter, union recv_frame *precv_frame);
  873. #ifdef CONFIG_RTW_WNM
  874. unsigned int on_action_wnm(_adapter *adapter, union recv_frame *rframe);
  875. #endif
  876. #define RX_AMPDU_ACCEPT_INVALID 0xFF
  877. #define RX_AMPDU_SIZE_INVALID 0xFF
  878. enum rx_ampdu_reason {
  879. RX_AMPDU_DRV_FIXED = 1,
  880. RX_AMPDU_BTCOEX = 2, /* not used, because BTCOEX has its own variable management */
  881. RX_AMPDU_DRV_SCAN = 3,
  882. };
  883. u8 rtw_rx_ampdu_size(_adapter *adapter);
  884. bool rtw_rx_ampdu_is_accept(_adapter *adapter);
  885. bool rtw_rx_ampdu_set_size(_adapter *adapter, u8 size, u8 reason);
  886. bool rtw_rx_ampdu_set_accept(_adapter *adapter, u8 accept, u8 reason);
  887. u8 rx_ampdu_apply_sta_tid(_adapter *adapter, struct sta_info *sta, u8 tid, u8 accept, u8 size);
  888. u8 rx_ampdu_size_sta_limit(_adapter *adapter, struct sta_info *sta);
  889. u8 rx_ampdu_apply_sta(_adapter *adapter, struct sta_info *sta, u8 accept, u8 size);
  890. u16 rtw_rx_ampdu_apply(_adapter *adapter);
  891. unsigned int OnAction_back(_adapter *padapter, union recv_frame *precv_frame);
  892. unsigned int on_action_public(_adapter *padapter, union recv_frame *precv_frame);
  893. unsigned int OnAction_ft(_adapter *padapter, union recv_frame *precv_frame);
  894. unsigned int OnAction_ht(_adapter *padapter, union recv_frame *precv_frame);
  895. #ifdef CONFIG_IEEE80211W
  896. unsigned int OnAction_sa_query(_adapter *padapter, union recv_frame *precv_frame);
  897. #endif /* CONFIG_IEEE80211W */
  898. unsigned int OnAction_wmm(_adapter *padapter, union recv_frame *precv_frame);
  899. unsigned int OnAction_vht(_adapter *padapter, union recv_frame *precv_frame);
  900. unsigned int OnAction_p2p(_adapter *padapter, union recv_frame *precv_frame);
  901. #ifdef CONFIG_RTW_80211R
  902. void start_clnt_ft_action(_adapter *padapter, u8 *pTargetAddr);
  903. void issue_action_ft_request(_adapter *padapter, u8 *pTargetAddr);
  904. void report_ft_event(_adapter *padapter);
  905. void report_ft_reassoc_event(_adapter *padapter, u8 *pMacAddr);
  906. void ft_link_timer_hdl(void *ctx);
  907. void ft_roam_timer_hdl(void *ctx);
  908. #endif
  909. void mlmeext_joinbss_event_callback(_adapter *padapter, int join_res);
  910. void mlmeext_sta_del_event_callback(_adapter *padapter);
  911. void mlmeext_sta_add_event_callback(_adapter *padapter, struct sta_info *psta);
  912. void linked_status_chk(_adapter *padapter, u8 from_timer);
  913. void _linked_info_dump(_adapter *padapter);
  914. void survey_timer_hdl(struct timer_list *t);
  915. void link_timer_hdl(struct timer_list *t);
  916. void addba_timer_hdl(struct timer_list *t);
  917. #ifdef CONFIG_IEEE80211W
  918. void sa_query_timer_hdl(void *ctx);
  919. #endif /* CONFIG_IEEE80211W */
  920. #if 0
  921. void reauth_timer_hdl(_adapter *padapter);
  922. void reassoc_timer_hdl(_adapter *padapter);
  923. #endif
  924. #define set_survey_timer(mlmeext, ms) \
  925. do { \
  926. /*RTW_INFO("%s set_survey_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms));*/ \
  927. _set_timer(&(mlmeext)->survey_timer, (ms)); \
  928. } while (0)
  929. #define set_link_timer(mlmeext, ms) \
  930. do { \
  931. /*RTW_INFO("%s set_link_timer(%p, %d)\n", __FUNCTION__, (mlmeext), (ms));*/ \
  932. _set_timer(&(mlmeext)->link_timer, (ms)); \
  933. } while (0)
  934. extern int cckrates_included(unsigned char *rate, int ratelen);
  935. extern int cckratesonly_included(unsigned char *rate, int ratelen);
  936. extern void process_addba_req(_adapter *padapter, u8 *paddba_req, u8 *addr);
  937. extern void update_TSF(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len);
  938. extern void correct_TSF(_adapter *padapter, struct mlme_ext_priv *pmlmeext);
  939. extern void adaptive_early_32k(struct mlme_ext_priv *pmlmeext, u8 *pframe, uint len);
  940. extern u8 traffic_status_watchdog(_adapter *padapter, u8 from_timer);
  941. void rtw_join_done_chk_ch(_adapter *padapter, int join_res);
  942. int rtw_chk_start_clnt_join(_adapter *padapter, u8 *ch, u8 *bw, u8 *offset);
  943. #ifdef CONFIG_PLATFORM_ARM_SUN8I
  944. #define BUSY_TRAFFIC_SCAN_DENY_PERIOD 8000
  945. #else
  946. #define BUSY_TRAFFIC_SCAN_DENY_PERIOD 12000
  947. #endif
  948. struct cmd_hdl {
  949. uint parmsize;
  950. u8(*h2cfuns)(struct _ADAPTER *padapter, u8 *pbuf);
  951. };
  952. u8 read_macreg_hdl(_adapter *padapter, u8 *pbuf);
  953. u8 write_macreg_hdl(_adapter *padapter, u8 *pbuf);
  954. u8 read_bbreg_hdl(_adapter *padapter, u8 *pbuf);
  955. u8 write_bbreg_hdl(_adapter *padapter, u8 *pbuf);
  956. u8 read_rfreg_hdl(_adapter *padapter, u8 *pbuf);
  957. u8 write_rfreg_hdl(_adapter *padapter, u8 *pbuf);
  958. u8 NULL_hdl(_adapter *padapter, u8 *pbuf);
  959. u8 join_cmd_hdl(_adapter *padapter, u8 *pbuf);
  960. u8 disconnect_hdl(_adapter *padapter, u8 *pbuf);
  961. u8 createbss_hdl(_adapter *padapter, u8 *pbuf);
  962. u8 setopmode_hdl(_adapter *padapter, u8 *pbuf);
  963. u8 sitesurvey_cmd_hdl(_adapter *padapter, u8 *pbuf);
  964. u8 setauth_hdl(_adapter *padapter, u8 *pbuf);
  965. u8 setkey_hdl(_adapter *padapter, u8 *pbuf);
  966. u8 set_stakey_hdl(_adapter *padapter, u8 *pbuf);
  967. u8 set_assocsta_hdl(_adapter *padapter, u8 *pbuf);
  968. u8 del_assocsta_hdl(_adapter *padapter, u8 *pbuf);
  969. u8 add_ba_hdl(_adapter *padapter, unsigned char *pbuf);
  970. u8 add_ba_rsp_hdl(_adapter *padapter, unsigned char *pbuf);
  971. void rtw_ap_wep_pk_setting(_adapter *adapter, struct sta_info *psta);
  972. u8 mlme_evt_hdl(_adapter *padapter, unsigned char *pbuf);
  973. u8 h2c_msg_hdl(_adapter *padapter, unsigned char *pbuf);
  974. u8 chk_bmc_sleepq_hdl(_adapter *padapter, unsigned char *pbuf);
  975. u8 tx_beacon_hdl(_adapter *padapter, unsigned char *pbuf);
  976. u8 set_ch_hdl(_adapter *padapter, u8 *pbuf);
  977. u8 set_chplan_hdl(_adapter *padapter, unsigned char *pbuf);
  978. u8 led_blink_hdl(_adapter *padapter, unsigned char *pbuf);
  979. u8 set_csa_hdl(_adapter *padapter, unsigned char *pbuf); /* Kurt: Handling DFS channel switch announcement ie. */
  980. u8 tdls_hdl(_adapter *padapter, unsigned char *pbuf);
  981. u8 run_in_thread_hdl(_adapter *padapter, u8 *pbuf);
  982. u8 rtw_getmacreg_hdl(_adapter *padapter, u8 *pbuf);
  983. #define GEN_DRV_CMD_HANDLER(size, cmd) {size, &cmd ## _hdl},
  984. #define GEN_MLME_EXT_HANDLER(size, cmd) {size, cmd},
  985. #ifdef _RTW_CMD_C_
  986. struct cmd_hdl wlancmds[] = {
  987. GEN_DRV_CMD_HANDLER(sizeof(struct readMAC_parm), rtw_getmacreg) /*0*/
  988. GEN_DRV_CMD_HANDLER(0, NULL)
  989. GEN_DRV_CMD_HANDLER(0, NULL)
  990. GEN_DRV_CMD_HANDLER(0, NULL)
  991. GEN_DRV_CMD_HANDLER(0, NULL)
  992. GEN_DRV_CMD_HANDLER(0, NULL)
  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)
  997. GEN_MLME_EXT_HANDLER(0, NULL) /*10*/
  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 joinbss_parm), join_cmd_hdl) /*14*/
  1002. GEN_MLME_EXT_HANDLER(sizeof(struct disconnect_parm), disconnect_hdl)
  1003. GEN_MLME_EXT_HANDLER(sizeof(struct createbss_parm), createbss_hdl)
  1004. GEN_MLME_EXT_HANDLER(sizeof(struct setopmode_parm), setopmode_hdl)
  1005. GEN_MLME_EXT_HANDLER(sizeof(struct sitesurvey_parm), sitesurvey_cmd_hdl) /*18*/
  1006. GEN_MLME_EXT_HANDLER(sizeof(struct setauth_parm), setauth_hdl)
  1007. GEN_MLME_EXT_HANDLER(sizeof(struct setkey_parm), setkey_hdl) /*20*/
  1008. GEN_MLME_EXT_HANDLER(sizeof(struct set_stakey_parm), set_stakey_hdl)
  1009. GEN_MLME_EXT_HANDLER(sizeof(struct set_assocsta_parm), NULL)
  1010. GEN_MLME_EXT_HANDLER(sizeof(struct del_assocsta_parm), NULL)
  1011. GEN_MLME_EXT_HANDLER(sizeof(struct setstapwrstate_parm), NULL)
  1012. GEN_MLME_EXT_HANDLER(sizeof(struct setbasicrate_parm), NULL)
  1013. GEN_MLME_EXT_HANDLER(sizeof(struct getbasicrate_parm), NULL)
  1014. GEN_MLME_EXT_HANDLER(sizeof(struct setdatarate_parm), NULL)
  1015. GEN_MLME_EXT_HANDLER(sizeof(struct getdatarate_parm), NULL)
  1016. GEN_MLME_EXT_HANDLER(0, NULL)
  1017. GEN_MLME_EXT_HANDLER(0, NULL) /*30*/
  1018. GEN_MLME_EXT_HANDLER(sizeof(struct setphy_parm), NULL)
  1019. GEN_MLME_EXT_HANDLER(sizeof(struct getphy_parm), NULL)
  1020. GEN_MLME_EXT_HANDLER(0, NULL)
  1021. GEN_MLME_EXT_HANDLER(0, NULL)
  1022. GEN_MLME_EXT_HANDLER(0, NULL)
  1023. GEN_MLME_EXT_HANDLER(0, NULL)
  1024. GEN_MLME_EXT_HANDLER(0, NULL)
  1025. GEN_MLME_EXT_HANDLER(0, NULL)
  1026. GEN_MLME_EXT_HANDLER(0, NULL)
  1027. GEN_MLME_EXT_HANDLER(0, NULL) /*40*/
  1028. GEN_MLME_EXT_HANDLER(0, NULL)
  1029. GEN_MLME_EXT_HANDLER(0, NULL)
  1030. GEN_MLME_EXT_HANDLER(0, NULL)
  1031. GEN_MLME_EXT_HANDLER(0, NULL)
  1032. GEN_MLME_EXT_HANDLER(sizeof(struct addBaReq_parm), add_ba_hdl)
  1033. GEN_MLME_EXT_HANDLER(sizeof(struct set_ch_parm), set_ch_hdl) /* 46 */
  1034. GEN_MLME_EXT_HANDLER(0, NULL)
  1035. GEN_MLME_EXT_HANDLER(0, NULL)
  1036. GEN_MLME_EXT_HANDLER(0, NULL)
  1037. GEN_MLME_EXT_HANDLER(0, NULL) /*50*/
  1038. GEN_MLME_EXT_HANDLER(0, NULL)
  1039. GEN_MLME_EXT_HANDLER(0, NULL)
  1040. GEN_MLME_EXT_HANDLER(0, NULL)
  1041. GEN_MLME_EXT_HANDLER(0, NULL)
  1042. GEN_MLME_EXT_HANDLER(sizeof(struct Tx_Beacon_param), tx_beacon_hdl) /*55*/
  1043. GEN_MLME_EXT_HANDLER(0, mlme_evt_hdl) /*56*/
  1044. GEN_MLME_EXT_HANDLER(0, rtw_drvextra_cmd_hdl) /*57*/
  1045. GEN_MLME_EXT_HANDLER(0, h2c_msg_hdl) /*58*/
  1046. GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelPlan_param), set_chplan_hdl) /*59*/
  1047. GEN_MLME_EXT_HANDLER(sizeof(struct LedBlink_param), led_blink_hdl) /*60*/
  1048. GEN_MLME_EXT_HANDLER(sizeof(struct SetChannelSwitch_param), set_csa_hdl) /*61*/
  1049. GEN_MLME_EXT_HANDLER(sizeof(struct TDLSoption_param), tdls_hdl) /*62*/
  1050. GEN_MLME_EXT_HANDLER(0, chk_bmc_sleepq_hdl) /*63*/
  1051. GEN_MLME_EXT_HANDLER(sizeof(struct RunInThread_param), run_in_thread_hdl) /*64*/
  1052. GEN_MLME_EXT_HANDLER(sizeof(struct addBaRsp_parm), add_ba_rsp_hdl) /* 65 */
  1053. };
  1054. #endif
  1055. struct C2HEvent_Header {
  1056. #ifdef CONFIG_LITTLE_ENDIAN
  1057. unsigned int len:16;
  1058. unsigned int ID:8;
  1059. unsigned int seq:8;
  1060. #elif defined(CONFIG_BIG_ENDIAN)
  1061. unsigned int seq:8;
  1062. unsigned int ID:8;
  1063. unsigned int len:16;
  1064. #else
  1065. # error "Must be LITTLE or BIG Endian"
  1066. #endif
  1067. unsigned int rsvd;
  1068. };
  1069. void rtw_dummy_event_callback(_adapter *adapter , u8 *pbuf);
  1070. void rtw_fwdbg_event_callback(_adapter *adapter , u8 *pbuf);
  1071. enum rtw_c2h_event {
  1072. GEN_EVT_CODE(_Read_MACREG) = 0, /*0*/
  1073. GEN_EVT_CODE(_Read_BBREG),
  1074. GEN_EVT_CODE(_Read_RFREG),
  1075. GEN_EVT_CODE(_Read_EEPROM),
  1076. GEN_EVT_CODE(_Read_EFUSE),
  1077. GEN_EVT_CODE(_Read_CAM), /*5*/
  1078. GEN_EVT_CODE(_Get_BasicRate),
  1079. GEN_EVT_CODE(_Get_DataRate),
  1080. GEN_EVT_CODE(_Survey), /*8*/
  1081. GEN_EVT_CODE(_SurveyDone), /*9*/
  1082. GEN_EVT_CODE(_JoinBss) , /*10*/
  1083. GEN_EVT_CODE(_AddSTA),
  1084. GEN_EVT_CODE(_DelSTA),
  1085. GEN_EVT_CODE(_AtimDone) ,
  1086. GEN_EVT_CODE(_TX_Report),
  1087. GEN_EVT_CODE(_CCX_Report), /*15*/
  1088. GEN_EVT_CODE(_DTM_Report),
  1089. GEN_EVT_CODE(_TX_Rate_Statistics),
  1090. GEN_EVT_CODE(_C2HLBK),
  1091. GEN_EVT_CODE(_FWDBG),
  1092. GEN_EVT_CODE(_C2HFEEDBACK), /*20*/
  1093. GEN_EVT_CODE(_ADDBA),
  1094. GEN_EVT_CODE(_C2HBCN),
  1095. GEN_EVT_CODE(_ReportPwrState), /* filen: only for PCIE, USB */
  1096. GEN_EVT_CODE(_CloseRF), /* filen: only for PCIE, work around ASPM */
  1097. GEN_EVT_CODE(_WMM), /*25*/
  1098. #ifdef CONFIG_IEEE80211W
  1099. GEN_EVT_CODE(_TimeoutSTA),
  1100. #endif /* CONFIG_IEEE80211W */
  1101. #ifdef CONFIG_RTW_80211R
  1102. GEN_EVT_CODE(_FT_REASSOC),
  1103. #endif
  1104. MAX_C2HEVT
  1105. };
  1106. #ifdef _RTW_MLME_EXT_C_
  1107. static struct fwevent wlanevents[] = {
  1108. {0, rtw_dummy_event_callback}, /*0*/
  1109. {0, NULL},
  1110. {0, NULL},
  1111. {0, NULL},
  1112. {0, NULL},
  1113. {0, NULL},
  1114. {0, NULL},
  1115. {0, NULL},
  1116. {0, &rtw_survey_event_callback}, /*8*/
  1117. {sizeof(struct surveydone_event), &rtw_surveydone_event_callback}, /*9*/
  1118. {0, &rtw_joinbss_event_callback}, /*10*/
  1119. {sizeof(struct stassoc_event), &rtw_stassoc_event_callback},
  1120. {sizeof(struct stadel_event), &rtw_stadel_event_callback},
  1121. {0, &rtw_atimdone_event_callback},
  1122. {0, rtw_dummy_event_callback},
  1123. {0, NULL}, /*15*/
  1124. {0, NULL},
  1125. {0, NULL},
  1126. {0, NULL},
  1127. {0, rtw_fwdbg_event_callback},
  1128. {0, NULL}, /*20*/
  1129. {0, NULL},
  1130. {0, NULL},
  1131. {0, &rtw_cpwm_event_callback},
  1132. {0, NULL},
  1133. {0, &rtw_wmm_event_callback}, /*25*/
  1134. #ifdef CONFIG_IEEE80211W
  1135. {sizeof(struct stadel_event), &rtw_sta_timeout_event_callback},
  1136. #endif /* CONFIG_IEEE80211W */
  1137. #ifdef CONFIG_RTW_80211R
  1138. {sizeof(struct stassoc_event), &rtw_ft_reassoc_event_callback},
  1139. #endif
  1140. };
  1141. #endif/* _RTW_MLME_EXT_C_ */
  1142. #endif