mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-05 14:17:43 +00:00
iwlwifi: mvm: use correct FIFO length
Current FIFO size calculation is wrong for two reasons: - We access lmac 0 by default - We don't take 11ax into consideration. Fix both. Signed-off-by: Sara Sharon <sara.sharon@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
753e976128
commit
7126b6f2bb
2 changed files with 36 additions and 15 deletions
|
@ -82,6 +82,10 @@ const u8 iwl_mvm_ac_to_gen2_tx_fifo[] = {
|
|||
IWL_GEN2_EDCA_TX_FIFO_VI,
|
||||
IWL_GEN2_EDCA_TX_FIFO_BE,
|
||||
IWL_GEN2_EDCA_TX_FIFO_BK,
|
||||
IWL_GEN2_TRIG_TX_FIFO_VO,
|
||||
IWL_GEN2_TRIG_TX_FIFO_VI,
|
||||
IWL_GEN2_TRIG_TX_FIFO_BE,
|
||||
IWL_GEN2_TRIG_TX_FIFO_BK,
|
||||
};
|
||||
|
||||
struct iwl_mvm_mac_iface_iterator_data {
|
||||
|
|
|
@ -840,6 +840,36 @@ iwl_mvm_tx_tso_segment(struct sk_buff *skb, unsigned int num_subframes,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static unsigned int iwl_mvm_max_amsdu_size(struct iwl_mvm *mvm,
|
||||
struct ieee80211_sta *sta,
|
||||
unsigned int tid)
|
||||
{
|
||||
struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
|
||||
enum nl80211_band band = mvmsta->vif->bss_conf.chandef.chan->band;
|
||||
u8 ac = tid_to_mac80211_ac[tid];
|
||||
unsigned int txf;
|
||||
int lmac = IWL_LMAC_24G_INDEX;
|
||||
|
||||
if (iwl_mvm_is_cdb_supported(mvm) &&
|
||||
band == NL80211_BAND_5GHZ)
|
||||
lmac = IWL_LMAC_5G_INDEX;
|
||||
|
||||
/* For HE redirect to trigger based fifos */
|
||||
if (sta->he_cap.has_he && !WARN_ON(!iwl_mvm_has_new_tx_api(mvm)))
|
||||
ac += 4;
|
||||
|
||||
txf = iwl_mvm_mac_ac_to_tx_fifo(mvm, ac);
|
||||
|
||||
/*
|
||||
* Don't send an AMSDU that will be longer than the TXF.
|
||||
* Add a security margin of 256 for the TX command + headers.
|
||||
* We also want to have the start of the next packet inside the
|
||||
* fifo to be able to send bursts.
|
||||
*/
|
||||
return min_t(unsigned int, mvmsta->max_amsdu_len,
|
||||
mvm->fwrt.smem_cfg.lmac[lmac].txfifo_size[txf] - 256);
|
||||
}
|
||||
|
||||
static int iwl_mvm_tx_tso(struct iwl_mvm *mvm, struct sk_buff *skb,
|
||||
struct ieee80211_tx_info *info,
|
||||
struct ieee80211_sta *sta,
|
||||
|
@ -852,7 +882,7 @@ static int iwl_mvm_tx_tso(struct iwl_mvm *mvm, struct sk_buff *skb,
|
|||
u16 snap_ip_tcp, pad;
|
||||
unsigned int dbg_max_amsdu_len;
|
||||
netdev_features_t netdev_flags = NETIF_F_CSUM_MASK | NETIF_F_SG;
|
||||
u8 tid, txf;
|
||||
u8 tid;
|
||||
|
||||
snap_ip_tcp = 8 + skb_transport_header(skb) - skb_network_header(skb) +
|
||||
tcp_hdrlen(skb);
|
||||
|
@ -891,20 +921,7 @@ static int iwl_mvm_tx_tso(struct iwl_mvm *mvm, struct sk_buff *skb,
|
|||
!(mvmsta->amsdu_enabled & BIT(tid)))
|
||||
return iwl_mvm_tx_tso_segment(skb, 1, netdev_flags, mpdus_skb);
|
||||
|
||||
max_amsdu_len = mvmsta->max_amsdu_len;
|
||||
|
||||
/* the Tx FIFO to which this A-MSDU will be routed */
|
||||
txf = iwl_mvm_mac_ac_to_tx_fifo(mvm, tid_to_mac80211_ac[tid]);
|
||||
|
||||
/*
|
||||
* Don't send an AMSDU that will be longer than the TXF.
|
||||
* Add a security margin of 256 for the TX command + headers.
|
||||
* We also want to have the start of the next packet inside the
|
||||
* fifo to be able to send bursts.
|
||||
*/
|
||||
max_amsdu_len = min_t(unsigned int, max_amsdu_len,
|
||||
mvm->fwrt.smem_cfg.lmac[0].txfifo_size[txf] -
|
||||
256);
|
||||
max_amsdu_len = iwl_mvm_max_amsdu_size(mvm, sta, tid);
|
||||
|
||||
if (unlikely(dbg_max_amsdu_len))
|
||||
max_amsdu_len = min_t(unsigned int, max_amsdu_len,
|
||||
|
|
Loading…
Add table
Reference in a new issue