diff options
Diffstat (limited to 'drivers/net/wireless/ath/wil6210/debugfs.c')
| -rw-r--r-- | drivers/net/wireless/ath/wil6210/debugfs.c | 38 | 
1 files changed, 29 insertions, 9 deletions
diff --git a/drivers/net/wireless/ath/wil6210/debugfs.c b/drivers/net/wireless/ath/wil6210/debugfs.c index 7ad4e5328439..df2adff6c33a 100644 --- a/drivers/net/wireless/ath/wil6210/debugfs.c +++ b/drivers/net/wireless/ath/wil6210/debugfs.c @@ -207,6 +207,8 @@ static void wil_print_sring(struct seq_file *s, struct wil6210_priv *wil,  		seq_puts(s, "???\n");  	}  	seq_printf(s, "  desc_rdy_pol   = %d\n", sring->desc_rdy_pol); +	seq_printf(s, "  invalid_buff_id_cnt   = %d\n", +		   sring->invalid_buff_id_cnt);  	if (sring->va && (sring->size <= (1 << WIL_RING_SIZE_ORDER_MAX))) {  		uint i; @@ -258,6 +260,11 @@ static void wil_print_mbox_ring(struct seq_file *s, const char *prefix,  	wil_halp_vote(wil); +	if (wil_mem_access_lock(wil)) { +		wil_halp_unvote(wil); +		return; +	} +  	wil_memcpy_fromio_32(&r, off, sizeof(r));  	wil_mbox_ring_le2cpus(&r);  	/* @@ -323,6 +330,7 @@ static void wil_print_mbox_ring(struct seq_file *s, const char *prefix,  	}   out:  	seq_puts(s, "}\n"); +	wil_mem_access_unlock(wil);  	wil_halp_unvote(wil);  } @@ -601,6 +609,12 @@ static int memread_show(struct seq_file *s, void *data)  	if (ret < 0)  		return ret; +	ret = wil_mem_access_lock(wil); +	if (ret) { +		wil_pm_runtime_put(wil); +		return ret; +	} +  	a = wmi_buffer(wil, cpu_to_le32(mem_addr));  	if (a) @@ -608,6 +622,7 @@ static int memread_show(struct seq_file *s, void *data)  	else  		seq_printf(s, "[0x%08x] = INVALID\n", mem_addr); +	wil_mem_access_unlock(wil);  	wil_pm_runtime_put(wil);  	return 0; @@ -626,10 +641,6 @@ static ssize_t wil_read_file_ioblob(struct file *file, char __user *user_buf,  	size_t unaligned_bytes, aligned_count, ret;  	int rc; -	if (test_bit(wil_status_suspending, wil_blob->wil->status) || -	    test_bit(wil_status_suspended, wil_blob->wil->status)) -		return 0; -  	if (pos < 0)  		return -EINVAL; @@ -656,11 +667,19 @@ static ssize_t wil_read_file_ioblob(struct file *file, char __user *user_buf,  		return rc;  	} +	rc = wil_mem_access_lock(wil); +	if (rc) { +		kfree(buf); +		wil_pm_runtime_put(wil); +		return rc; +	} +  	wil_memcpy_fromio_32(buf, (const void __iomem *)  			     wil_blob->blob.data + aligned_pos, aligned_count);  	ret = copy_to_user(user_buf, buf + unaligned_bytes, count); +	wil_mem_access_unlock(wil);  	wil_pm_runtime_put(wil);  	kfree(buf); @@ -1364,7 +1383,7 @@ static int link_show(struct seq_file *s, void *data)  		if (p->status != wil_sta_connected)  			continue; -		vif = (mid < wil->max_vifs) ? wil->vifs[mid] : NULL; +		vif = (mid < GET_MAX_VIFS(wil)) ? wil->vifs[mid] : NULL;  		if (vif) {  			rc = wil_cid_fill_sinfo(vif, i, sinfo);  			if (rc) @@ -1562,7 +1581,7 @@ __acquires(&p->tid_rx_lock) __releases(&p->tid_rx_lock)  			break;  		}  		mid = (p->status != wil_sta_unused) ? p->mid : U8_MAX; -		if (mid < wil->max_vifs) { +		if (mid < GET_MAX_VIFS(wil)) {  			struct wil6210_vif *vif = wil->vifs[mid];  			if (vif->wdev.iftype == NL80211_IFTYPE_STATION && @@ -1628,7 +1647,7 @@ static int mids_show(struct seq_file *s, void *data)  	int i;  	mutex_lock(&wil->vif_mutex); -	for (i = 0; i < wil->max_vifs; i++) { +	for (i = 0; i < GET_MAX_VIFS(wil); i++) {  		vif = wil->vifs[i];  		if (vif) { @@ -1849,7 +1868,7 @@ static int wil_link_stats_debugfs_show(struct seq_file *s, void *data)  	/* iterate over all MIDs and show per-cid statistics. Then show the  	 * global statistics  	 */ -	for (i = 0; i < wil->max_vifs; i++) { +	for (i = 0; i < GET_MAX_VIFS(wil); i++) {  		vif = wil->vifs[i];  		seq_printf(s, "MID %d ", i); @@ -1905,7 +1924,7 @@ static ssize_t wil_link_stats_write(struct file *file, const char __user *buf,  	if (rc)  		return rc; -	for (i = 0; i < wil->max_vifs; i++) { +	for (i = 0; i < GET_MAX_VIFS(wil); i++) {  		vif = wil->vifs[i];  		if (!vif)  			continue; @@ -2375,6 +2394,7 @@ static const struct dbg_off dbg_wil_regs[] = {  	{"RGF_MAC_MTRL_COUNTER_0", 0444, HOSTADDR(RGF_MAC_MTRL_COUNTER_0),  		doff_io32},  	{"RGF_USER_USAGE_1", 0444, HOSTADDR(RGF_USER_USAGE_1), doff_io32}, +	{"RGF_USER_USAGE_2", 0444, HOSTADDR(RGF_USER_USAGE_2), doff_io32},  	{},  };  |