Bläddra i källkod

qcacld-3.0: Add policy attribute to hdd_wiphy_vendor_commands

According to new changes in kernel 5.4 version onwards, driver has to
provide the policy for a NL command to ve verified against while
registering wiphy to the kernel.

To accommodate these changes, add policy for all the following
vendor commands that are being registered in the driver

QCA_NL80211_VENDOR_SUBCMD_GET_WAKE_REASON_STATS
QCA_NL80211_VENDOR_SUBCMD_OCB_SET_CONFIG
QCA_NL80211_VENDOR_SUBCMD_OCB_SET_UTC_TIME
QCA_NL80211_VENDOR_SUBCMD_OCB_START_TIMING_ADVERT
QCA_NL80211_VENDOR_SUBCMD_OCB_STOP_TIMING_ADVERT
QCA_NL80211_VENDOR_SUBCMD_OCB_GET_TSF_TIMER
QCA_NL80211_VENDOR_SUBCMD_DCC_GET_STATS
QCA_NL80211_VENDOR_SUBCMD_DCC_CLEAR_STATS
QCA_NL80211_VENDOR_SUBCMD_DCC_UPDATE_NDL
QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES

Change-Id: I1fa51d2fdf75a20098fe651769352d69d8fbd48c
CRs-Fixed: 2633726
Bapiraju Alla 5 år sedan
förälder
incheckning
4a668d9d24
3 ändrade filer med 129 tillägg och 77 borttagningar
  1. 10 69
      core/hdd/src/wlan_hdd_cfg80211.c
  2. 7 7
      core/hdd/src/wlan_hdd_ocb.c
  3. 112 1
      core/hdd/src/wlan_hdd_ocb.h

+ 10 - 69
core/hdd/src/wlan_hdd_cfg80211.c

