roaming_fsm.c 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539
  1. /*
  2. ** Id:
  3. */
  4. /*! \file "roaming_fsm.c"
  5. \brief This file defines the FSM for Roaming MODULE.
  6. This file defines the FSM for Roaming MODULE.
  7. */
  8. /*
  9. ** Log: roaming_fsm.c
  10. *
  11. * 11 24 2011 wh.su
  12. * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG
  13. * Adjust code for DBG and CONFIG_XLOG.
  14. *
  15. * 11 11 2011 wh.su
  16. * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG
  17. * modify the xlog related code.
  18. *
  19. * 11 02 2011 wh.su
  20. * [WCXRP00001078] [MT6620 Wi-Fi][Driver] Adding the mediatek log improment support : XLOG
  21. * adding the code for XLOG.
  22. *
  23. * 08 31 2011 tsaiyuan.hsu
  24. * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver
  25. * remove obsolete code.
  26. *
  27. * 08 15 2011 tsaiyuan.hsu
  28. * [WCXRP00000931] [MT5931 Wi-Fi][DRV/FW] add swcr to disable roaming from driver
  29. * add swcr in driver reg, 0x9fxx0000, to disable roaming .
  30. *
  31. * 03 16 2011 tsaiyuan.hsu
  32. * [WCXRP00000517] [MT6620 Wi-Fi][Driver][FW] Fine Tune Performance of Roaming
  33. * remove obsolete definition and unused variables.
  34. *
  35. * 02 26 2011 tsaiyuan.hsu
  36. * [WCXRP00000391] [MT6620 Wi-Fi][FW] Add Roaming Support
  37. * not send disassoc or deauth to leaving AP so as to improve performace of roaming.
  38. *
  39. * 01 27 2011 tsaiyuan.hsu
  40. * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support
  41. * add roaming fsm
  42. * 1. not support 11r, only use strength of signal to determine roaming.
  43. * 2. not enable CFG_SUPPORT_ROAMING until completion of full test.
  44. * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw
  45. * 4. assume that change of link quality in smooth way.
  46. *
  47. * 01 27 2011 tsaiyuan.hsu
  48. * [WCXRP00000392] [MT6620 Wi-Fi][Driver] Add Roaming Support
  49. * add roaming fsm
  50. * 1. not support 11r, only use strength of signal to determine roaming.
  51. * 2. not enable CFG_SUPPORT_ROAMING until completion of full test.
  52. * 3. in 6620, adopt work-around to avoid sign extension problem of cck of hw
  53. * 4. assume that change of link quality in smooth way.
  54. *
  55. */
  56. /*******************************************************************************
  57. * C O M P I L E R F L A G S
  58. ********************************************************************************
  59. */
  60. /*******************************************************************************
  61. * E X T E R N A L R E F E R E N C E S
  62. ********************************************************************************
  63. */
  64. #include "precomp.h"
  65. #if CFG_SUPPORT_ROAMING
  66. /*******************************************************************************
  67. * C O N S T A N T S
  68. ********************************************************************************
  69. */
  70. /*******************************************************************************
  71. * D A T A T Y P E S
  72. ********************************************************************************
  73. */
  74. /*******************************************************************************
  75. * P U B L I C D A T A
  76. ********************************************************************************
  77. */
  78. /*******************************************************************************
  79. * P R I V A T E D A T A
  80. ********************************************************************************
  81. */
  82. #if DBG
  83. /*lint -save -e64 Type mismatch */
  84. static PUINT_8 apucDebugRoamingState[ROAMING_STATE_NUM] = {
  85. (PUINT_8) DISP_STRING("ROAMING_STATE_IDLE"),
  86. (PUINT_8) DISP_STRING("ROAMING_STATE_DECISION"),
  87. (PUINT_8) DISP_STRING("ROAMING_STATE_DISCOVERY"),
  88. (PUINT_8) DISP_STRING("ROAMING_STATE_ROAM")
  89. };
  90. /*lint -restore */
  91. #endif /* DBG */
  92. /*******************************************************************************
  93. * M A C R O S
  94. ********************************************************************************
  95. */
  96. /*
  97. #define ROAMING_ENABLE_CHECK(_roam) \
  98. { \
  99. if (!(_roam->fgIsEnableRoaming)) \
  100. return; \
  101. }
  102. */
  103. /*******************************************************************************
  104. * F U N C T I O N D E C L A R A T I O N S
  105. ********************************************************************************
  106. */
  107. /*******************************************************************************
  108. * F U N C T I O N S
  109. ********************************************************************************
  110. */
  111. /*----------------------------------------------------------------------------*/
  112. /*!
  113. * @brief Initialize the value in ROAMING_FSM_INFO_T for ROAMING FSM operation
  114. *
  115. * @param [IN P_ADAPTER_T] prAdapter
  116. *
  117. * @return (none)
  118. */
  119. /*----------------------------------------------------------------------------*/
  120. VOID roamingFsmInit(IN P_ADAPTER_T prAdapter)
  121. {
  122. P_ROAMING_INFO_T prRoamingFsmInfo;
  123. P_CONNECTION_SETTINGS_T prConnSettings;
  124. DBGLOG(ROAMING, LOUD, "->roamingFsmInit(): Current Time = %u\n", kalGetTimeTick());
  125. prRoamingFsmInfo = (P_ROAMING_INFO_T) &(prAdapter->rWifiVar.rRoamingInfo);
  126. prConnSettings = &(prAdapter->rWifiVar.rConnSettings);
  127. /* 4 <1> Initiate FSM */
  128. prRoamingFsmInfo->fgIsEnableRoaming = prConnSettings->fgIsEnableRoaming;
  129. prRoamingFsmInfo->eCurrentState = ROAMING_STATE_IDLE;
  130. prRoamingFsmInfo->rRoamingDiscoveryUpdateTime = 0;
  131. } /* end of roamingFsmInit() */
  132. /*----------------------------------------------------------------------------*/
  133. /*!
  134. * @brief Uninitialize the value in AIS_FSM_INFO_T for AIS FSM operation
  135. *
  136. * @param [IN P_ADAPTER_T] prAdapter
  137. *
  138. * @return (none)
  139. */
  140. /*----------------------------------------------------------------------------*/
  141. VOID roamingFsmUninit(IN P_ADAPTER_T prAdapter)
  142. {
  143. P_ROAMING_INFO_T prRoamingFsmInfo;
  144. DBGLOG(ROAMING, LOUD, "->roamingFsmUninit(): Current Time = %u\n", kalGetTimeTick());
  145. prRoamingFsmInfo = (P_ROAMING_INFO_T) &(prAdapter->rWifiVar.rRoamingInfo);
  146. prRoamingFsmInfo->eCurrentState = ROAMING_STATE_IDLE;
  147. } /* end of roamingFsmUninit() */
  148. /*----------------------------------------------------------------------------*/
  149. /*!
  150. * @brief Send commands to firmware
  151. *
  152. * @param [IN P_ADAPTER_T] prAdapter
  153. * [IN P_ROAMING_PARAM_T] prParam
  154. *
  155. * @return (none)
  156. */
  157. /*----------------------------------------------------------------------------*/
  158. VOID roamingFsmSendCmd(IN P_ADAPTER_T prAdapter, IN P_ROAMING_PARAM_T prParam)
  159. {
  160. P_ROAMING_INFO_T prRoamingFsmInfo;
  161. WLAN_STATUS rStatus;
  162. DBGLOG(ROAMING, LOUD, "->roamingFsmSendCmd(): Current Time = %u\n", kalGetTimeTick());
  163. prRoamingFsmInfo = (P_ROAMING_INFO_T) &(prAdapter->rWifiVar.rRoamingInfo);
  164. rStatus = wlanSendSetQueryCmd(prAdapter, /* prAdapter */
  165. CMD_ID_ROAMING_TRANSIT, /* ucCID */
  166. TRUE, /* fgSetQuery */
  167. FALSE, /* fgNeedResp */
  168. FALSE, /* fgIsOid */
  169. NULL, /* pfCmdDoneHandler */
  170. NULL, /* pfCmdTimeoutHandler */
  171. sizeof(ROAMING_PARAM_T), /* u4SetQueryInfoLen */
  172. (PUINT_8) prParam, /* pucInfoBuffer */
  173. NULL, /* pvSetQueryBuffer */
  174. 0 /* u4SetQueryBufferLen */
  175. );
  176. ASSERT(rStatus == WLAN_STATUS_PENDING);
  177. } /* end of roamingFsmSendCmd() */
  178. /*----------------------------------------------------------------------------*/
  179. /*!
  180. * @brief Update the recent time when ScanDone occurred
  181. *
  182. * @param [IN P_ADAPTER_T] prAdapter
  183. *
  184. * @return none
  185. */
  186. /*----------------------------------------------------------------------------*/
  187. VOID roamingFsmScanResultsUpdate(IN P_ADAPTER_T prAdapter)
  188. {
  189. P_ROAMING_INFO_T prRoamingFsmInfo;
  190. prRoamingFsmInfo = (P_ROAMING_INFO_T) &(prAdapter->rWifiVar.rRoamingInfo);
  191. /* Check Roaming Conditions */
  192. if (!(prRoamingFsmInfo->fgIsEnableRoaming))
  193. return;
  194. DBGLOG(ROAMING, LOUD, "->roamingFsmScanResultsUpdate(): Current Time = %u", kalGetTimeTick());
  195. GET_CURRENT_SYSTIME(&prRoamingFsmInfo->rRoamingDiscoveryUpdateTime);
  196. } /* end of roamingFsmScanResultsUpdate() */
  197. /*----------------------------------------------------------------------------*/
  198. /*!
  199. * @brief The Core FSM engine of ROAMING for AIS Infra.
  200. *
  201. * @param [IN P_ADAPTER_T] prAdapter
  202. * [IN ENUM_ROAMING_STATE_T] eNextState Enum value of next AIS STATE
  203. *
  204. * @return (none)
  205. */
  206. /*----------------------------------------------------------------------------*/
  207. VOID roamingFsmSteps(IN P_ADAPTER_T prAdapter, IN ENUM_ROAMING_STATE_T eNextState)
  208. {
  209. P_ROAMING_INFO_T prRoamingFsmInfo;
  210. ENUM_ROAMING_STATE_T ePreviousState;
  211. BOOLEAN fgIsTransition = (BOOLEAN) FALSE;
  212. prRoamingFsmInfo = (P_ROAMING_INFO_T) &(prAdapter->rWifiVar.rRoamingInfo);
  213. do {
  214. /* Do entering Next State */
  215. #if DBG
  216. DBGLOG(ROAMING, STATE, "TRANSITION: [%s] -> [%s]\n",
  217. apucDebugRoamingState[prRoamingFsmInfo->eCurrentState],
  218. apucDebugRoamingState[eNextState]);
  219. #else
  220. DBGLOG(ROAMING, STATE, "[%d] TRANSITION: [%d] -> [%d]\n",
  221. DBG_ROAMING_IDX, prRoamingFsmInfo->eCurrentState, eNextState);
  222. #endif
  223. /* NOTE(Kevin): This is the only place to change the eCurrentState(except initial) */
  224. ePreviousState = prRoamingFsmInfo->eCurrentState;
  225. prRoamingFsmInfo->eCurrentState = eNextState;
  226. fgIsTransition = (BOOLEAN) FALSE;
  227. /* Do tasks of the State that we just entered */
  228. switch (prRoamingFsmInfo->eCurrentState) {
  229. /* NOTE(Kevin): we don't have to rearrange the sequence of following
  230. * switch case. Instead I would like to use a common lookup table of array
  231. * of function pointer to speed up state search.
  232. */
  233. case ROAMING_STATE_IDLE:
  234. case ROAMING_STATE_DECISION:
  235. break;
  236. case ROAMING_STATE_DISCOVERY:
  237. {
  238. OS_SYSTIME rCurrentTime;
  239. GET_CURRENT_SYSTIME(&rCurrentTime);
  240. if (CHECK_FOR_TIMEOUT(rCurrentTime, prRoamingFsmInfo->rRoamingDiscoveryUpdateTime,
  241. SEC_TO_SYSTIME(ROAMING_DISCOVERY_TIMEOUT_SEC))) {
  242. DBGLOG(ROAMING, LOUD, "roamingFsmSteps: DiscoveryUpdateTime Timeout");
  243. aisFsmRunEventRoamingDiscovery(prAdapter, TRUE);
  244. } else {
  245. DBGLOG(ROAMING, LOUD, "roamingFsmSteps: DiscoveryUpdateTime Updated");
  246. #if CFG_SUPPORT_ROAMING_ENC
  247. if (prAdapter->fgIsRoamingEncEnabled == TRUE)
  248. aisFsmRunEventRoamingDiscovery(prAdapter, TRUE);
  249. else
  250. #endif /* CFG_SUPPORT_ROAMING_ENC */
  251. aisFsmRunEventRoamingDiscovery(prAdapter, FALSE);
  252. }
  253. }
  254. break;
  255. case ROAMING_STATE_ROAM:
  256. break;
  257. default:
  258. ASSERT(0); /* Make sure we have handle all STATEs */
  259. }
  260. } while (fgIsTransition);
  261. return;
  262. } /* end of roamingFsmSteps() */
  263. /*----------------------------------------------------------------------------*/
  264. /*!
  265. * @brief Transit to Decision state after join completion
  266. *
  267. * @param [IN P_ADAPTER_T] prAdapter
  268. *
  269. * @return none
  270. */
  271. /*----------------------------------------------------------------------------*/
  272. VOID roamingFsmRunEventStart(IN P_ADAPTER_T prAdapter)
  273. {
  274. P_ROAMING_INFO_T prRoamingFsmInfo;
  275. ENUM_ROAMING_STATE_T eNextState;
  276. P_BSS_INFO_T prAisBssInfo;
  277. ROAMING_PARAM_T rParam;
  278. prRoamingFsmInfo = (P_ROAMING_INFO_T) &(prAdapter->rWifiVar.rRoamingInfo);
  279. /* Check Roaming Conditions */
  280. if (!(prRoamingFsmInfo->fgIsEnableRoaming))
  281. return;
  282. prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]);
  283. if (prAisBssInfo->eCurrentOPMode != OP_MODE_INFRASTRUCTURE)
  284. return;
  285. DBGLOG(ROAMING, EVENT, "EVENT-ROAMING START: Current Time = %u\n", kalGetTimeTick());
  286. /* IDLE, ROAM -> DECISION */
  287. /* Errors as DECISION, DISCOVERY -> DECISION */
  288. if (!(prRoamingFsmInfo->eCurrentState == ROAMING_STATE_IDLE ||
  289. prRoamingFsmInfo->eCurrentState == ROAMING_STATE_ROAM))
  290. return;
  291. eNextState = ROAMING_STATE_DECISION;
  292. if (eNextState != prRoamingFsmInfo->eCurrentState) {
  293. rParam.u2Event = ROAMING_EVENT_START;
  294. roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) & rParam);
  295. /* Step to next state */
  296. roamingFsmSteps(prAdapter, eNextState);
  297. }
  298. } /* end of roamingFsmRunEventStart() */
  299. /*----------------------------------------------------------------------------*/
  300. /*!
  301. * @brief Transit to Discovery state when deciding to find a candidate
  302. *
  303. * @param [IN P_ADAPTER_T] prAdapter
  304. *
  305. * @return none
  306. */
  307. /*----------------------------------------------------------------------------*/
  308. VOID roamingFsmRunEventDiscovery(IN P_ADAPTER_T prAdapter, IN P_ROAMING_PARAM_T prParam)
  309. {
  310. P_ROAMING_INFO_T prRoamingFsmInfo;
  311. ENUM_ROAMING_STATE_T eNextState;
  312. prRoamingFsmInfo = (P_ROAMING_INFO_T) &(prAdapter->rWifiVar.rRoamingInfo);
  313. /* Check Roaming Conditions */
  314. if (!(prRoamingFsmInfo->fgIsEnableRoaming))
  315. return;
  316. DBGLOG(ROAMING, EVENT, "EVENT-ROAMING DISCOVERY: Current Time = %u Reason = %u\n",
  317. kalGetTimeTick(), prParam->u2Reason);
  318. /* DECISION -> DISCOVERY */
  319. /* Errors as IDLE, DISCOVERY, ROAM -> DISCOVERY */
  320. if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_DECISION)
  321. return;
  322. #if CFG_SUPPORT_ROAMING_ENC
  323. prRoamingFsmInfo->RoamingEntryTimeoutSkipCount = 0;
  324. #endif
  325. eNextState = ROAMING_STATE_DISCOVERY;
  326. /* DECISION -> DISCOVERY */
  327. if (eNextState != prRoamingFsmInfo->eCurrentState) {
  328. P_BSS_INFO_T prAisBssInfo;
  329. P_BSS_DESC_T prBssDesc;
  330. /* sync. rcpi with firmware */
  331. prAisBssInfo = &(prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX]);
  332. prBssDesc = scanSearchBssDescByBssid(prAdapter, prAisBssInfo->aucBSSID);
  333. if (prBssDesc)
  334. prBssDesc->ucRCPI = (UINT_8) (prParam->u2Data & 0xff);
  335. roamingFsmSteps(prAdapter, eNextState);
  336. }
  337. } /* end of roamingFsmRunEventDiscovery() */
  338. /*----------------------------------------------------------------------------*/
  339. /*!
  340. * @brief Transit to Roam state after Scan Done
  341. *
  342. * @param [IN P_ADAPTER_T] prAdapter
  343. *
  344. * @return none
  345. */
  346. /*----------------------------------------------------------------------------*/
  347. VOID roamingFsmRunEventRoam(IN P_ADAPTER_T prAdapter)
  348. {
  349. P_ROAMING_INFO_T prRoamingFsmInfo;
  350. ENUM_ROAMING_STATE_T eNextState;
  351. ROAMING_PARAM_T rParam;
  352. prRoamingFsmInfo = (P_ROAMING_INFO_T) &(prAdapter->rWifiVar.rRoamingInfo);
  353. /* Check Roaming Conditions */
  354. if (!(prRoamingFsmInfo->fgIsEnableRoaming))
  355. return;
  356. DBGLOG(ROAMING, EVENT, "EVENT-ROAMING ROAM: Current Time = %u\n", kalGetTimeTick());
  357. /* IDLE, ROAM -> DECISION */
  358. /* Errors as IDLE, DECISION, ROAM -> ROAM */
  359. if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_DISCOVERY)
  360. return;
  361. eNextState = ROAMING_STATE_ROAM;
  362. /* DISCOVERY -> ROAM */
  363. if (eNextState != prRoamingFsmInfo->eCurrentState) {
  364. rParam.u2Event = ROAMING_EVENT_ROAM;
  365. roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) & rParam);
  366. /* Step to next state */
  367. roamingFsmSteps(prAdapter, eNextState);
  368. }
  369. } /* end of roamingFsmRunEventRoam() */
  370. /*----------------------------------------------------------------------------*/
  371. /*!
  372. * @brief Transit to Decision state as being failed to find out any candidate
  373. *
  374. * @param [IN P_ADAPTER_T] prAdapter
  375. *
  376. * @return none
  377. */
  378. /*----------------------------------------------------------------------------*/
  379. VOID roamingFsmRunEventFail(IN P_ADAPTER_T prAdapter, IN UINT_32 u4Param)
  380. {
  381. P_ROAMING_INFO_T prRoamingFsmInfo;
  382. ENUM_ROAMING_STATE_T eNextState;
  383. ROAMING_PARAM_T rParam;
  384. prRoamingFsmInfo = (P_ROAMING_INFO_T) &(prAdapter->rWifiVar.rRoamingInfo);
  385. /* Check Roaming Conditions */
  386. if (!(prRoamingFsmInfo->fgIsEnableRoaming))
  387. return;
  388. DBGLOG(ROAMING, EVENT, "EVENT-ROAMING FAIL: reason %x Current Time = %u\n", u4Param, kalGetTimeTick());
  389. /* IDLE, ROAM -> DECISION */
  390. /* Errors as IDLE, DECISION, DISCOVERY -> DECISION */
  391. if (prRoamingFsmInfo->eCurrentState != ROAMING_STATE_ROAM)
  392. return;
  393. eNextState = ROAMING_STATE_DECISION;
  394. /* ROAM -> DECISION */
  395. if (eNextState != prRoamingFsmInfo->eCurrentState) {
  396. rParam.u2Event = ROAMING_EVENT_FAIL;
  397. rParam.u2Data = (UINT_16) (u4Param & 0xffff);
  398. roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) & rParam);
  399. /* Step to next state */
  400. roamingFsmSteps(prAdapter, eNextState);
  401. }
  402. } /* end of roamingFsmRunEventFail() */
  403. /*----------------------------------------------------------------------------*/
  404. /*!
  405. * @brief Transit to Idle state as beging aborted by other moduels, AIS
  406. *
  407. * @param [IN P_ADAPTER_T] prAdapter
  408. *
  409. * @return none
  410. */
  411. /*----------------------------------------------------------------------------*/
  412. VOID roamingFsmRunEventAbort(IN P_ADAPTER_T prAdapter)
  413. {
  414. P_ROAMING_INFO_T prRoamingFsmInfo;
  415. ENUM_ROAMING_STATE_T eNextState;
  416. ROAMING_PARAM_T rParam;
  417. prRoamingFsmInfo = (P_ROAMING_INFO_T) &(prAdapter->rWifiVar.rRoamingInfo);
  418. if (!(prRoamingFsmInfo->fgIsEnableRoaming))
  419. return;
  420. DBGLOG(ROAMING, EVENT, "EVENT-ROAMING ABORT: Current Time = %u\n", kalGetTimeTick());
  421. eNextState = ROAMING_STATE_IDLE;
  422. /* IDLE, DECISION, DISCOVERY, ROAM -> IDLE */
  423. if (eNextState != prRoamingFsmInfo->eCurrentState) {
  424. rParam.u2Event = ROAMING_EVENT_ABORT;
  425. roamingFsmSendCmd(prAdapter, (P_ROAMING_PARAM_T) & rParam);
  426. /* Step to next state */
  427. roamingFsmSteps(prAdapter, eNextState);
  428. }
  429. } /* end of roamingFsmRunEventAbort() */
  430. /*----------------------------------------------------------------------------*/
  431. /*!
  432. * @brief Process events from firmware
  433. *
  434. * @param [IN P_ADAPTER_T] prAdapter
  435. * [IN P_ROAMING_PARAM_T] prParam
  436. *
  437. * @return none
  438. */
  439. /*----------------------------------------------------------------------------*/
  440. WLAN_STATUS roamingFsmProcessEvent(IN P_ADAPTER_T prAdapter, IN P_ROAMING_PARAM_T prParam)
  441. {
  442. DBGLOG(ROAMING, LOUD, "ROAMING Process Events: Current Time = %u\n", kalGetTimeTick());
  443. if (ROAMING_EVENT_DISCOVERY == prParam->u2Event)
  444. roamingFsmRunEventDiscovery(prAdapter, prParam);
  445. return WLAN_STATUS_SUCCESS;
  446. }
  447. #endif