2018-08-12 17:31:24

by Kristian Evensen

[permalink] [raw]
Subject: [PATCH] mt76: Enable NL80211_EXT_FEATURE_CQM_RSSI_LIST

Enable the use of CQM with mt76-devices.

Signed-off-by: Kristian Evensen <[email protected]>
---
drivers/net/wireless/mediatek/mt76/mac80211.c | 2 ++
1 file changed, 2 insertions(+)

diff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c b/drivers/net/wireless/mediatek/mt76/mac80211.c
index 029d54bc..3eb328ff 100644
--- a/drivers/net/wireless/mediatek/mt76/mac80211.c
+++ b/drivers/net/wireless/mediatek/mt76/mac80211.c
@@ -305,6 +305,8 @@ int mt76_register_device(struct mt76_dev *dev, bool vht,

wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR;

+ wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
+
wiphy->available_antennas_tx = dev->antenna_mask;
wiphy->available_antennas_rx = dev->antenna_mask;

--
2.14.1


2018-08-12 20:53:07

by Kalle Valo

[permalink] [raw]
Subject: Re: [PATCH] mt76: Enable NL80211_EXT_FEATURE_CQM_RSSI_LIST

Kristian Evensen <[email protected]> writes:

> Enable the use of CQM with mt76-devices.
>
> Signed-off-by: Kristian Evensen <[email protected]>
> ---
> drivers/net/wireless/mediatek/mt76/mac80211.c | 2 ++
> 1 file changed, 2 insertions(+)
>
> diff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c b/drivers/net/wireless/mediatek/mt76/mac80211.c
> index 029d54bc..3eb328ff 100644
> --- a/drivers/net/wireless/mediatek/mt76/mac80211.c
> +++ b/drivers/net/wireless/mediatek/mt76/mac80211.c
> @@ -305,6 +305,8 @@ int mt76_register_device(struct mt76_dev *dev, bool vht,
>
> wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR;
>
> + wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);

So have you tested this and with what devices? For example, does it work
with recently added USB devices?

--
Kalle Valo

2018-08-13 13:37:03

by Lorenzo Bianconi

[permalink] [raw]
Subject: Re: [PATCH] mt76: Enable NL80211_EXT_FEATURE_CQM_RSSI_LIST

> On 8/12/2018 8:14 PM, Kalle Valo wrote:
> > Kristian Evensen <[email protected]> writes:
> >
> >> Enable the use of CQM with mt76-devices.
> >>
> >> Signed-off-by: Kristian Evensen <[email protected]>
> >> ---
> >> drivers/net/wireless/mediatek/mt76/mac80211.c | 2 ++
> >> 1 file changed, 2 insertions(+)
> >>
> >> diff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c b/drivers/net/wireless/mediatek/mt76/mac80211.c
> >> index 029d54bc..3eb328ff 100644
> >> --- a/drivers/net/wireless/mediatek/mt76/mac80211.c
> >> +++ b/drivers/net/wireless/mediatek/mt76/mac80211.c
> >> @@ -305,6 +305,8 @@ int mt76_register_device(struct mt76_dev *dev, bool vht,
> >>
> >> wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR;
> >>
> >> + wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
> >
> > So have you tested this and with what devices? For example, does it work
> > with recently added USB devices?
>
> I was looking into this as it looks suspicious to me. From reading the
> description of this ext_feature flag it seems this is an extention of CQM:
>
> """
> * @NL80211_EXT_FEATURE_CQM_RSSI_LIST: With this driver the
> * %NL80211_ATTR_CQM_RSSI_THOLD attribute accepts a list of zero or more
> * RSSI threshold values to monitor rather than exactly one threshold.
> """
>
> Also looking at mt76x2_bss_info_changed() it does not handle
> BSS_CHANGED_CQM so I doubt it has support for it (yet). The driver does
> not use IEEE80211_VIF_SUPPORTS_CQM_RSSI which is a requirement for it.
>
> Regards,
> Arend
>

According to my understanding (please correct me if I am wrong)
BSS_CHANGED_CQM is only needed if CQM_RSSI is handled
by the driver/fw, while if it is not set mac80211 will take care of that
in ieee80211_handle_beacon_sig routine.
I am AFK at the moment, I will test that patch when I am back from vacations.

Regards,
Lorenzo

>
> https://elixir.bootlin.com/linux/latest/source/drivers/net/wireless/mediatek/mt76/mt76x2_main.c#L223
>

2018-08-13 07:39:20

by Kristian Evensen

[permalink] [raw]
Subject: Re: [PATCH] mt76: Enable NL80211_EXT_FEATURE_CQM_RSSI_LIST

Hi Kalle & Arnd,
On Sun, Aug 12, 2018 at 8:44 PM Arend van Spriel
<[email protected]> wrote:
> > So have you tested this and with what devices? For example, does it work
> > with recently added USB devices?
>
> I was looking into this as it looks suspicious to me. From reading the
> description of this ext_feature flag it seems this is an extention of CQM:

Thank you very much for your feedback. My commit message should have
been more detailed, sorry about that. I have checked that the flag
works as intended with mt7602-, mt7603- and mt7612-based wifi cards. I
have not had the opportunity to test with any of the recently added
USB devices, as I don't have access to any of those.

In order to test the flag, I wrote a small program which subscribes to
the CQM-multicast group, passes an RSSI threshold-list to the kernel
and logs the received CQM-events. I then disconnected and connected
the wifi-antennas of the different cards. My threshold list was {-70,
-60, -50, -40} and while unscrewing the antenna I received multiple
below-events. When I attached the antenna again, I received multiple
above-events. As an example, here is the log when I tested with mt7612
(singal level when starting was ~-48 dBm):

Requested nl80211 generic netlink id
nl80211 has generic netlink id: 23
mlme ID is 5
Added socket to mlme group
Sent NL80211_CMD_SET_CQM
No error
Wifi (idx 18) went below threshold. RSSI -52
Wifi (idx 18) went above threshold. RSSI -49
Wifi (idx 18) went below threshold. RSSI -52
Wifi (idx 18) went below threshold. RSSI -62
Wifi (idx 18) went above threshold. RSSI -59
Wifi (idx 18) went above threshold. RSSI -49

Based on how I interpret the output and my understanding of how CQM +
RSSI_LIST works, this output shows that mt76 works fine with
NL80211_EXT_FEATURE_CQM_RSSI_LIST (at least for my cards). The list
was interpreted and handled correctly, as I received events when the
RSSI passed different thresholds in my list (-50, -60).

BR,
Kristian

2018-08-31 17:22:51

by Lorenzo Bianconi

[permalink] [raw]
Subject: Re: [PATCH] mt76: Enable NL80211_EXT_FEATURE_CQM_RSSI_LIST

> Hi Lorenzo,
>
> On Mon, Aug 13, 2018 at 4:25 PM Kristian Evensen
> <[email protected]> wrote:
> > On Mon, Aug 13, 2018 at 12:55 PM Lorenzo Bianconi
> > <[email protected]> wrote:
> > > I am AFK at the moment, I will test that patch when I am back from vacations.
>
> I hope you enjoyed you vacations. Have you been able to test if any of
> the mt76 USB-dongles support CQM?

I have not tested your patch yet sorry but there are no differences
between pcie and usb devices regarding rx RSSI management (both of them use
shared code for it) so I guess the feature will work on usb devices if
it works on pcie ones.

Regards,
Lorenzo

>
> BR,
> Kristian

2018-08-18 05:34:24

by Andrew Zaborowski

[permalink] [raw]
Subject: Re: [PATCH] mt76: Enable NL80211_EXT_FEATURE_CQM_RSSI_LIST

Hi,

On 13 August 2018 at 16:25, Kristian Evensen <[email protected]> wrote:
> On Mon, Aug 13, 2018 at 12:55 PM Lorenzo Bianconi
> <[email protected]> wrote:
>> According to my understanding (please correct me if I am wrong)
>> BSS_CHANGED_CQM is only needed if CQM_RSSI is handled
>> by the driver/fw, while if it is not set mac80211 will take care of that
>> in ieee80211_handle_beacon_sig routine.
>> I am AFK at the moment, I will test that patch when I am back from vacations.
>
> That matches my understanding as well (base on for example the message
> for commit ae44b502669d0cd1f167cdb48994292aa20fd3dd).

This is right, mt7601u had this flag added in that commit but the mt76
drivers were added later. It seems mt76_rx_convert always sets the
ieee80211_rx_status.signal field so mac80211 can check the rssi values
and call any CQM callbacks if needed.

Best regards

2018-08-31 16:32:40

by Kristian Evensen

[permalink] [raw]
Subject: Re: [PATCH] mt76: Enable NL80211_EXT_FEATURE_CQM_RSSI_LIST

Hi Lorenzo,

On Mon, Aug 13, 2018 at 4:25 PM Kristian Evensen
<[email protected]> wrote:
> On Mon, Aug 13, 2018 at 12:55 PM Lorenzo Bianconi
> <[email protected]> wrote:
> > I am AFK at the moment, I will test that patch when I am back from vacations.

I hope you enjoyed you vacations. Have you been able to test if any of
the mt76 USB-dongles support CQM?

BR,
Kristian

2018-08-13 17:08:32

by Kristian Evensen

[permalink] [raw]
Subject: Re: [PATCH] mt76: Enable NL80211_EXT_FEATURE_CQM_RSSI_LIST

Hi Lorenzo,

On Mon, Aug 13, 2018 at 12:55 PM Lorenzo Bianconi
<[email protected]> wrote:
> According to my understanding (please correct me if I am wrong)
> BSS_CHANGED_CQM is only needed if CQM_RSSI is handled
> by the driver/fw, while if it is not set mac80211 will take care of that
> in ieee80211_handle_beacon_sig routine.
> I am AFK at the moment, I will test that patch when I am back from vacations.

That matches my understanding as well (base on for example the message
for commit ae44b502669d0cd1f167cdb48994292aa20fd3dd).

Great that you are willing to test the patch with one of the mt76
USB-dongles. Unless anyone objects, I will postpone sending a v2 until
you report back with your findings :)

BR,
Kristian

2018-08-31 17:27:42

by Kristian Evensen

[permalink] [raw]
Subject: Re: [PATCH] mt76: Enable NL80211_EXT_FEATURE_CQM_RSSI_LIST

Hi,
On Fri, Aug 31, 2018 at 3:15 PM Lorenzo Bianconi
<[email protected]> wrote:
> I have not tested your patch yet sorry but there are no differences
> between pcie and usb devices regarding rx RSSI management (both of them use
> shared code for it) so I guess the feature will work on usb devices if
> it works on pcie ones.

Thanks for letting me know. I will submit a v2 with an updated and
more detailed commit message.

BR,
Kristian

2018-08-13 15:21:53

by Arend van Spriel

[permalink] [raw]
Subject: Re: [PATCH] mt76: Enable NL80211_EXT_FEATURE_CQM_RSSI_LIST

On 8/13/2018 12:55 PM, Lorenzo Bianconi wrote:
>> On 8/12/2018 8:14 PM, Kalle Valo wrote:
>>> Kristian Evensen <[email protected]> writes:
>>>
>>>> Enable the use of CQM with mt76-devices.
>>>>
>>>> Signed-off-by: Kristian Evensen <[email protected]>
>>>> ---
>>>> drivers/net/wireless/mediatek/mt76/mac80211.c | 2 ++
>>>> 1 file changed, 2 insertions(+)
>>>>
>>>> diff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c b/drivers/net/wireless/mediatek/mt76/mac80211.c
>>>> index 029d54bc..3eb328ff 100644
>>>> --- a/drivers/net/wireless/mediatek/mt76/mac80211.c
>>>> +++ b/drivers/net/wireless/mediatek/mt76/mac80211.c
>>>> @@ -305,6 +305,8 @@ int mt76_register_device(struct mt76_dev *dev, bool vht,
>>>>
>>>> wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR;
>>>>
>>>> + wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
>>>
>>> So have you tested this and with what devices? For example, does it work
>>> with recently added USB devices?
>>
>> I was looking into this as it looks suspicious to me. From reading the
>> description of this ext_feature flag it seems this is an extention of CQM:
>>
>> """
>> * @NL80211_EXT_FEATURE_CQM_RSSI_LIST: With this driver the
>> * %NL80211_ATTR_CQM_RSSI_THOLD attribute accepts a list of zero or more
>> * RSSI threshold values to monitor rather than exactly one threshold.
>> """
>>
>> Also looking at mt76x2_bss_info_changed() it does not handle
>> BSS_CHANGED_CQM so I doubt it has support for it (yet). The driver does
>> not use IEEE80211_VIF_SUPPORTS_CQM_RSSI which is a requirement for it.
>>
>> Regards,
>> Arend
>>
>
> According to my understanding (please correct me if I am wrong)
> BSS_CHANGED_CQM is only needed if CQM_RSSI is handled
> by the driver/fw, while if it is not set mac80211 will take care of that
> in ieee80211_handle_beacon_sig routine.

Yeah. That explains it. Seems like mac80211 could actually set the
NL80211_EXT_FEATURE_CQM_RSSI_LIST flag is the driver does not set
IEEE80211_VIF_SUPPORTS_CQM_RSSI. That way all mac80211 drivers support
the list. Just a problem as the ext_feature is not a per-vif flag.

Regards,
Arend

2018-08-12 21:23:51

by Arend van Spriel

[permalink] [raw]
Subject: Re: [PATCH] mt76: Enable NL80211_EXT_FEATURE_CQM_RSSI_LIST

On 8/12/2018 8:14 PM, Kalle Valo wrote:
> Kristian Evensen <[email protected]> writes:
>
>> Enable the use of CQM with mt76-devices.
>>
>> Signed-off-by: Kristian Evensen <[email protected]>
>> ---
>> drivers/net/wireless/mediatek/mt76/mac80211.c | 2 ++
>> 1 file changed, 2 insertions(+)
>>
>> diff --git a/drivers/net/wireless/mediatek/mt76/mac80211.c b/drivers/net/wireless/mediatek/mt76/mac80211.c
>> index 029d54bc..3eb328ff 100644
>> --- a/drivers/net/wireless/mediatek/mt76/mac80211.c
>> +++ b/drivers/net/wireless/mediatek/mt76/mac80211.c
>> @@ -305,6 +305,8 @@ int mt76_register_device(struct mt76_dev *dev, bool vht,
>>
>> wiphy->features |= NL80211_FEATURE_ACTIVE_MONITOR;
>>
>> + wiphy_ext_feature_set(wiphy, NL80211_EXT_FEATURE_CQM_RSSI_LIST);
>
> So have you tested this and with what devices? For example, does it work
> with recently added USB devices?

I was looking into this as it looks suspicious to me. From reading the
description of this ext_feature flag it seems this is an extention of CQM:

"""
* @NL80211_EXT_FEATURE_CQM_RSSI_LIST: With this driver the
* %NL80211_ATTR_CQM_RSSI_THOLD attribute accepts a list of zero or more
* RSSI threshold values to monitor rather than exactly one threshold.
"""

Also looking at mt76x2_bss_info_changed() it does not handle
BSS_CHANGED_CQM so I doubt it has support for it (yet). The driver does
not use IEEE80211_VIF_SUPPORTS_CQM_RSSI which is a requirement for it.

Regards,
Arend


https://elixir.bootlin.com/linux/latest/source/drivers/net/wireless/mediatek/mt76/mt76x2_main.c#L223