PER-RATE TX POWER SETTING(9)
π Per-rate tx power setting π
okay so real talk, this is a page straight out of the Kernel API Manual and it's literally the blueprint for how we set tx power per rate. bestie, it's giving "niche ath5k lore" and honestly? we're obsessed. π¦
β¨ DESCRIPTION β¨ (well, technically no heading in the original, but like, it's the description yk)
so this is the code that sets the desired tx power limit (below maximum, mind you β we're being responsible π) on the hw, for each rate. and yes, we also have TPC which sets power per packet type β that's a whole other thing, don't confuse them β¨. the way we do it: we hand over an index into the PCDAC/PDADC table we already set up above, one index for each rate. slay.
for now, we only limit txpower based on the maximum tx power supported by hw (that's the stuff living inside rate_info) + conformance test limits. and ngl, we need to limit it even more than that β based on regulatory domain etc etc β to be safe. but normally that gets done from above, so we genuinely don't care here. all we care about is that the tx power we set will be O.K. for the hw (like, it won't create noise on PA etc). periodt. π
the rate power table contains indices into the PCDAC/PDADC table (0.5dB steps β those are the x values), and it's indexed like this:
rates[0]βrates[7]β OFDM rates πΈrates[8]βrates[14]β CCK rates πrates[15]β XR rates (they all have the same power, iykyk) π
π«Ά SEE ALSO π«Ά
like, go read these next, bestie β they're all literally iconic:
- Kernel file
./drivers/net/wireless/ath/ath5k/phy.c - PHY related functions(9)
- ath5k_hw_radio_revision(9)
- ath5k_channel_ok(9)
- ath5k_hw_chan_has_spur_noise(9)
- ath5k_hw_rfb_op(9)
- ath5k_hw_write_ofdm_timings(9)
- ath5k_hw_phy_disable(9)
- ath5k_hw_wait_for_synth(9)
- RF Gain optimization(9)
- ath5k_hw_rfgain_opt_init(9)
- ath5k_hw_request_rfgain_probe(9)
- ath5k_hw_rf_gainf_corr(9)
- ath5k_hw_rf_check_gainf_readback(9)
- ath5k_hw_rf_gainf_adjust(9)
- ath5k_hw_gainf_calibrate(9)
- ath5k_hw_rfgain_init(9)
- ath5k_hw_rfregs_init(9)
- ath5k_hw_rf5110_chan2athchan(9)
- ath5k_hw_rf5110_channel(9)
- ath5k_hw_rf5111_chan2athchan(9)
- ath5k_hw_rf5111_channel(9)
- ath5k_hw_rf5112_channel(9)
- ath5k_hw_rf2425_channel(9)
- ath5k_hw_channel(9)
- PHY Calibration routines(9)
- ath5k_hw_read_measured_noise_floor(9)
- ath5k_hw_init_nfcal_hist(9)
- ath5k_hw_update_nfcal_hist(9)
- ath5k_hw_get_median_noise_floor(9)
- ath5k_hw_update_noise_floor(9)
- ath5k_hw_rf5110_calibrate(9)
- ath5k_hw_rf511x_iq_calibrate(9)
- ath5k_hw_phy_calibrate(9)
- ath5k_hw_set_spur_mitigation_filter(9)
- Antenna control(9)
- ath5k_hw_set_def_antenna(9)
- ath5k_hw_set_fast_div(9)
- ath5k_hw_set_antenna_switch(9)
- ath5k_hw_set_antenna_mode(9)
- ath5k_get_interpolated_value(9)
- ath5k_get_linear_pcdac_min(9)
- ath5k_create_power_curve(9)
- ath5k_get_chan_pcal_surrounding_piers(9)
- ath5k_get_rate_pcal_data(9)
- ath5k_get_max_ctl_power(9)
- Power to PCDAC table functions(9)
- ath5k_fill_pwr_to_pcdac_table(9)
- ath5k_combine_linear_pcdac_curves(9)
- ath5k_write_pcdac_table(9)
- Power to PDADC table functions(9)
- ath5k_combine_pwr_to_pdadc_curves(9)
- ath5k_write_pwr_to_pdadc_table(9)
- ath5k_setup_channel_powertable(9)
- ath5k_write_channel_powertable(9)
- ath5k_setup_rate_powertable(9)
- ath5k_hw_txpower(9)
- ath5k_hw_set_txpower_limit(9)
- ath5k_hw_phy_init(9)
ok that's the whole page, go touch grass (or a wifi card) π
and that's a wrap, bestie!! this lil doc lives in ./drivers/net/wireless/ath/ath5k, and it's dated October 2026 β so yeah, it's basically from the future πβ¨ π§ββοΈ
π¦ where this page comes from
- nixpkgs unstable: linux-manual 7.3.1
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms