STRUCT IWL_RX_MPDU_DESC_V1(9)

πŸ“¦ version 7.3.1, in nixpkgs unstable

πŸ’… struct iwl_rx_mpdu_desc_v1(9) β€” like, the RX MPDU descriptor, bestie πŸŽ€

okay so this is a page straight outta the Kernel API Manual (struct iwl_rx_mpdu_desc_v1(9)), and yes it's a C struct, and yes it's giving very much "wireless driver internals" energy. buckle up πŸ¦‹


✨ NAME ✨

struct iwl_rx_mpdu_desc_v1 β€” the RX MPDU descriptor. that's it, that's the name, no cap πŸ’–


πŸ”₯ SYNOPSIS πŸ”₯

here's the whole shape of her, literally copy-paste sacred, do not touch:

struct iwl_rx_mpdu_desc_v1 {
    union {
      __le32 rss_hash;
      __le32 phy_data2;
    };
    union {
      __le32 filter_match;
      __le32 phy_data3;
    };
    __le32 rate_n_flags;
    u8 energy_a;
    u8 energy_b;
    u8 channel;
    u8 mac_context;
    __le32 gp2_on_air_rise;
    union {
      __le64 tsf_on_air_rise;
      struct {
        __le32 phy_data0;
        __le32 phy_data1;
      };
    };
 };

🧚 Members 🧚

so there's a bunch of anonymous unions in here and honestly the manpage just labels them {unnamed_union} and says anonymous. iconic, unbothered, no notes πŸ’€ three of those bad boys, plus one {unnamed_struct} that's also just… anonymous. main character energy, refuses to be named 😭

🌸 first union β€” the little anonymous one

  • rss_hash β€” the RSS hash value, slay πŸ’œ
  • phy_data2 β€” depends on info type (peep phy_data1 for the deets) πŸ‘€

🌈 second union β€” also anonymous, also mysterious

  • filter_match β€” the filter match value ✨
  • phy_data3 β€” again, depends on info type (see phy_data1) 🫢

⭐ the straightforward ones

  • rate_n_flags β€” the RX rate/flags encoding, this is where the rate info lives πŸ”₯
  • energy_a β€” energy, chain A ⚑
  • energy_b β€” energy, chain B ⚑⚑ (twins!)
  • channel β€” the channel number πŸ“‘
  • mac_context β€” the MAC context mask 🎭
  • gp2_on_air_rise β€” the GP2 timer value on air rise (INA) ⏱️

πŸ¦‹ third union β€” the one with the actual lore

  • tsf_on_air_rise β€” the TSF value on air rise (INA). ⚠️ but bestie listen: this one is only valid if IWL_RX_MPDU_PHY_TSF_OVERLOAD isn't set. if that flag IS set, this field is not your girl, okay? πŸ’…

πŸ“ and nested inside that union, a struct (also anonymous πŸ’€)

  • phy_data0 β€” depends on info_type, see phy_data1 πŸ™ˆ
  • phy_data1 β€” valid only if IWL_RX_MPDU_PHY_TSF_OVERLOAD is set, and then you gotta check see enum iwl_rx_phy_common_data1 or enum iwl_rx_phy_he_data1 or enum iwl_rx_phy_eht_data1. three whole enums, pick your fighter πŸ‘‘
πŸŽ€ vibe check: two fields in this struct are gated on IWL_RX_MPDU_PHY_TSF_OVERLOAD and they're gated in opposite directions. tsf_on_air_rise wants the flag OFF, phy_data1 wants it ON. don't mix them up or it's giving undefined vibes 😭

πŸ‘‘ SEE ALSO πŸ‘‘

the whole extended friend group, from the kernel file ./drivers/net/wireless/intel/iwlwifi/fw/api/rx.h:

  • struct iwl_rx_phy_info(9)
  • struct iwl_rx_mpdu_res_start(9)
  • enum iwl_rx_phy_flags(9)
  • enum iwl_mvm_rx_status(9)
  • struct iwl_rx_mpdu_desc_v3(9)
  • struct iwl_rx_mpdu_desc(9)
  • struct iwl_rx_no_data(9)
  • struct iwl_rx_no_data_ver_3(9)
  • enum iwl_bar_frame_release_sta_tid(9)
  • enum iwl_bar_frame_release_ba_info(9)
  • struct iwl_bar_frame_release(9)
  • struct iwl_rss_config_cmd(9)
  • struct iwl_rxq_sync_cmd(9)
  • struct iwl_rxq_sync_notification(9)
  • enum iwl_mvm_pm_event(9)
  • struct iwl_mvm_pm_state_notification(9)
  • struct iwl_ba_window_status_notif(9)
  • struct iwl_rfh_queue_data(9)
  • struct iwl_rfh_queue_config(9)
  • struct iwl_beacon_filter_notif_v1(9)
  • struct iwl_beacon_filter_notif(9)
  • struct iwl_rx_phy_air_sniffer_ntfy(9)

and that's the whole page, bestie!! no crumbs left, every flag and field accounted for 🫢

kisses from the source file ./drivers/net/wireless/intel/i..., dated October 2026, brought to you by struct iwl_rx_mpdu_desc_v1(9) β€” she's the Kernel API Manual's finest, periodt πŸ’œβœ¨πŸŽ€

πŸ“¦ where this page comes from