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

Commit c04b4e72 authored by Surabhi Vishnoi's avatar Surabhi Vishnoi Committed by Gerrit - the friendly Code Review server
Browse files

wlan: Stop roam scan offload if CSA received to DFS channel

Currently, roam scan is offloaded to FW, due to this firmware
performs offchannel operation and sends PM QOS null data frames
during the CAC period also. This is incorrect behavior as there
should be no transmission during CAC period by STA.

To fix this issue, when CSA request from AP is received on any
DFS channel, then stop the roam scan offload and resume it on
receiving first beacon from AP on DFS channel.

Change-Id: I61f3b610d01b239ef96bd5a6966a30951b6da088
CRs-Fixed:
parent c7c46b9e
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -545,6 +545,11 @@ void limHandleHeartBeatFailure(tpAniSirGlobal pMac,tpPESession psessionEntry)
              FL("Heart Beat missed from AP on DFS chanel moving to passive"));)

            if (psessionEntry->gLimSpecMgmt.dfs_channel_csa) {
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
               if (pMac->roam.configParam.isRoamOffloadScanEnabled) {
                  csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_START, REASON_CONNECT);
               }
#endif
               limFrameTransmissionControl(pMac, eLIM_TX_ALL, eLIM_RESUME_TX);
               psessionEntry->gLimSpecMgmt.dfs_channel_csa = false;
	    }
+13 −0
Original line number Diff line number Diff line
@@ -7201,6 +7201,19 @@ limPrepareFor11hChannelSwitch(tpAniSirGlobal pMac, tpPESession psessionEntry)
    else
    {
        PELOGE(limLog(pMac, LOGE, FL("Not in scan state, start channel switch timer"));)

        /* Stop roam scan during CAC period in DFS channels */
        if(limIsconnectedOnDFSChannel(
                            psessionEntry->gLimChannelSwitch.primaryChannel)) {
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
            if (pMac->roam.configParam.isRoamOffloadScanEnabled) {
               csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_STOP,
                                  REASON_DISCONNECTED);
            }
#endif
        psessionEntry->gLimSpecMgmt.dfs_channel_csa = true;
        }

        /** We are safe to switch channel at this point */
        limStopTxAndSwitchChannel(pMac, psessionEntry->peSessionId);
    }
+5 −0
Original line number Diff line number Diff line
@@ -384,6 +384,11 @@ static void __schBeaconProcessForSession( tpAniSirGlobal pMac,
        }

        if (psessionEntry->gLimSpecMgmt.dfs_channel_csa) {
#ifdef WLAN_FEATURE_ROAM_SCAN_OFFLOAD
            if (pMac->roam.configParam.isRoamOffloadScanEnabled) {
               csrRoamOffloadScan(pMac, ROAM_SCAN_OFFLOAD_START, REASON_CONNECT);
            }
#endif
           limFrameTransmissionControl(pMac, eLIM_TX_ALL, eLIM_RESUME_TX);
           psessionEntry->gLimSpecMgmt.dfs_channel_csa = false;
        }