From: Yedidya Benshimol Date: Wed, 9 Jul 2025 05:16:23 +0000 (+0300) Subject: wifi: iwlwifi: pcie: Move txcmd size/align calculation to callers X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0b261b014a99fa9f9879fb6b819d67c13f0731a1;p=thirdparty%2Fkernel%2Fstable.git wifi: iwlwifi: pcie: Move txcmd size/align calculation to callers Refactor iwl_trans_init to accept txcmd_size and txcmd_align as parameters instead of calculating them internally. Signed-off-by: Yedidya Benshimol Signed-off-by: Miri Korenblit Link: https://patch.msgid.link/20250709081300.237285d81461.I3552860dd062a523606c8a5c85c9a6f0d4f04262@changeid --- diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-trans.c b/drivers/net/wireless/intel/iwlwifi/iwl-trans.c index 78808c956444..6288779ff8ec 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-trans.c +++ b/drivers/net/wireless/intel/iwlwifi/iwl-trans.c @@ -293,25 +293,13 @@ struct iwl_trans *iwl_trans_alloc(unsigned int priv_size, return trans; } -int iwl_trans_init(struct iwl_trans *trans) +int iwl_trans_init(struct iwl_trans *trans, unsigned int txcmd_size, + unsigned int txcmd_align) { - int txcmd_size, txcmd_align; - /* check if name/num_rx_queues were set as a proxy for info being set */ if (WARN_ON(!trans->info.name || !trans->info.num_rxqs)) return -EINVAL; - if (!trans->mac_cfg->gen2) { - txcmd_size = sizeof(struct iwl_tx_cmd_v6); - txcmd_align = sizeof(void *); - } else if (trans->mac_cfg->device_family < IWL_DEVICE_FAMILY_AX210) { - txcmd_size = sizeof(struct iwl_tx_cmd_v9); - txcmd_align = 64; - } else { - txcmd_size = sizeof(struct iwl_tx_cmd); - txcmd_align = 128; - } - txcmd_size += sizeof(struct iwl_cmd_header); txcmd_size += 36; /* biggest possible 802.11 header */ diff --git a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h index 012b1e44bce3..49a695e30109 100644 --- a/drivers/net/wireless/intel/iwlwifi/iwl-trans.h +++ b/drivers/net/wireless/intel/iwlwifi/iwl-trans.h @@ -1206,7 +1206,8 @@ static inline void iwl_trans_finish_sw_reset(struct iwl_trans *trans) struct iwl_trans *iwl_trans_alloc(unsigned int priv_size, struct device *dev, const struct iwl_mac_cfg *cfg_trans); -int iwl_trans_init(struct iwl_trans *trans); +int iwl_trans_init(struct iwl_trans *trans, unsigned int txcmd_size, + unsigned int txcmd_align); void iwl_trans_free(struct iwl_trans *trans); static inline bool iwl_trans_is_hw_error_value(u32 val) diff --git a/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/trans.c b/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/trans.c index 0ebb1e7e4bf5..9355d5a9d933 100644 --- a/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/trans.c +++ b/drivers/net/wireless/intel/iwlwifi/pcie/gen1_2/trans.c @@ -25,6 +25,7 @@ #include "fw/dbg.h" #include "fw/api/tx.h" #include "fw/acpi.h" +#include "fw/api/tx.h" #include "mei/iwl-mei.h" #include "internal.h" #include "iwl-fh.h" @@ -4139,6 +4140,7 @@ int iwl_pci_gen1_2_probe(struct pci_dev *pdev, }; struct iwl_trans *iwl_trans; struct iwl_trans_pcie *trans_pcie; + unsigned int txcmd_size, txcmd_align; int ret; iwl_trans = iwl_trans_pcie_alloc(pdev, trans, &info); @@ -4247,7 +4249,19 @@ int iwl_pci_gen1_2_probe(struct pci_dev *pdev, iwl_trans_set_info(iwl_trans, &info); - ret = iwl_trans_init(iwl_trans); + if (!iwl_trans->mac_cfg->gen2) { + txcmd_size = sizeof(struct iwl_tx_cmd_v6); + txcmd_align = sizeof(void *); + } else if (iwl_trans->mac_cfg->device_family < + IWL_DEVICE_FAMILY_AX210) { + txcmd_size = sizeof(struct iwl_tx_cmd_v9); + txcmd_align = 64; + } else { + txcmd_size = sizeof(struct iwl_tx_cmd); + txcmd_align = 128; + } + ret = iwl_trans_init(iwl_trans, txcmd_size, txcmd_align); + if (ret) goto out_free_trans;