STRUCT IWL_FW_RUNTIME(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

🌸 NAME 🌸

okay so bestie, this is the Kernel API Manual (section 9, yes, the kernel one 🐧) and today's main character is struct iwl_fw_runtime β€” literally the runtime data for firmware ✨ that's the whole vibe, that's the whole name.


✨ SYNOPSIS ✨

here's the whole struct, copied exactly, don't touch a single character or she WILL notice πŸ’…

struct iwl_fw_runtime {
    struct iwl_trans *trans;
    const struct iwl_fw *fw;
    struct device *dev;
    const struct iwl_fw_runtime_ops *ops;
    void *ops_ctx;
    const struct iwl_dump_sanitize_ops *sanitize_ops;
    void *sanitize_ctx;
    struct iwl_fw_paging fw_paging_db[NUM_OF_FW_PAGING_BLOCKS];
    u16 num_of_paging_blk;
    u16 num_of_pages_in_last_blk;
    enum iwl_ucode_type cur_fw_img;
    struct iwl_fwrt_shared_mem_cfg smem_cfg;
    struct {
      struct iwl_fwrt_wk_data wks[IWL_FW_RUNTIME_DUMP_WK_NUM];
      unsigned long active_wks;
      u8 conf;
      unsigned long non_collect_ts_start[IWL_FW_INI_TIME_POINT_NUM];
      u32 *d3_debug_data;
      u32 lmac_err_id[MAX_NUM_LMAC];
      u32 umac_err_id;
      struct iwl_txf_iter_data txf_iter_data;
      struct {
        u8 type;
        u8 subtype;
        u32 lmac_major;
        u32 lmac_minor;
        u32 umac_major;
        u32 umac_minor;
      } fw_ver;
    } dump;
    struct {
  #ifdef CONFIG_IWLWIFI_DEBUGFS;
      struct delayed_work wk;
      u32 delay;
  #endif;
      u64 seq;
    } timestamp;
  #ifdef CONFIG_IWLWIFI_DEBUGFS;
    bool tpc_enabled;
  #endif ;
    struct iwl_sar_profile sar_profiles[BIOS_SAR_MAX_PROFILE_NUM];
    u8 sar_chain_a_profile;
    u8 sar_chain_b_profile;
    u8 reduced_power_flags;
    struct iwl_geo_profile geo_profiles[BIOS_GEO_MAX_PROFILE_NUM];
    enum bios_source geo_bios_source;
    u32 geo_rev;
    u32 geo_num_profiles;
    bool geo_enabled;
    struct iwl_ppag_chain ppag_chains[IWL_NUM_CHAIN_LIMITS];
    u32 ppag_flags;
    u8 ppag_bios_rev;
    u8 ppag_bios_source;
    struct iwl_sar_offset_mapping_cmd sgom_table;
    bool sgom_enabled;
    struct iwl_mcc_allowed_ap_type_cmd ap_type_cmd;
    bool ap_type_cmd_valid;
    u8 uefi_tables_lock_status;
    struct iwl_phy_specific_cfg phy_filters;
    enum bios_source dsm_source;
    u8 dsm_revision;
  #if defined(CONFIG_ACPI) || defined(CONFIG_EFI);
    u32 dsm_funcs_valid;
    u32 dsm_values[DSM_FUNC_NUM_FUNCS];
  #endif;
    enum bios_source wbem_source;
    u8 wbem_revision;
    enum bios_source puncturing_source;
    u8 puncturing_revision;
    u32 bios_puncturing;
 };

πŸŽ€ Members πŸŽ€

okay now the member-by-member tour, no skipping, we're doing all of them fr fr 🫢

  • trans β€” transport pointer. the plug, essentially πŸ”Œ
  • fw β€” firmware image
  • dev β€” device pointer
  • ops β€” user ops
  • ops_ctx β€” user ops context
  • sanitize_ops β€” dump sanitizer ops
  • sanitize_ctx β€” context for dump sanitizer
  • fw_paging_db β€” paging database
  • num_of_paging_blk β€” number of paging blocks
  • num_of_pages_in_last_blk β€” number of pages in the last block
  • cur_fw_img β€” current firmware image. ⚠️ heads up bestie: this one must be maintained by the driver by calling &iwl_fw_set_current_image β€” like, not optional, that's the rule
  • smem_cfg β€” saved firmware SMEM configuration
  • dump β€” debug dump data
  • timestamp β€” timestamp marker data
  • timestamp.wk β€” timestamp marking worker
  • timestamp.delay β€” timestamp marking worker delay
  • timestamp.seq β€” timestamp marking sequence
  • tpc_enabled β€” TPC enabled
  • sar_profiles β€” sar profiles as read from WRDS/EWRD BIOS tables πŸ“‹
  • sar_chain_a_profile β€” SAR chain A profile
  • sar_chain_b_profile β€” SAR chain B profile
  • reduced_power_flags β€” reduced power flags
  • geo_profiles β€” geographic profiles as read from WGDS BIOS table 🌍
  • geo_bios_source β€” see enum bios_source
  • geo_rev β€” geo profiles table revision
  • geo_num_profiles β€” number of geo profiles
  • geo_enabled β€” WGDS table is present
  • ppag_chains β€” PPAG table data
  • ppag_flags β€” PPAG flags
  • ppag_bios_rev β€” PPAG BIOS revision
  • ppag_bios_source β€” see enum bios_source
  • sgom_table β€” SGOM table
  • sgom_enabled β€” SGOM enabled
  • ap_type_cmd β€” AP type tables (for enablement on 6 GHz) πŸ“‘
  • ap_type_cmd_valid β€” if ap_type_cmd is valid
  • uefi_tables_lock_status β€” The status of the WIFI GUID UEFI variables lock: 0: Unlocked, 1 and 2: Locked. πŸ”’ Only read the UEFI variables if locked.
  • phy_filters β€” specific phy filters as read from WPFC BIOS table
  • dsm_source β€” one of enum bios_source. UEFI, ACPI or NONE
  • dsm_revision β€” the revision of the DSM table
  • dsm_funcs_valid β€” bitmap indicating which DSM values are valid. zero (default initialization) means it hasn't been read yet, and BIT(0) is set when it has, since function 0 also has this bitmap and is always supported. If the bit is set for a specific function, then the corresponding entry in dsm_values is valid. 🧠 iykyk
  • dsm_values β€” cache of the DSM values. The validity of each entry is determined by dsm_funcs_valid.
  • wbem_source β€” one of enum bios_source for the WBEM table
  • wbem_revision β€” the revision of the WBEM table
  • puncturing_source β€” one of enum bios_source for the puncturing table
  • puncturing_revision β€” the revision of the puncturing table
  • bios_puncturing β€” per-country puncturing enablement bitmap from BIOS

πŸ¦‹ SEE ALSO πŸ¦‹

go read these next, they're iconic, they're part of the lore:

  • Kernel file ./drivers/net/wireless/intel/iwlwifi/fw/runtime.h
  • struct iwl_fwrt_dump_data(9)
  • struct iwl_fwrt_wk_data(9)
  • struct iwl_txf_iter_data(9)

and that's the page!! πŸŽ€ this came from the source at ./drivers/net/wireless/intel/i..., dated October 2026, bestie β€” go slay some firmware runtime data, periodt πŸ’…βœ¨πŸ”₯

πŸ“¦ where this page comes from