diff options
Diffstat (limited to 'drivers/net/wireless/ath/ath10k/debug.c')
| -rw-r--r-- | drivers/net/wireless/ath/ath10k/debug.c | 73 | 
1 files changed, 73 insertions, 0 deletions
diff --git a/drivers/net/wireless/ath/ath10k/debug.c b/drivers/net/wireless/ath/ath10k/debug.c index 1b7ff4ba122c..3030158c478e 100644 --- a/drivers/net/wireless/ath/ath10k/debug.c +++ b/drivers/net/wireless/ath/ath10k/debug.c @@ -671,6 +671,72 @@ static const struct file_operations fops_htt_stats_mask = {  	.llseek = default_llseek,  }; +static ssize_t ath10k_read_htt_max_amsdu_ampdu(struct file *file, +					       char __user *user_buf, +					       size_t count, loff_t *ppos) +{ +	struct ath10k *ar = file->private_data; +	char buf[64]; +	u8 amsdu = 3, ampdu = 64; +	unsigned int len; + +	mutex_lock(&ar->conf_mutex); + +	if (ar->debug.htt_max_amsdu) +		amsdu = ar->debug.htt_max_amsdu; + +	if (ar->debug.htt_max_ampdu) +		ampdu = ar->debug.htt_max_ampdu; + +	mutex_unlock(&ar->conf_mutex); + +	len = scnprintf(buf, sizeof(buf), "%u %u\n", amsdu, ampdu); + +	return simple_read_from_buffer(user_buf, count, ppos, buf, len); +} + +static ssize_t ath10k_write_htt_max_amsdu_ampdu(struct file *file, +						const char __user *user_buf, +						size_t count, loff_t *ppos) +{ +	struct ath10k *ar = file->private_data; +	int res; +	char buf[64]; +	unsigned int amsdu, ampdu; + +	simple_write_to_buffer(buf, sizeof(buf) - 1, ppos, user_buf, count); + +	/* make sure that buf is null terminated */ +	buf[sizeof(buf) - 1] = 0; + +	res = sscanf(buf, "%u %u", &amsdu, &du); + +	if (res != 2) +		return -EINVAL; + +	mutex_lock(&ar->conf_mutex); + +	res = ath10k_htt_h2t_aggr_cfg_msg(&ar->htt, ampdu, amsdu); +	if (res) +		goto out; + +	res = count; +	ar->debug.htt_max_amsdu = amsdu; +	ar->debug.htt_max_ampdu = ampdu; + +out: +	mutex_unlock(&ar->conf_mutex); +	return res; +} + +static const struct file_operations fops_htt_max_amsdu_ampdu = { +	.read = ath10k_read_htt_max_amsdu_ampdu, +	.write = ath10k_write_htt_max_amsdu_ampdu, +	.open = simple_open, +	.owner = THIS_MODULE, +	.llseek = default_llseek, +}; +  static ssize_t ath10k_read_fw_dbglog(struct file *file,  					    char __user *user_buf,  					    size_t count, loff_t *ppos) @@ -757,6 +823,9 @@ void ath10k_debug_stop(struct ath10k *ar)  	 * warning from del_timer(). */  	if (ar->debug.htt_stats_mask != 0)  		cancel_delayed_work(&ar->debug.htt_stats_dwork); + +	ar->debug.htt_max_amsdu = 0; +	ar->debug.htt_max_ampdu = 0;  }  static ssize_t ath10k_write_simulate_radar(struct file *file, @@ -867,6 +936,10 @@ int ath10k_debug_create(struct ath10k *ar)  	debugfs_create_file("htt_stats_mask", S_IRUSR, ar->debug.debugfs_phy,  			    ar, &fops_htt_stats_mask); +	debugfs_create_file("htt_max_amsdu_ampdu", S_IRUSR | S_IWUSR, +			    ar->debug.debugfs_phy, ar, +			    &fops_htt_max_amsdu_ampdu); +  	debugfs_create_file("fw_dbglog", S_IRUSR, ar->debug.debugfs_phy,  			    ar, &fops_fw_dbglog);  |