Bläddra i källkod

qcacld-3.0: Avoid message handler of netlink APIs to be OS agnostic

Avoid message handler of netlink APIs to be OS agnostic. Retain the
message handler to get the concurrency matrix in HDD.

Change-Id: Ieb121512e3d8ae15678da46ed8425c07fd003f69
CRs-Fixed: 946161
Chandrasekaran, Manishekar 9 år sedan
förälder
incheckning
6e9aa1b9cd

+ 0 - 4
core/cds/inc/cds_concurrency.h

@@ -499,10 +499,6 @@ bool cds_is_sta_connection_pending(void);
 void cds_change_sta_conn_pending_status(bool value);
 void cds_change_sap_restart_required_status(bool value);
 bool cds_set_connection_in_progress(bool value);
-int cds_cfg80211_get_concurrency_matrix(struct wiphy *wiphy,
-			struct wireless_dev *wdev,
-			const void *data,
-			int data_len);
 uint32_t cds_get_concurrency_mode(void);
 QDF_STATUS cds_check_and_restart_sap(eCsrRoamResult roam_result,
 		hdd_station_ctx_t *hdd_sta_ctx);

+ 0 - 108
core/cds/src/cds_concurrency.c

@@ -66,7 +66,6 @@
 #include "wlan_hdd_ipa.h"
 #include "cdp_txrx_flow_ctrl_legacy.h"
 
-#define CDS_MAX_FEATURE_SET   8
 static struct cds_conc_connection_info
 	conc_connection_list[MAX_NUMBER_OF_CONC_CONNECTIONS];
 
@@ -5957,113 +5956,6 @@ QDF_STATUS cds_next_actions(uint32_t session_id,
 	return status;
 }
 
