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 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 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 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 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 } 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 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 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 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 } 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 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 } 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 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 } 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