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:
parent
ba175fc413
commit
0425186793
@ -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);
|
||||
|
@ -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.
|
||||
|
@ -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 */
|
||||
|
@ -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:
|
||||
|
@ -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);
|
||||
|
Loading…
Reference in New Issue
Block a user