STRUCT IWL_MAC_POWER_CMD_V2(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’– struct iwl_mac_power_cmd_v2(9) β€” the Kernel API Manual era πŸ’–

okay so bestie, welcome to the Kernel API Manual page for struct iwl_mac_power_cmd_v2 β€” yes that's the whole title, and yes we're reading it together. grab a snack πŸ“

This one is literally the power command V2 containing uAPSD support, and it comes with MAC_PM_POWER_TABLE = 0xA9 (that's the command, and it has a simple generic response β€” cute, low-maintenance, we love that for it) ✨


πŸ¦‹ SYNOPSIS πŸ¦‹

no thoughts, just the struct. copy it exactly, bestie, don't you dare retype it by hand:

struct iwl_mac_power_cmd_v2 {
    __le32 id_and_color;
    __le16 flags;
    __le16 keep_alive_seconds;
    __le32 rx_data_timeout;
    __le32 tx_data_timeout;
    __le32 rx_data_timeout_uapsd;
    __le32 tx_data_timeout_uapsd;
    u8 lprx_rssi_threshold;
    u8 skip_dtim_periods;
    __le16 snooze_interval;
    __le16 snooze_window;
    u8 snooze_step;
    u8 qndp_tid;
    u8 uapsd_ac_flags;
    u8 uapsd_max_sp;
    u8 heavy_tx_thld_packets;
    u8 heavy_rx_thld_packets;
    u8 heavy_tx_thld_percentage;
    u8 heavy_rx_thld_percentage;
    u8 limited_ps_threshold;
    u8 reserved;
 };

🌸 Members 🌸

time for the member-by-member vibe check, iykyk πŸ‘‘

  • id_and_color β€” the MAC context identifier, and it's an enum iwl_ctxt_id_and_color. it's giving "everyone has a name and a color in this group chat" πŸ’…
  • flags β€” the power table command flags, straight from POWER_FLAGS_*. pick your flags, bestie, they're all right there.
  • keep_alive_seconds β€” keep alive period in seconds. Default is 25 sec. Minimum allowed is 3 * DTIM. and listen β€” the keep alive period must be set regardless of power scheme or current power state. FW use this value also when PM is disabled. so like... it matters even when you think it doesn't. main character energy fr fr πŸ’€
  • rx_data_timeout β€” minimum time (usec) from last Rx packet for AM to PSM transition β€” legacy PM.
  • tx_data_timeout β€” minimum time (usec) from last Tx packet for AM to PSM transition β€” legacy PM.
  • rx_data_timeout_uapsd β€” minimum time (usec) from last Rx packet for AM to PSM transition β€” uAPSD.
  • tx_data_timeout_uapsd β€” minimum time (usec) from last Tx packet for AM to PSM transition β€” uAPSD.
  • lprx_rssi_threshold β€” signal strength up to which LP RX can be enabled. Default: 80dbm. that's the whole mood, ngl.
  • skip_dtim_periods β€” number of DTIM periods to skip if the Skip over DTIM flag is set. ok so like, for example: if it is required to skip over one DTIM, this value need to be set to 2 (DTIM periods). not 1. 2. the way that math math'd 🧚
  • snooze_interval β€” maximum time between attempts to retrieve buffered data from the AP, in [msec].
  • snooze_window β€” a window of time in which PBW snoozing insures that all packets received. it is also the minimum time from last received unicast RX packet, before client stops snoozing for data. [msec]. she does two jobs, iconic πŸ”₯
  • snooze_step β€” TBD. that's it. that's the documentation. respect for the honesty honestly 😭
  • qndp_tid β€” the TID client shall use for uAPSD QNDP triggers.
  • uapsd_ac_flags β€” set trigger-enabled and delivery-enabled indication for each corresponding AC. use IEEE80211_WMM_IE_STA_QOSINFO_AC* for correct values. use the right ones or it's not slaying.
  • uapsd_max_sp β€” use IEEE80211_WMM_IE_STA_QOSINFO_SP_* for correct values.
  • heavy_tx_thld_packets β€” TX threshold measured in number of packets.
  • heavy_rx_thld_packets β€” RX threshold measured in number of packets.
  • heavy_tx_thld_percentage β€” TX threshold measured in load's percentage.
  • heavy_rx_thld_percentage β€” RX threshold measured in load's percentage.
  • limited_ps_threshold β€” (unused). not invited to the party, but still on the guest list 🫢
  • reserved β€” reserved (padding). it's just there for the vibes. and for alignment. mostly alignment.

🌈 SEE ALSO 🌈

the whole friend group, in order, no cap:

Kernel file ./drivers/net/wireless/intel/iwlwifi/fw/api/power.h β€” that's home base 🏠

enum iwl_ltr_config_flags(9), struct iwl_ltr_config_cmd_v1(9), struct iwl_ltr_config_cmd(9), enum iwl_power_flags(9), struct iwl_powertable_cmd(9), enum iwl_device_power_flags(9), struct iwl_device_power_cmd(9), struct iwl_mac_power_cmd(9), struct iwl_dev_tx_power_common(9), struct iwl_dev_tx_power_cmd_v3(9), struct iwl_dev_tx_power_cmd_v4(9), struct iwl_dev_tx_power_cmd_v5(9), struct iwl_dev_tx_power_cmd_v8(9), struct iwl_dev_tx_power_cmd_v3_v8(9), struct iwl_dev_tx_power_cmd_v9(9), struct iwl_dev_tx_power_cmd_v10(9), enum iwl_geo_per_chain_offset_operation(9), struct iwl_per_chain_offset(9), struct iwl_geo_tx_power_profiles_cmd_v1(9), struct iwl_geo_tx_power_profiles_cmd_v2(9), struct iwl_geo_tx_power_profiles_cmd_v3(9), struct iwl_geo_tx_power_profiles_cmd_v4(9), struct iwl_geo_tx_power_profiles_cmd_v5(9), struct iwl_geo_tx_power_profiles_cmd_v6(9), struct iwl_geo_tx_power_profiles_resp(9), enum iwl_ppag_flags(9), union iwl_ppag_table_cmd(9), struct iwl_sar_offset_mapping_cmd(9), struct iwl_beacon_filter_cmd(9), struct iwl_txpower_constraints_cmd(9)

like... that's a lot of friends and every single one of them got an invite, periodt πŸ’œ


ok that's the whole page, no skips, no summaries, every single field accounted for πŸŽ€

and that's a wrap, bestie! this page came from ./drivers/net/wireless/intel/i... and it's dated October 2026, filed under struct iwl_mac_power_cmd_v2(9). go forth and set your keep alive to at least 3 * DTIM, mwah πŸ’‹βœ¨

πŸ“¦ where this page comes from