]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
wifi: iwlwifi: mvm/fw: Avoid -Wflex-array-member-not-at-end warnings
authorGustavo A. R. Silva <gustavoars@kernel.org>
Wed, 9 Jul 2025 19:47:13 +0000 (22:47 +0300)
committerMiri Korenblit <miriam.rachel.korenblit@intel.com>
Tue, 22 Jul 2025 03:16:01 +0000 (06:16 +0300)
-Wflex-array-member-not-at-end was introduced in GCC-14, and we are
getting ready to enable it, globally.

We have a flexible struct iwl_tx_cmd_v6 in the middle of a few structs,
but those don't even need the flexible part.

So, we add iwl_tx_cmd_v6_params, that will contain everything except the
flexible array and use this one for the containing structs.

Also, as part of the refactoring remove unused flex array `payload`.

So, with these changes, fix the following warnings:

drivers/net/wireless/intel/iwlwifi/mld/../fw/api/tdls.h:134:27: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
drivers/net/wireless/intel/iwlwifi/mld/../fw/api/tdls.h:53:27: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
drivers/net/wireless/intel/iwlwifi/mld/../fw/api/tx.h:745:27: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
drivers/net/wireless/intel/iwlwifi/mld/../fw/api/tx.h:764:27: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
drivers/net/wireless/intel/iwlwifi/mvm/../fw/api/tdls.h:134:27: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
drivers/net/wireless/intel/iwlwifi/mvm/../fw/api/tdls.h:53:27: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
drivers/net/wireless/intel/iwlwifi/mvm/../fw/api/tx.h:745:27: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]
drivers/net/wireless/intel/iwlwifi/mvm/../fw/api/tx.h:764:27: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]

Signed-off-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Link: https://msgid.link/aCUOQ6wdD1jQjO36@kspp
[use iwl_tx_cmd_v6_params as described in the changed commit message]
Reviewed-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
Link: https://patch.msgid.link/20250709224608.0785a61b0826.I6da02c2a12a5ed1e6d317045a6995d132850a455@changeid
Signed-off-by: Miri Korenblit <miriam.rachel.korenblit@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/api/tdls.h
drivers/net/wireless/intel/iwlwifi/fw/api/tx.h
drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h
drivers/net/wireless/intel/iwlwifi/mvm/tx.c
drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/tx.c

