This is an old revision of the document!
Per-packet Transmission Power Control
What is it?
The AR5416 and later (along with select previous generation devices) implement per-packet transmission power control.
This isn't yet supported by the FreeBSD HAL (or ath5k/ath9k.)
What's involved?
- AR_TPC controls the fixed ACK, CHIRP, CTS TX power level
- The descriptor contains a per-rate TX power level, passed to the baseband
- There's a register to flip on which controls per-packet TPC, rather than using the per-rate global TPC registers (documented in ath9k but not enabled)
What needs to happen?
- The TX power calibration code which calculates the per-rate TX power needs to be modified to store the per-rate information
- This needs to be then used for each packet to cap the TX power passed in by net80211 for the packet - since different TX rates have different TX power limits
- Need to keep in mind that various chipsets have different TX power configuration behaviour:
- AR5008, AR9001 series devices - 0.5dBm increments w/ 0 reflecting 0 dBm
- AR9002 series devices - 0.5dbm increments with 0 reflecting -5 dBm
- Maximum value is “63”, so 31 dBm for AR5008/AR9001, 25 dBm for AR9002
- Open-loop TX power control on Merlin (and later, eg Kiwi?) need further tweaking for the CCK rates
- 20MHz versus 40MHz mode - there's a TX power change for that
- .. and does some tweaking need to occur for 5MHz/10MHz channels? That needs to be checked!
- What TX power levels should be configured for ACK, CTS, CHIRP? They are programmed at 0x3f (63) which is far too high; but then are capped by the global per-rate TX power registers