diff options
| author | Johannes Berg <johannes.berg@intel.com> | 2014-11-11 12:57:03 +0100 | 
|---|---|---|
| committer | Luca Coelho <luciano.coelho@intel.com> | 2018-04-20 10:57:16 +0300 | 
| commit | b0ffe455bc5bbdbcf7837274d2476f5597767237 (patch) | |
| tree | 8a935a8c7f21513aab5dd395f9ccad680fa453fc /drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c | |
| parent | bde1492d4a15ae37e1388a6f5a7972afb7ca32e3 (diff) | |
iwlwifi: mvm: detect U-APSD breaking aggregation
Try to detect that the AP is not using aggregation even when there's
enough traffic to make it worthwhile; if this is the case and U-APSD
is enabled then assume the AP is broken (like so many) and doesn't
enable aggregation when U-APSD is used. In this case, disconnect from
the AP and blacklist U-APSD for a potential new connection to it.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Diffstat (limited to 'drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c')
| -rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c | 25 | 
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c b/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c index 0e6401cd7ccc..1c4178f20441 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/debugfs.c @@ -1728,6 +1728,27 @@ iwl_dbgfs_send_echo_cmd_write(struct iwl_mvm *mvm, char *buf,  	return ret ?: count;  } +static ssize_t +iwl_dbgfs_uapsd_noagg_bssids_read(struct file *file, char __user *user_buf, +				  size_t count, loff_t *ppos) +{ +	struct iwl_mvm *mvm = file->private_data; +	u8 buf[IWL_MVM_UAPSD_NOAGG_BSSIDS_NUM * ETH_ALEN * 3 + 1]; +	unsigned int pos = 0; +	size_t bufsz = sizeof(buf); +	int i; + +	mutex_lock(&mvm->mutex); + +	for (i = 0; i < IWL_MVM_UAPSD_NOAGG_LIST_LEN; i++) +		pos += scnprintf(buf + pos, bufsz - pos, "%pM\n", +				 mvm->uapsd_noagg_bssids[i].addr); + +	mutex_unlock(&mvm->mutex); + +	return simple_read_from_buffer(user_buf, count, ppos, buf, pos); +} +  MVM_DEBUGFS_READ_WRITE_FILE_OPS(prph_reg, 64);  /* Device wide debugfs entries */ @@ -1762,6 +1783,8 @@ MVM_DEBUGFS_WRITE_FILE_OPS(indirection_tbl,  			   (IWL_RSS_INDIRECTION_TABLE_SIZE * 2));  MVM_DEBUGFS_WRITE_FILE_OPS(inject_packet, 512); +MVM_DEBUGFS_READ_FILE_OPS(uapsd_noagg_bssids); +  #ifdef CONFIG_IWLWIFI_BCAST_FILTERING  MVM_DEBUGFS_READ_WRITE_FILE_OPS(bcast_filters, 256);  MVM_DEBUGFS_READ_WRITE_FILE_OPS(bcast_filters_macs, 256); @@ -1972,6 +1995,8 @@ int iwl_mvm_dbgfs_register(struct iwl_mvm *mvm, struct dentry *dbgfs_dir)  				 mvm->debugfs_dir, &mvm->drop_bcn_ap_mode))  		goto err; +	MVM_DEBUGFS_ADD_FILE(uapsd_noagg_bssids, mvm->debugfs_dir, S_IRUSR); +  #ifdef CONFIG_IWLWIFI_BCAST_FILTERING  	if (mvm->fw->ucode_capa.flags & IWL_UCODE_TLV_FLAGS_BCAST_FILTERING) {  		bcast_dir = debugfs_create_dir("bcast_filtering",  | 
