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