| fc566399 | 04-Mar-2025 |
Jérôme Pouiller <jerome.pouiller@silabs.com> |
wifi: wfx: allow to enable WoWLAN using NL80211
It is possible to use nl80211 to request to the driver to do allow the required bus configuration to wake-up the host.
This patch implements the requ
wifi: wfx: allow to enable WoWLAN using NL80211
It is possible to use nl80211 to request to the driver to do allow the required bus configuration to wake-up the host.
This patch implements the required API for nl80211.
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Link: https://patch.msgid.link/20250304153224.39083-6-jerome.pouiller@silabs.com Signed-off-by: Johannes Berg <johannes.berg@intel.com>
show more ...
|
| 75516809 | 04-Mar-2025 |
Jérôme Pouiller <jerome.pouiller@silabs.com> |
wifi: wfx: allow SDIO device to wake up the host
If the device is connected with SDIO bus, it can wake up the host using either the SDIO controller (that requires MMC_PM_WAKE_SDIO_IRQ capability) or
wifi: wfx: allow SDIO device to wake up the host
If the device is connected with SDIO bus, it can wake up the host using either the SDIO controller (that requires MMC_PM_WAKE_SDIO_IRQ capability) or the out-of-bound IRQ. This patch allows both.
Obviously, the SDIO controller must be able to keep the SDIO device powered on.
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Link: https://patch.msgid.link/20250304153224.39083-5-jerome.pouiller@silabs.com Signed-off-by: Johannes Berg <johannes.berg@intel.com>
show more ...
|
| 32bd7f4b | 04-Mar-2025 |
Jérôme Pouiller <jerome.pouiller@silabs.com> |
wifi: wfx: allow SPI device to wake up the host
When the host is asleep, the device has wake up the host using the usual SPI IRQ.
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Link: h
wifi: wfx: allow SPI device to wake up the host
When the host is asleep, the device has wake up the host using the usual SPI IRQ.
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Link: https://patch.msgid.link/20250304153224.39083-4-jerome.pouiller@silabs.com Signed-off-by: Johannes Berg <johannes.berg@intel.com>
show more ...
|
| 813badc0 | 04-Mar-2025 |
Jérôme Pouiller <jerome.pouiller@silabs.com> |
wifi: wfx: declare support for WoWLAN
WF200 is able to keep the connection with the AP alive while the host is asleep. So, let's expose this capability to the user.
For now, we don't provide any wa
wifi: wfx: declare support for WoWLAN
WF200 is able to keep the connection with the AP alive while the host is asleep. So, let's expose this capability to the user.
For now, we don't provide any way to control the device filtering features. The user has to allow wake-up on any received packets and on disconnections.
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Link: https://patch.msgid.link/20250304153224.39083-3-jerome.pouiller@silabs.com Signed-off-by: Johannes Berg <johannes.berg@intel.com>
show more ...
|
| ea2274ab | 04-Oct-2023 |
Felipe Negrelli Wolter <felipe.negrelliwolter@silabs.com> |
wifi: wfx: fix case where rates are out of order
When frames are sent over the air, the device always applies the data rates in descending order. The driver assumed Minstrel also provided rate in de
wifi: wfx: fix case where rates are out of order
When frames are sent over the air, the device always applies the data rates in descending order. The driver assumed Minstrel also provided rate in descending order.
However, in some cases, Minstrel can a choose a fallback rate greater than the primary rate. In this case, the two rates was inverted, the device try highest rate first and we get many retries.
Since the device always applies rates in descending order, the workaround is to drop the rate when it higher than its predecessor in the rate list. Thus [ 4, 5, 3 ] becomes [ 4, 3 ].
This patch has been tested in isolated room with a series of attenuators. Here are the Minstrel statistics with 80dBm of attenuation:
Without the fix:
best ____________rate__________ ____statistics___ _____last____ ______sum-of________ mode guard # rate [name idx airtime max_tp] [avg(tp) avg(prob)] [retry|suc|att] [#success | #attempts] HT20 LGI 1 S MCS0 0 1477 5.6 5.2 82.7 3 0 0 3 4 HT20 LGI 1 MCS1 1 738 10.6 0.0 0.0 0 0 0 0 1 HT20 LGI 1 D MCS2 2 492 14.9 13.5 81.5 5 0 0 5 9 HT20 LGI 1 C MCS3 3 369 18.8 17.6 84.3 5 0 0 76 96 HT20 LGI 1 A P MCS4 4 246 25.4 22.4 79.5 5 0 0 11268 14026 HT20 LGI 1 B S MCS5 5 185 30.7 19.7 57.7 5 8 9 3918 9793 HT20 LGI 1 MCS6 6 164 33.0 0.0 0.0 5 0 0 6 102 HT20 LGI 1 MCS7 7 148 35.1 0.0 0.0 0 0 0 0 44
With the fix:
best ____________rate__________ ____statistics___ _____last____ ______sum-of________ mode guard # rate [name idx airtime max_tp] [avg(tp) avg(prob)] [retry|suc|att] [#success | #attempts] HT20 LGI 1 S MCS0 0 1477 5.6 1.8 28.6 1 0 0 1 5 HT20 LGI 1 DP MCS1 1 738 10.6 9.7 82.6 4 0 0 14 34 HT20 LGI 1 MCS2 2 492 14.9 9.2 55.4 5 0 0 52 77 HT20 LGI 1 B S MCS3 3 369 18.8 15.6 74.9 5 1 1 417 554 HT20 LGI 1 A MCS4 4 246 25.4 16.7 59.2 5 1 1 13812 17951 HT20 LGI 1 C S MCS5 5 185 30.7 14.0 41.0 5 1 5 57 640 HT20 LGI 1 MCS6 6 164 33.0 0.0 0.0 0 0 1 0 48 HT20 LGI 1 S MCS7 7 148 35.1 0.0 0.0 0 0 0 0 36
We can notice the device try now to send with lower rates (and high success rates). At the end, we measured 20-25% better throughput with this patch.
Fixes: 9bca45f3d692 ("staging: wfx: allow to send 802.11 frames") Tested-by: Olivier Souloumiac <olivier.souloumiac@silabs.com> Tested-by: Alexandr Suslenko <suslenko.o@ajax.systems> Reported-by: Alexandr Suslenko <suslenko.o@ajax.systems> Co-developed-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Signed-off-by: Felipe Negrelli Wolter <felipe.negrelliwolter@silabs.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20231004123039.157112-1-jerome.pouiller@silabs.com
show more ...
|
| fc627dad | 04-Oct-2023 |
Jérôme Pouiller <jerome.pouiller@silabs.com> |
wifi: wfx: implement wfx_remain_on_channel()
With some conditions, the device is able to send/receive frames during scan operation. So, it is possible to use it implement the "remain on channel" fea
wifi: wfx: implement wfx_remain_on_channel()
With some conditions, the device is able to send/receive frames during scan operation. So, it is possible to use it implement the "remain on channel" feature. We just ask for a passive scan (without sending any probe request) on one channel.
This architecture allows to leverage some interesting features: - if the device is AP, the device switches channel just after the next beacon and the beacons are stopped during the off-channel interval. - if the device is connected, it advertises it is asleep before to switch channel (so the AP should stop to try to send data)
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20231004172843.195332-9-jerome.pouiller@silabs.com
show more ...
|
| f7385a20 | 04-Oct-2023 |
Jérôme Pouiller <jerome.pouiller@silabs.com> |
wifi: wfx: allow to send frames during ROC
Until now, all the traffic was blocked during scan operation. However, scan operation is going to be used to implement Remain On Channel (ROC). In this cas
wifi: wfx: allow to send frames during ROC
Until now, all the traffic was blocked during scan operation. However, scan operation is going to be used to implement Remain On Channel (ROC). In this case, special frames (marked with IEEE80211_TX_CTL_TX_OFFCHAN) must be sent during the operation.
These frames need to be sent on the virtual interface #2. Until now, this interface was only used by the device for internal purpose. But since API 3.9, it can be used to send data during scan operation (we hijack the scan process to implement ROC).
Thus, we need to change a bit the way we match the frames with the interface.
Fortunately, the frames received during the scan are marked with the correct interface number. So there is no change to do on this part.
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20231004172843.195332-8-jerome.pouiller@silabs.com
show more ...
|
| 04106ec5 | 04-Oct-2023 |
Jérôme Pouiller <jerome.pouiller@silabs.com> |
wifi: wfx: scan_lock is global to the device
Currently, one scan_lock is associated to each vif. However, concurrent scan on vifs is explicitly prohibited by the device. Currently, scan_lock is asso
wifi: wfx: scan_lock is global to the device
Currently, one scan_lock is associated to each vif. However, concurrent scan on vifs is explicitly prohibited by the device. Currently, scan_lock is associated with a vif but it is always locked with conf_mutex (there is a case where conf_mutex is not associated to scan_lock but scan_lock is tested on all interfaces). So concurrent scan on vifs cannot happen.
So, this patch relocate scan_lock to the device and simplify the code.
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20231004172843.195332-7-jerome.pouiller@silabs.com
show more ...
|
| f091bcb6 | 04-Oct-2023 |
Jérôme Pouiller <jerome.pouiller@silabs.com> |
wifi: wfx: simplify exclusion between scan and Rx filters
The device ignore the rx filters during the scan operation. wfx_configure_filter() acquires scan_lock to reflect this restriction. However,
wifi: wfx: simplify exclusion between scan and Rx filters
The device ignore the rx filters during the scan operation. wfx_configure_filter() acquires scan_lock to reflect this restriction. However, it is not really necessary since mac80211 don't try to configure Rx filters during scan.
However, the things are changing. The scan operation is going to be used to implement remain-on-channel. In this case, wfx_configure_filter() can be called during the scan. Currently, this scenario generate a delay that end with a timeout in the upper layers. For the final user, some scenario of the EasyConnect specification end with a failure.
So, avoid acquiring the scan_lock and just return.
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20231004172843.195332-6-jerome.pouiller@silabs.com
show more ...
|
| fc5cb24f | 04-Oct-2023 |
Jérôme Pouiller <jerome.pouiller@silabs.com> |
wifi: wfx: introduce hif_scan_uniq()
Like hof_scan(), hif_scan_uniq() invoke HIF_SCAN. However, it only allows to probe one channel and disable probe requests. It works very well to implement Remain
wifi: wfx: introduce hif_scan_uniq()
Like hof_scan(), hif_scan_uniq() invoke HIF_SCAN. However, it only allows to probe one channel and disable probe requests. It works very well to implement Remain-On-Channel.
Signed-off-by: Jérôme Pouiller <jerome.pouiller@silabs.com> Signed-off-by: Kalle Valo <kvalo@kernel.org> Link: https://lore.kernel.org/r/20231004172843.195332-5-jerome.pouiller@silabs.com
show more ...
|