linux-wireless.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Michal Kazior <michal.kazior@tieto.com>
To: linux-wireless@vger.kernel.org
Cc: johannes@sipsolutions.net, luca@coelho.fi,
	Michal Kazior <michal.kazior@tieto.com>
Subject: [PATCH v4 01/13] cfg80211: allow drivers to iterate over matching combinations
Date: Wed,  9 Apr 2014 15:29:22 +0200	[thread overview]
Message-ID: <1397050174-26121-2-git-send-email-michal.kazior@tieto.com> (raw)
In-Reply-To: <1397050174-26121-1-git-send-email-michal.kazior@tieto.com>

The patch splits cfg80211_check_combinations()
into an iterator function and a simple iteration
user.

This makes it possible for drivers to asses how
many channels can use given iftype setup. This in
turn can be used for future
multi-interface/multi-channel channel switching.

Signed-off-by: Michal Kazior <michal.kazior@tieto.com>
---
 include/net/cfg80211.h | 27 +++++++++++++++++++++++++++
 net/wireless/util.c    | 44 +++++++++++++++++++++++++++++++++++++-------
 2 files changed, 64 insertions(+), 7 deletions(-)

diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 6deebc8..0a44a14 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -4730,6 +4730,33 @@ int cfg80211_check_combinations(struct wiphy *wiphy,
 void cfg80211_stop_iface(struct wiphy *wiphy, struct wireless_dev *wdev,
 			 gfp_t gfp);
 
+/**
+ * cfg80211_iter_combinations - iterate over matching combinations
+ *
+ * @wiphy: the wiphy
+ * @num_different_channels: the number of different channels we want
+ *	to use for verification
+ * @radar_detect: a bitmap where each bit corresponds to a channel
+ *	width where radar detection is needed, as in the definition of
+ *	&struct ieee80211_iface_combination.@radar_detect_widths
+ * @iftype_num: array with the numbers of interfaces of each interface
+ *	type.  The index is the interface type as specified in &enum
+ *	nl80211_iftype.
+ * @iter: function to call for each matching combination
+ * @data: pointer to pass to iter function
+ *
+ * This function can be called by the driver to check what possible
+ * combinations it fits in at a given moment, e.g. for channel switching
+ * purposes.
+ */
+int cfg80211_iter_combinations(struct wiphy *wiphy,
+			       const int num_different_channels,
+			       const u8 radar_detect,
+			       const int iftype_num[NUM_NL80211_IFTYPES],
+			       void (*iter)(const struct ieee80211_iface_combination *c,
+					    void *data),
+			       void *data);
+
 /* Logging, debugging and troubleshooting/diagnostic helpers. */
 
 /* wiphy_printk helpers, similar to dev_printk */
diff --git a/net/wireless/util.c b/net/wireless/util.c
index ea4e28d..dbacb4a 100644
--- a/net/wireless/util.c
+++ b/net/wireless/util.c
@@ -1266,10 +1266,13 @@ int cfg80211_validate_beacon_int(struct cfg80211_registered_device *rdev,
 	return res;
 }
 
-int cfg80211_check_combinations(struct wiphy *wiphy,
-				const int num_different_channels,
-				const u8 radar_detect,
-				const int iftype_num[NUM_NL80211_IFTYPES])
+int cfg80211_iter_combinations(struct wiphy *wiphy,
+			       const int num_different_channels,
+			       const u8 radar_detect,
+			       const int iftype_num[NUM_NL80211_IFTYPES],
+			       void (*iter)(const struct ieee80211_iface_combination *c,
+					    void *data),
+			       void *data)
 {
 	int i, j, iftype;
 	int num_interfaces = 0;
@@ -1326,13 +1329,40 @@ int cfg80211_check_combinations(struct wiphy *wiphy,
 		/* This combination covered all interface types and
 		 * supported the requested numbers, so we're good.
 		 */
-		kfree(limits);
-		return 0;
+
+		(*iter)(c, data);
  cont:
 		kfree(limits);
 	}
 
-	return -EBUSY;
+	return 0;
+}
+EXPORT_SYMBOL(cfg80211_iter_combinations);
+
+static void
+cfg80211_iter_sum_ifcombs(const struct ieee80211_iface_combination *c,
+			  void *data)
+{
+	int *num = data;
+	(*num)++;
+}
+
+int cfg80211_check_combinations(struct wiphy *wiphy,
+				const int num_different_channels,
+				const u8 radar_detect,
+				const int iftype_num[NUM_NL80211_IFTYPES])
+{
+	int err, num = 0;
+
+	err = cfg80211_iter_combinations(wiphy, num_different_channels,
+					 radar_detect, iftype_num,
+					 cfg80211_iter_sum_ifcombs, &num);
+	if (err)
+		return err;
+	if (num == 0)
+		return -EBUSY;
+
+	return 0;
 }
 EXPORT_SYMBOL(cfg80211_check_combinations);
 
-- 
1.8.5.3


  reply	other threads:[~2014-04-09 13:35 UTC|newest]

Thread overview: 199+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-03-18 13:53 [RFC 00/21] cfg80211/mac80211: multi-vif csa Michal Kazior
2014-03-18 13:53 ` [RFC 01/21] mac80211: add support for radar detection for reservations Michal Kazior
2014-03-18 13:53 ` [RFC 02/21] cfg80211: allow drivers to iterate over matching combinations Michal Kazior
2014-03-18 13:53 ` [RFC 03/21] mac80211: add max channel calculation utility function Michal Kazior
2014-03-18 16:17   ` Eliad Peller
2014-03-19  8:32     ` Michal Kazior
2014-03-19  8:43       ` Eliad Peller
2014-03-19  8:54         ` Michal Kazior
2014-03-19 10:18           ` Eliad Peller
2014-03-18 13:53 ` [RFC 04/21] mac80211: prevent chanctx overcommit Michal Kazior
2014-03-18 16:25   ` Eliad Peller
2014-03-18 13:53 ` [RFC 05/21] mac80211: track assigned vifs in chanctx Michal Kazior
2014-03-18 13:53 ` [RFC 06/21] mac80211: track reserved " Michal Kazior
2014-03-18 13:53 ` [RFC 07/21] mac80211: improve find_chanctx() for reservations Michal Kazior
2014-03-18 16:42   ` Eliad Peller
2014-03-19  8:34     ` Michal Kazior
2014-03-19  8:47       ` Eliad Peller
2014-03-19  9:00         ` Michal Kazior
2014-03-19 10:53           ` Eliad Peller
2014-03-18 13:53 ` [RFC 08/21] mac80211: improve chanctx reservation lookup Michal Kazior
2014-03-18 16:57   ` Eliad Peller
2014-03-19  8:45     ` Michal Kazior
2014-03-18 13:53 ` [RFC 09/21] mac80211: split ieee80211_new_chanctx() Michal Kazior
2014-03-18 13:53 ` [RFC 10/21] mac80211: split ieee80211_free_chanctx() Michal Kazior
2014-03-18 13:53 ` [RFC 11/21] mac80211: fix racy usage of chanctx->refcount Michal Kazior
2014-03-18 13:53 ` [RFC 12/21] mac80211: compute chanctx refcount on-the-fly Michal Kazior
2014-03-18 13:53 ` [RFC 13/21] mac80211: implement multi-vif in-place reservations Michal Kazior
2014-03-19 18:35   ` Eliad Peller
2014-03-20  7:25     ` Michal Kazior
2014-03-18 13:53 ` [RFC 14/21] mac80211: fix CSA tx queue locking Michal Kazior
2014-03-18 13:53 ` [RFC 15/21] mac80211: split CSA finalize function Michal Kazior
2014-03-18 13:53 ` [RFC 16/21] mac80211: make check_combinations() aware of chanctx reservation Michal Kazior
2014-03-18 13:53 ` [RFC 17/21] mac80211: use chanctx reservation for AP CSA Michal Kazior
2014-03-18 13:53 ` [RFC 18/21] mac80211: use chanctx reservation for STA CSA Michal Kazior
2014-03-18 13:53 ` [RFC 19/21] mac80211: ignore cqm during csa Michal Kazior
2014-03-18 13:53 ` [RFC 20/21] mac80211: remove old unused channel switching code Michal Kazior
2014-03-18 13:53 ` [RFC 21/21] cfg80211: remove channel_switch combination check Michal Kazior
2014-03-18 15:52 ` [RFC 00/21] cfg80211/mac80211: multi-vif csa Eliad Peller
2014-03-19  9:34   ` Luca Coelho
2014-03-21 13:47 ` [PATCH v2 00/13] cfg80211/mac80211: implement multi-vif chanctx reservations Michal Kazior
2014-03-21 13:47   ` [PATCH v2 01/13] cfg80211: allow drivers to iterate over matching combinations Michal Kazior
2014-03-28 13:05     ` Johannes Berg
2014-03-28 13:21       ` Michal Kazior
2014-03-28 13:22         ` Johannes Berg
2014-03-28 13:42           ` Michal Kazior
2014-03-28 13:49             ` Johannes Berg
2014-03-21 13:47   ` [PATCH v2 02/13] mac80211: add max channel calculation utility function Michal Kazior
2014-03-21 13:47   ` [PATCH v2 03/13] mac80211: prevent chanctx overcommit Michal Kazior
2014-03-25  7:59     ` Luca Coelho
2014-03-25  8:13       ` Luca Coelho
2014-03-25  8:37       ` Michal Kazior
2014-03-25  9:45         ` Luca Coelho
2014-03-21 13:47   ` [PATCH v2 04/13] mac80211: add support for radar detection for reservations Michal Kazior
2014-03-21 13:47   ` [PATCH v2 05/13] mac80211: track assigned vifs in chanctx Michal Kazior
2014-03-28 13:06     ` Johannes Berg
2014-03-21 13:47   ` [PATCH v2 06/13] mac80211: track reserved " Michal Kazior
2014-03-28 13:07     ` Johannes Berg
2014-03-21 13:47   ` [PATCH v2 07/13] mac80211: improve find_chanctx() for reservations Michal Kazior
2014-03-28 13:08     ` Johannes Berg
2014-03-28 13:32       ` Michal Kazior
2014-03-21 13:47   ` [PATCH v2 08/13] mac80211: improve chanctx reservation lookup Michal Kazior
2014-03-21 13:47   ` [PATCH v2 09/13] mac80211: split ieee80211_new_chanctx() Michal Kazior
2014-03-21 13:47   ` [PATCH v2 10/13] mac80211: split ieee80211_free_chanctx() Michal Kazior
2014-03-21 13:47   ` [PATCH v2 11/13] mac80211: fix racy usage of chanctx->refcount Michal Kazior
2014-03-21 13:47   ` [PATCH v2 12/13] mac80211: compute chanctx refcount on-the-fly Michal Kazior
2014-03-28 13:11     ` Johannes Berg
2014-03-28 13:22       ` Michal Kazior
2014-03-28 13:25         ` Johannes Berg
2014-03-21 13:47   ` [PATCH v2 13/13] mac80211: implement multi-vif in-place reservations Michal Kazior
2014-03-31 10:39   ` [PATCH v3 00/13] cfg80211/mac80211: implement multi-vif chanctx reservations Michal Kazior
2014-03-31 10:39     ` [PATCH v3 01/13] cfg80211: allow drivers to iterate over matching combinations Michal Kazior
2014-03-31 10:39     ` [PATCH v3 02/13] mac80211: add max channel calculation utility function Michal Kazior
2014-04-08 13:23       ` Johannes Berg
2014-03-31 10:39     ` [PATCH v3 03/13] mac80211: prevent chanctx overcommit Michal Kazior
2014-03-31 10:39     ` [PATCH v3 04/13] mac80211: add support for radar detection for reservations Michal Kazior
2014-04-08 13:25       ` Johannes Berg
2014-04-09  7:05         ` Michal Kazior
2014-03-31 10:39     ` [PATCH v3 05/13] mac80211: track assigned vifs in chanctx Michal Kazior
2014-03-31 10:39     ` [PATCH v3 06/13] mac80211: track reserved " Michal Kazior
2014-03-31 10:39     ` [PATCH v3 07/13] mac80211: improve find_chanctx() for reservations Michal Kazior
2014-03-31 10:39     ` [PATCH v3 08/13] mac80211: improve chanctx reservation lookup Michal Kazior
2014-03-31 10:39     ` [PATCH v3 09/13] mac80211: split ieee80211_new_chanctx() Michal Kazior
2014-03-31 10:39     ` [PATCH v3 10/13] mac80211: split ieee80211_free_chanctx() Michal Kazior
2014-03-31 10:39     ` [PATCH v3 11/13] mac80211: fix racy usage of chanctx->refcount Michal Kazior
2014-03-31 10:39     ` [PATCH v3 12/13] mac80211: compute chanctx refcount on-the-fly Michal Kazior
2014-03-31 10:39     ` [PATCH v3 13/13] mac80211: implement multi-vif in-place reservations Michal Kazior
2014-03-31 16:15       ` Eliad Peller
2014-04-01  5:10         ` Michal Kazior
2014-04-01  7:46           ` Eliad Peller
2014-04-01  7:54             ` Michal Kazior
2014-04-01  8:10               ` Eliad Peller
2014-04-01  8:26                 ` Michal Kazior
2014-04-08 13:30     ` [PATCH v3 00/13] cfg80211/mac80211: implement multi-vif chanctx reservations Johannes Berg
2014-04-08 14:00       ` Luca Coelho
2014-04-09  7:07         ` Michal Kazior
2014-04-09 13:29     ` [PATCH v4 " Michal Kazior
2014-04-09 13:29       ` Michal Kazior [this message]
2014-04-09 13:29       ` [PATCH v4 02/13] mac80211: add max channel calculation utility function Michal Kazior
2014-04-09 13:29       ` [PATCH v4 03/13] mac80211: prevent chanctx overcommit Michal Kazior
2014-04-09 13:29       ` [PATCH v4 04/13] mac80211: add support for radar detection for reservations Michal Kazior
2014-04-09 13:29       ` [PATCH v4 05/13] mac80211: track assigned vifs in chanctx Michal Kazior
2014-04-09 13:29       ` [PATCH v4 06/13] mac80211: track reserved " Michal Kazior
2014-04-09 13:29       ` [PATCH v4 07/13] mac80211: improve find_chanctx() for reservations Michal Kazior
2014-04-09 13:29       ` [PATCH v4 08/13] mac80211: improve chanctx reservation lookup Michal Kazior
2014-04-09 13:29       ` [PATCH v4 09/13] mac80211: split ieee80211_new_chanctx() Michal Kazior
2014-04-09 13:29       ` [PATCH v4 10/13] mac80211: split ieee80211_free_chanctx() Michal Kazior
2014-04-09 13:29       ` [PATCH v4 11/13] mac80211: fix racy usage of chanctx->refcount Michal Kazior
2014-04-09 13:29       ` [PATCH v4 12/13] mac80211: compute chanctx refcount on-the-fly Michal Kazior
2014-04-09 13:29       ` [PATCH v4 13/13] mac80211: implement multi-vif in-place reservations Michal Kazior
2014-04-28 16:32         ` [v4 " Zhao, Gang
2014-04-29  6:10           ` Michal Kazior
2014-04-29 19:44             ` Johannes Berg
2014-04-30  9:21         ` [PATCH v5] " Michal Kazior
2014-05-06 10:41           ` Johannes Berg
2014-05-06 12:47             ` Michal Kazior
2014-05-06 14:05               ` Johannes Berg
2014-05-07  6:05                 ` Michal Kazior
2014-05-07  8:07                   ` Johannes Berg
2014-05-07  8:51                     ` Michal Kazior
2014-05-07  9:41                       ` Luca Coelho
2014-05-07  9:40                     ` Luca Coelho
2014-05-07 10:02                       ` Michal Kazior
2014-05-07 10:16                         ` Luca Coelho
2014-05-07 10:38                           ` Michal Kazior
2014-05-07 11:09                             ` Johannes Berg
2014-05-07 11:19                               ` Michal Kazior
2014-05-07 11:54                                 ` Johannes Berg
2014-05-07 12:08                                   ` Luca Coelho
2014-05-07 12:13                                     ` Johannes Berg
2014-05-07 12:20                                       ` Luca Coelho
2014-05-07 12:38                                         ` Johannes Berg
2014-05-07 12:44                                           ` Michal Kazior
2014-05-07 12:53                                             ` Johannes Berg
2014-05-07 13:03                                               ` Michal Kazior
2014-05-08 10:06                                                 ` Johannes Berg
2014-05-08 10:41                                                   ` Michal Kazior
2014-05-13 13:42                                                     ` Johannes Berg
2014-05-13 13:56                                                       ` Michal Kazior
2014-05-13 15:53                                                         ` Johannes Berg
2014-05-14  5:14                                                           ` Michal Kazior
2014-05-14  8:25                                                             ` Johannes Berg
2014-05-14  8:51                                                               ` Michal Kazior
2014-05-08 10:08                                                 ` Johannes Berg
2014-05-07 12:53                                           ` Luca Coelho
2014-05-07 13:06                                             ` Johannes Berg
2014-05-07 13:10                                               ` Luca Coelho
2014-05-08 10:03                                                 ` Johannes Berg
2014-05-07 12:27                                       ` Michal Kazior
2014-05-07 12:36                                         ` Johannes Berg
2014-05-07 12:20                                   ` Michal Kazior
2014-05-07 12:34                                     ` Johannes Berg
2014-05-07 11:48                               ` Luca Coelho
2014-05-07  9:27                   ` Luca Coelho
2014-05-07 11:09                     ` Johannes Berg
2014-05-07 11:24                       ` Luca Coelho
2014-04-25 15:20       ` [PATCH v4 00/13] cfg80211/mac80211: implement multi-vif chanctx reservations Johannes Berg
2014-04-28  6:16         ` Michal Kazior
2014-03-21 13:52 ` [PATCH v2 0/7] cfg80211/mac80211: implement multi-vif csa Michal Kazior
2014-03-21 13:52   ` [PATCH v2 1/7] cfg80211: fix radar_detect combination checking Michal Kazior
2014-03-28 12:59     ` Johannes Berg
2014-03-21 13:52   ` [PATCH v2 2/7] mac80211: make check_combinations() aware of chanctx reservation Michal Kazior
2014-03-28 13:00     ` Johannes Berg
2014-03-21 13:52   ` [PATCH v2 3/7] mac80211: use chanctx reservation for AP CSA Michal Kazior
2014-03-28 13:01     ` Johannes Berg
2014-03-21 13:52   ` [PATCH v2 4/7] mac80211: use chanctx reservation for STA CSA Michal Kazior
2014-03-21 13:52   ` [PATCH v2 5/7] mac80211: ignore cqm during csa Michal Kazior
2014-03-21 13:52   ` [PATCH v2 6/7] mac80211: remove old unused channel switching code Michal Kazior
2014-03-28 13:03     ` Johannes Berg
2014-03-21 13:52   ` [PATCH v2 7/7] cfg80211: remove channel_switch combination check Michal Kazior
2014-03-31 12:04   ` [PATCH v3 0/5] cfg80211/mac80211: implement multi-vif csa Michal Kazior
2014-03-31 12:04     ` [PATCH v3 1/5] mac80211: make check_combinations() aware of chanctx reservation Michal Kazior
2014-03-31 12:04     ` [PATCH v3 2/5] mac80211: use chanctx reservation for AP CSA Michal Kazior
2014-03-31 13:12       ` Michal Kazior
2014-03-31 12:04     ` [PATCH v3 3/5] mac80211: use chanctx reservation for STA CSA Michal Kazior
2014-03-31 12:04     ` [PATCH v3 4/5] mac80211: ignore cqm during csa Michal Kazior
2014-03-31 12:04     ` [PATCH v3 5/5] cfg80211: remove channel_switch combination check Michal Kazior
2014-04-09 13:45     ` [PATCH v4 0/5] cfg80211/mac80211: implement multi-vif csa Michal Kazior
2014-04-09 13:45       ` [PATCH v4 1/5] mac80211: make check_combinations() aware of chanctx reservation Michal Kazior
2014-04-09 13:45       ` [PATCH v4 2/5] mac80211: use chanctx reservation for AP CSA Michal Kazior
2014-05-06 14:42         ` Johannes Berg
2014-05-07  7:25           ` Michal Kazior
2014-05-07  8:05             ` Johannes Berg
2014-05-07  9:05               ` Michal Kazior
2014-05-07  9:06                 ` Michal Kazior
2014-05-07  9:07                 ` Johannes Berg
2014-05-07  9:41                   ` Michal Kazior
2014-05-07 11:17                     ` Johannes Berg
2014-05-07 11:43                       ` Michal Kazior
2014-05-07 11:50                         ` Johannes Berg
2014-05-07 12:12                           ` Michal Kazior
2014-04-09 13:45       ` [PATCH v4 3/5] mac80211: use chanctx reservation for STA CSA Michal Kazior
2014-05-06 14:43         ` Johannes Berg
2014-05-07  7:35           ` Michal Kazior
2014-05-07  8:03             ` Johannes Berg
2014-04-09 13:45       ` [PATCH v4 4/5] mac80211: ignore cqm during csa Michal Kazior
2014-05-06 14:45         ` Johannes Berg
2014-04-09 13:45       ` [PATCH v4 5/5] cfg80211: remove channel_switch combination check Michal Kazior
2014-05-06 14:45         ` Johannes Berg
2014-05-07  7:40           ` Michal Kazior

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1397050174-26121-2-git-send-email-michal.kazior@tieto.com \
    --to=michal.kazior@tieto.com \
    --cc=johannes@sipsolutions.net \
    --cc=linux-wireless@vger.kernel.org \
    --cc=luca@coelho.fi \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).