STRUCT ATH5K_EEPROM_INFO(9)
π struct ath5k_eeprom_info(9) β EEPROM calibration data π
okay so this is a page from the Kernel API Manual, and bestie, we're talking about struct ath5k_eeprom_info, aka the place where all your EEPROM calibration data lives. it's giving "the wi-fi card's baby book" β every little tuning value the radio needs, all cozy in one struct. let's get into it π«Ά
β¨ SYNOPSIS β¨
struct ath5k_eeprom_info {
u16 ee_magic;
u16 ee_protect;
u16 ee_regdomain;
u16 ee_version;
u16 ee_header;
u16 ee_ant_gain;
u8 ee_rfkill_pin;
bool ee_rfkill_pol;
bool ee_is_hb63;
bool ee_serdes;
u16 ee_misc0;
u16 ee_misc1;
u16 ee_misc2;
u16 ee_misc3;
u16 ee_misc4;
u16 ee_misc5;
u16 ee_misc6;
u16 ee_cck_ofdm_gain_delta;
u16 ee_cck_ofdm_power_delta;
u16 ee_scaled_cck_delta;
u16 ee_i_cal[AR5K_EEPROM_N_MODES];
u16 ee_q_cal[AR5K_EEPROM_N_MODES];
u16 ee_fixed_bias[AR5K_EEPROM_N_MODES];
u16 ee_turbo_max_power[AR5K_EEPROM_N_MODES];
u16 ee_xr_power[AR5K_EEPROM_N_MODES];
u16 ee_switch_settling[AR5K_EEPROM_N_MODES];
u16 ee_atn_tx_rx[AR5K_EEPROM_N_MODES];
u16 ee_ant_control[AR5K_EEPROM_N_MODES][AR5K_EEPROM_N_PCDAC];
u16 ee_ob[AR5K_EEPROM_N_MODES][AR5K_EEPROM_N_OBDB];
u16 ee_db[AR5K_EEPROM_N_MODES][AR5K_EEPROM_N_OBDB];
u16 ee_tx_end2xlna_enable[AR5K_EEPROM_N_MODES];
u16 ee_tx_end2xpa_disable[AR5K_EEPROM_N_MODES];
u16 ee_tx_frm2xpa_enable[AR5K_EEPROM_N_MODES];
u16 ee_thr_62[AR5K_EEPROM_N_MODES];
u16 ee_xlna_gain[AR5K_EEPROM_N_MODES];
u16 ee_xpd[AR5K_EEPROM_N_MODES];
u16 ee_x_gain[AR5K_EEPROM_N_MODES];
u16 ee_i_gain[AR5K_EEPROM_N_MODES];
u16 ee_margin_tx_rx[AR5K_EEPROM_N_MODES];
u16 ee_switch_settling_turbo[AR5K_EEPROM_N_MODES];
u16 ee_margin_tx_rx_turbo[AR5K_EEPROM_N_MODES];
u16 ee_atn_tx_rx_turbo[AR5K_EEPROM_N_MODES];
u16 ee_false_detect[AR5K_EEPROM_N_MODES];
u8 ee_pd_gains[AR5K_EEPROM_N_MODES];
u8 ee_pdc_to_idx[AR5K_EEPROM_N_MODES][AR5K_EEPROM_N_PD_GAINS];
u8 ee_n_piers[AR5K_EEPROM_N_MODES];
struct ath5k_chan_pcal_info ee_pwr_cal_a[AR5K_EEPROM_N_5GHZ_CHAN];
struct ath5k_chan_pcal_info ee_pwr_cal_b[AR5K_EEPROM_N_2GHZ_CHAN_MAX];
struct ath5k_chan_pcal_info ee_pwr_cal_g[AR5K_EEPROM_N_2GHZ_CHAN_MAX];
u8 ee_rate_target_pwr_num[AR5K_EEPROM_N_MODES];
struct ath5k_rate_pcal_info ee_rate_tpwr_a[AR5K_EEPROM_N_5GHZ_CHAN];
struct ath5k_rate_pcal_info ee_rate_tpwr_b[AR5K_EEPROM_N_2GHZ_CHAN_MAX];
struct ath5k_rate_pcal_info ee_rate_tpwr_g[AR5K_EEPROM_N_2GHZ_CHAN_MAX];
u8 ee_ctls;
u8 ee_ctl[AR5K_EEPROM_MAX_CTLS];
struct ath5k_edge_power ee_ctl_pwr[AR5K_EEPROM_N_EDGES * AR5K_EEPROM_MAX_CTLS];
s16 ee_noise_floor_thr[AR5K_EEPROM_N_MODES];
s8 ee_adc_desired_size[AR5K_EEPROM_N_MODES];
s8 ee_pga_desired_size[AR5K_EEPROM_N_MODES];
s8 ee_adc_desired_size_turbo[AR5K_EEPROM_N_MODES];
s8 ee_pga_desired_size_turbo[AR5K_EEPROM_N_MODES];
s8 ee_pd_gain_overlap;
u16 ee_spur_chans[AR5K_EEPROM_N_SPUR_CHANS][AR5K_EEPROM_N_FREQ_BANDS];
};
no cap, that's a lot of fields. it ate. π
π Members π
okay bestie, here's the annotated tour. not every field gets a lil blurb in here (some of them are just vibing, unnamed and unbothered) β but every one that does is listed below fr fr.
πΈ the described ones πΈ
ee_regdomainβ heads up,ath/regd.ctakes care of theCOUNTRY_ERDandWORLDWIDE_ROAMINGflags. so that's its whole personality.ee_ant_gainβ antenna gain in 0.5dB steps, signed. the page also says[5211 only?], question mark included, so yeah, even the docs are side-eyeing that one πee_cck_ofdm_gain_deltaβ the difference in gainF needed to output the same power for OFDM and CCK packets. twin energy, different paths.ee_cck_ofdm_power_deltaβ the power difference between the OFDM (6Mbps) and CCK (11Mbps) rate in G mode. measured in 0.1dB steps.ee_scaled_cck_deltaβ for Japan Channel 14, at 0.1dB resolution. special lil national treasure β¨ee_i_calβ the initial I coefficient, there to correct I/Q mismatch in the receive path.ee_q_calβ the initial Q coefficient, same job: correcting I/Q mismatch in the receive path. i and q are literally besties, they do everything together πee_fixed_biasβ decides whether you use theee_obandee_dbsettings, or go with automatic control.ee_switch_settlingβ RX/TX switch settling time.ee_atn_tx_rxβ difference in attenuation between TX and RX, in 1dB steps.ee_ant_controlβ Antenna Control Settings. that's it, that's the whole note.ee_obβ bias current for the Output stage of the PA. B/G mode: Index[0]is used forAR2112/5112, otherwise[1]. A mode:[0]5.15-5.25,[1]5.25-5.50,[2]5.50-5.70,[3]5.70-5.85 GHz. very demure, very indexed.ee_dbβ bias current for the Output stage of the PA. seeee_obβ it's the same vibe, different field.ee_tx_end2xlna_enableβ time difference from when BB finishes sending a frame to when the external LNA is activated.ee_tx_end2xpa_disableβ time difference from when BB finishes sending a frame to when the external PA switch is deactivated.ee_tx_frm2xpa_enableβ time difference from when MAC sends a frame to when the external PA switch is activated.ee_thr_62β Clear Channel Assessment (CCA) sensitivity (IEEE802.11a section 17.3.10.5 ).ee_xlna_gainβ total gain of the LNA. information only, so it's literally just there to look pretty πee_xpdβ use external (1) or internal power detector.ee_x_gainβ gain for external power detector output. differences in EEMAP versions, so watch yourself.ee_i_gainβ initial gain value after reset.ee_margin_tx_rxβ margin in dB for when the final attenuation stage should be used.ee_false_detectβ backoff in Sensitivity (dB) on channels with spur signals.ee_noise_floor_thrβ noise floor threshold in 1dB steps.ee_adc_desired_sizeβ desired amplitude for the ADC, used by AGC; in 0.5 dB steps.ee_pga_desired_sizeβ desired output of the PGA (for BB gain) in 0.5 dB steps.ee_pd_gain_overlapβ PD ADC curves need to overlap in 0.5dB steps (ee_map>=2). they must overlap, no negotiating.
lowkey the manpage only spells out these ones β the rest of the struct fields above are real and exact, they just don't get a description here. i'm not gonna make one up, that would be messy of me π«Ά
π¦ SEE ALSO π¦
- Kernel file
./drivers/net/wireless/ath/ath5k/eeprom.hβ go read the source bestie, it's all in there.
and that's the whole page!! literally all of it, nothing skipped, we ate and left no crumbs π
π sign-off time π this iconic lil page comes from ./drivers/net/wireless/ath/ath5k, dated October 2026, and it's the struct ath5k_eeprom_info(9) manual page. take care of her, she's got a lot of calibration data to carry ππ
π¦ 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