2 ** $Id: //Department/DaVinci/BRANCHES/MT662X_593X_WIFI_DRIVER_V2_3/mgmt/cnm.c#1 $
6 \brief Module of Concurrent Network Management
8 Module of Concurrent Network Management
11 /*******************************************************************************
12 * Copyright (c) 2010 MediaTek Inc.
14 * All rights reserved. Copying, compilation, modification, distribution
15 * or any other use whatsoever of this material is strictly prohibited
16 * except in accordance with a Software License Agreement with
18 ********************************************************************************
21 /*******************************************************************************
24 * BY OPENING THIS FILE, BUYER HEREBY UNEQUIVOCALLY ACKNOWLEDGES AND
25 * AGREES THAT THE SOFTWARE/FIRMWARE AND ITS DOCUMENTATIONS ("MEDIATEK
26 * SOFTWARE") RECEIVED FROM MEDIATEK AND/OR ITS REPRESENTATIVES ARE
27 * PROVIDED TO BUYER ON AN "AS-IS" BASIS ONLY. MEDIATEK EXPRESSLY
28 * DISCLAIMS ANY AND ALL WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
29 * LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
30 * PARTICULAR PURPOSE OR NONINFRINGEMENT. NEITHER DOES MEDIATEK PROVIDE
31 * ANY WARRANTY WHATSOEVER WITH RESPECT TO THE SOFTWARE OF ANY THIRD PARTY
32 * WHICH MAY BE USED BY, INCORPORATED IN, OR SUPPLIED WITH THE MEDIATEK
33 * SOFTWARE, AND BUYER AGREES TO LOOK ONLY TO SUCH THIRD PARTY FOR ANY
34 * WARRANTY CLAIM RELATING THERETO. MEDIATEK SHALL ALSO NOT BE RESPONSIBLE
35 * FOR ANY MEDIATEK SOFTWARE RELEASES MADE TO BUYER'S SPECIFICATION OR TO
36 * CONFORM TO A PARTICULAR STANDARD OR OPEN FORUM.
38 * BUYER'S SOLE AND EXCLUSIVE REMEDY AND MEDIATEK'S ENTIRE AND CUMULATIVE
39 * LIABILITY WITH RESPECT TO THE MEDIATEK SOFTWARE RELEASED HEREUNDER WILL
40 * BE, AT MEDIATEK'S OPTION, TO REVISE OR REPLACE THE MEDIATEK SOFTWARE AT
41 * ISSUE, OR REFUND ANY SOFTWARE LICENSE FEES OR SERVICE CHARGE PAID BY
42 * BUYER TO MEDIATEK FOR SUCH MEDIATEK SOFTWARE AT ISSUE.
44 * THE TRANSACTION CONTEMPLATED HEREUNDER SHALL BE CONSTRUED IN ACCORDANCE
45 * WITH THE LAWS OF THE STATE OF CALIFORNIA, USA, EXCLUDING ITS CONFLICT
46 * OF LAWS PRINCIPLES. ANY DISPUTES, CONTROVERSIES OR CLAIMS ARISING
47 * THEREOF AND RELATED THERETO SHALL BE SETTLED BY ARBITRATION IN SAN
48 * FRANCISCO, CA, UNDER THE RULES OF THE INTERNATIONAL CHAMBER OF COMMERCE
50 ********************************************************************************
56 * 07 17 2012 yuche.tsai
58 * Compile no error before trial run.
62 * Fix possible wrong message when P2P is unregistered
64 * 11 14 2011 yuche.tsai
65 * [WCXRP00001107] [Volunteer Patch][Driver] Large Network Type index assert in FW issue.
66 * Fix large network type index assert in FW issue.
70 * Modify debug message for XLOG
74 * Add RLM and CNM debug message for XLOG
77 * [WCXRP00001077] [All Wi-Fi][Driver] Fix wrong preferred channel for AP and BOW
78 * Only check AIS channel for P2P and BOW
81 * [WCXRP00001058] [All Wi-Fi][Driver] Fix sta_rec's phyTypeSet and OBSS scan in AP mode
82 * Extension channel of some 5G AP will not follow regulation requirement
85 * [WCXRP00001020] [MT6620 Wi-Fi][Driver] Handle secondary channel offset of AP in 5GHz band
89 * [WCXRP00000937] [MT6620 Wi-Fi][Driver][FW] cnm.c line #848 assert when doing monkey test
90 * Print message only in Linux platform for monkey testing
93 * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module
94 * change parameter name from PeerAddr to BSSID
97 * [WCXRP00000798] [MT6620 Wi-Fi][Firmware] Follow-ups for WAPI frequency offset workaround in firmware SCN module
98 * 1. specify target's BSSID when requesting channel privilege.
99 * 2. pass BSSID information to firmware domain
101 * 06 01 2011 cm.chang
102 * [WCXRP00000756] [MT6620 Wi-Fi][Driver] 1. AIS follow channel of BOW 2. Provide legal channel function
103 * Limit AIS to fixed channel same with BOW
105 * 04 12 2011 cm.chang
106 * [WCXRP00000634] [MT6620 Wi-Fi][Driver][FW] 2nd BSS will not support 40MHz bandwidth for concurrency
109 * 03 10 2011 cm.chang
110 * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module
111 * Check if P2P network index is Tethering AP
113 * 03 10 2011 cm.chang
114 * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module
115 * Add some functions to let AIS/Tethering or AIS/BOW be the same channel
117 * 02 17 2011 cm.chang
118 * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module
119 * When P2P registried, invoke BOW deactivate function
121 * 01 12 2011 cm.chang
122 * [WCXRP00000358] [MT6620 Wi-Fi][Driver] Provide concurrent information for each module
123 * Provide function to decide if BSS can be activated or not
125 * 12 07 2010 cm.chang
126 * [WCXRP00000239] MT6620 Wi-Fi][Driver][FW] Merge concurrent branch back to maintrunk
127 * 1. BSSINFO include RLM parameter
128 * 2. free all sta records when network is disconnected
130 * 12 07 2010 cm.chang
131 * [WCXRP00000238] MT6620 Wi-Fi][Driver][FW] Support regulation domain setting from NVRAM and supplicant
132 * 1. Country code is from NVRAM or supplicant
133 * 2. Change band definition in CMD/EVENT.
135 * 11 08 2010 cm.chang
136 * [WCXRP00000169] [MT6620 Wi-Fi][Driver][FW] Remove unused CNM recover message ID
137 * Remove CNM channel reover message ID
139 * 10 13 2010 cm.chang
140 * [WCXRP00000094] [MT6620 Wi-Fi][Driver] Connect to 2.4GHz AP, Driver crash.
141 * Add exception handle when cmd buffer is not available
143 * 08 24 2010 cm.chang
145 * Support RLM initail channel of Ad-hoc, P2P and BOW
149 * update for security supporting.
151 * 07 19 2010 cm.chang
153 * Set RLM parameters and enable CNM channel manager
157 * [WPD00003833] [MT6620 and MT5931] Driver migration - move to new repository.
159 * 07 08 2010 cm.chang
160 * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
161 * Rename MID_MNY_CNM_CH_RELEASE to MID_MNY_CNM_CH_ABORT
163 * 07 01 2010 cm.chang
164 * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
165 * Fix wrong message ID for channel grant to requester
167 * 07 01 2010 cm.chang
168 * [WPD00003841][LITE Driver] Migrate RLM/CNM to host driver
169 * Modify CNM message handler for new flow
171 * 06 07 2010 cm.chang
172 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
173 * Set 20/40M bandwidth of AP HT OP before association process
175 * 05 31 2010 yarco.yang
176 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
177 * Add RX TSF Log Feature and ADDBA Rsp with DECLINE handling
179 * 05 21 2010 yarco.yang
180 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
181 * Support TCP/UDP/IP Checksum offload feature
183 * 05 12 2010 kevin.huang
184 * [BORA00000794][WIFISYS][New Feature]Power Management Support
185 * Add Power Management - Legacy PS-POLL support.
187 * 05 05 2010 cm.chang
188 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
189 * Add a new function to send abort message
191 * 04 27 2010 cm.chang
192 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
193 * BMC mac address shall be ignored in basic config command
195 * 04 24 2010 cm.chang
196 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
197 * g_aprBssInfo[] depends on CFG_SUPPORT_P2P and CFG_SUPPORT_BOW
199 * 04 22 2010 cm.chang
200 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
201 * Support change of MAC address by host command
204 * [BORA00000680][MT6620] Support the statistic for Microsoft os query
205 * adding the wpa-none for ibss beacon.
207 * 04 07 2010 cm.chang
208 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
209 * Fix bug for OBSS scan
211 * 03 30 2010 cm.chang
212 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
213 * Support 2.4G OBSS scan
215 * 03 16 2010 kevin.huang
216 * [BORA00000663][WIFISYS][New Feature] AdHoc Mode Support
219 * 03 10 2010 kevin.huang
220 * [BORA00000654][WIFISYS][New Feature] CNM Module - Ch Manager Support
222 * * * * * * * * * * Add Channel Manager for arbitration of JOIN and SCAN Req
225 * [BORA00000605][WIFISYS] Phase3 Integration
226 * use the Rx0 dor event indicate.
228 * 02 08 2010 cm.chang
229 * [BORA00000018]Integrate WIFI part into BORA for the 1st time
230 * Support partial part about cmd basic configuration
232 * Dec 10 2009 mtk01104
233 * [BORA00000018] Integrate WIFI part into BORA for the 1st time
234 * Remove conditional compiling FPGA_V5
236 * Nov 18 2009 mtk01104
237 * [BORA00000018] Integrate WIFI part into BORA for the 1st time
238 * Add function cnmFsmEventInit()
240 * Nov 2 2009 mtk01104
241 * [BORA00000018] Integrate WIFI part into BORA for the 1st time
246 /*******************************************************************************
247 * C O M P I L E R F L A G S
248 ********************************************************************************
251 /*******************************************************************************
252 * E X T E R N A L R E F E R E N C E S
253 ********************************************************************************
257 /*******************************************************************************
259 ********************************************************************************
262 /*******************************************************************************
264 ********************************************************************************
267 /*******************************************************************************
268 * P U B L I C D A T A
269 ********************************************************************************
272 /*******************************************************************************
273 * P R I V A T E D A T A
274 ********************************************************************************
277 /*******************************************************************************
279 ********************************************************************************
282 /*******************************************************************************
283 * F U N C T I O N D E C L A R A T I O N S
284 ********************************************************************************
287 /*******************************************************************************
289 ********************************************************************************
292 /*----------------------------------------------------------------------------*/
294 * @brief This function is used to initialize variables in CNM_INFO_T.
300 /*----------------------------------------------------------------------------*/
303 P_ADAPTER_T prAdapter
307 } /* end of cnmInit() */
309 /*----------------------------------------------------------------------------*/
311 * @brief This function is used to initialize variables in CNM_INFO_T.
317 /*----------------------------------------------------------------------------*/
320 P_ADAPTER_T prAdapter
324 } /* end of cnmUninit() */
326 /*----------------------------------------------------------------------------*/
328 * @brief Before handle the message from other module, it need to obtain
329 * the Channel privilege from Channel Manager
331 * @param[in] prMsgHdr The message need to be handled.
335 /*----------------------------------------------------------------------------*/
337 cnmChMngrRequestPrivilege (
338 P_ADAPTER_T prAdapter,
342 P_MSG_CH_REQ_T prMsgChReq;
343 P_CMD_CH_PRIVILEGE_T prCmdBody;
349 prMsgChReq = (P_MSG_CH_REQ_T) prMsgHdr;
351 prCmdBody = (P_CMD_CH_PRIVILEGE_T)
352 cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_CH_PRIVILEGE_T));
355 /* To do: exception handle */
357 DBGLOG(CNM, ERROR, ("ChReq: fail to get buf (net=%d, token=%d)\n",
358 prMsgChReq->ucNetTypeIndex, prMsgChReq->ucTokenID));
360 cnmMemFree(prAdapter, prMsgHdr);
363 #if 0 // p2p have timing issue, we must ensrure print less log
364 DBGLOG(CNM, INFO, ("ChReq net=%d token=%d b=%d c=%d s=%d\n",
365 prMsgChReq->ucNetTypeIndex, prMsgChReq->ucTokenID,
366 prMsgChReq->eRfBand, prMsgChReq->ucPrimaryChannel,
367 prMsgChReq->eRfSco));
369 prCmdBody->ucNetTypeIndex = prMsgChReq->ucNetTypeIndex;
370 prCmdBody->ucTokenID = prMsgChReq->ucTokenID;
371 prCmdBody->ucAction = CMD_CH_ACTION_REQ; /* Request */
372 prCmdBody->ucPrimaryChannel = prMsgChReq->ucPrimaryChannel;
373 prCmdBody->ucRfSco = (UINT_8) prMsgChReq->eRfSco;
374 prCmdBody->ucRfBand = (UINT_8) prMsgChReq->eRfBand;
375 prCmdBody->ucReqType = (UINT_8) prMsgChReq->eReqType;
376 prCmdBody->ucReserved = 0;
377 prCmdBody->u4MaxInterval= prMsgChReq->u4MaxInterval;
378 COPY_MAC_ADDR(prCmdBody->aucBSSID, prMsgChReq->aucBSSID);
380 ASSERT(prCmdBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM);
382 /* For monkey testing 20110901 */
383 if (prCmdBody->ucNetTypeIndex >= NETWORK_TYPE_INDEX_NUM) {
384 DBGLOG(CNM, ERROR, ("CNM: ChReq with wrong netIdx=%d\n\n",
385 prCmdBody->ucNetTypeIndex));
388 rStatus = wlanSendSetQueryCmd (
389 prAdapter, /* prAdapter */
390 CMD_ID_CH_PRIVILEGE, /* ucCID */
391 TRUE, /* fgSetQuery */
392 FALSE, /* fgNeedResp */
394 NULL, /* pfCmdDoneHandler */
395 NULL, /* pfCmdTimeoutHandler */
396 sizeof(CMD_CH_PRIVILEGE_T), /* u4SetQueryInfoLen */
397 (PUINT_8) prCmdBody, /* pucInfoBuffer */
398 NULL, /* pvSetQueryBuffer */
399 0 /* u4SetQueryBufferLen */
402 ASSERT(rStatus == WLAN_STATUS_PENDING);
404 cnmMemFree(prAdapter, prCmdBody);
405 cnmMemFree(prAdapter, prMsgHdr);
408 } /* end of cnmChMngrRequestPrivilege() */
410 /*----------------------------------------------------------------------------*/
412 * @brief Before deliver the message to other module, it need to release
413 * the Channel privilege to Channel Manager.
415 * @param[in] prMsgHdr The message need to be delivered
419 /*----------------------------------------------------------------------------*/
421 cnmChMngrAbortPrivilege (
422 P_ADAPTER_T prAdapter,
426 P_MSG_CH_ABORT_T prMsgChAbort;
427 P_CMD_CH_PRIVILEGE_T prCmdBody;
433 prMsgChAbort = (P_MSG_CH_ABORT_T) prMsgHdr;
435 prCmdBody = (P_CMD_CH_PRIVILEGE_T)
436 cnmMemAlloc(prAdapter, RAM_TYPE_BUF, sizeof(CMD_CH_PRIVILEGE_T));
439 /* To do: exception handle */
441 DBGLOG(CNM, ERROR, ("ChAbort: fail to get buf (net=%d, token=%d)\n",
442 prMsgChAbort->ucNetTypeIndex, prMsgChAbort->ucTokenID));
444 cnmMemFree(prAdapter, prMsgHdr);
448 DBGLOG(CNM, INFO, ("ChAbort net=%d token=%d\n",
449 prMsgChAbort->ucNetTypeIndex, prMsgChAbort->ucTokenID));
451 prCmdBody->ucNetTypeIndex = prMsgChAbort->ucNetTypeIndex;
452 prCmdBody->ucTokenID = prMsgChAbort->ucTokenID;
453 prCmdBody->ucAction = CMD_CH_ACTION_ABORT; /* Abort */
455 ASSERT(prCmdBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM);
457 /* For monkey testing 20110901 */
458 if (prCmdBody->ucNetTypeIndex >= NETWORK_TYPE_INDEX_NUM) {
459 DBGLOG(CNM, ERROR, ("CNM: ChAbort with wrong netIdx=%d\n\n",
460 prCmdBody->ucNetTypeIndex));
463 rStatus = wlanSendSetQueryCmd (
464 prAdapter, /* prAdapter */
465 CMD_ID_CH_PRIVILEGE, /* ucCID */
466 TRUE, /* fgSetQuery */
467 FALSE, /* fgNeedResp */
469 NULL, /* pfCmdDoneHandler */
470 NULL, /* pfCmdTimeoutHandler */
471 sizeof(CMD_CH_PRIVILEGE_T), /* u4SetQueryInfoLen */
472 (PUINT_8) prCmdBody, /* pucInfoBuffer */
473 NULL, /* pvSetQueryBuffer */
474 0 /* u4SetQueryBufferLen */
477 ASSERT(rStatus == WLAN_STATUS_PENDING);
479 cnmMemFree(prAdapter, prCmdBody);
480 cnmMemFree(prAdapter, prMsgHdr);
483 } /* end of cnmChMngrAbortPrivilege() */
485 /*----------------------------------------------------------------------------*/
493 /*----------------------------------------------------------------------------*/
495 cnmChMngrHandleChEvent (
496 P_ADAPTER_T prAdapter,
497 P_WIFI_EVENT_T prEvent
500 P_EVENT_CH_PRIVILEGE_T prEventBody;
501 P_MSG_CH_GRANT_T prChResp;
506 prEventBody = (P_EVENT_CH_PRIVILEGE_T) (prEvent->aucBuffer);
507 prChResp = (P_MSG_CH_GRANT_T)
508 cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_GRANT_T));
511 /* To do: exception handle */
513 DBGLOG(CNM, ERROR, ("ChGrant: fail to get buf (net=%d, token=%d)\n",
514 prEventBody->ucNetTypeIndex, prEventBody->ucTokenID));
518 DBGLOG(CNM, INFO, ("ChGrant net=%d token=%d ch=%d sco=%d\n",
519 prEventBody->ucNetTypeIndex, prEventBody->ucTokenID,
520 prEventBody->ucPrimaryChannel, prEventBody->ucRfSco));
521 ASSERT(prEventBody->ucNetTypeIndex < NETWORK_TYPE_INDEX_NUM);
522 ASSERT(prEventBody->ucStatus == EVENT_CH_STATUS_GRANT);
524 /* Decide message ID based on network and response status */
525 if (prEventBody->ucNetTypeIndex == NETWORK_TYPE_AIS_INDEX) {
526 prChResp->rMsgHdr.eMsgId = MID_CNM_AIS_CH_GRANT;
528 #if CFG_ENABLE_WIFI_DIRECT
529 else if ((prAdapter->fgIsP2PRegistered) &&
530 (prEventBody->ucNetTypeIndex == NETWORK_TYPE_P2P_INDEX)) {
531 prChResp->rMsgHdr.eMsgId = MID_CNM_P2P_CH_GRANT;
534 #if CFG_ENABLE_BT_OVER_WIFI
535 else if (prEventBody->ucNetTypeIndex == NETWORK_TYPE_BOW_INDEX) {
536 prChResp->rMsgHdr.eMsgId = MID_CNM_BOW_CH_GRANT;
540 cnmMemFree(prAdapter, prChResp);
544 prChResp->ucNetTypeIndex = prEventBody->ucNetTypeIndex;
545 prChResp->ucTokenID = prEventBody->ucTokenID;
546 prChResp->ucPrimaryChannel = prEventBody->ucPrimaryChannel;
547 prChResp->eRfSco = (ENUM_CHNL_EXT_T) prEventBody->ucRfSco;
548 prChResp->eRfBand = (ENUM_BAND_T) prEventBody->ucRfBand;
549 prChResp->eReqType = (ENUM_CH_REQ_TYPE_T) prEventBody->ucReqType;
550 prChResp->u4GrantInterval = prEventBody->u4GrantInterval;
552 mboxSendMsg(prAdapter,
554 (P_MSG_HDR_T) prChResp,
555 MSG_SEND_METHOD_BUF);
558 /*----------------------------------------------------------------------------*/
560 * @brief This function is invoked for P2P or BOW networks
564 * @return TRUE: suggest to adopt the returned preferred channel
565 * FALSE: No suggestion. Caller should adopt its preference
567 /*----------------------------------------------------------------------------*/
569 cnmPreferredChannel (
570 P_ADAPTER_T prAdapter,
571 P_ENUM_BAND_T prBand,
572 PUINT_8 pucPrimaryChannel,
573 P_ENUM_CHNL_EXT_T prBssSCO
576 P_BSS_INFO_T prBssInfo;
580 ASSERT(pucPrimaryChannel);
583 prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX];
585 if (RLM_NET_PARAM_VALID(prBssInfo)) {
586 *prBand = prBssInfo->eBand;
587 *pucPrimaryChannel = prBssInfo->ucPrimaryChannel;
588 *prBssSCO = prBssInfo->eBssSCO;
596 /*----------------------------------------------------------------------------*/
602 * @return TRUE: available channel is limited to return value
605 /*----------------------------------------------------------------------------*/
607 cnmAisInfraChannelFixed (
608 P_ADAPTER_T prAdapter,
609 P_ENUM_BAND_T prBand,
610 PUINT_8 pucPrimaryChannel
613 #if CFG_ENABLE_WIFI_DIRECT ||(CFG_ENABLE_BT_OVER_WIFI && CFG_BOW_LIMIT_AIS_CHNL)
614 P_BSS_INFO_T prBssInfo;
617 #if CFG_ENABLE_WIFI_DIRECT
618 if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX) &&
619 p2pFuncIsAPMode(prAdapter->rWifiVar.prP2pFsmInfo)) {
621 ASSERT(prAdapter->fgIsP2PRegistered);
623 prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_P2P_INDEX];
625 *prBand = prBssInfo->eBand;
626 *pucPrimaryChannel = prBssInfo->ucPrimaryChannel;
632 #if CFG_ENABLE_BT_OVER_WIFI && CFG_BOW_LIMIT_AIS_CHNL
633 if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) {
635 prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX];
637 *prBand = prBssInfo->eBand;
638 *pucPrimaryChannel = prBssInfo->ucPrimaryChannel;
647 /*----------------------------------------------------------------------------*/
655 /*----------------------------------------------------------------------------*/
657 cnmAisInfraConnectNotify (
658 P_ADAPTER_T prAdapter
661 #if CFG_ENABLE_BT_OVER_WIFI
662 P_BSS_INFO_T prAisBssInfo, prBowBssInfo;
664 prAisBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX];
665 prBowBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_BOW_INDEX];
667 if (RLM_NET_PARAM_VALID(prAisBssInfo) && RLM_NET_PARAM_VALID(prBowBssInfo)){
668 if (prAisBssInfo->eBand != prBowBssInfo->eBand ||
669 prAisBssInfo->ucPrimaryChannel != prBowBssInfo->ucPrimaryChannel) {
671 /* Notify BOW to do deactivation */
672 bowNotifyAllLinkDisconnected(prAdapter);
678 /*----------------------------------------------------------------------------*/
684 * @return TRUE: permitted
685 * FALSE: Not permitted
687 /*----------------------------------------------------------------------------*/
689 cnmAisIbssIsPermitted (
690 P_ADAPTER_T prAdapter
693 #if CFG_ENABLE_WIFI_DIRECT
694 if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) {
699 #if CFG_ENABLE_BT_OVER_WIFI
700 if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) {
708 /*----------------------------------------------------------------------------*/
714 * @return TRUE: permitted
715 * FALSE: Not permitted
717 /*----------------------------------------------------------------------------*/
720 P_ADAPTER_T prAdapter
723 P_BSS_INFO_T prBssInfo;
725 prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX];
727 if (IS_BSS_ACTIVE(prBssInfo) &&
728 prBssInfo->eCurrentOPMode == OP_MODE_IBSS) {
732 #if CFG_ENABLE_BT_OVER_WIFI
733 if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_BOW_INDEX)) {
734 /* Notify BOW to do deactivation */
735 bowNotifyAllLinkDisconnected(prAdapter);
742 /*----------------------------------------------------------------------------*/
748 * @return TRUE: permitted
749 * FALSE: Not permitted
751 /*----------------------------------------------------------------------------*/
754 P_ADAPTER_T prAdapter
757 P_BSS_INFO_T prBssInfo;
759 prBssInfo = &prAdapter->rWifiVar.arBssInfo[NETWORK_TYPE_AIS_INDEX];
761 if (IS_BSS_ACTIVE(prBssInfo) &&
762 prBssInfo->eCurrentOPMode == OP_MODE_IBSS) {
766 #if CFG_ENABLE_WIFI_DIRECT
767 if (IS_NET_ACTIVE(prAdapter, NETWORK_TYPE_P2P_INDEX)) {
775 /*----------------------------------------------------------------------------*/
781 * @return TRUE: permitted
782 * FALSE: Not permitted
784 /*----------------------------------------------------------------------------*/
786 cnmBss40mBwPermitted (
787 P_ADAPTER_T prAdapter,
788 ENUM_NETWORK_TYPE_INDEX_T eNetTypeIdx
791 P_BSS_INFO_T prBssInfo;
794 /* Note: To support real-time decision instead of current activated-time,
795 * the STA roaming case shall be considered about synchronization
796 * problem. Another variable fgAssoc40mBwAllowed is added to
797 * represent HT capability when association
799 for (i = 0; i < NETWORK_TYPE_INDEX_NUM; i++) {
800 if (i != (UINT_8) eNetTypeIdx) {
801 prBssInfo = &prAdapter->rWifiVar.arBssInfo[i];
803 if (IS_BSS_ACTIVE(prBssInfo) && (prBssInfo->fg40mBwAllowed ||
804 prBssInfo->fgAssoc40mBwAllowed)) {