Просмотр исходного кода

qcacld-3.0: Refactor code use to search vdev using MAC address

In LIM, move functionality to find session for a given MAC address in
separate function so that this code can be reused by other functions
if needed.

In HDD, remove logic added to find adaptor for a given MAC, instead use
existing function hdd_get_adapter_by_macaddr.

Change-Id: I989f09ffcbee3a717c22c267a01dafd1b404da64
CRs-Fixed: 2004223
Arif Hussain 8 лет назад
Родитель
Сommit
7631afa88d

+ 4 - 17
core/hdd/src/wlan_hdd_cfg80211.c

@@ -14827,8 +14827,6 @@ static int __wlan_hdd_cfg80211_connect(struct wiphy *wiphy,
 #else
 	const u8 *bssid_hint = NULL;
 #endif
-	hdd_adapter_list_node_t *adapter_node = NULL, *next_adapter = NULL;
-	hdd_adapter_t *adapter;
 	hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(ndev);
 	hdd_context_t *pHddCtx;
 
@@ -14874,21 +14872,10 @@ static int __wlan_hdd_cfg80211_connect(struct wiphy *wiphy,
 	else if (bssid_hint)
 		bssid = bssid_hint;
 
-	if (bssid) {
-		status = hdd_get_front_adapter(pHddCtx, &adapter_node);
-		while (NULL != adapter_node && QDF_STATUS_SUCCESS == status) {
-			adapter = adapter_node->pAdapter;
-			if (!qdf_mem_cmp(adapter->macAddressCurrent.bytes,
-					 bssid, QDF_MAC_ADDR_SIZE)) {
-				hdd_err("Vdev %d exist with same MAC address "
-					MAC_ADDRESS_STR, adapter->sessionId,
-					MAC_ADDR_ARRAY(bssid));
-				return -EINVAL;
-			}
-			status = hdd_get_next_adapter(pHddCtx, adapter_node,
-						      &next_adapter);
-			adapter_node = next_adapter;
-		}
+	if (bssid && hdd_get_adapter_by_macaddr(pHddCtx, (uint8_t *)bssid)) {
+		hdd_err("adapter exist with same mac address " MAC_ADDRESS_STR,
+			MAC_ADDR_ARRAY(bssid));
+		return -EINVAL;
 	}
 
 	if (true == wlan_hdd_reassoc_bssid_hint(pAdapter, req, &status))

+ 1 - 16
core/mac/src/pe/lim/lim_process_auth_frame.c

@@ -428,23 +428,8 @@ static void lim_process_auth_frame_type1(tpAniSirGlobal mac_ctx,
 	if (lim_is_auth_algo_supported(mac_ctx,
 			(tAniAuthType) rx_auth_frm_body->authAlgoNumber,
 			pe_session)) {
-		int i = 0;
-		tCsrRoamSession *session;
 
-		for (i = 0; i < mac_ctx->sme.max_intf_count; i++) {
-
-			if (!CSR_IS_SESSION_VALID(mac_ctx, i))
-				continue;
-
-			session = CSR_GET_SESSION(mac_ctx, i);
-			if (!session || qdf_mem_cmp(&session->selfMacAddr,
-			    mac_hdr->sa, sizeof(tSirMacAddr))) {
-				continue;
-			}
-
-			pe_debug("vdev with id %d exist with same MAC "
-				 MAC_ADDRESS_STR, session->sessionId,
-				 MAC_ADDR_ARRAY(mac_hdr->sa));
+		if (lim_get_session_by_macaddr(mac_ctx, mac_hdr->sa)) {
 
 			auth_frame->authAlgoNumber =
 				rx_auth_frm_body->authAlgoNumber;

+ 31 - 0
core/mac/src/pe/lim/lim_utils.c

@@ -7778,3 +7778,34 @@ void lim_decrement_pending_mgmt_count(tpAniSirGlobal mac_ctx)
 	mac_ctx->sys.sys_bbt_pending_mgmt_count--;
 	qdf_spin_unlock(&mac_ctx->sys.bbt_mgmt_lock);
 }
+
+tCsrRoamSession *lim_get_session_by_macaddr(tpAniSirGlobal mac_ctx,
+		tSirMacAddr self_mac)
+{
+	int i = 0;
+	tCsrRoamSession *session;
+
+	if (!mac_ctx || !self_mac) {
+		QDF_TRACE(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_ERROR,
+			  FL("Invalid arguments"));
+		return NULL;
+	}
+
+	for (i = 0; i < mac_ctx->sme.max_intf_count; i++) {
+		session = CSR_GET_SESSION(mac_ctx, i);
+		if (!session)
+			continue;
+		else if (!qdf_mem_cmp(&session->selfMacAddr,
+			 self_mac, sizeof(tSirMacAddr))) {
+
+			QDF_TRACE(QDF_MODULE_ID_PE, QDF_TRACE_LEVEL_INFO,
+				  FL("session %d exists with mac address "
+				  MAC_ADDRESS_STR), session->sessionId,
+				  MAC_ADDR_ARRAY(self_mac));
+
+			return session;
+		}
+	}
+
+	return NULL;
+}

+ 12 - 0
core/mac/src/pe/lim/lim_utils.h

@@ -261,6 +261,18 @@ void lim_prepare_for11h_channel_switch(tpAniSirGlobal pMac,
 void lim_switch_channel_cback(tpAniSirGlobal pMac, QDF_STATUS status,
 		uint32_t *data, tpPESession psessionEntry);
 
+/**
+ * lim_get_session_by_macaddr() - api to find session based on MAC
+ * @mac_ctx: Pointer to global mac structure.
+ * @self_mac: MAC address.
+ *
+ * This function is used to get session for given MAC address.
+ *
+ * Return: session pointer if exists, NULL otherwise.
+ */
+tCsrRoamSession *lim_get_session_by_macaddr(tpAniSirGlobal mac_ctx,
+		tSirMacAddr self_mac);
+
 static inline tSirRFBand lim_get_rf_band(uint8_t channel)
 {
 	if ((channel >= SIR_11A_CHANNEL_BEGIN) &&