@@ -10250,7 +10250,7 @@ static int wlan_hdd_cfg80211_set_probable_oper_channel(struct wiphy *wiphy,
 
 static const struct
 nla_policy
-qca_wlan_vendor_attr_policy[QCA_WLAN_VENDOR_ATTR_MAX+1] = {
+wlan_hdd_get_link_properties_policy[QCA_WLAN_VENDOR_ATTR_MAX + 1] = {
 	[QCA_WLAN_VENDOR_ATTR_MAC_ADDR] = {
 		.type = NLA_BINARY, .len = QDF_MAC_ADDR_SIZE },
 };
@@ -10296,7 +10296,8 @@ static int __wlan_hdd_cfg80211_get_link_properties(struct wiphy *wiphy,
 		return -EINVAL;
 
 	if (wlan_cfg80211_nla_parse(tb, QCA_WLAN_VENDOR_ATTR_MAX, data,
-				    data_len, qca_wlan_vendor_attr_policy)) {
+				    data_len,
+				    wlan_hdd_get_link_properties_policy)) {
 		hdd_err("Invalid attribute");
 		return -EINVAL;
 	}
@@ -14643,78 +14644,17 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = {
 	},
 
 	/* OCB commands */
-	{
-		.info.vendor_id = QCA_NL80211_VENDOR_ID,
-		.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_SET_CONFIG,
-		.flags = WIPHY_VENDOR_CMD_NEED_WDEV |
-				 WIPHY_VENDOR_CMD_NEED_NETDEV |
-				 WIPHY_VENDOR_CMD_NEED_RUNNING,
-		.doit = wlan_hdd_cfg80211_ocb_set_config
-	},
-	{
-		.info.vendor_id = QCA_NL80211_VENDOR_ID,
-		.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_SET_UTC_TIME,
-		.flags = WIPHY_VENDOR_CMD_NEED_WDEV |
-				 WIPHY_VENDOR_CMD_NEED_NETDEV |
-				 WIPHY_VENDOR_CMD_NEED_RUNNING,
-		.doit = wlan_hdd_cfg80211_ocb_set_utc_time
-	},
-	{
-		.info.vendor_id = QCA_NL80211_VENDOR_ID,
-		.info.subcmd =
-			QCA_NL80211_VENDOR_SUBCMD_OCB_START_TIMING_ADVERT,
-		.flags = WIPHY_VENDOR_CMD_NEED_WDEV |
-				 WIPHY_VENDOR_CMD_NEED_NETDEV |
-				 WIPHY_VENDOR_CMD_NEED_RUNNING,
-		.doit = wlan_hdd_cfg80211_ocb_start_timing_advert
-	},
-	{
-		.info.vendor_id = QCA_NL80211_VENDOR_ID,
-		.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_STOP_TIMING_ADVERT,
-		.flags = WIPHY_VENDOR_CMD_NEED_WDEV |
-				 WIPHY_VENDOR_CMD_NEED_NETDEV |
-				 WIPHY_VENDOR_CMD_NEED_RUNNING,
-		.doit = wlan_hdd_cfg80211_ocb_stop_timing_advert
-	},
-	{
-		.info.vendor_id = QCA_NL80211_VENDOR_ID,
-		.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_GET_TSF_TIMER,
-		.flags = WIPHY_VENDOR_CMD_NEED_WDEV |
-				 WIPHY_VENDOR_CMD_NEED_NETDEV |
-				 WIPHY_VENDOR_CMD_NEED_RUNNING,
-		.doit = wlan_hdd_cfg80211_ocb_get_tsf_timer
-	},
-	{
-		.info.vendor_id = QCA_NL80211_VENDOR_ID,
-		.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_DCC_GET_STATS,
-		.flags = WIPHY_VENDOR_CMD_NEED_WDEV |
-				 WIPHY_VENDOR_CMD_NEED_NETDEV |
-				 WIPHY_VENDOR_CMD_NEED_RUNNING,
-		.doit = wlan_hdd_cfg80211_dcc_get_stats
-	},
-	{
-		.info.vendor_id = QCA_NL80211_VENDOR_ID,
-		.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_DCC_CLEAR_STATS,
-		.flags = WIPHY_VENDOR_CMD_NEED_WDEV |
-				 WIPHY_VENDOR_CMD_NEED_NETDEV |
-				 WIPHY_VENDOR_CMD_NEED_RUNNING,
-		.doit = wlan_hdd_cfg80211_dcc_clear_stats
-	},
-	{
-		.info.vendor_id = QCA_NL80211_VENDOR_ID,
-		.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_DCC_UPDATE_NDL,
-		.flags = WIPHY_VENDOR_CMD_NEED_WDEV |
-				 WIPHY_VENDOR_CMD_NEED_NETDEV |
-				 WIPHY_VENDOR_CMD_NEED_RUNNING,
-		.doit = wlan_hdd_cfg80211_dcc_update_ndl
-	},
+	FEATURE_OCB_VENDOR_COMMANDS
+
 	{
 		.info.vendor_id = QCA_NL80211_VENDOR_ID,
 		.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_LINK_PROPERTIES,
 		.flags = WIPHY_VENDOR_CMD_NEED_WDEV |
 			 WIPHY_VENDOR_CMD_NEED_NETDEV |
 			 WIPHY_VENDOR_CMD_NEED_RUNNING,
-		.doit = wlan_hdd_cfg80211_get_link_properties
+		.doit = wlan_hdd_cfg80211_get_link_properties,
+		vendor_command_policy(wlan_hdd_get_link_properties_policy,
+				      QCA_WLAN_VENDOR_ATTR_MAX)
 	},
 
 	FEATURE_OTA_TEST_VENDOR_COMMANDS
@@ -14786,7 +14726,8 @@ const struct wiphy_vendor_command hdd_wiphy_vendor_commands[] = {
 		.flags = WIPHY_VENDOR_CMD_NEED_WDEV |
 			 WIPHY_VENDOR_CMD_NEED_NETDEV |
 			 WIPHY_VENDOR_CMD_NEED_RUNNING,
-		.doit = wlan_hdd_cfg80211_get_wakelock_stats
+		.doit = wlan_hdd_cfg80211_get_wakelock_stats,
+		vendor_command_policy(VENDOR_CMD_RAW_DATA, 0)
 	},
 	{
 		.info.vendor_id = QCA_NL80211_VENDOR_ID,

+ 7 - 7
core/hdd/src/wlan_hdd_ocb.c

@@ -594,7 +594,7 @@ int iw_set_dot11p_channel_sched(struct net_device *dev,
 }
 #endif /* WLAN_WEXT_SUPPORT_ENABLE */
 
-static const struct nla_policy qca_wlan_vendor_ocb_set_config_policy[
+const struct nla_policy qca_wlan_vendor_ocb_set_config_policy[
 		QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_MAX + 1] = {
 	[QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_CHANNEL_COUNT] = {
 		.type = NLA_U32
@@ -619,7 +619,7 @@ static const struct nla_policy qca_wlan_vendor_ocb_set_config_policy[
 	},
 };
 
-static const struct nla_policy qca_wlan_vendor_ocb_set_utc_time_policy[
+const struct nla_policy qca_wlan_vendor_ocb_set_utc_time_policy[
 		QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_MAX + 1] = {
 	[QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_VALUE] = {
 		.type = NLA_BINARY, .len = SIZE_UTC_TIME
@@ -629,7 +629,7 @@ static const struct nla_policy qca_wlan_vendor_ocb_set_utc_time_policy[
 	},
 };
 
-static const struct nla_policy qca_wlan_vendor_ocb_start_timing_advert_policy[
+const struct nla_policy qca_wlan_vendor_ocb_start_timing_advert_policy[
 		QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_MAX + 1] = {
 	[QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_CHANNEL_FREQ] = {
 		.type = NLA_U32
@@ -639,7 +639,7 @@ static const struct nla_policy qca_wlan_vendor_ocb_start_timing_advert_policy[
 	},
 };
 
-static const struct nla_policy  qca_wlan_vendor_ocb_stop_timing_advert_policy[
+const struct nla_policy  qca_wlan_vendor_ocb_stop_timing_advert_policy[
 		QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_MAX + 1] = {
 	[QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_CHANNEL_FREQ] = {
 		.type = NLA_U32
@@ -655,7 +655,7 @@ static const struct nla_policy qca_wlan_vendor_ocb_get_tsf_timer_resp[] = {
 	},
 };
 
-static const struct nla_policy qca_wlan_vendor_dcc_get_stats[] = {
+const struct nla_policy qca_wlan_vendor_dcc_get_stats[] = {
 	[QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_CHANNEL_COUNT] = {
 		.type = NLA_U32
 	},
@@ -673,13 +673,13 @@ static const struct nla_policy qca_wlan_vendor_dcc_get_stats_resp[] = {
 	},
 };
 
-static const struct nla_policy qca_wlan_vendor_dcc_clear_stats[] = {
+const struct nla_policy qca_wlan_vendor_dcc_clear_stats[] = {
 	[QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_BITMAP] = {
 		.type = NLA_U32
 	},
 };
 
-static const struct nla_policy qca_wlan_vendor_dcc_update_ndl[
+const struct nla_policy qca_wlan_vendor_dcc_update_ndl[
 		QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_MAX + 1] = {
 	[QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_CHANNEL_COUNT] = {
 		.type = NLA_U32

+ 112 - 1
core/hdd/src/wlan_hdd_ocb.h

@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2015-2019 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2015-2020 The Linux Foundation. All rights reserved.
  *
  * Permission to use, copy, modify, and/or distribute this software for
  * any purpose with or without fee is hereby granted, provided that the
@@ -238,7 +238,116 @@ struct hdd_context;
 int iw_set_dot11p_channel_sched(struct net_device *dev,
 				struct iw_request_info *info,
 				union iwreq_data *wrqu, char *extra);
+
+extern const struct nla_policy qca_wlan_vendor_ocb_set_config_policy[
+			QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_MAX + 1];
+extern const struct nla_policy qca_wlan_vendor_ocb_set_utc_time_policy[
+			QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_MAX + 1];
+extern const struct nla_policy qca_wlan_vendor_ocb_start_timing_advert_policy[
+			QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_MAX + 1];
+extern const struct nla_policy  qca_wlan_vendor_ocb_stop_timing_advert_policy[
+			QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_MAX + 1];
+extern const struct nla_policy qca_wlan_vendor_dcc_get_stats[
+			QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_MAX + 1];
+extern const struct nla_policy qca_wlan_vendor_dcc_clear_stats[
+			QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_MAX + 1];
+extern const struct nla_policy qca_wlan_vendor_dcc_update_ndl[
+			QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_MAX + 1];
+
+#define FEATURE_OCB_VENDOR_COMMANDS					     \
+{									     \
+	.info.vendor_id = QCA_NL80211_VENDOR_ID,			     \
+	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_SET_CONFIG,	     \
+	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				     \
+		 WIPHY_VENDOR_CMD_NEED_NETDEV |				     \
+		 WIPHY_VENDOR_CMD_NEED_RUNNING,				     \
+	.doit = wlan_hdd_cfg80211_ocb_set_config,			     \
+	vendor_command_policy(qca_wlan_vendor_ocb_set_config_policy,	     \
+			      QCA_WLAN_VENDOR_ATTR_OCB_SET_CONFIG_MAX)	     \
+},									     \
+									     \
+{									     \
+	.info.vendor_id = QCA_NL80211_VENDOR_ID,			     \
+	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_SET_UTC_TIME,	     \
+	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				     \
+		 WIPHY_VENDOR_CMD_NEED_NETDEV |				     \
+		 WIPHY_VENDOR_CMD_NEED_RUNNING,				     \
+	.doit = wlan_hdd_cfg80211_ocb_set_utc_time,			     \
+	vendor_command_policy(qca_wlan_vendor_ocb_set_utc_time_policy,	     \
+			      QCA_WLAN_VENDOR_ATTR_OCB_SET_UTC_TIME_MAX)     \
+},									     \
+									     \
+{									     \
+	.info.vendor_id = QCA_NL80211_VENDOR_ID,			     \
+	.info.subcmd =							     \
+		QCA_NL80211_VENDOR_SUBCMD_OCB_START_TIMING_ADVERT,	     \
+	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				     \
+		 WIPHY_VENDOR_CMD_NEED_NETDEV |				     \
+		 WIPHY_VENDOR_CMD_NEED_RUNNING,				     \
+	.doit = wlan_hdd_cfg80211_ocb_start_timing_advert,		     \
+	vendor_command_policy(						     \
+			qca_wlan_vendor_ocb_start_timing_advert_policy,	     \
+			QCA_WLAN_VENDOR_ATTR_OCB_START_TIMING_ADVERT_MAX)    \
+},									     \
+									     \
+{									     \
+	.info.vendor_id = QCA_NL80211_VENDOR_ID,			     \
+	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_STOP_TIMING_ADVERT,     \
+	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				     \
+		 WIPHY_VENDOR_CMD_NEED_NETDEV |				     \
+		 WIPHY_VENDOR_CMD_NEED_RUNNING,				     \
+	.doit = wlan_hdd_cfg80211_ocb_stop_timing_advert,		     \
+	vendor_command_policy(						     \
+			qca_wlan_vendor_ocb_stop_timing_advert_policy,	     \
+			QCA_WLAN_VENDOR_ATTR_OCB_STOP_TIMING_ADVERT_MAX)     \
+},									     \
+									     \
+{									     \
+	.info.vendor_id = QCA_NL80211_VENDOR_ID,			     \
+	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_OCB_GET_TSF_TIMER,	     \
+	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				     \
+		 WIPHY_VENDOR_CMD_NEED_NETDEV |				     \
+		 WIPHY_VENDOR_CMD_NEED_RUNNING,				     \
+	.doit = wlan_hdd_cfg80211_ocb_get_tsf_timer,			     \
+	vendor_command_policy(VENDOR_CMD_RAW_DATA, 0)			     \
+},									     \
+									     \
+{									     \
+	.info.vendor_id = QCA_NL80211_VENDOR_ID,			     \
+	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_DCC_GET_STATS,		     \
+	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				     \
+		 WIPHY_VENDOR_CMD_NEED_NETDEV |				     \
+		 WIPHY_VENDOR_CMD_NEED_RUNNING,				     \
+	.doit = wlan_hdd_cfg80211_dcc_get_stats,			     \
+	vendor_command_policy(qca_wlan_vendor_dcc_get_stats,		     \
+			      QCA_WLAN_VENDOR_ATTR_DCC_GET_STATS_MAX)	     \
+},									     \
+									     \
+{									     \
+	.info.vendor_id = QCA_NL80211_VENDOR_ID,			     \
+	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_DCC_CLEAR_STATS,	     \
+	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				     \
+		WIPHY_VENDOR_CMD_NEED_NETDEV |				     \
+		WIPHY_VENDOR_CMD_NEED_RUNNING,				     \
+	.doit = wlan_hdd_cfg80211_dcc_clear_stats,			     \
+	vendor_command_policy(qca_wlan_vendor_dcc_clear_stats,		     \
+			      QCA_WLAN_VENDOR_ATTR_DCC_CLEAR_STATS_MAX)	     \
+},									     \
+									     \
+{									     \
+	.info.vendor_id = QCA_NL80211_VENDOR_ID,			     \
+	.info.subcmd = QCA_NL80211_VENDOR_SUBCMD_DCC_UPDATE_NDL,	     \
+	.flags = WIPHY_VENDOR_CMD_NEED_WDEV |				     \
+		WIPHY_VENDOR_CMD_NEED_NETDEV |				     \
+		WIPHY_VENDOR_CMD_NEED_RUNNING,				     \
+	.doit = wlan_hdd_cfg80211_dcc_update_ndl,			     \
+	vendor_command_policy(qca_wlan_vendor_dcc_update_ndl,		     \
+			      QCA_WLAN_VENDOR_ATTR_DCC_UPDATE_NDL_MAX)	     \
+},
+
 #else
+#define FEATURE_OCB_VENDOR_COMMANDS
+
 static inline
 int iw_set_dot11p_channel_sched(struct net_device *dev,
 				struct iw_request_info *info,
@@ -247,6 +356,8 @@ int iw_set_dot11p_channel_sched(struct net_device *dev,
 	return 0;
 }
 #endif
+#else
+#define FEATURE_OCB_VENDOR_COMMANDS
 #endif
 
 #ifdef WLAN_FEATURE_DSRC