freebsd-dev/sys/dev/iwn
Adrian Chadd 3233d0c654 First cut at attempting to buffer frames until we see a beacon.
The iwn(4) firmware forgets most of its channel state after an RXON
command.  This means that any beacons its seen on passive 5GHz channels
are forgotten upon an association/authorisation request.
This unfortuantely means that 5GHz association almost always fails -
the assoc and/or auth frames are dropped with a status of "passive
channel, haven't seen a beacon yet." (0x90.)

So:

* add an xmit queue, global, to buffer frames
* modify the xmit path to use the mbuf tag from net80211
  to specify raw frame details
* buffer xmit frames from both raw and non-raw paths
* if a beacon is seen in the RX path, schedule a taskqueue to
  send said frames and un-buffer things.
* flush frames during state change back to INIT, or NIC
  down/up/detach.

This isn't the final shape I'd like this to be in but it certainly
is better than 5GHz "not working at all".

Tested:

* Intel 5100, STA mode (before spilling coffee)
* Intel 5300, STA mode (after spilling coffee)

Story:

* This has been bugging me at work for months, which I just
  worked around by throwing an ath(4) into my Lenovo T400 cardbus
  slot.

* Our ops director discovered indeed FreeBSD runs well on the
  Lenovo T420p, except for that pesky 5GHz thing.  So now developers
  also can have a T420p running FreeBSD to do work with.
  Their #1 feedback to me - "boy it'd be nice if 5GHz wifi worked."

* .. then, I was at NANOG but stuck with 5GHz only wifi and no ath(4)
  NIC to put in a laptop - and I snapped.

Thus, the reason this is actually work related.

MFC after:	2 weeks
Sponsored by:	Norse Corp, Inc.
2015-06-19 01:44:17 +00:00
..
if_iwn_chip_cfg.h Shadow RAM support is apparently not at all working on the Intel 5300 Wifi. 2014-06-14 06:54:03 +00:00
if_iwn_debug.h Reserve a bit for statistics debugging. I'll hopefully use it soon. 2014-02-24 02:13:20 +00:00
if_iwn_devid.h Add support for the Intel Centrino Wireless-N 105 chipset. 2014-05-27 19:39:57 +00:00
if_iwn_ioctl.h Track and expose the latest statistics from the firmware. 2014-02-24 02:37:04 +00:00
if_iwn.c First cut at attempting to buffer frames until we see a beacon. 2015-06-19 01:44:17 +00:00
if_iwnreg.h Bring over some more status codes from the Linux iwlwifi driver. 2014-09-08 03:12:42 +00:00
if_iwnvar.h First cut at attempting to buffer frames until we see a beacon. 2015-06-19 01:44:17 +00:00