From: Vasanthakumar Thiagarajan <quic_vthiagar@quicinc.com>
To: Johannes Berg <johannes@sipsolutions.net>
Cc: <linux-wireless@vger.kernel.org>
Subject: Re: [RFC 1/4] wifi: cfg80211: Add provision to advertise multiple radio in one wiphy
Date: Fri, 21 Oct 2022 18:15:47 +0530 [thread overview]
Message-ID: <2a731aab-8783-209b-dc6a-abbc8265b68a@quicinc.com> (raw)
In-Reply-To: <0af1c2b6e7b964b559989e860e600a5c27372e83.camel@sipsolutions.net>
On 10/21/2022 5:34 PM, Johannes Berg wrote:
> On Tue, 2022-09-20 at 15:35 +0530, Vasanthakumar Thiagarajan wrote:
>> The prerequisite for MLO support in cfg80211/mac80211 is that all
>> the links participating in MLO must be from the same wiphy/ieee80211_hw.
>> To meet this expectation, some drivers may need to group multiple discrete
>> hardware each acting as a link in MLO under one wiphy. Though most of the
>> hardware abstractions must be handled within the driver itself, it may be
>> required to have some sort of mapping while describing interface
>> combination capabilities for each of the underlying hardware. This commit
>> adds an advertisement provision for drivers supporting such MLO mode of
>> operation.
>>
>> Capability advertisement such as the number of supported channels for each
>> physical hardware has been identified to support some of the common use
>> cases.
>>
>> Signed-off-by: Vasanthakumar Thiagarajan <quic_vthiagar@quicinc.com>
>> ---
>> include/net/cfg80211.h | 24 +++++++++
>> net/wireless/core.c | 109 +++++++++++++++++++++++++++++++++++++++++
>> 2 files changed, 133 insertions(+)
>>
>> diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
>> index e09ff87146c1..4662231ad068 100644
>> --- a/include/net/cfg80211.h
>> +++ b/include/net/cfg80211.h
>> @@ -5088,6 +5088,18 @@ struct wiphy_iftype_akm_suites {
>> int n_akm_suites;
>> };
>>
>> +/**
>> + * struct ieee80211_supported_chans_per_hw - supported channels as per the
>> + * underlying physical hardware configuration
>> + *
>> + * @n_chans: number of channels in @chans
>> + * @chans: list of channels supported by the constituent hardware
>> + */
>> +struct ieee80211_chans_per_hw {
>> + int n_chans;
>
> nit: unsigned?
>
>> + * @hw_chans: list of the channels supported by every constituent underlying
>
> "every" here refers to the fact that you have all the channels, right? I
> mean, hw_chans is per hardware, basically.
Correct, it refers all the channels supported per hardware registered
something like below
hw_chans[0] = {
// 2 GHz radio
<num_2ghz_chans>,
{
<ieee80211_channel_2ghz_1>,
<ieee80211_channel_2ghz_2>, ...
}
}
hw_chans[1] = {
{
// 5 GHz radio
<num_5ghz_chans>,
{
<ieee80211_channel_5ghz_1>,
<ieee80211_channel_5ghz_2>, ...
}
}
...
>
>> + * hardware. Drivers abstracting multiple discrete hardware (radio) under
>> + * one wiphy can advertise the list of channels supported by each physical
>> + * hardware in this list. Underlying hardware specific channel list can be
>> + * used while describing interface combination for each of them.
>> + * @num_hw: number of underlying hardware for which the channels list are
>> + * advertised in @hw_chans.
>> + *
>> */
>> struct wiphy {
>> struct mutex mtx;
>> @@ -5445,6 +5466,9 @@ struct wiphy {
>> u8 ema_max_profile_periodicity;
>> u16 max_num_akm_suites;
>>
>> + struct ieee80211_chans_per_hw **hw_chans;
>> + int num_hw;
>
> also here, maybe unsigned.
>
>> +static bool
>> +cfg80211_hw_chans_in_supported_list(struct wiphy *wiphy,
>> + const struct ieee80211_chans_per_hw *chans)
>> +{
>> + enum nl80211_band band;
>> + struct ieee80211_supported_band *sband;
>> + bool found;
>> + int i, j;
>> +
>> + for (i = 0; i < chans->n_chans; i++) {
>> + found = false;
>
> nit: you can move the variable declaration here
>
> bool found = false;
> \n
>
> since you don't need it outside the loop.
>
>> + for (i = 0; i < wiphy->num_hw; i++) {
>> + for (j = 0; j < wiphy->num_hw; j++) {
>> + const struct ieee80211_chans_per_hw *hw_chans1;
>> + const struct ieee80211_chans_per_hw *hw_chans2;
>> +
>> + if (i == j)
>> + continue;
>
> It's symmetric, if I read the code above right, so you can do
>
> for (j = i; j < ...; j++)
>
> in the second loop and avoid this?
Sure
>
>
>> + hw_chans = wiphy->hw_chans[i];
>> + if (!cfg80211_hw_chans_in_supported_list(wiphy, hw_chans)) {
>> + WARN_ON(1);
>
> I can kind of see the point in not using WARN_ON(!cfg80211_hw_chans...)
> since it gets really long, but maybe just remove the warning?
>
>> + if (cfg80211_validate_per_hw_chans(&rdev->wiphy)) {
>> + WARN_ON(1);
>> + return -EINVAL;
>>
>
> Anyway you'll have one here, and it's not directly visible which
> condition failed anyway.
>
> And you could use WARN_ON(validate(...)) here :)
Sure, thanks!
Vasanth
next prev parent reply other threads:[~2022-10-21 12:46 UTC|newest]
Thread overview: 15+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-09-20 10:05 [RFC 0/4] wifi: cfg80211/mac80211: capability advertisement infra for multi-hw abstraction under one wiphy Vasanthakumar Thiagarajan
2022-09-20 10:05 ` [RFC 1/4] wifi: cfg80211: Add provision to advertise multiple radio in " Vasanthakumar Thiagarajan
2022-10-21 12:04 ` Johannes Berg
2022-10-21 12:45 ` Vasanthakumar Thiagarajan [this message]
2022-09-20 10:05 ` [RFC 2/4] wifi: nl80211: send underlying multi-hardware channel capabilities to user space Vasanthakumar Thiagarajan
2022-10-21 12:13 ` Johannes Berg
2022-10-21 12:57 ` Vasanthakumar Thiagarajan
2022-09-20 10:05 ` [RFC 3/4] wifi: cfg80211/mac80211: extend iface comb advertisement for multi-hardware dev Vasanthakumar Thiagarajan
2022-10-21 12:22 ` Johannes Berg
2022-10-21 13:21 ` Vasanthakumar Thiagarajan
2022-09-20 10:05 ` [RFC 4/4] wifi: nl80211: send iface combination to user space in multi-hardware wiphy Vasanthakumar Thiagarajan
2022-10-21 12:25 ` Johannes Berg
2022-10-21 13:31 ` Vasanthakumar Thiagarajan
2022-10-21 11:57 ` [RFC 0/4] wifi: cfg80211/mac80211: capability advertisement infra for multi-hw abstraction under one wiphy Johannes Berg
2022-10-21 12:11 ` Vasanthakumar Thiagarajan
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=2a731aab-8783-209b-dc6a-abbc8265b68a@quicinc.com \
--to=quic_vthiagar@quicinc.com \
--cc=johannes@sipsolutions.net \
--cc=linux-wireless@vger.kernel.org \
/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