qcacld-3.0: LFR3: Fix to handle peer MAP/UNMAP events

Enabling flow steering may send the peer map/unmap events
from the target to the host in a random order.When host
does not receive them in expected sequence, there is an
issue with peer management.Fix the issue by making the
firmware send the events through a single copy engine in
the same order they were generated and thus host can handle
the events properly

Change-Id: If2396a0bf943f2833e1e3a44d778054a76c65ada
CRs-Fixed: 1078976
This commit is contained in:
Varun Reddy Yeturu 2016-09-16 10:33:19 -07:00 committed by qcabuildsw
parent ba175fc413
commit 0425186793
5 changed files with 20 additions and 0 deletions

View File

@ -62,6 +62,7 @@
#include "ol_rx_fwd.h"
#include "cdp_txrx_flow_ctrl_legacy.h"
#include "cdp_txrx_peer_ops.h"
#include "wlan_hdd_napi.h"
/* These are needed to recognize WPA and RSN suite types */
#define HDD_WPA_OUI_SIZE 4
@ -4601,6 +4602,8 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId,
* after reassoc.
*/
hdd_info("Disabling queues");
hdd_info("Roam Synch Ind: NAPI Serialize ON");
hdd_napi_serialize(1);
wlan_hdd_netif_queue_control(pAdapter,
WLAN_NETIF_TX_DISABLE,
WLAN_CONTROL_PATH);
@ -4613,6 +4616,10 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId,
hdd_info("hdd_ReassocScenario set to: %d, due to eCSR_ROAM_FT_START, session: %d",
pHddStaCtx->hdd_ReassocScenario, pAdapter->sessionId);
break;
case eCSR_ROAM_NAPI_OFF:
hdd_info("After Roam Synch Comp: NAPI Serialize OFF");
hdd_napi_serialize(0);
break;
case eCSR_ROAM_SHOULD_ROAM:
/* notify apps that we can't pass traffic anymore */
hdd_info("Disabling queues");
@ -4897,11 +4904,13 @@ hdd_sme_roam_callback(void *pContext, tCsrRoamInfo *pRoamInfo, uint32_t roamId,
wlan_hdd_netif_queue_control(pAdapter,
WLAN_NETIF_TX_DISABLE,
WLAN_CONTROL_PATH);
hdd_napi_serialize(1);
cds_set_connection_in_progress(true);
cds_restart_opportunistic_timer(true);
break;
case eCSR_ROAM_ABORT:
hdd_info("Firmware aborted roaming operation, previous connection is still valid");
hdd_napi_serialize(0);
wlan_hdd_netif_queue_control(pAdapter,
WLAN_WAKE_ALL_NETIF_QUEUE,
WLAN_CONTROL_PATH);

View File

@ -203,6 +203,7 @@ enum sir_roam_op_code {
SIR_ROAMING_START,
SIR_ROAMING_ABORT,
SIR_ROAM_SYNCH_COMPLETE,
SIR_ROAM_SYNCH_NAPI_OFF,
};
/**
* Module ID definitions.

View File

@ -512,6 +512,7 @@ typedef enum {
eCSR_ROAM_UPDATE_SCAN_RESULT,
eCSR_ROAM_START,
eCSR_ROAM_ABORT,
eCSR_ROAM_NAPI_OFF,
} eRoamCmdStatus;
/* comment inside indicates what roaming callback gets */

View File

@ -18822,6 +18822,8 @@ void csr_process_ho_fail_ind(tpAniSirGlobal pMac, void *pMsgBuf)
return;
}
cds_set_connection_in_progress(false);
csr_roam_call_callback(pMac, sessionId, NULL, 0,
eCSR_ROAM_NAPI_OFF, eSIR_SME_SUCCESS);
csr_roam_synch_clean_up(pMac, sessionId);
csr_roaming_report_diag_event(pMac, NULL,
eCSR_REASON_ROAM_HO_FAIL);
@ -19560,6 +19562,11 @@ void csr_roam_synch_callback(tpAniSirGlobal mac_ctx,
eCSR_ROAM_ABORT, eSIR_SME_SUCCESS);
sme_release_global_lock(&mac_ctx->sme);
return;
case SIR_ROAM_SYNCH_NAPI_OFF:
csr_roam_call_callback(mac_ctx, session_id, NULL, 0,
eCSR_ROAM_NAPI_OFF, eSIR_SME_SUCCESS);
sme_release_global_lock(&mac_ctx->sme);
return;
case SIR_ROAM_SYNCH_PROPAGATION:
break;
case SIR_ROAM_SYNCH_COMPLETE:

View File

@ -2331,6 +2331,8 @@ int wma_roam_synch_event_handler(void *handle, uint8_t *event,
qdf_get_system_timestamp() - roam_synch_received;
WMA_LOGD("LFR3: roam_synch_delay:%d",
wma->interfaces[synch_event->vdev_id].roam_synch_delay);
wma->csr_roam_synch_cb((tpAniSirGlobal)wma->mac_context,
roam_synch_ind_ptr, bss_desc_ptr, SIR_ROAM_SYNCH_NAPI_OFF);
cleanup_label:
if (roam_synch_ind_ptr->join_rsp)
qdf_mem_free(roam_synch_ind_ptr->join_rsp);