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

Commit dad871f5 authored by Varun Reddy Yeturu's avatar Varun Reddy Yeturu Committed by Akash Patel
Browse files

qcacld-3.0: Optimize LFR3 roam synch propagation

The current roam sync propagation for LFR3.0 in the host driver is
based on queuing and message processing mechanism. This can lead
to many unknown sequence of operations as there might be other
messages sitting in the queue which may interrupt with this
operation. Hence, it would be good to introduce a callback mechanism
which take care of running the code to execution completely in case
of roam synch propagation.
It also improves to reduce the roam delay by 50 percent as compared
to the existing mechanism.

CRs-Fixed: 962290
Change-Id: I4af569b1e3020a64beb606e8bbffd7613775138f
parent 663679ed
Loading
Loading
Loading
Loading
+10 −1
Original line number Diff line number Diff line
/*
 * Copyright (c) 2013-2015 The Linux Foundation. All rights reserved.
 * Copyright (c) 2013-2016 The Linux Foundation. All rights reserved.
 *
 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
 *
@@ -252,4 +252,13 @@ CDF_STATUS hdd_change_peer_state(hdd_adapter_t *pAdapter,
				 uint8_t sta_id,
				 enum ol_txrx_peer_state sta_state,
				 bool roam_synch_in_progress);
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
bool hdd_is_roam_sync_in_progress(tCsrRoamInfo *roaminfo);
#else
static inline bool hdd_is_roam_sync_in_progress(tCsrRoamInfo *roaminfo)
{
	return false;
}
#endif

#endif
+18 −20
Original line number Diff line number Diff line
@@ -730,6 +730,7 @@ static void hdd_send_association_event(struct net_device *dev,
			return;
		}

		if (!hdd_is_roam_sync_in_progress(pCsrRoamInfo))
			cds_incr_active_session(pAdapter->device_mode,
					pAdapter->sessionId);
		memcpy(wrqu.ap_addr.sa_data, pCsrRoamInfo->pBssDesc->bssId,
@@ -1415,7 +1416,10 @@ static void hdd_send_re_assoc_event(struct net_device *dev,
	 * active session count should still be the same and hence upon
	 * successful reassoc decrement the active session count here.
	 */
	cds_decr_session_set_pcl(pAdapter->device_mode, pAdapter->sessionId);
	if (!hdd_is_roam_sync_in_progress(pCsrRoamInfo))
		cds_decr_session_set_pcl(
				pAdapter->device_mode,
				pAdapter->sessionId);

	/* Send the Assoc Resp, the supplicant needs this for initial Auth */
	len = pCsrRoamInfo->nAssocRspLength - FT_ASSOC_RSP_IES_OFFSET;
@@ -1485,17 +1489,16 @@ static void hdd_send_re_assoc_event(struct net_device *dev,

/**
 * hdd_is_roam_sync_in_progress()- Check if roam offloaded
 * @roaminfo - Roaming Information
 *
 * Return: roam sync status if roaming offloaded else false
 */
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
static inline bool hdd_is_roam_sync_in_progress(tCsrRoamInfo *roaminfo)
bool hdd_is_roam_sync_in_progress(tCsrRoamInfo *roaminfo)
{
	if (roaminfo)
		return roaminfo->roamSynchInProgress;
}
#else
static inline bool hdd_is_roam_sync_in_progress(tCsrRoamInfo *roaminfo)
{
	else
		return false;
}
#endif
@@ -1724,13 +1727,6 @@ defined(WLAN_FEATURE_VOWIFI_11R)
		return CDF_STATUS_E_FAILURE;
	}

#ifdef WLAN_FEATURE_ROAM_OFFLOAD
	if (pRoamInfo && pRoamInfo->roamSynchInProgress) {
		/* change logging before release */
		hddLog(LOG3, "LFR3:hdd_association_completion_handler");
	}
#endif

	/* HDD has initiated disconnect, do not send connect result indication
	 * to kernel as it will be handled by __cfg80211_disconnect.
	 */
