Exemplo n.º 1
0
/*----------------------------------------------------------------------------*/
BOOLEAN
cnmP2PIsPermitted (
    P_ADAPTER_T     prAdapter
    )
{
    P_BSS_INFO_T    prBssInfo;
    UINT_8          i;
    BOOLEAN         fgBowIsActive;

    ASSERT(prAdapter);

    fgBowIsActive= FALSE;

    for (i = 0; i < BSS_INFO_NUM; i++) {
        prBssInfo = prAdapter->aprBssInfo[i];

        if (prBssInfo && IS_BSS_ACTIVE(prBssInfo)) {
            if (prBssInfo->eCurrentOPMode == OP_MODE_IBSS) {
                return FALSE;
            }
            else if (IS_BSS_BOW(prBssInfo)) {
                fgBowIsActive = TRUE;
            }
        }
    }

#if CFG_ENABLE_BT_OVER_WIFI
    if (fgBowIsActive) {
        /* Notify BOW to do deactivation */
        bowNotifyAllLinkDisconnected(prAdapter);
    }
#endif

    return TRUE;
}
Exemplo n.º 2
0
/*----------------------------------------------------------------------------*/
VOID cnmAisInfraConnectNotify(P_ADAPTER_T prAdapter)
{
#if CFG_ENABLE_BT_OVER_WIFI
	P_BSS_INFO_T prBssInfo, prAisBssInfo, prBowBssInfo;
	UINT_8 i;

	ASSERT(prAdapter);

	prAisBssInfo = NULL;
	prBowBssInfo = NULL;

	for (i = 0; i < BSS_INFO_NUM; i++) {
		prBssInfo = prAdapter->aprBssInfo[i];

		if (prBssInfo && IS_BSS_ACTIVE(prBssInfo)) {
			if (IS_BSS_AIS(prBssInfo)) {
				prAisBssInfo = prBssInfo;
			} else if (IS_BSS_BOW(prBssInfo)) {
				prBowBssInfo = prBssInfo;
			}
		}
	}

	if (prAisBssInfo && prBowBssInfo && RLM_NET_PARAM_VALID(prAisBssInfo) &&
	    RLM_NET_PARAM_VALID(prBowBssInfo)) {
		if (prAisBssInfo->eBand != prBowBssInfo->eBand ||
		    prAisBssInfo->ucPrimaryChannel != prBowBssInfo->ucPrimaryChannel) {

			/* Notify BOW to do deactivation */
			bowNotifyAllLinkDisconnected(prAdapter);
		}
	}
#endif
}
Exemplo n.º 3
0
/*----------------------------------------------------------------------------*/
VOID
cnmChMngrHandleChEvent (
    P_ADAPTER_T     prAdapter,
    P_WIFI_EVENT_T  prEvent
    )
{
    P_EVENT_CH_PRIVILEGE_T  prEventBody;
    P_MSG_CH_GRANT_T        prChResp;
    P_BSS_INFO_T            prBssInfo;
    P_CNM_INFO_T            prCnmInfo;

    ASSERT(prAdapter);
    ASSERT(prEvent);

    prEventBody = (P_EVENT_CH_PRIVILEGE_T) (prEvent->aucBuffer);
    prChResp = (P_MSG_CH_GRANT_T)
                cnmMemAlloc(prAdapter, RAM_TYPE_MSG, sizeof(MSG_CH_GRANT_T));
    ASSERT(prChResp);

    /* To do: exception handle */
    if (!prChResp) {
        DBGLOG(CNM, ERROR, ("ChGrant: fail to get buf (net=%d, token=%d)\n",
            prEventBody->ucBssIndex, prEventBody->ucTokenID));

        return;
    }

    DBGLOG(CNM, INFO, ("ChGrant net=%d token=%d ch=%d sco=%d\n",
        prEventBody->ucBssIndex, prEventBody->ucTokenID,
        prEventBody->ucPrimaryChannel, prEventBody->ucRfSco));

    ASSERT(prEventBody->ucBssIndex <= MAX_BSS_INDEX);
    ASSERT(prEventBody->ucStatus == EVENT_CH_STATUS_GRANT);

    prBssInfo = prAdapter->aprBssInfo[prEventBody->ucBssIndex];

    /* Decide message ID based on network and response status */
    if (IS_BSS_AIS(prBssInfo)) {
        prChResp->rMsgHdr.eMsgId = MID_CNM_AIS_CH_GRANT;
    }
#if CFG_ENABLE_WIFI_DIRECT
    else if (prAdapter->fgIsP2PRegistered && IS_BSS_P2P(prBssInfo)) {
        prChResp->rMsgHdr.eMsgId = MID_CNM_P2P_CH_GRANT;
    }
#endif
#if CFG_ENABLE_BT_OVER_WIFI
    else if (IS_BSS_BOW(prBssInfo)) {
        prChResp->rMsgHdr.eMsgId = MID_CNM_BOW_CH_GRANT;
    }
#endif
    else {
        cnmMemFree(prAdapter, prChResp);
        return;
    }

    prChResp->ucBssIndex = prEventBody->ucBssIndex;
    prChResp->ucTokenID = prEventBody->ucTokenID;
    prChResp->ucPrimaryChannel = prEventBody->ucPrimaryChannel;
    prChResp->eRfSco = (ENUM_CHNL_EXT_T) prEventBody->ucRfSco;
    prChResp->eRfBand = (ENUM_BAND_T) prEventBody->ucRfBand;
    prChResp->eRfChannelWidth =
            (ENUM_CHANNEL_WIDTH_T) prEventBody->ucRfChannelWidth;
    prChResp->ucRfCenterFreqSeg1 = prEventBody->ucRfCenterFreqSeg1;
    prChResp->ucRfCenterFreqSeg2 = prEventBody->ucRfCenterFreqSeg2;
    prChResp->eReqType = (ENUM_CH_REQ_TYPE_T) prEventBody->ucReqType;
    prChResp->u4GrantInterval = prEventBody->u4GrantInterval;

    mboxSendMsg(prAdapter,
                MBOX_ID_0,
                (P_MSG_HDR_T) prChResp,
                MSG_SEND_METHOD_BUF);

    /* Record current granted BSS for TXM's reference */
    prCnmInfo = &prAdapter->rCnmInfo;
    prCnmInfo->ucBssIndex = prEventBody->ucBssIndex;
    prCnmInfo->ucTokenID = prEventBody->ucTokenID;
    prCnmInfo->fgChGranted = TRUE;
}