ANTENNA CONTROL(9)
Antenna control(9) π¦
okay so this is the Kernel API Manual page for Antenna control, and it is lowkey iconic how much antenna lore is packed in here. Bestie, buckle up. π
Hw supports up to 14 antennas ! I haven't found any card that implements that. The maximum number of antennas I've seen is up to 4 (2 for 2GHz and 2 for 5GHz). Antenna 1 (MAIN) should be omnidirectional, 2 (AUX) omnidirectional or sectorial and antennas 3-14 sectorial (or directional).
We can have a single antenna for RX and multiple antennas for TX. RX antenna is our "default" antenna (usually antenna 1) set on DEFAULT_ANTENNA register and TX antenna is set on each TX control descriptor (0 for automatic selection, 1 - 14 antenna number).
We can let hw do all the work doing fast antenna diversity for both tx and rx or we can do things manually. Here are the options we have (all are bits of STA_ID1 register):
AR5K_STA_ID1_DEFAULT_ANTENNAβ When0is set as the TX antenna on TX control descriptor, use the default antenna to transmit or else use the last antenna on which we received an ACK.AR5K_STA_ID1_DESC_ANTENNAβ Update default antenna after each TX frame to the antenna on which we got the ACK for that frame.AR5K_STA_ID1_RTS_DEF_ANTENNAβ Use default antenna for RTS or else use the one on the TX descriptor.AR5K_STA_ID1_SELFGEN_DEF_ANTβ Use default antenna for self generated frames (ACKs etc), or else use current antenna (the one we just used for TX).
Using the above we support the following scenarios:
AR5K_ANTMODE_DEFAULTβ Hw handles antenna diversity etc automaticallyAR5K_ANTMODE_FIXED_Aβ Only antenna A (MAIN) is presentAR5K_ANTMODE_FIXED_Bβ Only antenna B (AUX) is presentAR5K_ANTMODE_SINGLE_APβ Sta locked on a single apAR5K_ANTMODE_SECTOR_APβ AP with tx antenna set on tx descAR5K_ANTMODE_SECTOR_STAβ STA with tx antenna set on tx descAR5K_ANTMODE_DEBUGβ Debug mode-A -> Rx, B-> Tx-
Also note that when setting antenna to F on tx descriptor card inverts current tx antenna. π«
β¨ SEE ALSO β¨
like, the whole related-pages friend group is here:
- Kernel file
./drivers/net/wireless/ath/ath5k/phy.cPHY 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)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)- Per-rate tx power setting(9)
ath5k_setup_rate_powertable(9)ath5k_hw_txpower(9)ath5k_hw_set_txpower_limit(9)ath5k_hw_phy_init(9)
mwah π this cutie comes from ./drivers/net/wireless/ath/ath5k, dated October 2026, and yes bestie, it is the Antenna control(9) page. π«Ά
π¦ 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