@@ -1961,6 +1957,8 @@ defined(FEATURE_WLAN_LFR)
						 * decrement the active session
						 * count here.
						 */
						if (!hdd_is_roam_sync_in_progress
								(pRoamInfo))
							cds_decr_session_set_pcl
								(pAdapter->device_mode,
								 pAdapter->sessionId);
+8 −0
Original line number Diff line number Diff line
@@ -162,6 +162,9 @@ typedef enum {
#define SIR_UAPSD_FLAG_ACBK     (1 << SIR_UAPSD_BITOFFSET_ACBK)
#define SIR_UAPSD_FLAG_ACBE     (1 << SIR_UAPSD_BITOFFSET_ACBE)
#define SIR_UAPSD_GET(ac, mask)      (((mask) & (SIR_UAPSD_FLAG_ ## ac)) >> SIR_UAPSD_BITOFFSET_ ## ac)

#define ROAM_SYNCH_PROPAGATION 1
#define ROAMING_TX_QUEUE_DISABLE 2
#endif

/**
@@ -423,6 +426,8 @@ typedef struct sSirSmeReadyReq {
	uint16_t length;
	uint16_t transactionId;
	void *add_bssdescr_cb;
	void *csr_roam_synch_cb;
	void *pe_roam_synch_cb;
} tSirSmeReadyReq, *tpSirSmeReadyReq;

/**
@@ -3953,6 +3958,9 @@ typedef struct sSirSmeRoamOffloadSynchInd {
	uint8_t kck[SIR_KCK_KEY_LEN];
	uint8_t kek[SIR_KEK_KEY_LEN];
	uint8_t replay_ctr[SIR_REPLAY_CTR_LEN];
	void *add_bss_params;
	tpSirSmeJoinRsp join_rsp;
	uint16_t aid;
	tpSirBssDescription  bss_desc_ptr;
} roam_offload_synch_ind;

+0 −1
Original line number Diff line number Diff line
@@ -213,7 +213,6 @@ enum eWniMsgTypes {
	eWNI_SME_SET_HT_2040_MODE,
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
	eWNI_SME_ROAM_OFFLOAD_SYNCH_IND,        /* Roam Synch Indication from WMA to SME */
	eWNI_SME_HO_FAIL_IND,   /* Hand Off Failure Ind from WMA to SME */
#endif
#ifdef WLAN_FEATURE_NAN
+11 −2
Original line number Diff line number Diff line
/*
 * Copyright (c) 2011-2015 The Linux Foundation. All rights reserved.
 * Copyright (c) 2011-2016 The Linux Foundation. All rights reserved.
 *
 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
 *
@@ -169,7 +169,9 @@ bool lim_is_deauth_diassoc_for_drop(tpAniSirGlobal mac, uint8_t *rx_pkt_info);
bool lim_is_assoc_req_for_drop(tpAniSirGlobal mac, uint8_t *rx_pkt_info);
#endif
#ifdef WLAN_FEATURE_ROAM_OFFLOAD
void lim_roam_offload_synch_ind(tpAniSirGlobal pMac, tpSirMsgQ pMsg);
CDF_STATUS pe_roam_synch_callback(tpAniSirGlobal mac_ctx,
	struct sSirSmeRoamOffloadSynchInd *roam_sync_ind_ptr,
	tpSirBssDescription  bss_desc_ptr);
#endif
#define limGetQosMode(psessionEntry, pVal) (*(pVal) = (psessionEntry)->limQosEnabled)
#define limGetWmeMode(psessionEntry, pVal) (*(pVal) = (psessionEntry)->limWmeEnabled)
@@ -246,6 +248,13 @@ void lim_process_abort_scan_ind(tpAniSirGlobal pMac, uint8_t sessionId,
	uint32_t scan_id);

void __lim_process_sme_assoc_cnf_new(tpAniSirGlobal, uint32_t, uint32_t *);
#ifdef FEATURE_WLAN_MCC_TO_SCC_SWITCH
void lim_fill_join_rsp_ht_caps(tpPESession session, tpSirSmeJoinRsp rsp);
#else
static inline void lim_fill_join_rsp_ht_caps(tpPESession session,
	tpSirSmeJoinRsp rsp)
{}
#endif

/************************************************************/
#endif /* __LIM_API_H */
Loading