STRUCT IWL_TX_CMD_V6_PARAMS(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

✨ struct iwl_tx_cmd_v6_params β€” parameters of the TX ✨

okay bestie, so this is from the Kernel API Manual, section 9, and it's literally the struct page for struct iwl_tx_cmd_v6_params πŸ’–. It's giving "the blueprint for one single TX command" and honestly? Iconic. Let's get into it.


🌸 SYNOPSIS 🌸

struct iwl_tx_cmd_v6_params {
    __le16 len;
    __le16 offload_assist;
    __le32 tx_flags;
    struct {
      u8 try_cnt;
      u8 btkill_cnt;
      __le16 reserved;
    } scratch;
    __le32 rate_n_flags;
    u8 sta_id;
    u8 sec_ctl;
    u8 initial_rate_index;
    u8 reserved2;
    u8 key[16];
    __le32 reserved3;
    __le32 life_time;
    __le32 dram_lsb_ptr;
    u8 dram_msb_ptr;
    u8 rts_retry_limit;
    u8 data_retry_limit;
    u8 tid_tspec;
    __le16 pm_frame_timeout;
    __le16 reserved4;
 };

like, look at her. so many little fields all vibing together 🫢


πŸŽ€ Members πŸŽ€

okay so here's the tea on every single field, no skips, no cap:

  • len β€” in bytes of the payload, and yes there's a whole breakdown of what counts, check the description below πŸ‘€
  • offload_assist β€” the TX offload configuration ✨
  • tx_flags β€” a combination of TX_CMD_FLG_*, peep enum iwl_tx_flags for the full menu πŸ”₯
  • scratch β€” a scratch buffer that the device itself uses 🧚
  • rate_n_flags β€” the rate for all Tx attempts, but only if TX_CMD_FLG_STA_RATE_MSK is cleared. It's a combination of RATE_MCS_* πŸ’…
  • sta_id β€” index of the destination station in the FW station table 🎯
  • sec_ctl β€” security control, TX_CMD_SEC_* πŸ”
  • initial_rate_index β€” index into the rate table for the initial TX attempt. Applied if TX_CMD_FLG_STA_RATE_MSK is set, and normally 0 for data frames ⭐
  • reserved2 β€” reserved πŸ™ˆ
  • key β€” the security key πŸ”‘
  • reserved3 β€” reserved πŸ™ˆ
  • life_time β€” frame life time, and the manpage literally says "(usecs??)" so like… nobody's fully sure, and I'm just passing that along verbatim, don't come for me 😭
  • dram_lsb_ptr β€” physical address of the scratch area in the command (try_cnt + btkill_cnd + reserved), the first 32 bits. Setting it to "0" disables usage ⚠️
  • dram_msb_ptr β€” the upper bits of that scratch physical address 🧩
  • rts_retry_limit β€” max attempts for RTS πŸ“¨
  • data_retry_limit β€” max attempts to send the data packet πŸ“¦
  • tid_tspec β€” TID/tspec 🌈
  • pm_frame_timeout β€” PM TX frame timeout ⏳
  • reserved4 β€” reserved πŸ™ˆ

πŸ’œ Description πŸ’œ

okay, this part is the actual math and you gotta keep it tight:

The byte count (both len and next_frame_len) includes the MAC header (24/26/30/32 bytes) + 2 bytes pad if the header size is 26/30 + 8 byte IV for CCM or TKIP (not used for WEP) + the Data payload + 8-byte MIC (not used for CCM/WEP).

It does not include post-MAC padding, i.e., MIC (CCM) 8 bytes, ICV (WEP/TKIP/CKIP) 4 bytes, CRC 4 bytes.

Range of len: 14-2342 bytes. bestie that range is specific and we respect it 🫑


πŸ‘‘ SEE ALSO πŸ‘‘

all her friends, all of them, in the kernel file ./drivers/net/wireless/intel/iwlwifi/fw/api/tx.h:

  • enum iwl_tx_flags(9)
  • enum iwl_tx_cmd_flags(9)
  • enum iwl_tx_pm_timeouts(9)
  • enum iwl_tx_cmd_sec_ctrl(9)
  • enum iwl_tx_offload_assist_flags_pos(9)
  • struct iwl_tx_cmd_v6(9)
  • struct iwl_tx_cmd_v9(9)
  • struct iwl_tx_cmd(9)
  • struct agg_tx_status(9)
  • struct iwl_tx_resp_v3(9)
  • struct iwl_tx_resp(9)
  • struct iwl_mvm_ba_notif(9)
  • struct iwl_compressed_ba_tfd(9)
  • struct iwl_compressed_ba_ratid(9)
  • struct iwl_compressed_ba_notif(9)
  • struct iwl_mac_beacon_cmd_v6(9)
  • struct iwl_mac_beacon_cmd_v7(9)
  • struct iwl_mac_beacon_cmd(9)
  • struct iwl_extended_beacon_notif_v5(9)
  • struct iwl_extended_beacon_notif(9)
  • enum iwl_dump_control(9)
  • struct iwl_tx_path_flush_cmd_v1(9)
  • struct iwl_tx_path_flush_cmd(9)
  • struct iwl_flush_queue_info(9)
  • struct iwl_tx_path_flush_cmd_rsp(9)
  • struct iwl_scd_txq_cfg_cmd(9)
  • struct iwl_scd_txq_cfg_rsp(9)

okay and one last lil sign-off πŸŽ€ β€” this page comes from source path ./drivers/net/wireless/intel/i... (yes it's truncated like that in the original, love that for us) and it's dated October 2026, closing out with struct iwl_tx_cmd_v6_params(9). read it, love it, slay πŸ’…βœ¨πŸ”₯
πŸ“¦ where this page comes from