xref: /openwifi/driver/sysfs_intf.c (revision aaceb807fda736b58157edf0f7166dcb0b2a8a47)
1 // Author: Xianjun Jiao, Michael Mehari, Wei Liu
2 // SPDX-FileCopyrightText: 2019 UGent
3 // SPDX-License-Identifier: AGPL-3.0-or-later
4 
5 // #define TX_INTF_IQ_WRITE_TXT_FORMAT 1//while using TXT format, the txt file size should <= 4096!!!
6 #define TX_INTF_IQ_WRITE_BIN_FORMAT 1
7 
8 #ifdef TX_INTF_IQ_WRITE_TXT_FORMAT
is_valid_iq_number(int c)9 static int is_valid_iq_number(int c) {
10 	if (c==32 || (c>=44 && c<=57))
11 		return(1);
12 	else
13 		return(0);
14 }
15 
openwifi_tx_intf_bin_iq_write(struct file * filp,struct kobject * kobj,struct bin_attribute * bin_attr,char * buf,loff_t off,size_t count)16 static ssize_t openwifi_tx_intf_bin_iq_write(struct file *filp, struct kobject *kobj,
17 		       struct bin_attribute *bin_attr,
18 		       char *buf, loff_t off, size_t count)
19 {
20 	struct platform_device *pdev = to_platform_device(kobj_to_dev(kobj));
21 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
22 	struct openwifi_priv *priv = dev->priv;
23 	int ret, i, q, num_iq;
24 	char *line;
25 	char *ptr = buf;
26 
27 	printk("%s openwifi_tx_intf_bin_iq_write: count %d\n", sdr_compatible_str, (int)count);
28 
29 	num_iq = 0;
30 	line = ptr;
31 	while (1) {
32 		ret = sscanf(line, "%d,%d\n", &i, &q);
33 		if (ret == 0) {
34 			printk("%s openwifi_tx_intf_bin_iq_write: sscanf ret 0\n", sdr_compatible_str);
35 			break;
36 		} else if (ret != 2) {
37 			printk("%s openwifi_tx_intf_bin_iq_write: sscanf ret %d i %d q %d num_iq %d\n", sdr_compatible_str, ret, i, q, num_iq);
38 			return -EINVAL;
39 		}
40 
41 		priv->tx_intf_arbitrary_iq[num_iq] = ( (q<<16)|(i&0xFFFF) );
42 		num_iq++;
43 		if (num_iq == 512) {
44 			printk("%s openwifi_tx_intf_bin_iq_write: num_iq reach 512\n", sdr_compatible_str);
45 			break;
46 		}
47 
48 		//go to the next line
49 		while(is_valid_iq_number(ptr[0]))
50 			ptr++;
51 		while( (is_valid_iq_number(ptr[0])==0)&&(ptr[0]!=0) )
52 			ptr++;
53 		if (ptr[0] == 0) {
54 			printk("%s openwifi_tx_intf_bin_iq_write: ptr[0] == 0\n", sdr_compatible_str);
55 			break;
56 		}
57 		line = ptr;
58 	}
59 	priv->tx_intf_arbitrary_iq_num = num_iq;
60 
61 	printk("%s openwifi_tx_intf_bin_iq_write: num_iq %d\n", sdr_compatible_str, num_iq);
62 	//print i/q
63 	for (i=0; i<num_iq; i++)
64 		printk("%d %d\n", (short)(priv->tx_intf_arbitrary_iq[i]&0xffff), (short)((priv->tx_intf_arbitrary_iq[i]>>16)&0xffff) );
65 
66 	return count;
67 }
68 #else
openwifi_tx_intf_bin_iq_write(struct file * filp,struct kobject * kobj,struct bin_attribute * bin_attr,char * buf,loff_t off,size_t count)69 static ssize_t openwifi_tx_intf_bin_iq_write(struct file *filp, struct kobject *kobj,
70 		       struct bin_attribute *bin_attr,
71 		       char *buf, loff_t off, size_t count)
72 {
73 	struct platform_device *pdev = to_platform_device(kobj_to_dev(kobj));
74 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
75 	struct openwifi_priv *priv = dev->priv;
76 	int num_iq, i;
77 
78 	printk("%s openwifi_tx_intf_bin_iq_write: count %d\n", sdr_compatible_str, (int)count);
79 
80 	if ((count%4) != 0) {
81 		printk("%s openwifi_tx_intf_bin_iq_write: count is not integer times of 4!\n", sdr_compatible_str);
82 		return -EINVAL;
83 	}
84 
85 	num_iq = count/4;
86 	priv->tx_intf_arbitrary_iq_num = num_iq;
87 
88 	for (i=0; i<num_iq; i++) {
89 		priv->tx_intf_arbitrary_iq[i] = (*((u32*)(buf+(i*4))));
90 	}
91 
92 	// printk("%s openwifi_tx_intf_bin_iq_write: num_iq %d\n", sdr_compatible_str, num_iq);
93 	// //print i/q
94 	// for (i=0; i<num_iq; i++)
95 	// 	printk("%d %d\n", (short)(priv->tx_intf_arbitrary_iq[i]&0xffff), (short)((priv->tx_intf_arbitrary_iq[i]>>16)&0xffff) );
96 
97 	return count;
98 }
99 #endif
100 
openwifi_tx_intf_bin_iq_read(struct file * filp,struct kobject * kobj,struct bin_attribute * bin_attr,char * buf,loff_t off,size_t count)101 static ssize_t openwifi_tx_intf_bin_iq_read(struct file *filp, struct kobject *kobj,
102 		       struct bin_attribute *bin_attr,
103 		       char *buf, loff_t off, size_t count)
104 {
105 	struct platform_device *pdev = to_platform_device(kobj_to_dev(kobj));
106 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
107 	struct openwifi_priv *priv = dev->priv;
108 	int num_iq, ret_size, i;
109 
110 	if (off)
111 		return 0;
112 
113 	num_iq = priv->tx_intf_arbitrary_iq_num;
114 
115 	// printk("%s openwifi_tx_intf_bin_iq_read: num_iq %d\n", sdr_compatible_str, num_iq);
116 	// //print i/q
117 	// for (i=0; i<num_iq; i++)
118 	// 	printk("%d %d\n", (short)(priv->tx_intf_arbitrary_iq[i]&0xffff), (short)((priv->tx_intf_arbitrary_iq[i]>>16)&0xffff) );
119 
120 	ret_size = sprintf(buf, "%d\n", num_iq);
121 	if (num_iq==0 || num_iq>512) {
122 		ret_size = ret_size + sprintf(buf+ret_size, "num_iq is wrong!\n");
123 		return ret_size;
124 	}
125 
126 	//print i
127 	for (i=0; i<num_iq; i++)
128 		ret_size = ret_size + sprintf(buf+ret_size, "%d ", (short)(priv->tx_intf_arbitrary_iq[i]&0xffff) );
129 	ret_size = ret_size + sprintf(buf+ret_size, "\n");
130 
131 	//print q
132 	for (i=0; i<num_iq; i++)
133 		ret_size = ret_size + sprintf(buf+ret_size, "%d ", (short)((priv->tx_intf_arbitrary_iq[i]>>16)&0xffff) );
134 	ret_size = ret_size + sprintf(buf+ret_size, "\n");
135 
136 	return ret_size;
137 }
138 
tx_intf_iq_ctl_show(struct device * input_dev,struct device_attribute * attr,char * buf)139 static ssize_t tx_intf_iq_ctl_show(struct device *input_dev, struct device_attribute *attr, char *buf)
140 {
141 	struct platform_device *pdev = to_platform_device(input_dev);
142 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
143 	struct openwifi_priv *priv = dev->priv;
144 
145 	return sprintf(buf, "%u\n", priv->tx_intf_iq_ctl);
146 }
tx_intf_iq_ctl_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)147 static ssize_t tx_intf_iq_ctl_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
148 {
149 	struct platform_device *pdev = to_platform_device(input_dev);
150 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
151 	struct openwifi_priv *priv = dev->priv;
152 
153 	long readin;
154 	int i;
155 	int ret = kstrtol(buf, 10, &readin);
156 
157 	priv->tx_intf_iq_ctl = readin;
158 
159 	tx_intf_api->TX_INTF_REG_ARBITRARY_IQ_CTL_write(1); // switch to iq mode
160 	printk("%s tx_intf_iq_ctl_store: Will send %d I/Q\n", sdr_compatible_str, priv->tx_intf_arbitrary_iq_num);
161 	for (i=0; i<priv->tx_intf_arbitrary_iq_num; i++) {
162 		tx_intf_api->TX_INTF_REG_ARBITRARY_IQ_write(priv->tx_intf_arbitrary_iq[i]);
163 	}
164 	tx_intf_api->TX_INTF_REG_ARBITRARY_IQ_CTL_write(3); // start send
165 	tx_intf_api->TX_INTF_REG_ARBITRARY_IQ_CTL_write(0);
166 
167 	return ret ? ret : len;
168 }
169 
170 static DEVICE_ATTR(tx_intf_iq_ctl, S_IRUGO | S_IWUSR, tx_intf_iq_ctl_show, tx_intf_iq_ctl_store);
171 static struct attribute *tx_intf_attributes[] = {
172 	&dev_attr_tx_intf_iq_ctl.attr,
173 	NULL,
174 };
175 static const struct attribute_group tx_intf_attribute_group = {
176 	.attrs = tx_intf_attributes,
177 };
178 
stat_enable_show(struct device * input_dev,struct device_attribute * attr,char * buf)179 static ssize_t stat_enable_show(struct device *input_dev, struct device_attribute *attr, char *buf)
180 {
181 	struct platform_device *pdev = to_platform_device(input_dev);
182 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
183 	struct openwifi_priv *priv = dev->priv;
184 
185 	return sprintf(buf, "%u\n", priv->stat.stat_enable);
186 }
stat_enable_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)187 static ssize_t stat_enable_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
188 {
189 	struct platform_device *pdev = to_platform_device(input_dev);
190 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
191 	struct openwifi_priv *priv = dev->priv;
192 
193 	long readin;
194 	u32 ret = kstrtol(buf, 10, &readin);
195 
196 	priv->stat.stat_enable = readin;
197 
198 	return ret ? ret : len;
199 }
200 
tx_prio_queue_show(struct device * input_dev,struct device_attribute * attr,char * buf)201 static ssize_t tx_prio_queue_show(struct device *input_dev, struct device_attribute *attr, char *buf)
202 {
203 	struct platform_device *pdev = to_platform_device(input_dev);
204 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
205 	struct openwifi_priv *priv = dev->priv;
206 
207 	u32 i, ret_size = 0;
208 
209 	for (i=0; i<MAX_NUM_SW_QUEUE; i++) {
210 		ret_size = ret_size + sprintf(buf+ret_size, "%u %u %u %u %u %u %u %u %u %u %u %u\n",
211 		priv->stat.tx_prio_num[i],
212 		priv->stat.tx_prio_interrupt_num[i],
213 		priv->stat.tx_prio_stop0_fake_num[i],
214 		priv->stat.tx_prio_stop0_real_num[i],
215 		priv->stat.tx_prio_stop1_num[i],
216 		priv->stat.tx_prio_wakeup_num[i],
217 		priv->stat.tx_queue_num[i],
218 		priv->stat.tx_queue_interrupt_num[i],
219 		priv->stat.tx_queue_stop0_fake_num[i],
220 		priv->stat.tx_queue_stop0_real_num[i],
221 		priv->stat.tx_queue_stop1_num[i],
222 		priv->stat.tx_queue_wakeup_num[i]);
223 	}
224 
225 	return ret_size;
226 }
tx_prio_queue_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)227 static ssize_t tx_prio_queue_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
228 {
229 	struct platform_device *pdev = to_platform_device(input_dev);
230 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
231 	struct openwifi_priv *priv = dev->priv;
232 
233 	u32 i;
234 	long readin;
235 	u32 ret = kstrtol(buf, 10, &readin);
236 
237 	for (i=0; i<MAX_NUM_SW_QUEUE; i++) {
238 		priv->stat.tx_prio_num[i] = 0;
239 		priv->stat.tx_prio_interrupt_num[i] = 0;
240 		priv->stat.tx_prio_stop0_fake_num[i] = 0;
241 		priv->stat.tx_prio_stop0_real_num[i] = 0;
242 		priv->stat.tx_prio_stop1_num[i] = 0;
243 		priv->stat.tx_prio_wakeup_num[i] = 0;
244 	}
245 	for (i=0; i<MAX_NUM_HW_QUEUE; i++) {
246 		priv->stat.tx_queue_num[i] = 0;
247 		priv->stat.tx_queue_interrupt_num[i] = 0;
248 		priv->stat.tx_queue_stop0_fake_num[i] = 0;
249 		priv->stat.tx_queue_stop0_real_num[i] = 0;
250 		priv->stat.tx_queue_stop1_num[i] = 0;
251 		priv->stat.tx_queue_wakeup_num[i] = 0;
252 	}
253 
254 	return ret ? ret : len;
255 }
256 
tx_data_pkt_need_ack_num_total_fail_show(struct device * input_dev,struct device_attribute * attr,char * buf)257 static ssize_t tx_data_pkt_need_ack_num_total_fail_show(struct device *input_dev, struct device_attribute *attr, char *buf)
258 {
259 	struct platform_device *pdev = to_platform_device(input_dev);
260 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
261 	struct openwifi_priv *priv = dev->priv;
262 
263 	return sprintf(buf, "%u\n", priv->stat.tx_data_pkt_need_ack_num_total_fail);
264 }
tx_data_pkt_need_ack_num_total_fail_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)265 static ssize_t tx_data_pkt_need_ack_num_total_fail_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
266 {
267 	struct platform_device *pdev = to_platform_device(input_dev);
268 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
269 	struct openwifi_priv *priv = dev->priv;
270 
271 	long readin;
272 	u32 ret = kstrtol(buf, 10, &readin);
273 
274 	priv->stat.tx_data_pkt_need_ack_num_total_fail = readin;
275 
276 	return ret ? ret : len;
277 }
278 
tx_data_pkt_need_ack_num_total_show(struct device * input_dev,struct device_attribute * attr,char * buf)279 static ssize_t tx_data_pkt_need_ack_num_total_show(struct device *input_dev, struct device_attribute *attr, char *buf)
280 {
281 	struct platform_device *pdev = to_platform_device(input_dev);
282 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
283 	struct openwifi_priv *priv = dev->priv;
284 
285 	return sprintf(buf, "%u\n", priv->stat.tx_data_pkt_need_ack_num_total);
286 }
tx_data_pkt_need_ack_num_total_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)287 static ssize_t tx_data_pkt_need_ack_num_total_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
288 {
289 	struct platform_device *pdev = to_platform_device(input_dev);
290 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
291 	struct openwifi_priv *priv = dev->priv;
292 
293 	long readin;
294 	u32 ret = kstrtol(buf, 10, &readin);
295 
296 	priv->stat.tx_data_pkt_need_ack_num_total = readin;
297 
298 	return ret ? ret : len;
299 }
300 
tx_mgmt_pkt_need_ack_num_total_show(struct device * input_dev,struct device_attribute * attr,char * buf)301 static ssize_t tx_mgmt_pkt_need_ack_num_total_show(struct device *input_dev, struct device_attribute *attr, char *buf)
302 {
303 	struct platform_device *pdev = to_platform_device(input_dev);
304 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
305 	struct openwifi_priv *priv = dev->priv;
306 
307 	return sprintf(buf, "%u\n", priv->stat.tx_mgmt_pkt_need_ack_num_total);
308 }
tx_mgmt_pkt_need_ack_num_total_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)309 static ssize_t tx_mgmt_pkt_need_ack_num_total_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
310 {
311 	struct platform_device *pdev = to_platform_device(input_dev);
312 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
313 	struct openwifi_priv *priv = dev->priv;
314 
315 	long readin;
316 	u32 ret = kstrtol(buf, 10, &readin);
317 
318 	priv->stat.tx_mgmt_pkt_need_ack_num_total = readin;
319 
320 	return ret ? ret : len;
321 }
322 
tx_mgmt_pkt_need_ack_num_total_fail_show(struct device * input_dev,struct device_attribute * attr,char * buf)323 static ssize_t tx_mgmt_pkt_need_ack_num_total_fail_show(struct device *input_dev, struct device_attribute *attr, char *buf)
324 {
325 	struct platform_device *pdev = to_platform_device(input_dev);
326 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
327 	struct openwifi_priv *priv = dev->priv;
328 
329 	return sprintf(buf, "%u\n", priv->stat.tx_mgmt_pkt_need_ack_num_total_fail);
330 }
tx_mgmt_pkt_need_ack_num_total_fail_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)331 static ssize_t tx_mgmt_pkt_need_ack_num_total_fail_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
332 {
333 	struct platform_device *pdev = to_platform_device(input_dev);
334 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
335 	struct openwifi_priv *priv = dev->priv;
336 
337 	long readin;
338 	u32 ret = kstrtol(buf, 10, &readin);
339 
340 	priv->stat.tx_mgmt_pkt_need_ack_num_total_fail = readin;
341 
342 	return ret ? ret : len;
343 }
344 
tx_data_pkt_need_ack_num_retx_show(struct device * input_dev,struct device_attribute * attr,char * buf)345 static ssize_t tx_data_pkt_need_ack_num_retx_show(struct device *input_dev, struct device_attribute *attr, char *buf)
346 {
347 	struct platform_device *pdev = to_platform_device(input_dev);
348 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
349 	struct openwifi_priv *priv = dev->priv;
350 
351 	return sprintf(buf, "%u %u %u %u %u %u\n",
352 					priv->stat.tx_data_pkt_need_ack_num_retx[0],
353 					priv->stat.tx_data_pkt_need_ack_num_retx[1],
354 					priv->stat.tx_data_pkt_need_ack_num_retx[2],
355 					priv->stat.tx_data_pkt_need_ack_num_retx[3],
356 					priv->stat.tx_data_pkt_need_ack_num_retx[4],
357 					priv->stat.tx_data_pkt_need_ack_num_retx[5]);
358 }
tx_data_pkt_need_ack_num_retx_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)359 static ssize_t tx_data_pkt_need_ack_num_retx_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
360 {
361 	struct platform_device *pdev = to_platform_device(input_dev);
362 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
363 	struct openwifi_priv *priv = dev->priv;
364 
365 	long readin;
366 	u32 ret = kstrtol(buf, 10, &readin), i;
367 
368 	for (i=0; i<6; i++)
369 		priv->stat.tx_data_pkt_need_ack_num_retx[i] = readin;
370 
371 	return ret ? ret : len;
372 }
373 
tx_mgmt_pkt_need_ack_num_retx_show(struct device * input_dev,struct device_attribute * attr,char * buf)374 static ssize_t tx_mgmt_pkt_need_ack_num_retx_show(struct device *input_dev, struct device_attribute *attr, char *buf)
375 {
376 	struct platform_device *pdev = to_platform_device(input_dev);
377 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
378 	struct openwifi_priv *priv = dev->priv;
379 
380 	return sprintf(buf, "%u %u %u\n",
381 				priv->stat.tx_mgmt_pkt_need_ack_num_retx[0],
382 				priv->stat.tx_mgmt_pkt_need_ack_num_retx[1],
383 				priv->stat.tx_mgmt_pkt_need_ack_num_retx[2]);
384 }
tx_mgmt_pkt_need_ack_num_retx_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)385 static ssize_t tx_mgmt_pkt_need_ack_num_retx_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
386 {
387 	struct platform_device *pdev = to_platform_device(input_dev);
388 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
389 	struct openwifi_priv *priv = dev->priv;
390 
391 	long readin;
392 	u32 ret = kstrtol(buf, 10, &readin), i;
393 
394 	for (i=0; i<3; i++)
395 		priv->stat.tx_mgmt_pkt_need_ack_num_retx[i] = readin;
396 
397 	return ret ? ret : len;
398 }
399 
tx_data_pkt_need_ack_num_retx_fail_show(struct device * input_dev,struct device_attribute * attr,char * buf)400 static ssize_t tx_data_pkt_need_ack_num_retx_fail_show(struct device *input_dev, struct device_attribute *attr, char *buf)
401 {
402 	struct platform_device *pdev = to_platform_device(input_dev);
403 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
404 	struct openwifi_priv *priv = dev->priv;
405 
406 	return sprintf(buf, "%u %u %u %u %u %u\n",
407 				priv->stat.tx_data_pkt_need_ack_num_retx_fail[0],
408 				priv->stat.tx_data_pkt_need_ack_num_retx_fail[1],
409 				priv->stat.tx_data_pkt_need_ack_num_retx_fail[2],
410 				priv->stat.tx_data_pkt_need_ack_num_retx_fail[3],
411 				priv->stat.tx_data_pkt_need_ack_num_retx_fail[4],
412 				priv->stat.tx_data_pkt_need_ack_num_retx_fail[5]);
413 }
tx_data_pkt_need_ack_num_retx_fail_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)414 static ssize_t tx_data_pkt_need_ack_num_retx_fail_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
415 {
416 	struct platform_device *pdev = to_platform_device(input_dev);
417 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
418 	struct openwifi_priv *priv = dev->priv;
419 
420 	long readin;
421 	u32 ret = kstrtol(buf, 10, &readin), i;
422 
423 	for (i=0; i<6; i++)
424 		priv->stat.tx_data_pkt_need_ack_num_retx_fail[i] = readin;
425 
426 	return ret ? ret : len;
427 }
428 
tx_mgmt_pkt_need_ack_num_retx_fail_show(struct device * input_dev,struct device_attribute * attr,char * buf)429 static ssize_t tx_mgmt_pkt_need_ack_num_retx_fail_show(struct device *input_dev, struct device_attribute *attr, char *buf)
430 {
431 	struct platform_device *pdev = to_platform_device(input_dev);
432 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
433 	struct openwifi_priv *priv = dev->priv;
434 
435 	return sprintf(buf, "%u %u %u\n",
436 				priv->stat.tx_mgmt_pkt_need_ack_num_retx_fail[0],
437 				priv->stat.tx_mgmt_pkt_need_ack_num_retx_fail[1],
438 				priv->stat.tx_mgmt_pkt_need_ack_num_retx_fail[2]);
439 }
tx_mgmt_pkt_need_ack_num_retx_fail_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)440 static ssize_t tx_mgmt_pkt_need_ack_num_retx_fail_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
441 {
442 	struct platform_device *pdev = to_platform_device(input_dev);
443 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
444 	struct openwifi_priv *priv = dev->priv;
445 
446 	long readin;
447 	u32 ret = kstrtol(buf, 10, &readin), i;
448 
449 	for (i=0; i<3; i++)
450 		priv->stat.tx_mgmt_pkt_need_ack_num_retx_fail[i] = readin;
451 
452 	return ret ? ret : len;
453 }
454 
tx_data_pkt_mcs_realtime_show(struct device * input_dev,struct device_attribute * attr,char * buf)455 static ssize_t tx_data_pkt_mcs_realtime_show(struct device *input_dev, struct device_attribute *attr, char *buf)
456 {
457 	struct platform_device *pdev = to_platform_device(input_dev);
458 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
459 	struct openwifi_priv *priv = dev->priv;
460 
461 	bool use_ht_rate = ((priv->stat.tx_data_pkt_mcs_realtime&0x80000000)!=0);
462 	u32 rate_hw_value = (priv->stat.tx_data_pkt_mcs_realtime&0x7fffffff);
463 
464 	return sprintf(buf, "%uM\n", (use_ht_rate == false ? wifi_rate_all[rate_hw_value] : wifi_rate_all[rate_hw_value + 12]));
465 }
tx_data_pkt_mcs_realtime_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)466 static ssize_t tx_data_pkt_mcs_realtime_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
467 {
468 	struct platform_device *pdev = to_platform_device(input_dev);
469 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
470 	struct openwifi_priv *priv = dev->priv;
471 
472 	long readin;
473 	u32 ret = kstrtol(buf, 10, &readin);
474 
475 	priv->stat.tx_data_pkt_mcs_realtime = readin;
476 
477 	return ret ? ret : len;
478 }
479 
tx_mgmt_pkt_mcs_realtime_show(struct device * input_dev,struct device_attribute * attr,char * buf)480 static ssize_t tx_mgmt_pkt_mcs_realtime_show(struct device *input_dev, struct device_attribute *attr, char *buf)
481 {
482 	struct platform_device *pdev = to_platform_device(input_dev);
483 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
484 	struct openwifi_priv *priv = dev->priv;
485 
486 	bool use_ht_rate = ((priv->stat.tx_mgmt_pkt_mcs_realtime&0x80000000)!=0);
487 	u32 rate_hw_value = (priv->stat.tx_mgmt_pkt_mcs_realtime&0x7fffffff);
488 
489 	return sprintf(buf, "%uM\n", (use_ht_rate == false ? wifi_rate_all[rate_hw_value] : wifi_rate_all[rate_hw_value + 12]));
490 }
tx_mgmt_pkt_mcs_realtime_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)491 static ssize_t tx_mgmt_pkt_mcs_realtime_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
492 {
493 	struct platform_device *pdev = to_platform_device(input_dev);
494 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
495 	struct openwifi_priv *priv = dev->priv;
496 
497 	long readin;
498 	u32 ret = kstrtol(buf, 10, &readin);
499 
500 	priv->stat.tx_mgmt_pkt_mcs_realtime = readin;
501 
502 	return ret ? ret : len;
503 }
504 
tx_mgmt_pkt_fail_mcs_realtime_show(struct device * input_dev,struct device_attribute * attr,char * buf)505 static ssize_t tx_mgmt_pkt_fail_mcs_realtime_show(struct device *input_dev, struct device_attribute *attr, char *buf)
506 {
507 	struct platform_device *pdev = to_platform_device(input_dev);
508 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
509 	struct openwifi_priv *priv = dev->priv;
510 
511 	bool use_ht_rate = ((priv->stat.tx_mgmt_pkt_fail_mcs_realtime&0x80000000)!=0);
512 	u32 rate_hw_value = (priv->stat.tx_mgmt_pkt_fail_mcs_realtime&0x7fffffff);
513 
514 	return sprintf(buf, "%uM\n", (use_ht_rate == false ? wifi_rate_all[rate_hw_value] : wifi_rate_all[rate_hw_value + 12]));
515 }
tx_mgmt_pkt_fail_mcs_realtime_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)516 static ssize_t tx_mgmt_pkt_fail_mcs_realtime_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
517 {
518 	struct platform_device *pdev = to_platform_device(input_dev);
519 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
520 	struct openwifi_priv *priv = dev->priv;
521 
522 	long readin;
523 	u32 ret = kstrtol(buf, 10, &readin);
524 
525 	priv->stat.tx_mgmt_pkt_fail_mcs_realtime = readin;
526 
527 	return ret ? ret : len;
528 }
529 
tx_data_pkt_fail_mcs_realtime_show(struct device * input_dev,struct device_attribute * attr,char * buf)530 static ssize_t tx_data_pkt_fail_mcs_realtime_show(struct device *input_dev, struct device_attribute *attr, char *buf)
531 {
532 	struct platform_device *pdev = to_platform_device(input_dev);
533 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
534 	struct openwifi_priv *priv = dev->priv;
535 
536 	bool use_ht_rate = ((priv->stat.tx_data_pkt_fail_mcs_realtime&0x80000000)!=0);
537 	u32 rate_hw_value = (priv->stat.tx_data_pkt_fail_mcs_realtime&0x7fffffff);
538 
539 	return sprintf(buf, "%uM\n", (use_ht_rate == false ? wifi_rate_all[rate_hw_value] : wifi_rate_all[rate_hw_value + 12]));
540 }
tx_data_pkt_fail_mcs_realtime_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)541 static ssize_t tx_data_pkt_fail_mcs_realtime_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
542 {
543 	struct platform_device *pdev = to_platform_device(input_dev);
544 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
545 	struct openwifi_priv *priv = dev->priv;
546 
547 	long readin;
548 	u32 ret = kstrtol(buf, 10, &readin);
549 
550 	priv->stat.tx_data_pkt_fail_mcs_realtime = readin;
551 
552 	return ret ? ret : len;
553 }
554 
rx_target_sender_mac_addr_show(struct device * input_dev,struct device_attribute * attr,char * buf)555 static ssize_t rx_target_sender_mac_addr_show(struct device *input_dev, struct device_attribute *attr, char *buf)
556 {
557 	struct platform_device *pdev = to_platform_device(input_dev);
558 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
559 	struct openwifi_priv *priv = dev->priv;
560 
561 	return sprintf(buf, "%08x\n", reverse32(priv->stat.rx_target_sender_mac_addr));
562 }
rx_target_sender_mac_addr_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)563 static ssize_t rx_target_sender_mac_addr_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
564 {
565 	struct platform_device *pdev = to_platform_device(input_dev);
566 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
567 	struct openwifi_priv *priv = dev->priv;
568 
569 	u32 readin;
570 	u32 ret = kstrtouint(buf, 16, &readin);
571 
572 	priv->stat.rx_target_sender_mac_addr = reverse32(readin);
573 
574 	return ret ? ret : len;
575 }
576 
rx_data_ok_agc_gain_value_realtime_show(struct device * input_dev,struct device_attribute * attr,char * buf)577 static ssize_t rx_data_ok_agc_gain_value_realtime_show(struct device *input_dev, struct device_attribute *attr, char *buf)
578 {
579 	struct platform_device *pdev = to_platform_device(input_dev);
580 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
581 	struct openwifi_priv *priv = dev->priv;
582 
583 	return sprintf(buf, "%u\n", priv->stat.rx_data_ok_agc_gain_value_realtime);
584 }
rx_data_ok_agc_gain_value_realtime_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)585 static ssize_t rx_data_ok_agc_gain_value_realtime_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
586 {
587 	struct platform_device *pdev = to_platform_device(input_dev);
588 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
589 	struct openwifi_priv *priv = dev->priv;
590 
591 	long readin;
592 	u32 ret = kstrtol(buf, 10, &readin);
593 
594 	priv->stat.rx_data_ok_agc_gain_value_realtime = readin;
595 
596 	return ret ? ret : len;
597 }
598 
rx_mgmt_ok_agc_gain_value_realtime_show(struct device * input_dev,struct device_attribute * attr,char * buf)599 static ssize_t rx_mgmt_ok_agc_gain_value_realtime_show(struct device *input_dev, struct device_attribute *attr, char *buf)
600 {
601 	struct platform_device *pdev = to_platform_device(input_dev);
602 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
603 	struct openwifi_priv *priv = dev->priv;
604 
605 	return sprintf(buf, "%u\n", priv->stat.rx_mgmt_ok_agc_gain_value_realtime);
606 }
rx_mgmt_ok_agc_gain_value_realtime_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)607 static ssize_t rx_mgmt_ok_agc_gain_value_realtime_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
608 {
609 	struct platform_device *pdev = to_platform_device(input_dev);
610 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
611 	struct openwifi_priv *priv = dev->priv;
612 
613 	long readin;
614 	u32 ret = kstrtol(buf, 10, &readin);
615 
616 	priv->stat.rx_mgmt_ok_agc_gain_value_realtime = readin;
617 
618 	return ret ? ret : len;
619 }
620 
rx_data_fail_agc_gain_value_realtime_show(struct device * input_dev,struct device_attribute * attr,char * buf)621 static ssize_t rx_data_fail_agc_gain_value_realtime_show(struct device *input_dev, struct device_attribute *attr, char *buf)
622 {
623 	struct platform_device *pdev = to_platform_device(input_dev);
624 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
625 	struct openwifi_priv *priv = dev->priv;
626 
627 	return sprintf(buf, "%u\n", priv->stat.rx_data_fail_agc_gain_value_realtime);
628 }
rx_data_fail_agc_gain_value_realtime_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)629 static ssize_t rx_data_fail_agc_gain_value_realtime_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
630 {
631 	struct platform_device *pdev = to_platform_device(input_dev);
632 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
633 	struct openwifi_priv *priv = dev->priv;
634 
635 	long readin;
636 	u32 ret = kstrtol(buf, 10, &readin);
637 
638 	priv->stat.rx_data_fail_agc_gain_value_realtime = readin;
639 
640 	return ret ? ret : len;
641 }
642 
rx_mgmt_fail_agc_gain_value_realtime_show(struct device * input_dev,struct device_attribute * attr,char * buf)643 static ssize_t rx_mgmt_fail_agc_gain_value_realtime_show(struct device *input_dev, struct device_attribute *attr, char *buf)
644 {
645 	struct platform_device *pdev = to_platform_device(input_dev);
646 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
647 	struct openwifi_priv *priv = dev->priv;
648 
649 	return sprintf(buf, "%u\n", priv->stat.rx_mgmt_fail_agc_gain_value_realtime);
650 }
rx_mgmt_fail_agc_gain_value_realtime_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)651 static ssize_t rx_mgmt_fail_agc_gain_value_realtime_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
652 {
653 	struct platform_device *pdev = to_platform_device(input_dev);
654 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
655 	struct openwifi_priv *priv = dev->priv;
656 
657 	long readin;
658 	u32 ret = kstrtol(buf, 10, &readin);
659 
660 	priv->stat.rx_mgmt_fail_agc_gain_value_realtime = readin;
661 
662 	return ret ? ret : len;
663 }
664 
rx_ack_ok_agc_gain_value_realtime_show(struct device * input_dev,struct device_attribute * attr,char * buf)665 static ssize_t rx_ack_ok_agc_gain_value_realtime_show(struct device *input_dev, struct device_attribute *attr, char *buf)
666 {
667 	struct platform_device *pdev = to_platform_device(input_dev);
668 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
669 	struct openwifi_priv *priv = dev->priv;
670 
671 	return sprintf(buf, "%u\n", priv->stat.rx_ack_ok_agc_gain_value_realtime);
672 }
rx_ack_ok_agc_gain_value_realtime_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)673 static ssize_t rx_ack_ok_agc_gain_value_realtime_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
674 {
675 	struct platform_device *pdev = to_platform_device(input_dev);
676 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
677 	struct openwifi_priv *priv = dev->priv;
678 
679 	long readin;
680 	u32 ret = kstrtol(buf, 10, &readin);
681 
682 	priv->stat.rx_ack_ok_agc_gain_value_realtime = readin;
683 
684 	return ret ? ret : len;
685 }
686 
rx_monitor_all_show(struct device * input_dev,struct device_attribute * attr,char * buf)687 static ssize_t rx_monitor_all_show(struct device *input_dev, struct device_attribute *attr, char *buf)
688 {
689 	struct platform_device *pdev = to_platform_device(input_dev);
690 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
691 	struct openwifi_priv *priv = dev->priv;
692 
693 	return sprintf(buf, "%u\n", priv->stat.rx_monitor_all);
694 }
rx_monitor_all_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)695 static ssize_t rx_monitor_all_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
696 {
697 	struct platform_device *pdev = to_platform_device(input_dev);
698 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
699 	struct openwifi_priv *priv = dev->priv;
700 
701 	long readin;
702 	u32 ret = kstrtol(buf, 10, &readin);
703 	u32 filter_flag;
704 
705 	priv->stat.rx_monitor_all = readin;
706 
707 	filter_flag = xpu_api->XPU_REG_FILTER_FLAG_read();
708 	if (readin>0) {// set to fpga
709 		filter_flag = (filter_flag|MONITOR_ALL);
710 	} else {
711 		filter_flag = (filter_flag&(~MONITOR_ALL));
712 	}
713 	xpu_api->XPU_REG_FILTER_FLAG_write(filter_flag);
714 
715 	return ret ? ret : len;
716 }
717 
rx_data_pkt_num_total_show(struct device * input_dev,struct device_attribute * attr,char * buf)718 static ssize_t rx_data_pkt_num_total_show(struct device *input_dev, struct device_attribute *attr, char *buf)
719 {
720 	struct platform_device *pdev = to_platform_device(input_dev);
721 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
722 	struct openwifi_priv *priv = dev->priv;
723 
724 	return sprintf(buf, "%u\n", priv->stat.rx_data_pkt_num_total);
725 }
rx_data_pkt_num_total_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)726 static ssize_t rx_data_pkt_num_total_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
727 {
728 	struct platform_device *pdev = to_platform_device(input_dev);
729 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
730 	struct openwifi_priv *priv = dev->priv;
731 
732 	long readin;
733 	u32 ret = kstrtol(buf, 10, &readin);
734 
735 	priv->stat.rx_data_pkt_num_total = readin;
736 
737 	return ret ? ret : len;
738 }
739 
rx_data_pkt_num_fail_show(struct device * input_dev,struct device_attribute * attr,char * buf)740 static ssize_t rx_data_pkt_num_fail_show(struct device *input_dev, struct device_attribute *attr, char *buf)
741 {
742 	struct platform_device *pdev = to_platform_device(input_dev);
743 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
744 	struct openwifi_priv *priv = dev->priv;
745 
746 	return sprintf(buf, "%u\n", priv->stat.rx_data_pkt_num_fail);
747 }
rx_data_pkt_num_fail_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)748 static ssize_t rx_data_pkt_num_fail_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
749 {
750 	struct platform_device *pdev = to_platform_device(input_dev);
751 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
752 	struct openwifi_priv *priv = dev->priv;
753 
754 	long readin;
755 	u32 ret = kstrtol(buf, 10, &readin);
756 
757 	priv->stat.rx_data_pkt_num_fail = readin;
758 
759 	return ret ? ret : len;
760 }
761 
rx_mgmt_pkt_num_total_show(struct device * input_dev,struct device_attribute * attr,char * buf)762 static ssize_t rx_mgmt_pkt_num_total_show(struct device *input_dev, struct device_attribute *attr, char *buf)
763 {
764 	struct platform_device *pdev = to_platform_device(input_dev);
765 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
766 	struct openwifi_priv *priv = dev->priv;
767 
768 	return sprintf(buf, "%u\n", priv->stat.rx_mgmt_pkt_num_total);
769 }
rx_mgmt_pkt_num_total_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)770 static ssize_t rx_mgmt_pkt_num_total_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
771 {
772 	struct platform_device *pdev = to_platform_device(input_dev);
773 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
774 	struct openwifi_priv *priv = dev->priv;
775 
776 	long readin;
777 	u32 ret = kstrtol(buf, 10, &readin);
778 
779 	priv->stat.rx_mgmt_pkt_num_total = readin;
780 
781 	return ret ? ret : len;
782 }
783 
rx_mgmt_pkt_num_fail_show(struct device * input_dev,struct device_attribute * attr,char * buf)784 static ssize_t rx_mgmt_pkt_num_fail_show(struct device *input_dev, struct device_attribute *attr, char *buf)
785 {
786 	struct platform_device *pdev = to_platform_device(input_dev);
787 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
788 	struct openwifi_priv *priv = dev->priv;
789 
790 	return sprintf(buf, "%u\n", priv->stat.rx_mgmt_pkt_num_fail);
791 }
rx_mgmt_pkt_num_fail_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)792 static ssize_t rx_mgmt_pkt_num_fail_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
793 {
794 	struct platform_device *pdev = to_platform_device(input_dev);
795 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
796 	struct openwifi_priv *priv = dev->priv;
797 
798 	long readin;
799 	u32 ret = kstrtol(buf, 10, &readin);
800 
801 	priv->stat.rx_mgmt_pkt_num_fail = readin;
802 
803 	return ret ? ret : len;
804 }
805 
rx_ack_pkt_num_total_show(struct device * input_dev,struct device_attribute * attr,char * buf)806 static ssize_t rx_ack_pkt_num_total_show(struct device *input_dev, struct device_attribute *attr, char *buf)
807 {
808 	struct platform_device *pdev = to_platform_device(input_dev);
809 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
810 	struct openwifi_priv *priv = dev->priv;
811 
812 	return sprintf(buf, "%u\n", priv->stat.rx_ack_pkt_num_total);
813 }
rx_ack_pkt_num_total_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)814 static ssize_t rx_ack_pkt_num_total_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
815 {
816 	struct platform_device *pdev = to_platform_device(input_dev);
817 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
818 	struct openwifi_priv *priv = dev->priv;
819 
820 	long readin;
821 	u32 ret = kstrtol(buf, 10, &readin);
822 
823 	priv->stat.rx_ack_pkt_num_total = readin;
824 
825 	return ret ? ret : len;
826 }
827 
rx_ack_pkt_num_fail_show(struct device * input_dev,struct device_attribute * attr,char * buf)828 static ssize_t rx_ack_pkt_num_fail_show(struct device *input_dev, struct device_attribute *attr, char *buf)
829 {
830 	struct platform_device *pdev = to_platform_device(input_dev);
831 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
832 	struct openwifi_priv *priv = dev->priv;
833 
834 	return sprintf(buf, "%u\n", priv->stat.rx_ack_pkt_num_fail);
835 }
rx_ack_pkt_num_fail_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)836 static ssize_t rx_ack_pkt_num_fail_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
837 {
838 	struct platform_device *pdev = to_platform_device(input_dev);
839 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
840 	struct openwifi_priv *priv = dev->priv;
841 
842 	long readin;
843 	u32 ret = kstrtol(buf, 10, &readin);
844 
845 	priv->stat.rx_ack_pkt_num_fail = readin;
846 
847 	return ret ? ret : len;
848 }
849 
rx_data_pkt_mcs_realtime_show(struct device * input_dev,struct device_attribute * attr,char * buf)850 static ssize_t rx_data_pkt_mcs_realtime_show(struct device *input_dev, struct device_attribute *attr, char *buf)
851 {
852 	struct platform_device *pdev = to_platform_device(input_dev);
853 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
854 	struct openwifi_priv *priv = dev->priv;
855 
856 	return sprintf(buf, "%uM\n", wifi_rate_table[priv->stat.rx_data_pkt_mcs_realtime]);
857 }
rx_data_pkt_mcs_realtime_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)858 static ssize_t rx_data_pkt_mcs_realtime_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
859 {
860 	struct platform_device *pdev = to_platform_device(input_dev);
861 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
862 	struct openwifi_priv *priv = dev->priv;
863 
864 	long readin;
865 	u32 ret = kstrtol(buf, 10, &readin);
866 
867 	priv->stat.rx_data_pkt_mcs_realtime = readin;
868 
869 	return ret ? ret : len;
870 }
871 
rx_data_pkt_fail_mcs_realtime_show(struct device * input_dev,struct device_attribute * attr,char * buf)872 static ssize_t rx_data_pkt_fail_mcs_realtime_show(struct device *input_dev, struct device_attribute *attr, char *buf)
873 {
874 	struct platform_device *pdev = to_platform_device(input_dev);
875 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
876 	struct openwifi_priv *priv = dev->priv;
877 
878 	return sprintf(buf, "%uM\n", wifi_rate_table[priv->stat.rx_data_pkt_fail_mcs_realtime]);
879 }
rx_data_pkt_fail_mcs_realtime_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)880 static ssize_t rx_data_pkt_fail_mcs_realtime_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
881 {
882 	struct platform_device *pdev = to_platform_device(input_dev);
883 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
884 	struct openwifi_priv *priv = dev->priv;
885 
886 	long readin;
887 	u32 ret = kstrtol(buf, 10, &readin);
888 
889 	priv->stat.rx_data_pkt_fail_mcs_realtime = readin;
890 
891 	return ret ? ret : len;
892 }
893 
rx_mgmt_pkt_mcs_realtime_show(struct device * input_dev,struct device_attribute * attr,char * buf)894 static ssize_t rx_mgmt_pkt_mcs_realtime_show(struct device *input_dev, struct device_attribute *attr, char *buf)
895 {
896 	struct platform_device *pdev = to_platform_device(input_dev);
897 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
898 	struct openwifi_priv *priv = dev->priv;
899 
900 	return sprintf(buf, "%uM\n", wifi_rate_table[priv->stat.rx_mgmt_pkt_mcs_realtime]);
901 }
rx_mgmt_pkt_mcs_realtime_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)902 static ssize_t rx_mgmt_pkt_mcs_realtime_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
903 {
904 	struct platform_device *pdev = to_platform_device(input_dev);
905 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
906 	struct openwifi_priv *priv = dev->priv;
907 
908 	long readin;
909 	u32 ret = kstrtol(buf, 10, &readin);
910 
911 	priv->stat.rx_mgmt_pkt_mcs_realtime = readin;
912 
913 	return ret ? ret : len;
914 }
915 
rx_mgmt_pkt_fail_mcs_realtime_show(struct device * input_dev,struct device_attribute * attr,char * buf)916 static ssize_t rx_mgmt_pkt_fail_mcs_realtime_show(struct device *input_dev, struct device_attribute *attr, char *buf)
917 {
918 	struct platform_device *pdev = to_platform_device(input_dev);
919 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
920 	struct openwifi_priv *priv = dev->priv;
921 
922 	return sprintf(buf, "%uM\n", wifi_rate_table[priv->stat.rx_mgmt_pkt_fail_mcs_realtime]);
923 }
rx_mgmt_pkt_fail_mcs_realtime_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)924 static ssize_t rx_mgmt_pkt_fail_mcs_realtime_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
925 {
926 	struct platform_device *pdev = to_platform_device(input_dev);
927 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
928 	struct openwifi_priv *priv = dev->priv;
929 
930 	long readin;
931 	u32 ret = kstrtol(buf, 10, &readin);
932 
933 	priv->stat.rx_mgmt_pkt_fail_mcs_realtime = readin;
934 
935 	return ret ? ret : len;
936 }
937 
rx_ack_pkt_mcs_realtime_show(struct device * input_dev,struct device_attribute * attr,char * buf)938 static ssize_t rx_ack_pkt_mcs_realtime_show(struct device *input_dev, struct device_attribute *attr, char *buf)
939 {
940 	struct platform_device *pdev = to_platform_device(input_dev);
941 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
942 	struct openwifi_priv *priv = dev->priv;
943 
944 	return sprintf(buf, "%uM\n", wifi_rate_table[priv->stat.rx_ack_pkt_mcs_realtime]);
945 }
rx_ack_pkt_mcs_realtime_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)946 static ssize_t rx_ack_pkt_mcs_realtime_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
947 {
948 	struct platform_device *pdev = to_platform_device(input_dev);
949 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
950 	struct openwifi_priv *priv = dev->priv;
951 
952 	long readin;
953 	u32 ret = kstrtol(buf, 10, &readin);
954 
955 	priv->stat.rx_ack_pkt_mcs_realtime = readin;
956 
957 	return ret ? ret : len;
958 }
959 
restrict_freq_mhz_show(struct device * input_dev,struct device_attribute * attr,char * buf)960 static ssize_t restrict_freq_mhz_show(struct device *input_dev, struct device_attribute *attr, char *buf)
961 {
962 	struct platform_device *pdev = to_platform_device(input_dev);
963 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
964 	struct openwifi_priv *priv = dev->priv;
965 
966 	return sprintf(buf, "%u\n", priv->stat.restrict_freq_mhz);
967 }
restrict_freq_mhz_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)968 static ssize_t restrict_freq_mhz_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
969 {
970 	struct platform_device *pdev = to_platform_device(input_dev);
971 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
972 	struct openwifi_priv *priv = dev->priv;
973 
974 	long readin;
975 	u32 ret = kstrtol(buf, 10, &readin);
976 
977 	priv->stat.restrict_freq_mhz = readin;
978 
979 	return ret ? ret : len;
980 }
981 
csma_cfg0_show(struct device * input_dev,struct device_attribute * attr,char * buf)982 static ssize_t csma_cfg0_show(struct device *input_dev, struct device_attribute *attr, char *buf)
983 {
984 	struct platform_device *pdev = to_platform_device(input_dev);
985 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
986 	struct openwifi_priv *priv = dev->priv;
987 
988 	u32 reg_val;
989 
990 	reg_val = xpu_api->XPU_REG_FORCE_IDLE_MISC_read();
991 	priv->stat.csma_cfg0 = reg_val;
992 
993 	return sprintf(buf, "nav_disable %d difs_disable %d eifs_disable %d eifs_by_rx_fail_disable %d eifs_by_tx_fail_disable %d cw_override %d cw override val %d wait_after_decode_top %d\n",
994 					(reg_val>>31)&1,
995 					(reg_val>>30)&1,
996 					(reg_val>>29)&1,
997           (reg_val>>27)&1,
998           (reg_val>>26)&1,
999 					(reg_val>>28)&1,
1000 					(reg_val>>16)&0xf,
1001 					(reg_val>>0)&0xff);
1002 }
csma_cfg0_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)1003 static ssize_t csma_cfg0_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
1004 {
1005 	struct platform_device *pdev = to_platform_device(input_dev);
1006 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
1007 	struct openwifi_priv *priv = dev->priv;
1008 
1009 	u32 disable_flag, idx_from_msb, reg_val;
1010 	u32 readin;
1011 	u32 ret = kstrtouint(buf, 16, &readin);
1012 
1013 	disable_flag =  (readin&0xf);
1014 	idx_from_msb = ((readin>>4)&0xf);
1015 
1016 	reg_val = xpu_api->XPU_REG_FORCE_IDLE_MISC_read();
1017 
1018 	if (disable_flag)
1019 		reg_val = (reg_val|(1<<(31-idx_from_msb)));
1020 	else
1021 		reg_val = (reg_val&(~(1<<(31-idx_from_msb))));
1022 
1023 	xpu_api->XPU_REG_FORCE_IDLE_MISC_write(reg_val);
1024 
1025 	priv->stat.csma_cfg0 = reg_val;
1026 
1027 	return ret ? ret : len;
1028 }
1029 
cw_max_min_cfg_show(struct device * input_dev,struct device_attribute * attr,char * buf)1030 static ssize_t cw_max_min_cfg_show(struct device *input_dev, struct device_attribute *attr, char *buf)
1031 {
1032 	struct platform_device *pdev = to_platform_device(input_dev);
1033 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
1034 	struct openwifi_priv *priv = dev->priv;
1035 
1036 	u32 ret_size, reg_val;
1037 
1038 	reg_val = xpu_api->XPU_REG_CSMA_CFG_read();
1039 
1040 	ret_size = sprintf(buf, "FPGA  cw max min for q3 to q0: %d %d; %d %d; %d %d; %d %d\n",
1041 						(1<<((reg_val>>28)&0xF))-1,
1042 						(1<<((reg_val>>24)&0xF))-1,
1043 						(1<<((reg_val>>20)&0xF))-1,
1044 						(1<<((reg_val>>16)&0xF))-1,
1045 						(1<<((reg_val>>12)&0xF))-1,
1046 						(1<<((reg_val>> 8)&0xF))-1,
1047 						(1<<((reg_val>> 4)&0xF))-1,
1048 						(1<<((reg_val>> 0)&0xF))-1);
1049 	ret_size = ret_size + sprintf(buf+ret_size, "FPGA  cw max min for q3 to q0: %08x\n",reg_val);
1050 
1051 	if (priv->stat.cw_max_min_cfg) {
1052 		reg_val = priv->stat.cw_max_min_cfg;
1053 		ret_size = ret_size + sprintf(buf+ret_size, "SYSFS cw max min for q3 to q0: %d %d; %d %d; %d %d; %d %d\n",
1054 						(1<<((reg_val>>28)&0xF))-1,
1055 						(1<<((reg_val>>24)&0xF))-1,
1056 						(1<<((reg_val>>20)&0xF))-1,
1057 						(1<<((reg_val>>16)&0xF))-1,
1058 						(1<<((reg_val>>12)&0xF))-1,
1059 						(1<<((reg_val>> 8)&0xF))-1,
1060 						(1<<((reg_val>> 4)&0xF))-1,
1061 						(1<<((reg_val>> 0)&0xF))-1);
1062 		ret_size = ret_size + sprintf(buf+ret_size, "SYSFS cw max min for q3 to q0: %08x\n",reg_val);
1063 	}
1064 
1065 	return ret_size;
1066 }
1067 
cw_max_min_cfg_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)1068 static ssize_t cw_max_min_cfg_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
1069 {
1070 	struct platform_device *pdev = to_platform_device(input_dev);
1071 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
1072 	struct openwifi_priv *priv = dev->priv;
1073 
1074 	u32 readin;
1075 	u32 ret = kstrtouint(buf, 16, &readin);
1076 
1077 	// printk("%s %d\n", buf, readin);
1078 
1079 	priv->stat.cw_max_min_cfg = readin;
1080 	if (readin)
1081 		xpu_api->XPU_REG_CSMA_CFG_write(readin);
1082 
1083 	return ret ? ret : len;
1084 }
1085 
dbg_ch0_show(struct device * input_dev,struct device_attribute * attr,char * buf)1086 static ssize_t dbg_ch0_show(struct device *input_dev, struct device_attribute *attr, char *buf)
1087 {
1088 	struct platform_device *pdev = to_platform_device(input_dev);
1089 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
1090 	struct openwifi_priv *priv = dev->priv;
1091 
1092 	return sprintf(buf, "%u\n", priv->stat.dbg_ch0);
1093 }
dbg_ch0_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)1094 static ssize_t dbg_ch0_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
1095 {
1096 	struct platform_device *pdev = to_platform_device(input_dev);
1097 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
1098 	struct openwifi_priv *priv = dev->priv;
1099 
1100 	long readin;
1101 	u32 ret = kstrtol(buf, 10, &readin);
1102 
1103 	priv->stat.dbg_ch0 = readin;
1104 
1105 	// xpu_api->XPU_REG_DIFS_ADVANCE_write((readin<<16)|2); //us. bit31~16 max pkt length threshold
1106 	// rx_intf_api->RX_INTF_REG_START_TRANS_TO_PS_write(readin<<16); //bit31~16 max pkt length threshold
1107 	// openofdm_rx_api->OPENOFDM_RX_REG_SOFT_DECODING_write((readin<<16)|1); //bit1 enable soft decoding; bit31~16 max pkt length threshold
1108 
1109 	return ret ? ret : len;
1110 }
1111 
dbg_ch1_show(struct device * input_dev,struct device_attribute * attr,char * buf)1112 static ssize_t dbg_ch1_show(struct device *input_dev, struct device_attribute *attr, char *buf)
1113 {
1114 	struct platform_device *pdev = to_platform_device(input_dev);
1115 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
1116 	struct openwifi_priv *priv = dev->priv;
1117 
1118 	return sprintf(buf, "%u\n", priv->stat.dbg_ch1);
1119 }
dbg_ch1_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)1120 static ssize_t dbg_ch1_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
1121 {
1122 	struct platform_device *pdev = to_platform_device(input_dev);
1123 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
1124 	struct openwifi_priv *priv = dev->priv;
1125 
1126 	long readin;
1127 	u32 ret = kstrtol(buf, 10, &readin);
1128 
1129 	priv->stat.dbg_ch1 = readin;
1130 
1131 	return ret ? ret : len;
1132 }
1133 
dbg_ch2_show(struct device * input_dev,struct device_attribute * attr,char * buf)1134 static ssize_t dbg_ch2_show(struct device *input_dev, struct device_attribute *attr, char *buf)
1135 {
1136 	struct platform_device *pdev = to_platform_device(input_dev);
1137 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
1138 	struct openwifi_priv *priv = dev->priv;
1139 
1140 	return sprintf(buf, "%u\n", priv->stat.dbg_ch2);
1141 }
dbg_ch2_store(struct device * input_dev,struct device_attribute * attr,const char * buf,size_t len)1142 static ssize_t dbg_ch2_store(struct device *input_dev, struct device_attribute *attr, const char *buf, size_t len)
1143 {
1144 	struct platform_device *pdev = to_platform_device(input_dev);
1145 	struct ieee80211_hw *dev = platform_get_drvdata(pdev);
1146 	struct openwifi_priv *priv = dev->priv;
1147 
1148 	long readin;
1149 	u32 ret = kstrtol(buf, 10, &readin);
1150 
1151 	priv->stat.dbg_ch2 = readin;
1152 
1153 	return ret ? ret : len;
1154 }
1155 
1156 static DEVICE_ATTR(stat_enable, S_IRUGO | S_IWUSR, stat_enable_show, stat_enable_store);
1157 static DEVICE_ATTR(tx_prio_queue, S_IRUGO | S_IWUSR, tx_prio_queue_show, tx_prio_queue_store);
1158 static DEVICE_ATTR(tx_data_pkt_need_ack_num_total, S_IRUGO | S_IWUSR, tx_data_pkt_need_ack_num_total_show, tx_data_pkt_need_ack_num_total_store);
1159 static DEVICE_ATTR(tx_data_pkt_need_ack_num_total_fail, S_IRUGO | S_IWUSR, tx_data_pkt_need_ack_num_total_fail_show, tx_data_pkt_need_ack_num_total_fail_store);
1160 static DEVICE_ATTR(tx_data_pkt_need_ack_num_retx, S_IRUGO | S_IWUSR, tx_data_pkt_need_ack_num_retx_show, tx_data_pkt_need_ack_num_retx_store);
1161 static DEVICE_ATTR(tx_data_pkt_need_ack_num_retx_fail, S_IRUGO | S_IWUSR, tx_data_pkt_need_ack_num_retx_fail_show, tx_data_pkt_need_ack_num_retx_fail_store);
1162 
1163 static DEVICE_ATTR(tx_data_pkt_mcs_realtime, S_IRUGO | S_IWUSR, tx_data_pkt_mcs_realtime_show, tx_data_pkt_mcs_realtime_store);
1164 static DEVICE_ATTR(tx_data_pkt_fail_mcs_realtime, S_IRUGO | S_IWUSR, tx_data_pkt_fail_mcs_realtime_show, tx_data_pkt_fail_mcs_realtime_store);
1165 
1166 static DEVICE_ATTR(tx_mgmt_pkt_need_ack_num_total, S_IRUGO | S_IWUSR, tx_mgmt_pkt_need_ack_num_total_show, tx_mgmt_pkt_need_ack_num_total_store);
1167 static DEVICE_ATTR(tx_mgmt_pkt_need_ack_num_total_fail, S_IRUGO | S_IWUSR, tx_mgmt_pkt_need_ack_num_total_fail_show, tx_mgmt_pkt_need_ack_num_total_fail_store);
1168 static DEVICE_ATTR(tx_mgmt_pkt_need_ack_num_retx, S_IRUGO | S_IWUSR, tx_mgmt_pkt_need_ack_num_retx_show, tx_mgmt_pkt_need_ack_num_retx_store);
1169 static DEVICE_ATTR(tx_mgmt_pkt_need_ack_num_retx_fail, S_IRUGO | S_IWUSR, tx_mgmt_pkt_need_ack_num_retx_fail_show, tx_mgmt_pkt_need_ack_num_retx_fail_store);
1170 
1171 static DEVICE_ATTR(tx_mgmt_pkt_mcs_realtime, S_IRUGO | S_IWUSR, tx_mgmt_pkt_mcs_realtime_show, tx_mgmt_pkt_mcs_realtime_store);
1172 static DEVICE_ATTR(tx_mgmt_pkt_fail_mcs_realtime, S_IRUGO | S_IWUSR, tx_mgmt_pkt_fail_mcs_realtime_show, tx_mgmt_pkt_fail_mcs_realtime_store);
1173 
1174 static DEVICE_ATTR(rx_target_sender_mac_addr, S_IRUGO | S_IWUSR, rx_target_sender_mac_addr_show, rx_target_sender_mac_addr_store);
1175 static DEVICE_ATTR(rx_data_ok_agc_gain_value_realtime, S_IRUGO | S_IWUSR, rx_data_ok_agc_gain_value_realtime_show, rx_data_ok_agc_gain_value_realtime_store);
1176 static DEVICE_ATTR(rx_data_fail_agc_gain_value_realtime, S_IRUGO | S_IWUSR, rx_data_fail_agc_gain_value_realtime_show, rx_data_fail_agc_gain_value_realtime_store);
1177 static DEVICE_ATTR(rx_mgmt_ok_agc_gain_value_realtime, S_IRUGO | S_IWUSR, rx_mgmt_ok_agc_gain_value_realtime_show, rx_mgmt_ok_agc_gain_value_realtime_store);
1178 static DEVICE_ATTR(rx_mgmt_fail_agc_gain_value_realtime, S_IRUGO | S_IWUSR, rx_mgmt_fail_agc_gain_value_realtime_show, rx_mgmt_fail_agc_gain_value_realtime_store);
1179 static DEVICE_ATTR(rx_ack_ok_agc_gain_value_realtime, S_IRUGO | S_IWUSR, rx_ack_ok_agc_gain_value_realtime_show, rx_ack_ok_agc_gain_value_realtime_store);
1180 
1181 static DEVICE_ATTR(rx_monitor_all, S_IRUGO | S_IWUSR, rx_monitor_all_show, rx_monitor_all_store);
1182 static DEVICE_ATTR(rx_data_pkt_num_total, S_IRUGO | S_IWUSR, rx_data_pkt_num_total_show, rx_data_pkt_num_total_store);
1183 static DEVICE_ATTR(rx_data_pkt_num_fail, S_IRUGO | S_IWUSR, rx_data_pkt_num_fail_show, rx_data_pkt_num_fail_store);
1184 static DEVICE_ATTR(rx_mgmt_pkt_num_total, S_IRUGO | S_IWUSR, rx_mgmt_pkt_num_total_show, rx_mgmt_pkt_num_total_store);
1185 static DEVICE_ATTR(rx_mgmt_pkt_num_fail, S_IRUGO | S_IWUSR, rx_mgmt_pkt_num_fail_show, rx_mgmt_pkt_num_fail_store);
1186 static DEVICE_ATTR(rx_ack_pkt_num_total, S_IRUGO | S_IWUSR, rx_ack_pkt_num_total_show, rx_ack_pkt_num_total_store);
1187 static DEVICE_ATTR(rx_ack_pkt_num_fail, S_IRUGO | S_IWUSR, rx_ack_pkt_num_fail_show, rx_ack_pkt_num_fail_store);
1188 
1189 static DEVICE_ATTR(rx_data_pkt_mcs_realtime, S_IRUGO | S_IWUSR, rx_data_pkt_mcs_realtime_show, rx_data_pkt_mcs_realtime_store);
1190 static DEVICE_ATTR(rx_data_pkt_fail_mcs_realtime, S_IRUGO | S_IWUSR, rx_data_pkt_fail_mcs_realtime_show, rx_data_pkt_fail_mcs_realtime_store);
1191 static DEVICE_ATTR(rx_mgmt_pkt_mcs_realtime, S_IRUGO | S_IWUSR, rx_mgmt_pkt_mcs_realtime_show, rx_mgmt_pkt_mcs_realtime_store);
1192 static DEVICE_ATTR(rx_mgmt_pkt_fail_mcs_realtime, S_IRUGO | S_IWUSR, rx_mgmt_pkt_fail_mcs_realtime_show, rx_mgmt_pkt_fail_mcs_realtime_store);
1193 static DEVICE_ATTR(rx_ack_pkt_mcs_realtime, S_IRUGO | S_IWUSR, rx_ack_pkt_mcs_realtime_show, rx_ack_pkt_mcs_realtime_store);
1194 
1195 static DEVICE_ATTR(restrict_freq_mhz, S_IRUGO | S_IWUSR, restrict_freq_mhz_show, restrict_freq_mhz_store);
1196 
1197 static DEVICE_ATTR(csma_cfg0, S_IRUGO | S_IWUSR, csma_cfg0_show, csma_cfg0_store);
1198 static DEVICE_ATTR(cw_max_min_cfg, S_IRUGO | S_IWUSR, cw_max_min_cfg_show, cw_max_min_cfg_store);
1199 
1200 static DEVICE_ATTR(dbg_ch0, S_IRUGO | S_IWUSR, dbg_ch0_show, dbg_ch0_store);
1201 static DEVICE_ATTR(dbg_ch1, S_IRUGO | S_IWUSR, dbg_ch1_show, dbg_ch1_store);
1202 static DEVICE_ATTR(dbg_ch2, S_IRUGO | S_IWUSR, dbg_ch2_show, dbg_ch2_store);
1203 
1204 static struct attribute *stat_attributes[] = {
1205 	&dev_attr_stat_enable.attr,
1206 
1207 	&dev_attr_tx_prio_queue.attr,
1208 
1209 	&dev_attr_tx_data_pkt_need_ack_num_total.attr,
1210 	&dev_attr_tx_data_pkt_need_ack_num_total_fail.attr,
1211 
1212 	&dev_attr_tx_data_pkt_need_ack_num_retx.attr,
1213 	&dev_attr_tx_data_pkt_need_ack_num_retx_fail.attr,
1214 
1215 	&dev_attr_tx_data_pkt_mcs_realtime.attr,
1216 	&dev_attr_tx_data_pkt_fail_mcs_realtime.attr,
1217 
1218 	&dev_attr_tx_mgmt_pkt_need_ack_num_total.attr,
1219 	&dev_attr_tx_mgmt_pkt_need_ack_num_total_fail.attr,
1220 
1221 	&dev_attr_tx_mgmt_pkt_need_ack_num_retx.attr,
1222 	&dev_attr_tx_mgmt_pkt_need_ack_num_retx_fail.attr,
1223 
1224 	&dev_attr_tx_mgmt_pkt_mcs_realtime.attr,
1225 	&dev_attr_tx_mgmt_pkt_fail_mcs_realtime.attr,
1226 
1227 	&dev_attr_rx_target_sender_mac_addr.attr,
1228 	&dev_attr_rx_data_ok_agc_gain_value_realtime.attr,
1229 	&dev_attr_rx_data_fail_agc_gain_value_realtime.attr,
1230 	&dev_attr_rx_mgmt_ok_agc_gain_value_realtime.attr,
1231 	&dev_attr_rx_mgmt_fail_agc_gain_value_realtime.attr,
1232 	&dev_attr_rx_ack_ok_agc_gain_value_realtime.attr,
1233 
1234 	&dev_attr_rx_monitor_all.attr,
1235 	&dev_attr_rx_data_pkt_num_total.attr,
1236 	&dev_attr_rx_data_pkt_num_fail.attr,
1237 	&dev_attr_rx_mgmt_pkt_num_total.attr,
1238 	&dev_attr_rx_mgmt_pkt_num_fail.attr,
1239 	&dev_attr_rx_ack_pkt_num_total.attr,
1240 	&dev_attr_rx_ack_pkt_num_fail.attr,
1241 
1242 	&dev_attr_rx_data_pkt_mcs_realtime.attr,
1243 	&dev_attr_rx_data_pkt_fail_mcs_realtime.attr,
1244 	&dev_attr_rx_mgmt_pkt_mcs_realtime.attr,
1245 	&dev_attr_rx_mgmt_pkt_fail_mcs_realtime.attr,
1246 	&dev_attr_rx_ack_pkt_mcs_realtime.attr,
1247 
1248 	&dev_attr_restrict_freq_mhz.attr,
1249 
1250 	&dev_attr_csma_cfg0.attr,
1251 	&dev_attr_cw_max_min_cfg.attr,
1252 
1253 	&dev_attr_dbg_ch0.attr,
1254 	&dev_attr_dbg_ch1.attr,
1255 	&dev_attr_dbg_ch2.attr,
1256 
1257 	NULL,
1258 };
1259 static const struct attribute_group stat_attribute_group = {
1260 	.attrs = stat_attributes,
1261 };
1262