I noticed a couple of things were happening:
- during suspend, I'd get a timeout in the NIC lock path (which sets a bit on the NIC to say that the host wants to talk to it);
- resume wouldn't come back - scan commands would fail, and you'd have to reinit the NIC again for it to work.
The thing is:
- the suspend path should already shut down the NIC by shutting down all the VAPs (and the last VAP should call ic_parent to bring it down), and
- the resume path should already bring up the NIC by bringing up each VAP, and the first VAP to be brought up calls ic_parent to bring it up.
So instead, I've shuffled around the code to just double check the
hardware state is consistent /before/ ieee80211_suspend_all() and
ieee80211_resume_all() is called.
This both fixes the errant hardware timeout during suspend, and it
fixes resume to work.
Locally tested:
- AX210, STA mode, both hardware ACPI suspend/resume and devctl suspend and devctl resume