HomeFreeBSD

[bwn] implement firmware tx/rx versioning and fix RSSI calculation.

Description

[bwn] implement firmware tx/rx versioning and fix RSSI calculation.

Different versions of firmware have different requirments for TX/RX
packet layouts (and other things, of course.) Currently the driver
checks between 3xx and 4xx firmware by using the BWN_ISOLDFMT() macro,
which doesn't take into account the 5xx firmware (which I think I need
for the HT and N series PHY chips. I'll know when I do the port.)
BWN_HDRSIZE() also needs to learn about the 5xx series firmware
as well.

So:

  • add a firmware version enum
  • populate it based on the firmware version we read at load time
  • don't finish loading if the firmware is the 5xx firmware; any code using BWN_ISOLDFMT or BWN_HDRSIZE needs updating (most notably the TX and RX bits.)

Then, for RX RSSI:

  • write down and reimplement the b43 rssi calculation method;
  • use it for the correct PHYs (which are all the ones we support);
  • do the RSSI calculation before radiotap, not after.

Tested:

  • Broadcom BCM4312, STA mode

Obtained from: Linux b43 (careful writing and reimplementing; lots of integer math..)

Details

Provenance
adrianAuthored on
Parents
rS299109: [bhnd] add missing bus file.
Branches
Unknown
Tags
Unknown