STRUCT IWL_FAMILY_BASE_PARAMS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸŽ€ struct iwl_family_base_params(9) πŸŽ€

okay so bestie, welcome to the Kernel API Manual, and buckle up because this one's literally the blueprint page β€” we're talking about struct iwl_family_base_params, aka the base parameters for an entire family πŸ’–

Think of it as the group chat settings for a whole WiFi family β€” every sibling chip inherits the vibe. no cap.


✨ NAME ✨

struct iwl_family_base_params β€” base parameters for an entire family, fr fr. one struct to rule the whole squad πŸ‘‘


πŸ¦‹ SYNOPSIS πŸ¦‹

here's the whole lineup, character for character, no notes:

struct iwl_family_base_params {
    unsigned int wd_timeout;
    u16 eeprom_size;
    u16 max_event_log_size;
    u8 pll_cfg:1,  shadow_ram_support:1, shadow_reg_enable:1,
pcie_l1_allowed:1, apmg_wake_up_wa:1, apmg_not_supported:1,
scd_chain_ext_wa:1;
    u16 num_of_queues;
    u32 max_tfd_queue_size;
    u8 max_ll_items;
    u8 led_compensation;
    u16 ucode_api_max;
    u16 ucode_api_min;
    u32 mac_addr_from_csr:10;
    u8 nvm_hw_section_num;
    netdev_features_t features;
    u32 smem_offset;
    u32 smem_len;
    u32 d3_debug_data_base_addr;
    u32 d3_debug_data_length;
    u32 min_txq_size;
    u32 gp2_reg_addr;
    u32 min_ba_txq_size;
    const struct iwl_fw_mon_regs mon_dram_regs;
    const struct iwl_fw_mon_regs mon_smem_regs;
    const struct iwl_fw_mon_regs mon_dbgi_regs;
 };

like. look at all those bitfields. she's been through things. 😭


πŸ’… Members πŸ’…

🌸 the timeout & storage girlies

  • wd_timeout β€” TX queues watchdog timeout. the clock is ticking bestie ⏰
  • eeprom_size β€” EEPROM size. how much room the EEPROM's got πŸ“
  • max_event_log_size β€” size of event log buffer size for ucode event logging. yep, that's the wording, it's giving "buffer size of the buffer size" and honestly? iconic πŸ™ˆ

⭐ the config flags (all packed into one u8, slay)

  • pll_cfg β€” PLL configuration needed. is the PLL config needed? this bit knows πŸ’«
  • shadow_ram_support β€” shadow support for OTP memory
  • shadow_reg_enable β€” HW shadow register support
  • pcie_l1_allowed β€” PCIe L1 state is allowed
  • apmg_wake_up_wa β€” should the MAC access REQ be asserted when a command is in flight. This is due to a HW bug in 7260, 3160 and 7265. πŸ’€ yes it's a workaround, no we don't talk about it
  • apmg_not_supported β€” there's no APMG. simple as that 🫢
  • scd_chain_ext_wa β€” should the chain extension feature in SCD be disabled. another "should we" bit, another day another workaround 😌

🧚 the queue & size numbers

  • num_of_queues β€” number of HW TX queues supported
  • max_tfd_queue_size β€” max number of entries in tfd queue.
  • max_ll_items β€” max number of OTP blocks
  • led_compensation β€” compensate on the led on/off time per HW according to the deviation to achieve the desired led frequency. The detail algorithm is described in iwl-led.c ✨ (go read the source if you're nosy, iykyk)

πŸ‘‘ the uCode API versions

  • ucode_api_max β€” Highest version of uCode API supported by driver.
  • ucode_api_min β€” Lowest version of uCode API supported by driver.

high and low, the range is the range πŸ“

🌈 the address & NVM bits

  • mac_addr_from_csr β€” read HW address from CSR registers at this offset
  • nvm_hw_section_num β€” the ID of the HW NVM section
  • features β€” hw features, any combination of feature_passlist

πŸ¦‹ the SMEM & debug data

  • smem_offset β€” offset from which the SMEM begins
  • smem_len β€” the length of SMEM
  • d3_debug_data_base_addr β€” base address where D3 debug data is stored
  • d3_debug_data_length β€” length of the D3 debug data

debug data said "i'm stored AND i have a length" πŸ’… main character energy

πŸ”₯ the TXQ minimums & timer register

  • min_txq_size β€” minimum number of slots required in a TX queue
  • gp2_reg_addr β€” GP2 (timer) register address
  • min_ba_txq_size β€” minimum number of slots required in a TX queue used for aggregation

πŸ’œ the monitor registers (yes, three of them, and yes they're all const struct iwl_fw_mon_regs)

  • mon_dram_regs β€” monitor DRAM registers
  • mon_smem_regs β€” monitor SMEM registers
  • mon_dbgi_regs β€” monitor DBGI registers

three little monitors, all in a row πŸŽ€


⭐ SEE ALSO ⭐

go touch these next, bestie:

  • Kernel file ./drivers/net/wireless/intel/iwlwifi/iwl-config.h enum
  • iwl_nvm_type(9)
  • struct iwl_fw_mon_reg(9)
  • struct iwl_fw_mon_regs(9)
  • struct iwl_tt_params(9)
  • struct iwl_mac_cfg(9)
  • struct iwl_rf_cfg(9)

ok that's the whole page, every single member, nothing skipped β€” the vibes are immaculate but the facts are untouched πŸ’–

and that's a wrap, bestie 🫢 this came from ./drivers/net/wireless/intel/i..., October 2026, and it's filed under struct iwl_..._base_params(9). go forth and configure your family. periodt. 🌸

πŸ“¦ where this page comes from