-/**
- * cds_cfg80211_get_concurrency_matrix() - to retrieve concurrency matrix
- * @wiphy: pointer phy adapter
- * @wdev: pointer to wireless device structure
- * @data: pointer to data buffer
- * @data_len: length of data
- *
- * This routine will give concurrency matrix
- *
- * Return: int status code
- */
-static int __cds_cfg80211_get_concurrency_matrix(struct wiphy *wiphy,
-					 struct wireless_dev *wdev,
-					 const void *data,
-					 int data_len)
-{
-	uint32_t feature_set_matrix[CDS_MAX_FEATURE_SET] = {0};
-	uint8_t i, feature_sets, max_feature_sets;
-	struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_GET_CONCURRENCY_MATRIX_MAX + 1];
-	struct sk_buff *reply_skb;
-	hdd_context_t *hdd_ctx = wiphy_priv(wiphy);
-	int ret;
-
-	ENTER();
-
-	if (QDF_GLOBAL_FTM_MODE == hdd_get_conparam()) {
-		cds_err("Command not allowed in FTM mode");
-		return -EPERM;
-	}
-
-	ret = wlan_hdd_validate_context(hdd_ctx);
-	if (0 != ret) {
-		cds_err("HDD context is not valid");
-		return ret;
-	}
-
-	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_GET_CONCURRENCY_MATRIX_MAX,
-			data, data_len, NULL)) {
-		cds_err("Invalid ATTR");
-		return -EINVAL;
-	}
-
-	/* Parse and fetch max feature set */
-	if (!tb[QCA_WLAN_VENDOR_ATTR_GET_CONCURRENCY_MATRIX_CONFIG_PARAM_SET_SIZE_MAX]) {
-		cds_err("Attr max feature set size failed");
-		return -EINVAL;
-	}
-	max_feature_sets = nla_get_u32(tb[
-		QCA_WLAN_VENDOR_ATTR_GET_CONCURRENCY_MATRIX_CONFIG_PARAM_SET_SIZE_MAX]);
-	cds_info("Max feature set size (%d)", max_feature_sets);
-
-	/* Fill feature combination matrix */
-	feature_sets = 0;
-	feature_set_matrix[feature_sets++] = WIFI_FEATURE_INFRA |
-		WIFI_FEATURE_P2P;
-	/* Add more feature combinations here */
-
-	feature_sets = QDF_MIN(feature_sets, max_feature_sets);
-	cds_info("Number of feature sets (%d)", feature_sets);
-	cds_info("Feature set matrix");
-	for (i = 0; i < feature_sets; i++)
-		cds_info("[%d] 0x%02X", i, feature_set_matrix[i]);
-
-	reply_skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, sizeof(u32) +
-			sizeof(u32) * feature_sets + NLMSG_HDRLEN);
-
-	if (reply_skb) {
-		if (nla_put_u32(reply_skb,
-			QCA_WLAN_VENDOR_ATTR_GET_CONCURRENCY_MATRIX_RESULTS_SET_SIZE,
-			feature_sets) ||
-			nla_put(reply_skb,
-			      QCA_WLAN_VENDOR_ATTR_GET_CONCURRENCY_MATRIX_RESULTS_SET,
-			      sizeof(u32) * feature_sets,
-			      feature_set_matrix)) {
-			cds_err("nla put fail");
-			kfree_skb(reply_skb);
-			return -EINVAL;
-		}
-		return cfg80211_vendor_cmd_reply(reply_skb);
-	}
-	cds_err("Feature set matrix: buffer alloc fail");
-	return -ENOMEM;
-}
-
-/**
- * cds_cfg80211_get_concurrency_matrix() - get concurrency matrix
- * @wiphy:   pointer to wireless wiphy structure.
- * @wdev:    pointer to wireless_dev structure.
- * @data:    Pointer to the data to be passed via vendor interface
- * @data_len:Length of the data to be passed
- *
- * Return:   Return the Success or Failure code.
- */
-int
-cds_cfg80211_get_concurrency_matrix(struct wiphy *wiphy,
-					struct wireless_dev *wdev,
-					const void *data, int data_len)
-{
-	int ret = 0;
-
-	cds_ssr_protect(__func__);
-	ret = __cds_cfg80211_get_concurrency_matrix(wiphy, wdev, data,
-			data_len);
-	cds_ssr_unprotect(__func__);
-	return ret;
-}
-
 /**
  * cds_get_concurrency_mode() - return concurrency mode
  *

+ 4 - 6
core/hdd/src/wlan_hdd_assoc.c

@@ -817,9 +817,8 @@ static void hdd_send_association_event(struct net_device *dev,
 
 		pr_info("wlan: disconnected\n");
 		memset(wrqu.ap_addr.sa_data, '\0', ETH_ALEN);
-		cds_decr_session_set_pcl(
-						pAdapter->device_mode,
-						pAdapter->sessionId);
+		cds_decr_session_set_pcl(pAdapter->device_mode,
+					pAdapter->sessionId);
 		wlan_hdd_enable_roaming(pAdapter);
 
 #ifdef FEATURE_WLAN_AUTO_SHUTDOWN
@@ -1427,9 +1426,8 @@ static void hdd_send_re_assoc_event(struct net_device *dev,
 	 * successful reassoc decrement the active session count here.
 	 */
 	if (!hdd_is_roam_sync_in_progress(pCsrRoamInfo))
-		cds_decr_session_set_pcl(
-				pAdapter->device_mode,
-				pAdapter->sessionId);
+		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;

+ 113 - 1
core/hdd/src/wlan_hdd_cfg80211.c

@@ -137,6 +137,7 @@
 #define HDD_CHANNEL_14 14
 
 #define MAX_TXPOWER_SCALE 4
