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;
|
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,
|
static ssize_t iwl_dbgfs_disable_power_off_read(struct file *file,
|
||||||
char __user *user_buf,
|
char __user *user_buf,
|
||||||
size_t count, loff_t *ppos)
|
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);
|
MVM_DEBUGFS_READ_FILE_OPS(sar_geo_profile);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
MVM_DEBUGFS_READ_WRITE_STA_FILE_OPS(amsdu_len, 16);
|
||||||
|
|
||||||
MVM_DEBUGFS_READ_WRITE_FILE_OPS(he_sniffer_params, 32);
|
MVM_DEBUGFS_READ_WRITE_FILE_OPS(he_sniffer_params, 32);
|
||||||
|
|
||||||
static ssize_t iwl_dbgfs_mem_read(struct file *file, char __user *user_buf,
|
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);
|
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(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)
|
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);
|
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);
|
u16 size = le32_to_cpu(notif->amsdu_size);
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
@ -386,6 +386,9 @@ struct iwl_mvm_rxq_dup_data {
|
|||||||
* @amsdu_enabled: bitmap of TX AMSDU allowed TIDs.
|
* @amsdu_enabled: bitmap of TX AMSDU allowed TIDs.
|
||||||
* In case TLC offload is not active it is either 0xFFFF or 0.
|
* In case TLC offload is not active it is either 0xFFFF or 0.
|
||||||
* @max_amsdu_len: max AMSDU length
|
* @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)
|
* @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
|
* @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
|
* even when that station is asleep. This is useful in case the queue
|
||||||
@ -434,6 +437,7 @@ struct iwl_mvm_sta {
|
|||||||
bool disable_tx;
|
bool disable_tx;
|
||||||
u16 amsdu_enabled;
|
u16 amsdu_enabled;
|
||||||
u16 max_amsdu_len;
|
u16 max_amsdu_len;
|
||||||
|
u16 orig_amsdu_len;
|
||||||
bool sleeping;
|
bool sleeping;
|
||||||
u8 agg_tids;
|
u8 agg_tids;
|
||||||
u8 sleep_tx_count;
|
u8 sleep_tx_count;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user