index 58d5a6ef633e93863dcfd8e5ee1ef156ef19940d..08edd1d99992a88dfc52907a190aa15cf2627fb7 100644 (file)
@@ -50,7 +50,7 @@ struct iwl_tdls_channel_switch_timing {
  */
 struct iwl_tdls_channel_switch_frame {
        __le32 switch_time_offset;
-       struct iwl_tx_cmd_v6 tx_cmd;
+       struct iwl_tx_cmd_v6_params tx_cmd;
        u8 data[IWL_TDLS_CH_SW_FRAME_MAX_SIZE];
 } __packed; /* TDLS_STA_CHANNEL_SWITCH_FRAME_API_S_VER_1 */
 
@@ -131,7 +131,7 @@ struct iwl_tdls_config_cmd {
        struct iwl_tdls_sta_info sta_info[IWL_TDLS_STA_COUNT];
 
        __le32 pti_req_data_offset;
-       struct iwl_tx_cmd_v6 pti_req_tx_cmd;
+       struct iwl_tx_cmd_v6_params pti_req_tx_cmd;
        u8 pti_req_template[];
 } __packed; /* TDLS_CONFIG_CMD_API_S_VER_1 */
 
index 62bd35a8f680508ca4dec4b2539bc06fc4a1e2c7..26d2013905ed99ea4be7f3e39d4119bf355ec227 100644 (file)
@@ -181,8 +181,8 @@ enum iwl_tx_offload_assist_flags_pos {
 
 /* TODO: complete documentation for try_cnt and btkill_cnt */
 /**
- * struct iwl_tx_cmd_v6 - TX command struct to FW
- * ( TX_CMD = 0x1c )
+ * struct iwl_tx_cmd_v6_params - parameters of the TX
+ *
  * @len: in bytes of the payload, see below for details
  * @offload_assist: TX offload configuration
  * @tx_flags: combination of TX_CMD_FLG_*, see &enum iwl_tx_flags
@@ -205,8 +205,6 @@ enum iwl_tx_offload_assist_flags_pos {
  * @tid_tspec: TID/tspec
  * @pm_frame_timeout: PM TX frame timeout
  * @reserved4: reserved
- * @payload: payload (same as @hdr)
- * @hdr: 802.11 header (same as @payload)
  *
  * The byte count (both len and next_frame_len) includes MAC header
  * (24/26/30/32 bytes)
@@ -217,11 +215,8 @@ enum iwl_tx_offload_assist_flags_pos {
  * 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.
- *
- * After the struct fields the MAC header is placed, plus any padding,
- * and then the actial payload.
  */
-struct iwl_tx_cmd_v6 {
+struct iwl_tx_cmd_v6_params {
        __le16 len;
        __le16 offload_assist;
        __le32 tx_flags;
@@ -245,10 +240,20 @@ struct iwl_tx_cmd_v6 {
        u8 tid_tspec;
        __le16 pm_frame_timeout;
        __le16 reserved4;
-       union {
-               DECLARE_FLEX_ARRAY(u8, payload);
-               DECLARE_FLEX_ARRAY(struct ieee80211_hdr, hdr);
-       };
+} __packed; /* TX_CMD_API_S_VER_6 */
+
+/**
+ * struct iwl_tx_cmd_v6 - TX command struct to FW
+ * ( TX_CMD = 0x1c )
+ * @params: parameters of the TX, see &struct iwl_tx_cmd_v6_tx_params
+ * @hdr: 802.11 header
+ *
+ * After &params, the MAC header is placed, plus any padding,
+ * and then the actual payload.
+ */
+struct iwl_tx_cmd_v6 {
+       struct iwl_tx_cmd_v6_params params;
+       struct ieee80211_hdr hdr[];
 } __packed; /* TX_CMD_API_S_VER_6 */
 
 struct iwl_dram_sec_info {
@@ -748,7 +753,7 @@ struct iwl_compressed_ba_notif {
  * @frame: the template of the beacon frame
  */
 struct iwl_mac_beacon_cmd_v6 {
-       struct iwl_tx_cmd_v6 tx;
+       struct iwl_tx_cmd_v6_params tx;
        __le32 template_id;
        __le32 tim_idx;
        __le32 tim_size;
@@ -767,7 +772,7 @@ struct iwl_mac_beacon_cmd_v6 {
  * @frame: the template of the beacon frame
  */
 struct iwl_mac_beacon_cmd_v7 {
-       struct iwl_tx_cmd_v6 tx;
+       struct iwl_tx_cmd_v6_params tx;
        __le32 template_id;
        __le32 tim_idx;
        __le32 tim_size;
index d9d61e25807a3cb771a81e67c483e839ddc0ea9a..7d2b496aadc56ff53a3b8e246df0e95dd2bf394d 100644 (file)
@@ -976,7 +976,7 @@ u8 iwl_mvm_mac_ctxt_get_beacon_rate(struct iwl_mvm *mvm,
 static void iwl_mvm_mac_ctxt_set_tx(struct iwl_mvm *mvm,
                                    struct ieee80211_vif *vif,
                                    struct sk_buff *beacon,
-                                   struct iwl_tx_cmd_v6 *tx)
+                                   struct iwl_tx_cmd_v6_params *tx_params)
 {
        struct iwl_mvm_vif *mvmvif = iwl_mvm_vif_from_mac80211(vif);
        struct ieee80211_tx_info *info;
@@ -986,30 +986,30 @@ static void iwl_mvm_mac_ctxt_set_tx(struct iwl_mvm *mvm,
        info = IEEE80211_SKB_CB(beacon);
 
        /* Set up TX command fields */
-       tx->len = cpu_to_le16((u16)beacon->len);
-       tx->sta_id = mvmvif->deflink.bcast_sta.sta_id;
-       tx->life_time = cpu_to_le32(TX_CMD_LIFE_TIME_INFINITE);
+       tx_params->len = cpu_to_le16((u16)beacon->len);
+       tx_params->sta_id = mvmvif->deflink.bcast_sta.sta_id;
+       tx_params->life_time = cpu_to_le32(TX_CMD_LIFE_TIME_INFINITE);
        tx_flags = TX_CMD_FLG_SEQ_CTL | TX_CMD_FLG_TSF;
        tx_flags |=
                iwl_mvm_bt_coex_tx_prio(mvm, (void *)beacon->data, info, 0) <<
                                                TX_CMD_FLG_BT_PRIO_POS;
-       tx->tx_flags = cpu_to_le32(tx_flags);
+       tx_params->tx_flags = cpu_to_le32(tx_flags);
 
        if (!fw_has_capa(&mvm->fw->ucode_capa,
                         IWL_UCODE_TLV_CAPA_BEACON_ANT_SELECTION)) {
                iwl_mvm_toggle_tx_ant(mvm, &mvm->mgmt_last_antenna_idx);
 
-               tx->rate_n_flags =
+               tx_params->rate_n_flags =
                        cpu_to_le32(BIT(mvm->mgmt_last_antenna_idx) <<
                                    RATE_MCS_ANT_POS);
        }
 
        rate = iwl_mvm_mac_ctxt_get_beacon_rate(mvm, info, vif);
 
-       tx->rate_n_flags |=
+       tx_params->rate_n_flags |=
                cpu_to_le32(iwl_mvm_mac80211_idx_to_hwrate(mvm->fw, rate));
        if (rate == IWL_FIRST_CCK_RATE)
-               tx->rate_n_flags |= cpu_to_le32(RATE_MCS_CCK_MSK_V1);
+               tx_params->rate_n_flags |= cpu_to_le32(RATE_MCS_CCK_MSK_V1);
 
 }
 
index 9e83c671f4e2dc4e8274da52b717cb623cb38156..af73ff09d60915fc48558ce5212338d60be204d7 100644 (file)
@@ -1821,11 +1821,12 @@ int iwl_mvm_tx_skb_sta(struct iwl_mvm *mvm, struct sk_buff *skb,
                       struct ieee80211_sta *sta);
 int iwl_mvm_tx_skb_non_sta(struct iwl_mvm *mvm, struct sk_buff *skb);
 void iwl_mvm_set_tx_cmd(struct iwl_mvm *mvm, struct sk_buff *skb,
-                       struct iwl_tx_cmd_v6 *tx_cmd,
+                       struct iwl_tx_cmd_v6_params *tx_cmd_params,
                        struct ieee80211_tx_info *info, u8 sta_id);
-void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm, struct iwl_tx_cmd_v6 *tx_cmd,
-                           struct ieee80211_tx_info *info,
-                           struct ieee80211_sta *sta, __le16 fc);
+void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm,
+                            struct iwl_tx_cmd_v6_params *tx_cmd_params,
+                            struct ieee80211_tx_info *info,
+                            struct ieee80211_sta *sta, __le16 fc);
 void iwl_mvm_mac_itxq_xmit(struct ieee80211_hw *hw, struct ieee80211_txq *txq);
 unsigned int iwl_mvm_max_amsdu_size(struct iwl_mvm *mvm,
                                    struct ieee80211_sta *sta,
@@ -1854,12 +1855,12 @@ int iwl_mvm_set_sta_pkt_ext(struct iwl_mvm *mvm,
 void iwl_mvm_async_handlers_purge(struct iwl_mvm *mvm);
 
 static inline void iwl_mvm_set_tx_cmd_ccmp(struct ieee80211_tx_info *info,
-                                          struct iwl_tx_cmd_v6 *tx_cmd)
+                                          struct iwl_tx_cmd_v6_params *tx_cmd_params)
 {
        struct ieee80211_key_conf *keyconf = info->control.hw_key;
 
-       tx_cmd->sec_ctl = TX_CMD_SEC_CCM;
-       memcpy(tx_cmd->key, keyconf->key, keyconf->keylen);
+       tx_cmd_params->sec_ctl = TX_CMD_SEC_CCM;
+       memcpy(tx_cmd_params->key, keyconf->key, keyconf->keylen);
 }
 
 static inline void iwl_mvm_wait_for_async_handlers(struct iwl_mvm *mvm)
index ac2cf1b8ce2367a5e3a9e4daf93148a497943688..25d1a882a6a0f465fe10a233beaf8721496619e6 100644 (file)
@@ -148,12 +148,12 @@ out:
  * Sets most of the Tx cmd's fields
  */
 void iwl_mvm_set_tx_cmd(struct iwl_mvm *mvm, struct sk_buff *skb,
-                       struct iwl_tx_cmd_v6 *tx_cmd,
+                       struct iwl_tx_cmd_v6_params *tx_cmd_params,
                        struct ieee80211_tx_info *info, u8 sta_id)
 {
        struct ieee80211_hdr *hdr = (void *)skb->data;
        __le16 fc = hdr->frame_control;
-       u32 tx_flags = le32_to_cpu(tx_cmd->tx_flags);
+       u32 tx_flags = le32_to_cpu(tx_cmd_params->tx_flags);
        u32 len = skb->len + FCS_LEN;
        bool amsdu = false;
        u8 ac;
@@ -173,7 +173,7 @@ void iwl_mvm_set_tx_cmd(struct iwl_mvm *mvm, struct sk_buff *skb,
 
        if (ieee80211_is_data_qos(fc)) {
                u8 *qc = ieee80211_get_qos_ctl(hdr);
-               tx_cmd->tid_tspec = qc[0] & 0xf;
+               tx_cmd_params->tid_tspec = qc[0] & 0xf;
                tx_flags &= ~TX_CMD_FLG_SEQ_CTL;
                amsdu = *qc & IEEE80211_QOS_CTL_A_MSDU_PRESENT;
        } else if (ieee80211_is_back_req(fc)) {
@@ -182,17 +182,17 @@ void iwl_mvm_set_tx_cmd(struct iwl_mvm *mvm, struct sk_buff *skb,
                u16 ssn = le16_to_cpu(bar->start_seq_num);
 
                tx_flags |= TX_CMD_FLG_ACK | TX_CMD_FLG_BAR;
-               tx_cmd->tid_tspec = (control &
+               tx_cmd_params->tid_tspec = (control &
                                     IEEE80211_BAR_CTRL_TID_INFO_MASK) >>
                        IEEE80211_BAR_CTRL_TID_INFO_SHIFT;
-               WARN_ON_ONCE(tx_cmd->tid_tspec >= IWL_MAX_TID_COUNT);
-               iwl_mvm_bar_check_trigger(mvm, bar->ra, tx_cmd->tid_tspec,
+               WARN_ON_ONCE(tx_cmd_params->tid_tspec >= IWL_MAX_TID_COUNT);
+               iwl_mvm_bar_check_trigger(mvm, bar->ra, tx_cmd_params->tid_tspec,
                                          ssn);
        } else {
                if (ieee80211_is_data(fc))
-                       tx_cmd->tid_tspec = IWL_TID_NON_QOS;
+                       tx_cmd_params->tid_tspec = IWL_TID_NON_QOS;
                else
-                       tx_cmd->tid_tspec = IWL_MAX_TID_COUNT;
+                       tx_cmd_params->tid_tspec = IWL_MAX_TID_COUNT;
 
                if (info->flags & IEEE80211_TX_CTL_ASSIGN_SEQ)
                        tx_flags |= TX_CMD_FLG_SEQ_CTL;
@@ -201,8 +201,8 @@ void iwl_mvm_set_tx_cmd(struct iwl_mvm *mvm, struct sk_buff *skb,
        }
 
        /* Default to 0 (BE) when tid_spec is set to IWL_MAX_TID_COUNT */
-       if (tx_cmd->tid_tspec < IWL_MAX_TID_COUNT)
-               ac = tid_to_mac80211_ac[tx_cmd->tid_tspec];
+       if (tx_cmd_params->tid_tspec < IWL_MAX_TID_COUNT)
+               ac = tid_to_mac80211_ac[tx_cmd_params->tid_tspec];
        else
                ac = tid_to_mac80211_ac[0];
 
@@ -211,20 +211,20 @@ void iwl_mvm_set_tx_cmd(struct iwl_mvm *mvm, struct sk_buff *skb,
 
        if (ieee80211_is_mgmt(fc)) {
                if (ieee80211_is_assoc_req(fc) || ieee80211_is_reassoc_req(fc))
-                       tx_cmd->pm_frame_timeout = cpu_to_le16(PM_FRAME_ASSOC);
+                       tx_cmd_params->pm_frame_timeout = cpu_to_le16(PM_FRAME_ASSOC);
                else if (ieee80211_is_action(fc))
-                       tx_cmd->pm_frame_timeout = cpu_to_le16(PM_FRAME_NONE);
+                       tx_cmd_params->pm_frame_timeout = cpu_to_le16(PM_FRAME_NONE);
                else
-                       tx_cmd->pm_frame_timeout = cpu_to_le16(PM_FRAME_MGMT);
+                       tx_cmd_params->pm_frame_timeout = cpu_to_le16(PM_FRAME_MGMT);
 
                /* The spec allows Action frames in A-MPDU, we don't support
                 * it
                 */
                WARN_ON_ONCE(info->flags & IEEE80211_TX_CTL_AMPDU);
        } else if (info->control.flags & IEEE80211_TX_CTRL_PORT_CTRL_PROTO) {
-               tx_cmd->pm_frame_timeout = cpu_to_le16(PM_FRAME_MGMT);
+               tx_cmd_params->pm_frame_timeout = cpu_to_le16(PM_FRAME_MGMT);
        } else {
-               tx_cmd->pm_frame_timeout = cpu_to_le16(PM_FRAME_NONE);
+               tx_cmd_params->pm_frame_timeout = cpu_to_le16(PM_FRAME_NONE);
        }
 
        if (ieee80211_is_data(fc) && len > mvm->rts_threshold &&
@@ -236,13 +236,13 @@ void iwl_mvm_set_tx_cmd(struct iwl_mvm *mvm, struct sk_buff *skb,
            ieee80211_action_contains_tpc(skb))
                tx_flags |= TX_CMD_FLG_WRITE_TX_POWER;
 
-       tx_cmd->tx_flags = cpu_to_le32(tx_flags);
+       tx_cmd_params->tx_flags = cpu_to_le32(tx_flags);
        /* Total # bytes to be transmitted - PCIe code will adjust for A-MSDU */
-       tx_cmd->len = cpu_to_le16((u16)skb->len);
-       tx_cmd->life_time = cpu_to_le32(TX_CMD_LIFE_TIME_INFINITE);
-       tx_cmd->sta_id = sta_id;
+       tx_cmd_params->len = cpu_to_le16((u16)skb->len);
+       tx_cmd_params->life_time = cpu_to_le32(TX_CMD_LIFE_TIME_INFINITE);
+       tx_cmd_params->sta_id = sta_id;
 
-       tx_cmd->offload_assist =
+       tx_cmd_params->offload_assist =
                cpu_to_le16(iwl_mvm_tx_csum(mvm, skb, info, amsdu));
 }
 
@@ -395,22 +395,23 @@ static __le32 iwl_mvm_get_tx_rate_n_flags(struct iwl_mvm *mvm,
 /*
  * Sets the fields in the Tx cmd that are rate related
  */
-void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm, struct iwl_tx_cmd_v6 *tx_cmd,
-                           struct ieee80211_tx_info *info,
-                           struct ieee80211_sta *sta, __le16 fc)
+void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm,
+                            struct iwl_tx_cmd_v6_params *tx_cmd_params,
+                            struct ieee80211_tx_info *info,
+                            struct ieee80211_sta *sta, __le16 fc)
 {
        /* Set retry limit on RTS packets */
-       tx_cmd->rts_retry_limit = IWL_RTS_DFAULT_RETRY_LIMIT;
+       tx_cmd_params->rts_retry_limit = IWL_RTS_DFAULT_RETRY_LIMIT;
 
        /* Set retry limit on DATA packets and Probe Responses*/
        if (ieee80211_is_probe_resp(fc)) {
-               tx_cmd->data_retry_limit = IWL_MGMT_DFAULT_RETRY_LIMIT;
-               tx_cmd->rts_retry_limit =
-                       min(tx_cmd->data_retry_limit, tx_cmd->rts_retry_limit);
+               tx_cmd_params->data_retry_limit = IWL_MGMT_DFAULT_RETRY_LIMIT;
+               tx_cmd_params->rts_retry_limit =
+                       min(tx_cmd_params->data_retry_limit, tx_cmd_params->rts_retry_limit);
        } else if (ieee80211_is_back_req(fc)) {
-               tx_cmd->data_retry_limit = IWL_BAR_DFAULT_RETRY_LIMIT;
+               tx_cmd_params->data_retry_limit = IWL_BAR_DFAULT_RETRY_LIMIT;
        } else {
-               tx_cmd->data_retry_limit = IWL_DEFAULT_TX_RETRY;
+               tx_cmd_params->data_retry_limit = IWL_DEFAULT_TX_RETRY;
        }
 
        /*
@@ -423,17 +424,17 @@ void iwl_mvm_set_tx_cmd_rate(struct iwl_mvm *mvm, struct iwl_tx_cmd_v6 *tx_cmd,
                struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
 
                if (mvmsta->sta_state >= IEEE80211_STA_AUTHORIZED) {
-                       tx_cmd->initial_rate_index = 0;
-                       tx_cmd->tx_flags |= cpu_to_le32(TX_CMD_FLG_STA_RATE);
+                       tx_cmd_params->initial_rate_index = 0;
+                       tx_cmd_params->tx_flags |= cpu_to_le32(TX_CMD_FLG_STA_RATE);
                        return;
                }
        } else if (ieee80211_is_back_req(fc)) {
-               tx_cmd->tx_flags |=
+               tx_cmd_params->tx_flags |=
                        cpu_to_le32(TX_CMD_FLG_ACK | TX_CMD_FLG_BAR);
        }
 
        /* Set the rate in the TX cmd */
-       tx_cmd->rate_n_flags = iwl_mvm_get_tx_rate_n_flags(mvm, info, sta, fc);
+       tx_cmd_params->rate_n_flags = iwl_mvm_get_tx_rate_n_flags(mvm, info, sta, fc);
 }
 
 static inline void iwl_mvm_set_tx_cmd_pn(struct ieee80211_tx_info *info,
@@ -458,7 +459,7 @@ static inline void iwl_mvm_set_tx_cmd_pn(struct ieee80211_tx_info *info,
  */
 static void iwl_mvm_set_tx_cmd_crypto(struct iwl_mvm *mvm,
                                      struct ieee80211_tx_info *info,
-                                     struct iwl_tx_cmd_v6 *tx_cmd,
+                                     struct iwl_tx_cmd_v6_params *tx_cmd_params,
                                      struct sk_buff *skb_frag,
                                      int hdrlen)
 {
@@ -469,26 +470,26 @@ static void iwl_mvm_set_tx_cmd_crypto(struct iwl_mvm *mvm,
 
        switch (keyconf->cipher) {
        case WLAN_CIPHER_SUITE_CCMP:
-               iwl_mvm_set_tx_cmd_ccmp(info, tx_cmd);
+               iwl_mvm_set_tx_cmd_ccmp(info, tx_cmd_params);
                iwl_mvm_set_tx_cmd_pn(info, crypto_hdr);
                break;
 
        case WLAN_CIPHER_SUITE_TKIP:
-               tx_cmd->sec_ctl = TX_CMD_SEC_TKIP;
+               tx_cmd_params->sec_ctl = TX_CMD_SEC_TKIP;
                pn = atomic64_inc_return(&keyconf->tx_pn);
                ieee80211_tkip_add_iv(crypto_hdr, keyconf, pn);
-               ieee80211_get_tkip_p2k(keyconf, skb_frag, tx_cmd->key);
+               ieee80211_get_tkip_p2k(keyconf, skb_frag, tx_cmd_params->key);
                break;
 
        case WLAN_CIPHER_SUITE_WEP104:
-               tx_cmd->sec_ctl |= TX_CMD_SEC_KEY128;
+               tx_cmd_params->sec_ctl |= TX_CMD_SEC_KEY128;
                fallthrough;
        case WLAN_CIPHER_SUITE_WEP40:
-               tx_cmd->sec_ctl |= TX_CMD_SEC_WEP |
+               tx_cmd_params->sec_ctl |= TX_CMD_SEC_WEP |
                        ((keyconf->keyidx << TX_CMD_SEC_WEP_KEY_IDX_POS) &
                          TX_CMD_SEC_WEP_KEY_IDX_MSK);
 
-               memcpy(&tx_cmd->key[3], keyconf->key, keyconf->keylen);
+               memcpy(&tx_cmd_params->key[3], keyconf->key, keyconf->keylen);
                break;
        case WLAN_CIPHER_SUITE_GCMP:
        case WLAN_CIPHER_SUITE_GCMP_256:
@@ -501,12 +502,12 @@ static void iwl_mvm_set_tx_cmd_crypto(struct iwl_mvm *mvm,
                 * one.
                 * Need to handle this.
                 */
-               tx_cmd->sec_ctl |= type | TX_CMD_SEC_KEY_FROM_TABLE;
-               tx_cmd->key[0] = keyconf->hw_key_idx;
+               tx_cmd_params->sec_ctl |= type | TX_CMD_SEC_KEY_FROM_TABLE;
+               tx_cmd_params->key[0] = keyconf->hw_key_idx;
                iwl_mvm_set_tx_cmd_pn(info, crypto_hdr);
                break;
        default:
-               tx_cmd->sec_ctl |= TX_CMD_SEC_EXT;
+               tx_cmd_params->sec_ctl |= TX_CMD_SEC_EXT;
        }
 }
 
@@ -636,11 +637,11 @@ iwl_mvm_set_tx_params(struct iwl_mvm *mvm, struct sk_buff *skb,
        tx_cmd = (struct iwl_tx_cmd_v6 *)dev_cmd->payload;
 
        if (info->control.hw_key)
-               iwl_mvm_set_tx_cmd_crypto(mvm, info, tx_cmd, skb, hdrlen);
+               iwl_mvm_set_tx_cmd_crypto(mvm, info, &tx_cmd->params, skb, hdrlen);
 
-       iwl_mvm_set_tx_cmd(mvm, skb, tx_cmd, info, sta_id);
+       iwl_mvm_set_tx_cmd(mvm, skb, &tx_cmd->params, info, sta_id);
 
-       iwl_mvm_set_tx_cmd_rate(mvm, tx_cmd, info, sta, hdr->frame_control);
+       iwl_mvm_set_tx_cmd_rate(mvm, &tx_cmd->params, info, sta, hdr->frame_control);
 
        /* Copy MAC header from skb into command buffer */
        iwl_mvm_copy_hdr(tx_cmd->hdr, hdr, hdrlen, addr3_override);
index 10a12938d8f8b26b7e0485fe62537f05da004b24..84a05cc1c27a686100434100e8ceeff51e94ac79 100644 (file)
@@ -1963,7 +1963,7 @@ static int iwl_fill_data_tbs_amsdu(struct iwl_trans *trans, struct sk_buff *skb,
         * have in the MPDU by themselves, but that we duplicate into
         * all the different MSDUs inside the A-MSDU.
         */
-       le16_add_cpu(&tx_cmd->len, -snap_ip_tcp_hdrlen);
+       le16_add_cpu(&tx_cmd->params.len, -snap_ip_tcp_hdrlen);
 
        tso_start(skb, &tso);
 
@@ -2006,7 +2006,7 @@ static int iwl_fill_data_tbs_amsdu(struct iwl_trans *trans, struct sk_buff *skb,
                trace_iwlwifi_dev_tx_tb(trans->dev, skb, start_hdr,
                                        hdr_tb_phys, hdr_tb_len);
                /* add this subframe's headers' length to the tx_cmd */
-               le16_add_cpu(&tx_cmd->len, pos_hdr - subf_hdrs_start);
+               le16_add_cpu(&tx_cmd->params.len, pos_hdr - subf_hdrs_start);
 
                /* prepare the start_hdr for the next subframe */
                start_hdr = pos_hdr;
@@ -2074,11 +2074,11 @@ static void iwl_txq_gen1_update_byte_cnt_tbl(struct iwl_trans *trans,
        __le16 bc_ent;
        struct iwl_device_tx_cmd *dev_cmd = txq->entries[txq->write_ptr].cmd;
        struct iwl_tx_cmd_v6 *tx_cmd = (void *)dev_cmd->payload;
-       u8 sta_id = tx_cmd->sta_id;
+       u8 sta_id = tx_cmd->params.sta_id;
 
        scd_bc_tbl = trans_pcie->txqs.scd_bc_tbls.addr;
 
-       sec_ctl = tx_cmd->sec_ctl;
+       sec_ctl = tx_cmd->params.sec_ctl;
 
        switch (sec_ctl & TX_CMD_SEC_MSK) {
        case TX_CMD_SEC_CCM:
@@ -2185,10 +2185,10 @@ int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
 
        tb0_phys = iwl_txq_get_first_tb_dma(txq, txq->write_ptr);
        scratch_phys = tb0_phys + sizeof(struct iwl_cmd_header) +
-                      offsetof(struct iwl_tx_cmd_v6, scratch);
+                      offsetof(struct iwl_tx_cmd_v6_params, scratch);
 
-       tx_cmd->dram_lsb_ptr = cpu_to_le32(scratch_phys);
-       tx_cmd->dram_msb_ptr = iwl_get_dma_hi_addr(scratch_phys);
+       tx_cmd->params.dram_lsb_ptr = cpu_to_le32(scratch_phys);
+       tx_cmd->params.dram_msb_ptr = iwl_get_dma_hi_addr(scratch_phys);
 
        /* Set up first empty entry in queue's array of Tx/cmd buffers */
        out_meta = &txq->entries[txq->write_ptr].meta;
@@ -2210,7 +2210,7 @@ int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
                tb1_len = ALIGN(len, 4);
                /* Tell NIC about any 2-byte padding after MAC header */
                if (tb1_len != len)
-                       tx_cmd->tx_flags |= cpu_to_le32(TX_CMD_FLG_MH_PAD);
+                       tx_cmd->params.tx_flags |= cpu_to_le32(TX_CMD_FLG_MH_PAD);
        } else {
                tb1_len = len;
        }
@@ -2225,7 +2225,7 @@ int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
        /* there must be data left over for TB1 or this code must be changed */
        BUILD_BUG_ON(sizeof(struct iwl_tx_cmd_v6) < IWL_FIRST_TB_SIZE);
        BUILD_BUG_ON(sizeof(struct iwl_cmd_header) +
-                    offsetofend(struct iwl_tx_cmd_v6, scratch) >
+                    offsetofend(struct iwl_tx_cmd_v6_params, scratch) >
                     IWL_FIRST_TB_SIZE);
 
        /* map the data for TB1 */
@@ -2271,7 +2271,7 @@ int iwl_trans_pcie_tx(struct iwl_trans *trans, struct sk_buff *skb,
 
        tfd = iwl_txq_get_tfd(trans, txq, txq->write_ptr);
        /* Set up entry for this TFD in Tx byte-count array */
-       iwl_txq_gen1_update_byte_cnt_tbl(trans, txq, le16_to_cpu(tx_cmd->len),
+       iwl_txq_gen1_update_byte_cnt_tbl(trans, txq, le16_to_cpu(tx_cmd->params.len),
                                         iwl_txq_gen1_tfd_get_num_tbs(tfd));
 
        wait_write_ptr = ieee80211_has_morefrags(fc);
@@ -2323,7 +2323,7 @@ static void iwl_txq_gen1_inval_byte_cnt_tbl(struct iwl_trans *trans,
        WARN_ON(read_ptr >= TFD_QUEUE_SIZE_MAX);
 
        if (txq_id != trans->conf.cmd_queue)
-               sta_id = tx_cmd->sta_id;
+               sta_id = tx_cmd->params.sta_id;
 
        bc_ent = cpu_to_le16(1 | (sta_id << 12));