+#define CDS_MAX_FEATURE_SET   8
 
 static const u32 hdd_cipher_suites[] = {
 	WLAN_CIPHER_SUITE_WEP40,
@@ -2020,6 +2021,117 @@ wlan_hdd_cfg80211_set_scanning_mac_oui(struct wiphy *wiphy,
 	return ret;
 }
 
+/**
+ * __wlan_hdd_cfg80211_get_concurrency_matrix() - to retrieve concurrency matrix
+ * @wiphy: pointer phy adapter
+ * @wdev: pointer to wireless device structure
+ * @data: pointer to data buffer
+ * @data_len: length of data
+ *
+ * This routine will give concurrency matrix
+ *
+ * Return: int status code
+ */
+static int __wlan_hdd_cfg80211_get_concurrency_matrix(struct wiphy *wiphy,
+					 struct wireless_dev *wdev,
+					 const void *data,
+					 int data_len)
+{
+	uint32_t feature_set_matrix[CDS_MAX_FEATURE_SET] = {0};
+	uint8_t i, feature_sets, max_feature_sets;
+	struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_GET_CONCURRENCY_MATRIX_MAX + 1];
+	struct sk_buff *reply_skb;
+	hdd_context_t *hdd_ctx = wiphy_priv(wiphy);
+	int ret;
+
+	ENTER_DEV(wdev->netdev);
+
+	if (QDF_GLOBAL_FTM_MODE == hdd_get_conparam()) {
+		hdd_err("Command not allowed in FTM mode");
+		return -EPERM;
+	}
+
+	ret = wlan_hdd_validate_context(hdd_ctx);
+	if (0 != ret) {
+		hdd_err("HDD context is not valid");
+		return ret;
+	}
+
+	if (nla_parse(tb, QCA_WLAN_VENDOR_ATTR_GET_CONCURRENCY_MATRIX_MAX,
+			data, data_len, NULL)) {
+		hdd_err("Invalid ATTR");
+		return -EINVAL;
+	}
+
+	/* Parse and fetch max feature set */
+	if (!tb[QCA_WLAN_VENDOR_ATTR_GET_CONCURRENCY_MATRIX_CONFIG_PARAM_SET_SIZE_MAX]) {
+		hdd_err("Attr max feature set size failed");
+		return -EINVAL;
+	}
+	max_feature_sets = nla_get_u32(tb[
+		QCA_WLAN_VENDOR_ATTR_GET_CONCURRENCY_MATRIX_CONFIG_PARAM_SET_SIZE_MAX]);
+	hdd_info("Max feature set size: %d", max_feature_sets);
+
+	/* Fill feature combination matrix */
+	feature_sets = 0;
+	feature_set_matrix[feature_sets++] = WIFI_FEATURE_INFRA |
+		WIFI_FEATURE_P2P;
+	/* Add more feature combinations here */
+
+	feature_sets = QDF_MIN(feature_sets, max_feature_sets);
+	hdd_info("Number of feature sets:%d", feature_sets);
+	hdd_info("Feature set matrix");
+	for (i = 0; i < feature_sets; i++)
+		hdd_info("[%d] 0x%02X", i, feature_set_matrix[i]);
+
+	reply_skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, sizeof(u32) +
+			sizeof(u32) * feature_sets + NLMSG_HDRLEN);
+	if (!reply_skb) {
+		hdd_err("Feature set matrix: buffer alloc fail");
+		return -ENOMEM;
+	}
+
+	if (nla_put_u32(reply_skb,
+		QCA_WLAN_VENDOR_ATTR_GET_CONCURRENCY_MATRIX_RESULTS_SET_SIZE,
+		feature_sets) ||
+	    nla_put(reply_skb,
+		QCA_WLAN_VENDOR_ATTR_GET_CONCURRENCY_MATRIX_RESULTS_SET,
+		sizeof(u32) * feature_sets,
+		feature_set_matrix)) {
+			hdd_err("nla put fail");
+			kfree_skb(reply_skb);
+			return -EINVAL;
+	}
+	return cfg80211_vendor_cmd_reply(reply_skb);
+}
+
+/**
+ * wlan_hdd_cfg80211_get_concurrency_matrix() - get concurrency matrix
+ * @wiphy:   pointer to wireless wiphy structure.
+ * @wdev:    pointer to wireless_dev structure.
+ * @data:    Pointer to the data to be passed via vendor interface
+ * @data_len:Length of the data to be passed
+ *
+ * Retrieves the concurrency feature set matrix
+ *
+ * Return: 0 on success, negative errno on failure
+ */
+static int
+wlan_hdd_cfg80211_get_concurrency_matrix(struct wiphy *wiphy,
+				       struct wireless_dev *wdev,
+				       const void *data,
+				       int data_len)
+{
+	int ret;
+
+	cds_ssr_protect(__func__);
+	ret = __wlan_hdd_cfg80211_get_concurrency_matrix(wiphy, wdev,
+							data, data_len);
+	cds_ssr_unprotect(__func__);
+
+	return ret;
+}
+
 /**
  * wlan_hdd_cfg80211_set_feature() - Set the bitmask for supported features
  * @feature_flags: pointer to the byte array of features.
@@ -4972,7 +5084,7 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = {
 		.info.vendor_id = QCA_NL80211_VENDOR_ID,
 		.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_GET_CONCURRENCY_MATRIX,
 		.flags = WIPHY_VENDOR_CMD_NEED_WDEV | WIPHY_VENDOR_CMD_NEED_NETDEV,
-		.doit = cds_cfg80211_get_concurrency_matrix
+		.doit = wlan_hdd_cfg80211_get_concurrency_matrix
 	},
 	{
 		.info.vendor_id = QCA_NL80211_VENDOR_ID,