STRUCT ATH5K_EEPROM_INFO(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– 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.c takes care of the COUNTRY_ERD and WORLDWIDE_ROAMING flags. 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 the ee_ob and ee_db settings, 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 for AR2112/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. see ee_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