iwlwifi: mvm: add a debugfs entry to set a fixed size AMSDU for all TX packets
The current debugfs entry only limits the max AMSDU for TCP. Add a new debugfs entry to allow setting a fixed AMSDU size for all TX packets, including UDP and ICMP Signed-off-by: Mordechay Goodstein <mordechay.goodstein@intel.com> Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
This commit is contained in:
parent
57d88b1161
commit
af2984e9e6
@ -467,6 +467,46 @@ static ssize_t iwl_dbgfs_rs_data_read(struct file *file, char __user *user_buf,
|
||||
return ret;
|
||||
}
|
||||
|
||||
static ssize_t iwl_dbgfs_amsdu_len_write(struct ieee80211_sta *sta,
|
||||
char *buf, size_t count,
|
||||
loff_t *ppos)
|
||||
{
|
||||
struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
|
||||
int i;
|
||||
u16 amsdu_len;
|
||||
|
||||
if (kstrtou16(buf, 0, &amsdu_len))
|
||||
return -EINVAL;
|
||||
|
||||
if (amsdu_len) {
|
||||
mvmsta->orig_amsdu_len = sta->max_amsdu_len;
|
||||
sta->max_amsdu_len = amsdu_len;
|
||||
for (i = 0; i < ARRAY_SIZE(sta->max_tid_amsdu_len); i++)
|
||||
sta->max_tid_amsdu_len[i] = amsdu_len;
|
||||
} else {
|
||||
sta->max_amsdu_len = mvmsta->orig_amsdu_len;
|
||||
mvmsta->orig_amsdu_len = 0;
|
||||
}
|
||||
return count;
|
||||
}
|
||||
|
||||
static ssize_t iwl_dbgfs_amsdu_len_read(struct file *file,
|
||||
char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
{
|
||||
struct ieee80211_sta *sta = file->private_data;
|
||||
struct iwl_mvm_sta *mvmsta = iwl_mvm_sta_from_mac80211(sta);
|
||||
|
||||
char buf[32];
|
||||
int pos;
|
||||
|
||||
pos = scnprintf(buf, sizeof(buf), "current %d ", sta->max_amsdu_len);
|
||||
pos += scnprintf(buf + pos, sizeof(buf) - pos, "stored %d\n",
|
||||
mvmsta->orig_amsdu_len);
|
||||
|
||||
return simple_read_from_buffer(user_buf, count, ppos, buf, pos);
|
||||
}
|
||||
|
||||
static ssize_t iwl_dbgfs_disable_power_off_read(struct file *file,
|
||||
char __user *user_buf,
|
||||
size_t count, loff_t *ppos)
|
||||
@ -1891,6 +1931,8 @@ MVM_DEBUGFS_READ_WRITE_FILE_OPS(bcast_filters_macs, 256);
|
||||
MVM_DEBUGFS_READ_FILE_OPS(sar_geo_profile);
|
||||
#endif
|
||||
|
||||
MVM_DEBUGFS_READ_WRITE_STA_FILE_OPS(amsdu_len, 16);
|
||||
|
||||
MVM_DEBUGFS_READ_WRITE_FILE_OPS(he_sniffer_params, 32);
|
||||
|
||||
static ssize_t iwl_dbgfs_mem_read(struct file *file, char __user *user_buf,
|
||||
@ -2032,8 +2074,10 @@ void iwl_mvm_sta_add_debugfs(struct ieee80211_hw *hw,
|
||||
{
|
||||
struct iwl_mvm *mvm = IWL_MAC80211_GET_MVM(hw);
|
||||
|
||||
if (iwl_mvm_has_tlc_offload(mvm))
|
||||
if (iwl_mvm_has_tlc_offload(mvm)) {
|
||||
MVM_DEBUGFS_ADD_STA_FILE(rs_data, dir, 0400);
|
||||
}
|
||||
MVM_DEBUGFS_ADD_STA_FILE(amsdu_len, dir, 0600);
|
||||
}
|
||||
|
||||
void iwl_mvm_dbgfs_register(struct iwl_mvm *mvm, struct dentry *dbgfs_dir)
|
||||
|
@ -344,7 +344,7 @@ void iwl_mvm_tlc_update_notif(struct iwl_mvm *mvm,
|
||||
lq_sta->last_rate_n_flags);
|
||||
}
|
||||
|
||||
if (flags & IWL_TLC_NOTIF_FLAG_AMSDU) {
|
||||
if (flags & IWL_TLC_NOTIF_FLAG_AMSDU && !mvmsta->orig_amsdu_len) {
|
||||
u16 size = le32_to_cpu(notif->amsdu_size);
|
||||
int i;
|
||||
|
||||
|
@ -386,6 +386,9 @@ struct iwl_mvm_rxq_dup_data {
|
||||
* @amsdu_enabled: bitmap of TX AMSDU allowed TIDs.
|
||||
* In case TLC offload is not active it is either 0xFFFF or 0.
|
||||
* @max_amsdu_len: max AMSDU length
|
||||
* @orig_amsdu_len: used to save the original amsdu_len when it is changed via
|
||||
* debugfs. If it's set to 0, it means that it is it's not set via
|
||||
* debugfs.
|
||||
* @agg_tids: bitmap of tids whose status is operational aggregated (IWL_AGG_ON)
|
||||
* @sleep_tx_count: the number of frames that we told the firmware to let out
|
||||
* even when that station is asleep. This is useful in case the queue
|
||||
@ -434,6 +437,7 @@ struct iwl_mvm_sta {
|
||||
bool disable_tx;
|
||||
u16 amsdu_enabled;
|
||||
u16 max_amsdu_len;
|
||||
u16 orig_amsdu_len;
|
||||
bool sleeping;
|
||||
u8 agg_tids;
|
||||
u8 sleep_tx_count;
|
||||
|
Loading…
x
Reference in New Issue
Block a user