Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c5cfde09 authored by Surabhi Vishnoi's avatar Surabhi Vishnoi
Browse files

wlan: Resume tx transmission on beacon receive after CSA to DFS channel

Currently the tx transmission is resumed in all cases after CSA.
This leads to transmission of some packets during CAC period in case
of channel switch to DFS channel. In cases of switching to DFS channels,
no transmission should be done during CAC period.
To resolve the above issue, resume the tx transmission only after
first beacon is received after switching to DFS channels.

Change-Id: I41113610c7a4d5d859f401610771201a609fbd1b
CRs-Fixed:
parent 2225e3bc
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -707,6 +707,7 @@ typedef struct sLimSpecMgmtInfo
        
    tANI_BOOLEAN       fRadarDetCurOperChan; /* Radar detected in cur oper chan on AP */
    tANI_BOOLEAN       fRadarIntrConfigured; /* Whether radar interrupt has been configured */
    tANI_BOOLEAN       dfs_channel_csa; /* whether received channel switch to DFS channel */
}tLimSpecMgmtInfo, *tpLimSpecMgmtInfo;

#ifdef FEATURE_WLAN_TDLS
+6 −0
Original line number Diff line number Diff line
@@ -543,6 +543,12 @@ void limHandleHeartBeatFailure(tpAniSirGlobal pMac,tpPESession psessionEntry)
        {
            PELOGW(limLog(pMac, LOGW,
              FL("Heart Beat missed from AP on DFS chanel moving to passive"));)

            if (psessionEntry->gLimSpecMgmt.dfs_channel_csa) {
               limFrameTransmissionControl(pMac, eLIM_TX_ALL, eLIM_RESUME_TX);
               psessionEntry->gLimSpecMgmt.dfs_channel_csa = false;
	    }

            if (psessionEntry->currentOperChannel < SIR_MAX_24G_5G_CHANNEL_RANGE){
               limCovertChannelScanType(pMac, psessionEntry->currentOperChannel, false);
               pMac->lim.dfschannelList.timeStamp[psessionEntry->currentOperChannel] = 0;
+5 −0
Original line number Diff line number Diff line
@@ -383,6 +383,11 @@ void peDeleteSession(tpAniSirGlobal pMac, tpPESession psessionEntry)
           psessionEntry->operMode, psessionEntry->bssIdx,
           MAC_ADDR_ARRAY(psessionEntry->bssId));

    if (psessionEntry->gLimSpecMgmt.dfs_channel_csa) {
        limFrameTransmissionControl(pMac, eLIM_TX_ALL, eLIM_RESUME_TX);
       psessionEntry->gLimSpecMgmt.dfs_channel_csa = false;
    }

    for (n = 0; n < pMac->lim.maxStation; n++)
    {
        timer_ptr = &pMac->lim.limTimers.gpLimCnfWaitTimer[n];
+7 −2
Original line number Diff line number Diff line
@@ -7032,8 +7032,13 @@ limRestorePreChannelSwitchState(tpAniSirGlobal pMac, tpPESession psessionEntry)
    /* Channel switch should be ready for the next time */
    psessionEntry->gLimSpecMgmt.dot11hChanSwState = eLIM_11H_CHANSW_INIT;

    /* Restore the frame transmission, all the time. */
    /* Restore the frame transmission, if switched channel is NON-DFS.
     * Else tx should be resumed after receiving first beacon on DFS channel
     */
    if(!limIsconnectedOnDFSChannel(psessionEntry->currentOperChannel))
        limFrameTransmissionControl(pMac, eLIM_TX_ALL, eLIM_RESUME_TX);
    else
        psessionEntry->gLimSpecMgmt.dfs_channel_csa = true;

    /* Free to enter BMPS */
    limSendSmePostChannelSwitchInd(pMac);
+5 −0
Original line number Diff line number Diff line
@@ -383,6 +383,11 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac,
           goto fail;
        }

        if (psessionEntry->gLimSpecMgmt.dfs_channel_csa) {
           limFrameTransmissionControl(pMac, eLIM_TX_ALL, eLIM_RESUME_TX);
           psessionEntry->gLimSpecMgmt.dfs_channel_csa = false;
        }

        if(RF_CHAN_14 >= psessionEntry->currentOperChannel)
        {
            if (psessionEntry->force_24ghz_in_ht20)