STRUCT IWL_TX_RESP(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct iwl_tx_resp(9) β€” the Kernel API Manual, bestie edition ✨

okay so this is a page from the Kernel API Manual, and it's all about struct iwl_tx_resp β€” the little guy that tells you fw is TXing a packet (REPLY_TX = 0x1c). yes that's literally in the NAME, we love a clear title πŸŽ€


✨ NAME ✨

struct iwl_tx_resp β€” notifies that fw is TXing a packet ( REPLY_TX = 0x1c )


🌸 SYNOPSIS 🌸

here's the whole struct, character for character, no cap:

struct iwl_tx_resp {
    u8 frame_count;
    u8 bt_kill_count;
    u8 failure_rts;
    u8 failure_frame;
    __le32 initial_rate;
    __le16 wireless_media_time;
    u8 pa_status;
    u8 pa_integ_res_a[3];
    u8 pa_integ_res_b[3];
    u8 pa_integ_res_c[3];
    __le16 measurement_req_id;
    u8 reduced_tpc;
    u8 reserved;
    __le32 tfd_info;
    __le16 seq_ctl;
    __le16 byte_cnt;
    u8 tlc_info;
    u8 ra_tid;
    __le16 frame_ctrl;
    __le16 tx_queue;
    __le16 reserved2;
    struct agg_tx_status status;
};

πŸ¦‹ Members πŸ¦‹

time for the member-by-member vibe check, every single one of them, let's go πŸ”₯

  • frame_count β€” 1 means no aggregation, >1 means aggregation. one brain cell vs. group project energy πŸ’€
  • bt_kill_count β€” the num of times it got blocked by bluetooth (unused for agg)
  • failure_rts β€” num of failures due to unsuccessful RTS 😭
  • failure_frame β€” num failures due to no ACK (unused for agg)
  • initial_rate β€” for non-agg: the rate of the successful Tx. For agg: the rate of the Tx of all the batch. It's RATE_MCS_*, and the format depends on the command version πŸ‘‘
  • wireless_media_time β€” for non-agg: RTS + CTS + frame tx attempts time + ACK. for agg: RTS + CTS + aggregation tx time + block-ack time. in usec ⏱️
  • pa_status β€” tx power info
  • pa_integ_res_a β€” tx power info
  • pa_integ_res_b β€” tx power info
  • pa_integ_res_c β€” tx power info
  • measurement_req_id β€” tx power info
  • reduced_tpc β€” transmit power reduction used
  • reserved β€” reserved
  • tfd_info β€” TFD information set by the FH ✨
  • seq_ctl β€” sequence control from the Tx cmd
  • byte_cnt β€” byte count from the Tx cmd
  • tlc_info β€” TLC rate info
  • ra_tid β€” bits [3:0] = ra, bits [7:4] = tid. bit math slay πŸ’…
  • frame_ctrl β€” frame control
  • tx_queue β€” TX queue for this response
  • reserved2 β€” reserved for padding/alignment
  • status β€” for non-agg: frame status TX_STATUS_*. For version 6, TX response isn't received for aggregation at all. that's just how it is 🫢

🌈 Description 🌈

After the array of statuses comes the SSN of the SCD. Look at iwl_mvm_get_scd_ssn for more details β€” that's the main character function you wanna check, iykyk πŸ‘€

fr fr, don't skip the pointer to iwl_mvm_get_scd_ssn, it's giving "the lore is over there" πŸ’œ

πŸ’– SEE ALSO πŸ’–

Kernel file ./drivers/net/wireless/intel/iwlwifi/fw/api/tx.h, plus all these besties:

  • 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_params(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_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)

that's the whole page, you ate that πŸ“πŸ’… this cutie came from ./drivers/net/wireless/intel/i... and it's dated October 2026, filed under struct iwl_tx_resp(9). go forth and read your TX responses, bestie πŸ§šβœ¨πŸ’œ

πŸ“¦ where this page comes from