git: 969f6c635358 - main - if_iwx: use net80211 suspend and resume methods
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 28 May 2025 09:06:54 UTC
The branch main has been updated by thj:
URL: https://cgit.FreeBSD.org/src/commit/?id=969f6c635358a079c50fd3ecd3d060bb5d9e0816
commit 969f6c635358a079c50fd3ecd3d060bb5d9e0816
Author: Tom Jones <thj@FreeBSD.org>
AuthorDate: 2025-05-28 09:02:54 +0000
Commit: Tom Jones <thj@FreeBSD.org>
CommitDate: 2025-05-28 09:02:54 +0000
if_iwx: use net80211 suspend and resume methods
Use net80211 suspend and resume methods when entering and leaving
suspend. Move the resume action outside of the IWX_LOCK.
Re-assert disabling the PCI timeout, this is copied from OpenBSD (and a
common pattern), but it doesn't seem to hurt.
PR: 286059
Reviewed by: adrian
Sponsored by: The FreeBSD Foundation
Differential Revision: https://reviews.freebsd.org/D50462
---
sys/dev/iwx/if_iwx.c | 24 +++++++++++++++++-------
1 file changed, 17 insertions(+), 7 deletions(-)
diff --git a/sys/dev/iwx/if_iwx.c b/sys/dev/iwx/if_iwx.c
index 029031802a26..a0e4bf8a53f6 100644
--- a/sys/dev/iwx/if_iwx.c
+++ b/sys/dev/iwx/if_iwx.c
@@ -195,6 +195,8 @@ int iwx_lomark = 192;
#include <dev/iwx/if_iwx_debug.h>
+#define PCI_CFG_RETRY_TIMEOUT 0x41
+
#define PCI_VENDOR_INTEL 0x8086
#define PCI_PRODUCT_INTEL_WL_22500_1 0x2723 /* Wi-Fi 6 AX200 */
#define PCI_PRODUCT_INTEL_WL_22500_2 0x02f0 /* Wi-Fi 6 AX201 */
@@ -10142,7 +10144,6 @@ iwx_attach(device_t dev)
* We disable the RETRY_TIMEOUT register (0x41) to keep
* PCI Tx retries from interfering with C3 CPU state.
*/
-#define PCI_CFG_RETRY_TIMEOUT 0x41
pci_write_config(dev, PCI_CFG_RETRY_TIMEOUT, 0x00, 1);
if (pci_msix_count(dev)) {
@@ -10657,8 +10658,11 @@ static int
iwx_suspend(device_t dev)
{
struct iwx_softc *sc = device_get_softc(dev);
+ struct ieee80211com *ic = &sc->sc_ic;
if (sc->sc_flags & IWX_FLAG_HW_INITED) {
+ ieee80211_suspend_all(ic);
+
iwx_stop(sc);
sc->sc_flags &= ~IWX_FLAG_HW_INITED;
}
@@ -10669,21 +10673,27 @@ static int
iwx_resume(device_t dev)
{
struct iwx_softc *sc = device_get_softc(dev);
+ struct ieee80211com *ic = &sc->sc_ic;
int err;
- err = iwx_start_hw(sc);
- if (err) {
- return err;
- }
+ /*
+ * We disable the RETRY_TIMEOUT register (0x41) to keep
+ * PCI Tx retries from interfering with C3 CPU state.
+ */
+ pci_write_config(dev, PCI_CFG_RETRY_TIMEOUT, 0x00, 1);
- err = iwx_init_hw(sc);
+ IWX_LOCK(sc);
+
+ err = iwx_init(sc);
if (err) {
iwx_stop_device(sc);
+ IWX_UNLOCK(sc);
return err;
}
- ieee80211_start_all(&sc->sc_ic);
+ IWX_UNLOCK(sc);
+ ieee80211_resume_all(ic);
return (0);
}