tzh
2024-08-15 d4a1bd480003f3e1a0590bc46fbcb24f05652ca7
longan/kernel/linux-4.9/drivers/net/wireless/aic8800/aic8800_fdrv/rwnx_main.c
old mode 100644new mode 100755
....@@ -48,6 +48,7 @@
4848 #include "aicwf_usb.h"
4949 #endif
5050 #include "aic_bsp_export.h"
51
+#include "rwnx_wakelock.h"
5152
5253 #define RW_DRV_DESCRIPTION "RivieraWaves 11nac driver for Linux cfg80211"
5354 #define RW_DRV_COPYRIGHT "Copyright(c) 2015-2017 RivieraWaves"
....@@ -313,7 +314,7 @@
313314
314315 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)) || defined(CONFIG_HE_FOR_OLD_KERNEL)
315316 struct ieee80211_sband_iftype_data rwnx_he_capa = {
316
- .types_mask = BIT(NL80211_IFTYPE_STATION),
317
+ .types_mask = BIT(NL80211_IFTYPE_STATION) | BIT(NL80211_IFTYPE_AP),
317318 .he_cap = RWNX_HE_CAPABILITIES,
318319 };
319320 #endif
....@@ -678,29 +679,57 @@
678679
679680 static void rwnx_del_csa(struct rwnx_vif *vif)
680681 {
681
- struct rwnx_hw *rwnx_hw = vif->rwnx_hw;
682682 struct rwnx_csa *csa = vif->ap.csa;
683683
684684 if (!csa)
685685 return;
686686
687
- rwnx_ipc_elem_var_deallocs(rwnx_hw, &csa->elem);
688687 rwnx_del_bcn(&csa->bcn);
689688 kfree(csa);
690689 vif->ap.csa = NULL;
691690 }
692
-
691
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0)
693692 static void rwnx_csa_finish(struct work_struct *ws)
694693 {
695694 struct rwnx_csa *csa = container_of(ws, struct rwnx_csa, work);
696695 struct rwnx_vif *vif = csa->vif;
697696 struct rwnx_hw *rwnx_hw = vif->rwnx_hw;
698697 int error = csa->status;
698
+ u8 *buf, *pos;
699699
700
- if (!error)
701
- error = rwnx_send_bcn_change(rwnx_hw, vif->vif_index, csa->elem.dma_addr,
700
+ RWNX_DBG(RWNX_FN_ENTRY_STR);
701
+
702
+ buf = kmalloc(csa->bcn.len, GFP_KERNEL);
703
+ if (!buf) {
704
+ printk ("%s buf fail\n", __func__);
705
+ return;
706
+ }
707
+ pos = buf;
708
+
709
+ memcpy(pos, csa->bcn.head, csa->bcn.head_len);
710
+ pos += csa->bcn.head_len;
711
+ *pos++ = WLAN_EID_TIM;
712
+ *pos++ = 4;
713
+ *pos++ = 0;
714
+ *pos++ = csa->bcn.dtim;
715
+ *pos++ = 0;
716
+ *pos++ = 0;
717
+ if (csa->bcn.tail) {
718
+ memcpy(pos, csa->bcn.tail, csa->bcn.tail_len);
719
+ pos += csa->bcn.tail_len;
720
+ }
721
+ if (csa->bcn.ies) {
722
+ memcpy(pos, csa->bcn.ies, csa->bcn.ies_len);
723
+ }
724
+
725
+ if (!error) {
726
+ error = rwnx_send_bcn(rwnx_hw, buf, vif->vif_index, csa->bcn.len);
727
+ if (error)
728
+ return;
729
+ error = rwnx_send_bcn_change(rwnx_hw, vif->vif_index, 0,
702730 csa->bcn.len, csa->bcn.head_len,
703731 csa->bcn.tim_len, NULL);
732
+ }
704733
705734 if (error) {
706735 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0))
....@@ -726,6 +755,7 @@
726755 }
727756 rwnx_del_csa(vif);
728757 }
758
+#endif
729759
730760 /**
731761 * rwnx_external_auth_enable - Enable external authentication on a vif
....@@ -949,9 +979,34 @@
949979 rwnx_hw->scan_request = NULL;
950980
951981 ret = rwnx_send_scanu_cancel_req(rwnx_hw, NULL);
982
+ mdelay(35);//make sure firmware take affect
952983 if (ret) {
953984 printk("scanu_cancel fail\n");
954985 return ret;
986
+ }
987
+ }
988
+
989
+ if (rwnx_hw->roc_elem && (rwnx_hw->roc_elem->wdev == &rwnx_vif->wdev)) {
990
+ printk(KERN_CRIT "%s clear roc\n", __func__);
991
+ /* Initialize RoC element pointer to NULL, indicate that RoC can be started */
992
+ kfree(rwnx_hw->roc_elem);
993
+ rwnx_hw->roc_elem = NULL;
994
+ }
995
+
996
+ rwnx_vif->up = false;
997
+
998
+ if (netif_carrier_ok(dev)) {
999
+ if (RWNX_VIF_TYPE(rwnx_vif) == NL80211_IFTYPE_STATION ||
1000
+ RWNX_VIF_TYPE(rwnx_vif) == NL80211_IFTYPE_P2P_CLIENT) {
1001
+ cfg80211_disconnected(dev, WLAN_REASON_DEAUTH_LEAVING,
1002
+ NULL, 0, true, GFP_ATOMIC);
1003
+ netif_tx_stop_all_queues(dev);
1004
+ netif_carrier_off(dev);
1005
+ udelay(1000);
1006
+ } else if (RWNX_VIF_TYPE(rwnx_vif) == NL80211_IFTYPE_AP_VLAN) {
1007
+ netif_carrier_off(dev);
1008
+ } else {
1009
+ netdev_warn(dev, "AP not stopped when disabling interface");
9551010 }
9561011 }
9571012
....@@ -960,7 +1015,8 @@
9601015 if (usbdev->state != USB_DOWN_ST)
9611016 rwnx_send_remove_if (rwnx_hw, rwnx_vif->vif_index, false);
9621017 }
963
-#elif defined(AICWF_SDIO_SUPPORT)
1018
+#endif
1019
+#if defined(AICWF_SDIO_SUPPORT)
9641020 bus_if = dev_get_drvdata(rwnx_hw->dev);
9651021 if (bus_if) {
9661022 sdiodev = bus_if->bus_priv.sdio;
....@@ -969,35 +1025,11 @@
9691025 if (sdiodev->bus_if->state != BUS_DOWN_ST)
9701026 rwnx_send_remove_if (rwnx_hw, rwnx_vif->vif_index, false);
9711027 }
972
-#else
9731028 #endif
974
-
975
- if (rwnx_hw->roc_elem && (rwnx_hw->roc_elem->wdev == &rwnx_vif->wdev)) {
976
- printk(KERN_CRIT "%s clear roc\n", __func__);
977
- /* Initialize RoC element pointer to NULL, indicate that RoC can be started */
978
- rwnx_hw->roc_elem = NULL;
979
- }
980
-
9811029 /* Ensure that we won't process disconnect ind */
9821030 spin_lock_bh(&rwnx_hw->cb_lock);
9831031
984
- rwnx_vif->up = false;
985
- if (netif_carrier_ok(dev)) {
986
- if (RWNX_VIF_TYPE(rwnx_vif) == NL80211_IFTYPE_STATION ||
987
- RWNX_VIF_TYPE(rwnx_vif) == NL80211_IFTYPE_P2P_CLIENT) {
988
- cfg80211_disconnected(dev, WLAN_REASON_DEAUTH_LEAVING,
989
- NULL, 0, true, GFP_ATOMIC);
990
- netif_tx_stop_all_queues(dev);
991
- netif_carrier_off(dev);
992
- } else if (RWNX_VIF_TYPE(rwnx_vif) == NL80211_IFTYPE_AP_VLAN) {
993
- netif_carrier_off(dev);
994
- } else {
995
- netdev_warn(dev, "AP not stopped when disabling interface");
996
- }
997
- }
998
-
9991032 rwnx_hw->vif_table[rwnx_vif->vif_index] = NULL;
1000
- spin_unlock_bh(&rwnx_hw->cb_lock);
10011033
10021034 rwnx_chanctx_unlink(rwnx_vif);
10031035
....@@ -1005,6 +1037,8 @@
10051037 rwnx_hw->monitor_vif = RWNX_INVALID_VIF;
10061038
10071039 rwnx_hw->vif_started--;
1040
+ spin_unlock_bh(&rwnx_hw->cb_lock);
1041
+
10081042 if (rwnx_hw->vif_started == 0) {
10091043 /* This also lets both ipc sides remain in sync before resetting */
10101044 #if 0
....@@ -1041,17 +1075,31 @@
10411075 enum {
10421076 SET_TX,
10431077 SET_TXSTOP,
1078
+ SET_TXTONE,
10441079 SET_RX,
10451080 GET_RX_RESULT,
10461081 SET_RXSTOP,
10471082 SET_RXMETER,
1048
- SET_FREQ_CAL,
1049
- GET_EFUSE,
10501083 SET_POWER,
10511084 SET_XTAL_CAP,
10521085 SET_XTAL_CAP_FINE,
1086
+ GET_EFUSE,
1087
+ SET_FREQ_CAL,
1088
+ SET_FREQ_CAL_FINE,
1089
+ GET_FREQ_CAL,
10531090 SET_MAC_ADDR,
10541091 GET_MAC_ADDR,
1092
+ SET_BT_MAC_ADDR,
1093
+ GET_BT_MAC_ADDR,
1094
+ SET_VENDOR_INFO,
1095
+ GET_VENDOR_INFO,
1096
+ RDWR_PWRMM,
1097
+ RDWR_PWRIDX,
1098
+ RDWR_PWROFST,
1099
+ RDWR_DRVIBIT,
1100
+ RDWR_EFUSE_PWROFST,
1101
+ RDWR_EFUSE_DRVIBIT,
1102
+ SET_PAPR,
10551103 SETSUSPENDMODE,
10561104 };
10571105
....@@ -1078,40 +1126,6 @@
10781126 #endif
10791127
10801128 #define CMD_MAXARGS 10
1081
-
1082
-#if 0
1083
-#define isblank(c) ((c) == ' ' || (c) == '\t')
1084
-#define isascii(c) (((unsigned char)(c)) <= 0x7F)
1085
-
1086
-static int isdigit(unsigned char c)
1087
-{
1088
- return ((c >= '0') && (c <= '9'));
1089
-}
1090
-
1091
-static int isxdigit(unsigned char c)
1092
-{
1093
- if ((c >= '0') && (c <= '9'))
1094
- return 1;
1095
- if ((c >= 'a') && (c <= 'f'))
1096
- return 1;
1097
- if ((c >= 'A') && (c <= 'F'))
1098
- return 1;
1099
- return 0;
1100
-}
1101
-
1102
-static int islower(unsigned char c)
1103
-{
1104
- return ((c >= 'a') && (c <= 'z'));
1105
-}
1106
-
1107
-static unsigned char toupper(unsigned char c)
1108
-{
1109
- if (islower(c))
1110
- c -= 'a' - 'A';
1111
- return c;
1112
-}
1113
-#endif
1114
-
11151129
11161130 static int parse_line (char *line, char *argv[])
11171131 {
....@@ -1216,11 +1230,10 @@
12161230 u8_l pwr;
12171231 u8_l xtal_cap;
12181232 u8_l xtal_cap_fine;
1233
+ u8_l vendor_info;
12191234 u8_l setsusp_mode;
12201235 #endif
12211236 int ret = 0;
1222
-
1223
- RWNX_DBG(RWNX_FN_ENTRY_STR);
12241237
12251238 argc = parse_line(command, argv);
12261239 if (argc == 0) {
....@@ -1266,6 +1279,30 @@
12661279 #ifdef AICWF_USB_SUPPORT
12671280 rwnx_send_rftest_req(g_rwnx_plat->usbdev->rwnx_hw, SET_TXSTOP, 0, NULL, NULL);
12681281 #endif
1282
+ } else if (strcasecmp(argv[0], "SET_TXTONE") == 0) {
1283
+ printk("set_tx_tone,argc:%d\n", argc);
1284
+ if ((argc == 2) || (argc == 3)) {
1285
+ u8_l func, buf[2];
1286
+ s8_l freq;
1287
+ printk("argv 1:%s\n", argv[1]);
1288
+ func = (u8_l)command_strtoul(argv[1], NULL, 16);
1289
+ if (argc == 3) {
1290
+ printk("argv 2:%s\n", argv[2]);
1291
+ freq = (u8_l)command_strtoul(argv[2], NULL, 10);
1292
+ } else {
1293
+ freq = 0;
1294
+ }
1295
+ buf[0] = func;
1296
+ buf[1] = (u8_l)freq;
1297
+ #ifdef AICWF_SDIO_SUPPORT
1298
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, SET_TXTONE, argc - 1, buf, NULL);
1299
+ #endif
1300
+ #ifdef AICWF_USB_SUPPORT
1301
+ rwnx_send_rftest_req(g_rwnx_plat->usbdev->rwnx_hw, SET_TXTONE, argc - 1, buf, NULL);
1302
+ #endif
1303
+ } else {
1304
+ printk("wrong args\n");
1305
+ }
12691306 } else if (strcasecmp(argv[0], "SET_RX") == 0) {
12701307 printk("set_rx\n");
12711308 if (argc < 3) {
....@@ -1361,69 +1398,258 @@
13611398 #endif
13621399 memcpy(command, &cfm.rftest_result[0], 4);
13631400 bytes_written = 4;
1364
- } else if (strcasecmp(argv[0], "SET_XTAL_CAP_FINE") == 0) {
1365
- printk("set_xtal_cap_fine\n");
1366
- if (argc < 2) {
1367
- printk("wrong param\n");
1368
- break;
1369
- }
1370
- xtal_cap_fine = command_strtoul(argv[1], NULL, 10);
1371
- printk("xtal_cap_fine =%x\r\n", xtal_cap_fine);
1372
- #ifdef AICWF_SDIO_SUPPORT
1373
- rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, SET_XTAL_CAP_FINE, sizeof(xtal_cap_fine), (u8_l *)&xtal_cap_fine, &cfm);
1374
- #endif
1375
- #ifdef AICWF_USB_SUPPORT
1376
- rwnx_send_rftest_req(g_rwnx_plat->usbdev->rwnx_hw, SET_XTAL_CAP_FINE, sizeof(xtal_cap_fine), (u8_l *)&xtal_cap_fine, &cfm);
1377
- #endif
1378
- memcpy(command, &cfm.rftest_result[0], 4);
1379
- bytes_written = 4;
1380
- } else if (strcasecmp(argv[0], "SET_MAC_ADDR") == 0) {
1381
- printk("set_mac_addr\n");
1382
- if (argc < 7) {
1383
- printk("wrong param\n");
1384
- break;
1385
- }
1386
- mac_addr[5] = command_strtoul(argv[1], NULL, 16);
1387
- mac_addr[4] = command_strtoul(argv[2], NULL, 16);
1388
- mac_addr[3] = command_strtoul(argv[3], NULL, 16);
1389
- mac_addr[2] = command_strtoul(argv[4], NULL, 16);
1390
- mac_addr[1] = command_strtoul(argv[5], NULL, 16);
1391
- mac_addr[0] = command_strtoul(argv[6], NULL, 16);
1392
- printk("set macaddr:%x,%x,%x,%x,%x,%x\n", mac_addr[5], mac_addr[4], mac_addr[3], mac_addr[2], mac_addr[1], mac_addr[0]);
1393
- #ifdef AICWF_SDIO_SUPPORT
1394
- rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, SET_MAC_ADDR, sizeof(mac_addr), (u8_l *)&mac_addr, NULL);
1395
- #endif
1396
- #ifdef AICWF_USB_SUPPORT
1397
- rwnx_send_rftest_req(g_rwnx_plat->usbdev->rwnx_hw, SET_MAC_ADDR, sizeof(mac_addr), (u8_l *)&mac_addr, NULL);
1398
- #endif
1399
- } else if (strcasecmp(argv[0], "GET_MAC_ADDR") == 0) {
1400
- printk("get mac addr\n");
1401
- #ifdef AICWF_SDIO_SUPPORT
1402
- rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, GET_MAC_ADDR, 0, NULL, &cfm);
1403
- #endif
1404
- #ifdef AICWF_USB_SUPPORT
1405
- rwnx_send_rftest_req(g_rwnx_plat->usbdev->rwnx_hw, GET_MAC_ADDR, 0, NULL, &cfm);
1406
- #endif
1407
- memcpy(command, &cfm.rftest_result[0], 8);
1408
- bytes_written = 8;
1409
- printk("0x%x,0x%x\n", cfm.rftest_result[0], cfm.rftest_result[1]);
1410
- } else if (strcasecmp(argv[0], "SETSUSPENDMODE") == 0) {
1411
- #ifdef AICWF_SDIO_SUPPORT
1412
- setsusp_mode = command_strtoul(argv[1], NULL, 10);
1413
- rwnx_send_me_set_lp_level(g_rwnx_plat->sdiodev->rwnx_hw, setsusp_mode);
1414
- if (setsusp_mode == 1) {
1415
- aicwf_sdio_pwr_stctl(g_rwnx_plat->sdiodev, SDIO_SLEEP_ST);
1416
-
1417
- ret = aicwf_sdio_writeb(g_rwnx_plat->sdiodev, SDIOWIFI_WAKEUP_REG, 2);
1418
- if (ret < 0) {
1419
- sdio_err("reg:%d write failed!\n", SDIOWIFI_WAKEUP_REG);
1401
+ } else if (strcasecmp(argv[0], "SET_XTAL_CAP_FINE") == 0) {
1402
+ printk("set_xtal_cap_fine\n");
1403
+ if (argc < 2) {
1404
+ printk("wrong param\n");
1405
+ break;
14201406 }
1421
- }
1422
- printk("set suspend mode %d\n", setsusp_mode);
1407
+ xtal_cap_fine = command_strtoul(argv[1], NULL, 10);
1408
+ printk("xtal_cap_fine =%x\r\n", xtal_cap_fine);
1409
+ #ifdef AICWF_SDIO_SUPPORT
1410
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, SET_XTAL_CAP_FINE, sizeof(xtal_cap_fine), (u8_l *)&xtal_cap_fine, &cfm);
14231411 #endif
1424
- } else {
1425
- printk("wrong cmd:%s in %s\n", cmd, __func__);
1426
- }
1412
+ #ifdef AICWF_USB_SUPPORT
1413
+ rwnx_send_rftest_req(g_rwnx_plat->usbdev->rwnx_hw, SET_XTAL_CAP_FINE, sizeof(xtal_cap_fine), (u8_l *)&xtal_cap_fine, &cfm);
1414
+ #endif
1415
+ memcpy(command, &cfm.rftest_result[0], 4);
1416
+ bytes_written = 4;
1417
+ } else if (strcasecmp(argv[0], "SET_MAC_ADDR") == 0) {
1418
+ printk("set_mac_addr\n");
1419
+ if (argc < 7) {
1420
+ printk("wrong param\n");
1421
+ break;
1422
+ }
1423
+ mac_addr[5] = command_strtoul(argv[1], NULL, 16);
1424
+ mac_addr[4] = command_strtoul(argv[2], NULL, 16);
1425
+ mac_addr[3] = command_strtoul(argv[3], NULL, 16);
1426
+ mac_addr[2] = command_strtoul(argv[4], NULL, 16);
1427
+ mac_addr[1] = command_strtoul(argv[5], NULL, 16);
1428
+ mac_addr[0] = command_strtoul(argv[6], NULL, 16);
1429
+ printk("set macaddr:%x,%x,%x,%x,%x,%x\n", mac_addr[5], mac_addr[4], mac_addr[3], mac_addr[2], mac_addr[1], mac_addr[0]);
1430
+ #ifdef AICWF_SDIO_SUPPORT
1431
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, SET_MAC_ADDR, sizeof(mac_addr), (u8_l *)&mac_addr, NULL);
1432
+ #endif
1433
+ #ifdef AICWF_USB_SUPPORT
1434
+ rwnx_send_rftest_req(g_rwnx_plat->usbdev->rwnx_hw, SET_MAC_ADDR, sizeof(mac_addr), (u8_l *)&mac_addr, NULL);
1435
+ #endif
1436
+ } else if (strcasecmp(argv[0], "GET_MAC_ADDR") == 0) {
1437
+ printk("get mac addr\n");
1438
+ #ifdef AICWF_SDIO_SUPPORT
1439
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, GET_MAC_ADDR, 0, NULL, &cfm);
1440
+ #endif
1441
+ #ifdef AICWF_USB_SUPPORT
1442
+ rwnx_send_rftest_req(g_rwnx_plat->usbdev->rwnx_hw, GET_MAC_ADDR, 0, NULL, &cfm);
1443
+ #endif
1444
+ memcpy(command, &cfm.rftest_result[0], 8);
1445
+ bytes_written = 8;
1446
+ printk("0x%x,0x%x\n", cfm.rftest_result[0], cfm.rftest_result[1]);
1447
+ } else if (strcasecmp(argv[0], "SET_VENDOR_INFO") == 0) {
1448
+ vendor_info = command_strtoul(argv[1], NULL, 16);
1449
+ printk("set vendor info:%x\n", vendor_info);
1450
+ #ifdef AICWF_SDIO_SUPPORT
1451
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, SET_VENDOR_INFO, 1, &vendor_info, &cfm);
1452
+ #endif
1453
+ #ifdef AICWF_USB_SUPPORT
1454
+ rwnx_send_rftest_req(g_rwnx_plat->usbdev->rwnx_hw, SET_VENDOR_INFO, 1, &vendor_info, &cfm);
1455
+ #endif
1456
+ memcpy(command, &cfm.rftest_result[0], 1);
1457
+ bytes_written = 1;
1458
+ printk("0x%x\n", cfm.rftest_result[0]);
1459
+ } else if (strcasecmp(argv[0], "GET_VENDOR_INFO") == 0) {
1460
+ printk("get vendor info\n");
1461
+ #ifdef AICWF_SDIO_SUPPORT
1462
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, GET_VENDOR_INFO, 0, NULL, &cfm);
1463
+ #endif
1464
+ #ifdef AICWF_USB_SUPPORT
1465
+ rwnx_send_rftest_req(g_rwnx_plat->usbdev->rwnx_hw, GET_VENDOR_INFO, 0, NULL, &cfm);
1466
+ #endif
1467
+ memcpy(command, &cfm.rftest_result[0], 1);
1468
+ bytes_written = 1;
1469
+ printk("0x%x\n", cfm.rftest_result[0]);
1470
+ } else if (strcasecmp(argv[0], "GET_FREQ_CAL") == 0) {
1471
+ printk("get freq cal\n");
1472
+ #ifdef AICWF_SDIO_SUPPORT
1473
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, GET_FREQ_CAL, 0, NULL, &cfm);
1474
+ #endif
1475
+ memcpy(command, &cfm.rftest_result[0], 4);
1476
+ bytes_written = 4;
1477
+ printk("cap=0x%x, cap_fine=0x%x\n", cfm.rftest_result[0] & 0x0000ffff, (cfm.rftest_result[0] >> 16) & 0x0000ffff);
1478
+ } else if (strcasecmp(argv[0], "RDWR_PWRMM") == 0) {
1479
+ printk("read/write txpwr manul mode\n");
1480
+ if (argc <= 1) { // read cur
1481
+ #ifdef AICWF_SDIO_SUPPORT
1482
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, RDWR_PWRMM, 0, NULL, &cfm);
1483
+ #endif
1484
+ } else { // write
1485
+ u8_l pwrmm = (u8_l)command_strtoul(argv[1], NULL, 16);
1486
+ pwrmm = (pwrmm) ? 1 : 0;
1487
+ printk("set pwrmm = %x\r\n", pwrmm);
1488
+ #ifdef AICWF_SDIO_SUPPORT
1489
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, RDWR_PWRMM, sizeof(pwrmm), (u8_l *)&pwrmm, &cfm);
1490
+ #endif
1491
+ }
1492
+ memcpy(command, &cfm.rftest_result[0], 4);
1493
+ bytes_written = 4;
1494
+ } else if (strcasecmp(argv[0], "RDWR_PWRIDX") == 0) {
1495
+ u8_l func = 0;
1496
+ printk("read/write txpwr index\n");
1497
+ if (argc > 1) {
1498
+ func = (u8_l)command_strtoul(argv[1], NULL, 16);
1499
+ }
1500
+ if (func == 0) { // read cur
1501
+ #ifdef AICWF_SDIO_SUPPORT
1502
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, RDWR_PWRIDX, 0, NULL, &cfm);
1503
+ #endif
1504
+ } else if (func <= 2) { // write 2.4g/5g pwr idx
1505
+ if (argc > 3) {
1506
+ u8_l type = (u8_l)command_strtoul(argv[2], NULL, 16);
1507
+ u8_l pwridx = (u8_l)command_strtoul(argv[3], NULL, 10);
1508
+ u8_l buf[3] = {func, type, pwridx};
1509
+ printk("set pwridx:[%x][%x]=%x\r\n", func, type, pwridx);
1510
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, RDWR_PWRIDX, sizeof(buf), buf, &cfm);
1511
+ } else {
1512
+ printk("wrong args\n");
1513
+ }
1514
+ } else {
1515
+ printk("wrong func: %x\n", func);
1516
+ }
1517
+ memcpy(command, &cfm.rftest_result[0], 7);
1518
+ bytes_written = 7;
1519
+ } else if (strcasecmp(argv[0], "RDWR_PWROFST") == 0) {
1520
+ u8_l func = 0;
1521
+ printk("read/write txpwr offset\n");
1522
+ if (argc > 1) {
1523
+ func = (u8_l)command_strtoul(argv[1], NULL, 16);
1524
+ }
1525
+ if (func == 0) { // read cur
1526
+ #ifdef AICWF_SDIO_SUPPORT
1527
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, RDWR_PWROFST, 0, NULL, &cfm);
1528
+ #endif
1529
+ } else if (func <= 2) { // write 2.4g/5g pwr ofst
1530
+ if (argc > 3) {
1531
+ u8_l chgrp = (u8_l)command_strtoul(argv[2], NULL, 16);
1532
+ s8_l pwrofst = (u8_l)command_strtoul(argv[3], NULL, 10);
1533
+ u8_l buf[3] = {func, chgrp, (u8_l)pwrofst};
1534
+ printk("set pwrofst:[%x][%x]=%d\r\n", func, chgrp, pwrofst);
1535
+ #ifdef AICWF_SDIO_SUPPORT
1536
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, RDWR_PWROFST, sizeof(buf), buf, &cfm);
1537
+ #endif
1538
+ } else {
1539
+ printk("wrong args\n");
1540
+ }
1541
+ } else {
1542
+ printk("wrong func: %x\n", func);
1543
+ }
1544
+ memcpy(command, &cfm.rftest_result[0], 7);
1545
+ bytes_written = 7;
1546
+ } else if (strcasecmp(argv[0], "RDWR_DRVIBIT") == 0) {
1547
+ u8_l func = 0;
1548
+ printk("read/write pa drv_ibit\n");
1549
+ if (argc > 1) {
1550
+ func = (u8_l)command_strtoul(argv[1], NULL, 16);
1551
+ }
1552
+ if (func == 0) { // read cur
1553
+ #ifdef AICWF_SDIO_SUPPORT
1554
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, RDWR_DRVIBIT, 0, NULL, &cfm);
1555
+ #endif
1556
+ } else if (func == 1) { // write 2.4g pa drv_ibit
1557
+ if (argc > 2) {
1558
+ u8_l ibit = (u8_l)command_strtoul(argv[2], NULL, 16);
1559
+ u8_l buf[2] = {func, ibit};
1560
+ printk("set drvibit:[%x]=%x\r\n", func, ibit);
1561
+ #ifdef AICWF_SDIO_SUPPORT
1562
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, RDWR_DRVIBIT, sizeof(buf), buf, &cfm);
1563
+ #endif
1564
+ } else {
1565
+ printk("wrong args\n");
1566
+ }
1567
+ } else {
1568
+ printk("wrong func: %x\n", func);
1569
+ }
1570
+ memcpy(command, &cfm.rftest_result[0], 16);
1571
+ bytes_written = 16;
1572
+ } else if (strcasecmp(argv[0], "RDWR_EFUSE_PWROFST") == 0) {
1573
+ u8_l func = 0;
1574
+ printk("read/write txpwr offset into efuse\n");
1575
+ if (argc > 1) {
1576
+ func = (u8_l)command_strtoul(argv[1], NULL, 16);
1577
+ }
1578
+ if (func == 0) { // read cur
1579
+ #ifdef AICWF_SDIO_SUPPORT
1580
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, RDWR_EFUSE_PWROFST, 0, NULL, &cfm);
1581
+ #endif
1582
+ } else if (func <= 2) { // write 2.4g/5g pwr ofst
1583
+ if (argc > 3) {
1584
+ u8_l chgrp = (u8_l)command_strtoul(argv[2], NULL, 16);
1585
+ s8_l pwrofst = (u8_l)command_strtoul(argv[3], NULL, 10);
1586
+ u8_l buf[3] = {func, chgrp, (u8_l)pwrofst};
1587
+ printk("set efuse pwrofst:[%x][%x]=%d\r\n", func, chgrp, pwrofst);
1588
+ #ifdef AICWF_SDIO_SUPPORT
1589
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, RDWR_EFUSE_PWROFST, sizeof(buf), buf, &cfm);
1590
+ #endif
1591
+ } else {
1592
+ printk("wrong args\n");
1593
+ }
1594
+ } else {
1595
+ printk("wrong func: %x\n", func);
1596
+ }
1597
+ memcpy(command, &cfm.rftest_result[0], 7);
1598
+ bytes_written = 7;
1599
+ } else if (strcasecmp(argv[0], "RDWR_EFUSE_DRVIBIT") == 0) {
1600
+ u8_l func = 0;
1601
+ printk("read/write pa drv_ibit into efuse\n");
1602
+ if (argc > 1) {
1603
+ func = (u8_l)command_strtoul(argv[1], NULL, 16);
1604
+ }
1605
+ if (func == 0) { // read cur
1606
+ #ifdef AICWF_SDIO_SUPPORT
1607
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, RDWR_EFUSE_DRVIBIT, 0, NULL, &cfm);
1608
+ #endif
1609
+ } else if (func == 1) { // write 2.4g pa drv_ibit
1610
+ if (argc > 2) {
1611
+ u8_l ibit = (u8_l)command_strtoul(argv[2], NULL, 16);
1612
+ u8_l buf[2] = {func, ibit};
1613
+ printk("set efuse drvibit:[%x]=%x\r\n", func, ibit);
1614
+ #ifdef AICWF_SDIO_SUPPORT
1615
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, RDWR_EFUSE_DRVIBIT, sizeof(buf), buf, &cfm);
1616
+ #endif
1617
+ } else {
1618
+ printk("wrong args\n");
1619
+ }
1620
+ } else {
1621
+ printk("wrong func: %x\n", func);
1622
+ }
1623
+ memcpy(command, &cfm.rftest_result[0], 4);
1624
+ bytes_written = 4;
1625
+ } else if (strcasecmp(argv[0], "SET_PAPR") == 0) {
1626
+ printk("set papr\n");
1627
+ if (argc > 1) {
1628
+ u8_l func = (u8_l) command_strtoul(argv[1], NULL, 10);
1629
+ printk("papr %d\r\n", func);
1630
+ #ifdef AICWF_SDIO_SUPPORT
1631
+ rwnx_send_rftest_req(g_rwnx_plat->sdiodev->rwnx_hw, SET_PAPR, sizeof(func), &func, NULL);
1632
+ #endif
1633
+ } else {
1634
+ printk("wrong args\n");
1635
+ }
1636
+ } else if (strcasecmp(argv[0], "SETSUSPENDMODE") == 0) {
1637
+ #ifdef AICWF_SDIO_SUPPORT
1638
+ setsusp_mode = command_strtoul(argv[1], NULL, 10);
1639
+ rwnx_send_me_set_lp_level(g_rwnx_plat->sdiodev->rwnx_hw, setsusp_mode);
1640
+ if (setsusp_mode == 1) {
1641
+ aicwf_sdio_pwr_stctl(g_rwnx_plat->sdiodev, SDIO_SLEEP_ST);
1642
+
1643
+ ret = aicwf_sdio_writeb(g_rwnx_plat->sdiodev, SDIOWIFI_WAKEUP_REG, 2);
1644
+ if (ret < 0) {
1645
+ sdio_err("reg:%d write failed!\n", SDIOWIFI_WAKEUP_REG);
1646
+ }
1647
+ }
1648
+ printk("set suspend mode %d\n", setsusp_mode);
1649
+ #endif
1650
+ } else {
1651
+ printk("wrong cmd:%s in %s\n", cmd, __func__);
1652
+ }
14271653 #endif
14281654 } while (0);
14291655 kfree(cmd);
....@@ -1441,8 +1667,6 @@
14411667 int bytes_written = 0;
14421668 android_wifi_priv_cmd priv_cmd;
14431669 int buf_size = 0;
1444
-
1445
- RWNX_DBG(RWNX_FN_ENTRY_STR);
14461670
14471671 ///todo: add our lock
14481672 //net_os_wake_lock(net);
....@@ -1502,9 +1726,6 @@
15021726
15031727 /* outputs */
15041728 printk("%s: Android private cmd \"%s\" on %s\n", __FUNCTION__, command, ifr->ifr_name);
1505
- printk("cmd = %d\n", cmd);
1506
- printk("buf_size=%d\n", buf_size);
1507
-
15081729
15091730 bytes_written = handle_private_cmd(net, command, priv_cmd.total_len);
15101731 if (bytes_written >= 0) {
....@@ -1552,7 +1773,6 @@
15521773 printk("IOCTL SIOCDEVPRIVATE\n");
15531774 break;
15541775 case (SIOCDEVPRIVATE+1):
1555
- printk("IOCTL PRIVATE\n");
15561776 android_priv_cmd(net, req, cmd);
15571777 break;
15581778 default:
....@@ -1858,15 +2078,17 @@
18582078 atomic_set(&rwnx_hw->p2p_alive_timer_count, 0);
18592079
18602080 rwnx_hw->is_p2p_alive = 0;
1861
- rwnx_send_remove_if (rwnx_hw, rwnx_vif->vif_index, true);
2081
+ if (rwnx_vif->up) {
2082
+ rwnx_send_remove_if (rwnx_hw, rwnx_vif->vif_index, true);
18622083
1863
- /* Ensure that we won't process disconnect ind */
1864
- spin_lock_bh(&rwnx_hw->cb_lock);
2084
+ /* Ensure that we won't process disconnect ind */
2085
+ spin_lock_bh(&rwnx_hw->cb_lock);
18652086
1866
- rwnx_vif->up = false;
1867
- rwnx_hw->vif_table[rwnx_vif->vif_index] = NULL;
1868
- rwnx_hw->vif_started--;
1869
- spin_unlock_bh(&rwnx_hw->cb_lock);
2087
+ rwnx_vif->up = false;
2088
+ rwnx_hw->vif_table[rwnx_vif->vif_index] = NULL;
2089
+ rwnx_hw->vif_started--;
2090
+ spin_unlock_bh(&rwnx_hw->cb_lock);
2091
+ }
18702092 }
18712093
18722094
....@@ -2155,7 +2377,6 @@
21552377 if (type == NL80211_IFTYPE_P2P_CLIENT || type == NL80211_IFTYPE_P2P_GO)
21562378 p2p = true;
21572379
2158
- if (type == NL80211_IFTYPE_AP || type == NL80211_IFTYPE_P2P_GO) {
21592380 if (vif->up) {
21602381 /* Abort scan request on the vif */
21612382 if (vif->rwnx_hw->scan_request &&
....@@ -2198,7 +2419,6 @@
21982419 vif->vif_index = add_if_cfm.inst_nbr;
21992420 vif->rwnx_hw->vif_table[add_if_cfm.inst_nbr] = vif;
22002421 spin_unlock_bh(&vif->rwnx_hw->cb_lock);
2201
- }
22022422 }
22032423 return 0;
22042424 }
....@@ -2215,33 +2435,6 @@
22152435
22162436 static void rwnx_cfgp2p_stop_p2p_device(struct wiphy *wiphy, struct wireless_dev *wdev)
22172437 {
2218
-#if 0
2219
- int ret = 0;
2220
- struct bcm_cfg80211 *cfg = wiphy_priv(wiphy);
2221
-
2222
- if (!cfg)
2223
- return;
2224
-
2225
- CFGP2P_DBG(("Enter\n"));
2226
-
2227
- ret = wl_cfg80211_scan_stop(cfg, wdev);
2228
- if (unlikely(ret < 0)) {
2229
- CFGP2P_ERR(("P2P scan stop failed, ret=%d\n", ret));
2230
- }
2231
-
2232
- if (!cfg->p2p)
2233
- return;
2234
-
2235
- /* Cancel any on-going listen */
2236
- wl_cfgp2p_cancel_listen(cfg, bcmcfg_to_prmry_ndev(cfg), wdev, TRUE);
2237
-
2238
- ret = wl_cfgp2p_disable_discovery(cfg);
2239
- if (unlikely(ret < 0)) {
2240
- CFGP2P_ERR(("P2P disable discovery failed, ret=%d\n", ret));
2241
- }
2242
-
2243
- p2p_on(cfg) = false;
2244
-#endif
22452438 int ret = 0;
22462439 struct rwnx_hw *rwnx_hw = wiphy_priv(wiphy);
22472440 struct rwnx_vif *rwnx_vif = container_of(wdev, struct rwnx_vif, wdev);
....@@ -2262,6 +2455,25 @@
22622455 if (ret)
22632456 printk("scanu_cancel fail\n");
22642457 }
2458
+
2459
+ if (rwnx_vif == rwnx_hw->p2p_dev_vif) {
2460
+ rwnx_hw->is_p2p_alive = 0;
2461
+ if (timer_pending(&rwnx_hw->p2p_alive_timer)) {
2462
+ del_timer_sync(&rwnx_hw->p2p_alive_timer);
2463
+ }
2464
+
2465
+ if (rwnx_vif->up) {
2466
+ rwnx_send_remove_if(rwnx_hw, rwnx_vif->vif_index, true);
2467
+ /* Ensure that we won't process disconnect ind */
2468
+ spin_lock_bh(&rwnx_hw->cb_lock);
2469
+ rwnx_vif->up = false;
2470
+ rwnx_hw->vif_table[rwnx_vif->vif_index] = NULL;
2471
+ rwnx_hw->vif_started--;
2472
+ spin_unlock_bh(&rwnx_hw->cb_lock);
2473
+ }
2474
+
2475
+ }
2476
+
22652477 printk("Exit. P2P interface stopped\n");
22662478
22672479 return;
....@@ -2477,17 +2689,37 @@
24772689 struct rwnx_vif *rwnx_vif = netdev_priv(dev);
24782690 struct sm_connect_cfm sm_connect_cfm;
24792691 int error = 0;
2692
+ int is_wep = ((sme->crypto.cipher_group == WLAN_CIPHER_SUITE_WEP40) ||
2693
+ (sme->crypto.cipher_group == WLAN_CIPHER_SUITE_WEP104) ||
2694
+ (sme->crypto.ciphers_pairwise[0] == WLAN_CIPHER_SUITE_WEP40) ||
2695
+ (sme->crypto.ciphers_pairwise[0] == WLAN_CIPHER_SUITE_WEP104));
24802696
24812697 RWNX_DBG(RWNX_FN_ENTRY_STR);
24822698
2483
- if (rwnx_vif->wep_enabled && rwnx_vif->wep_auth_err && (sme->auth_type == rwnx_vif->last_auth_type)) {
2484
- if (sme->auth_type == NL80211_AUTHTYPE_SHARED_KEY) {
2485
- sme->auth_type = NL80211_AUTHTYPE_OPEN_SYSTEM;
2486
- printk("start connect, auth_type changed, shared --> open\n");
2487
- }
2488
- if (sme->auth_type == NL80211_AUTHTYPE_OPEN_SYSTEM) {
2489
- sme->auth_type = NL80211_AUTHTYPE_SHARED_KEY;
2490
- printk("start connect, auth_type changed, open --> shared\n");
2699
+ if (is_wep) {
2700
+ if (sme->auth_type == NL80211_AUTHTYPE_AUTOMATIC) {
2701
+ if (rwnx_vif->wep_enabled && rwnx_vif->wep_auth_err) {
2702
+ if (rwnx_vif->last_auth_type == NL80211_AUTHTYPE_SHARED_KEY)
2703
+ sme->auth_type = NL80211_AUTHTYPE_OPEN_SYSTEM;
2704
+ else
2705
+ sme->auth_type = NL80211_AUTHTYPE_SHARED_KEY;
2706
+ } else {
2707
+ if ((rwnx_vif->wep_enabled && !rwnx_vif->wep_auth_err))
2708
+ sme->auth_type = rwnx_vif->last_auth_type;
2709
+ else
2710
+ sme->auth_type = NL80211_AUTHTYPE_SHARED_KEY;
2711
+ }
2712
+ printk("auto: use sme->auth_type = %d\r\n", sme->auth_type);
2713
+ } else {
2714
+ if (rwnx_vif->wep_enabled && rwnx_vif->wep_auth_err && (sme->auth_type == rwnx_vif->last_auth_type)) {
2715
+ if (sme->auth_type == NL80211_AUTHTYPE_SHARED_KEY) {
2716
+ sme->auth_type = NL80211_AUTHTYPE_OPEN_SYSTEM;
2717
+ printk("start connect, auth_type changed, shared --> open\n");
2718
+ } else if (sme->auth_type == NL80211_AUTHTYPE_OPEN_SYSTEM) {
2719
+ sme->auth_type = NL80211_AUTHTYPE_SHARED_KEY;
2720
+ printk("start connect, auth_type changed, open --> shared\n");
2721
+ }
2722
+ }
24912723 }
24922724 }
24932725
....@@ -2501,7 +2733,7 @@
25012733 key_params.cipher = sme->crypto.cipher_group;
25022734 rwnx_cfg80211_add_key(wiphy, dev, sme->key_idx, false, NULL, &key_params);
25032735 }
2504
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0)
2736
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0) || defined(CONFIG_WPA3_FOR_OLD_KERNEL)
25052737 else if ((sme->auth_type == NL80211_AUTHTYPE_SAE) &&
25062738 !(sme->flags & CONNECT_REQ_EXTERNAL_AUTH_SUPPORT)) {
25072739 netdev_err(dev, "Doesn't support SAE without external authentication\n");
....@@ -2557,7 +2789,7 @@
25572789 return rwnx_send_sm_disconnect_req(rwnx_hw, rwnx_vif, reason_code);
25582790 }
25592791
2560
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0)
2792
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0) || defined(CONFIG_WPA3_FOR_OLD_KERNEL)
25612793 /**
25622794 * @external_auth: indicates result of offloaded authentication processing from
25632795 * user space
....@@ -2638,9 +2870,9 @@
26382870 sta->uapsd_tids &= ~(1 << tid);
26392871 }
26402872 memcpy(sta->mac_addr, mac, ETH_ALEN);
2641
- #if 0
2873
+#ifdef CONFIG_DEBUG_FS
26422874 rwnx_dbgfs_register_rc_stat(rwnx_hw, sta);
2643
- #endif
2875
+#endif
26442876
26452877 /* Ensure that we won't process PS change or channel switch ind*/
26462878 spin_lock_bh(&rwnx_hw->cb_lock);
....@@ -2657,7 +2889,7 @@
26572889 memset(&sinfo, 0, sizeof(struct station_info));
26582890 sinfo.assoc_req_ies = NULL;
26592891 sinfo.assoc_req_ies_len = 0;
2660
- #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 4, 83)
2892
+ #if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)
26612893 sinfo.filled |= STATION_INFO_ASSOC_REQ_IES;
26622894 #endif
26632895 cfg80211_new_sta(rwnx_vif->ndev, sta->mac_addr, &sinfo, GFP_KERNEL);
....@@ -2789,10 +3021,10 @@
27893021 #endif /* CONFIG_RWNX_BFMER */
27903022
27913023 list_del(&cur->list);
2792
-#if 0
3024
+#ifdef CONFIG_DEBUG_FS
27933025 rwnx_dbgfs_unregister_rc_stat(rwnx_hw, cur);
27943026 #endif
2795
- found++;
3027
+ found = true;
27963028 break;
27973029 }
27983030 }
....@@ -2805,6 +3037,146 @@
28053037 return 0;
28063038 }
28073039
3040
+void apm_staloss_work_process(struct work_struct *work)
3041
+{
3042
+ struct rwnx_hw *rwnx_hw = container_of(work, struct rwnx_hw, apmStalossWork);
3043
+ struct rwnx_sta *cur, *tmp;
3044
+ int error = 0;
3045
+
3046
+#ifdef AICWF_RX_REORDER
3047
+ struct reord_ctrl_info *reord_info, *reord_tmp;
3048
+ u8 *macaddr;
3049
+ struct aicwf_rx_priv *rx_priv;
3050
+#endif
3051
+ struct rwnx_vif *rwnx_vif;
3052
+ bool_l found = false;
3053
+ const u8 *mac = rwnx_hw->sta_mac_addr;
3054
+
3055
+ RWNX_DBG(RWNX_FN_ENTRY_STR);
3056
+
3057
+ // Look for VIF entry
3058
+ list_for_each_entry(rwnx_vif, &rwnx_hw->vifs, list) {
3059
+ if (rwnx_vif->vif_index == rwnx_hw->apm_vif_idx) {
3060
+ found = true;
3061
+ break;
3062
+ }
3063
+ }
3064
+
3065
+ printk("apm vif idx=%d, found=%d, mac addr=%pM\n", rwnx_hw->apm_vif_idx, found, mac);
3066
+ if (!found || !rwnx_vif || (RWNX_VIF_TYPE(rwnx_vif) != NL80211_IFTYPE_AP && RWNX_VIF_TYPE(rwnx_vif) != NL80211_IFTYPE_P2P_GO)) {
3067
+ return;
3068
+ }
3069
+
3070
+ list_for_each_entry_safe(cur, tmp, &rwnx_vif->ap.sta_list, list) {
3071
+ if ((!mac) || (!memcmp(cur->mac_addr, mac, ETH_ALEN))) {
3072
+ netdev_info(rwnx_vif->ndev, "Del sta %d (%pM)", cur->sta_idx, cur->mac_addr);
3073
+ /* Ensure that we won't process PS change ind */
3074
+ spin_lock_bh(&rwnx_hw->cb_lock);
3075
+ cur->ps.active = false;
3076
+ cur->valid = false;
3077
+ spin_unlock_bh(&rwnx_hw->cb_lock);
3078
+
3079
+ if (cur->vif_idx != cur->vlan_idx) {
3080
+ struct rwnx_vif *vlan_vif;
3081
+ vlan_vif = rwnx_hw->vif_table[cur->vlan_idx];
3082
+ if (vlan_vif->up) {
3083
+ if ((RWNX_VIF_TYPE(vlan_vif) == NL80211_IFTYPE_AP_VLAN) &&
3084
+ (vlan_vif->use_4addr)) {
3085
+ vlan_vif->ap_vlan.sta_4a = NULL;
3086
+ } else {
3087
+ WARN(1, "Deleting sta belonging to VLAN other than AP_VLAN 4A");
3088
+ }
3089
+ }
3090
+ }
3091
+ /*if (rwnx_vif->wdev.iftype == NL80211_IFTYPE_AP || rwnx_vif->wdev.iftype == NL80211_IFTYPE_P2P_GO) {
3092
+ cfg80211_del_sta(rwnx_vif->ndev, cur->mac_addr, GFP_KERNEL);
3093
+ }*/
3094
+
3095
+#ifdef AICWF_RX_REORDER
3096
+#ifdef AICWF_SDIO_SUPPORT
3097
+ rx_priv = rwnx_hw->sdiodev->rx_priv;
3098
+#else
3099
+ rx_priv = rwnx_hw->usbdev->rx_priv;
3100
+#endif
3101
+ if ((rwnx_vif->wdev.iftype == NL80211_IFTYPE_STATION) || (rwnx_vif->wdev.iftype == NL80211_IFTYPE_P2P_CLIENT)) {
3102
+ BUG();//should be other function
3103
+ } else if ((rwnx_vif->wdev.iftype == NL80211_IFTYPE_AP) || (rwnx_vif->wdev.iftype == NL80211_IFTYPE_P2P_GO)) {
3104
+ macaddr = cur->mac_addr;
3105
+ printk("deinit:macaddr:%x,%x,%x,%x,%x,%x\r\n", macaddr[0], macaddr[1], macaddr[2], \
3106
+ macaddr[3], macaddr[4], macaddr[5]);
3107
+ spin_lock_bh(&rx_priv->stas_reord_lock);
3108
+ list_for_each_entry_safe(reord_info, reord_tmp,
3109
+ &rx_priv->stas_reord_list, list) {
3110
+ printk("reord_mac:%x,%x,%x,%x,%x,%x\r\n", reord_info->mac_addr[0], reord_info->mac_addr[1], reord_info->mac_addr[2], \
3111
+ reord_info->mac_addr[3], reord_info->mac_addr[4], reord_info->mac_addr[5]);
3112
+ if (!memcmp(reord_info->mac_addr, macaddr, 6)) {
3113
+ reord_deinit_sta(rx_priv, reord_info);
3114
+ break;
3115
+ }
3116
+ }
3117
+ spin_unlock_bh(&rx_priv->stas_reord_lock);
3118
+ }
3119
+#endif
3120
+
3121
+ rwnx_txq_sta_deinit(rwnx_hw, cur);
3122
+ error = rwnx_send_me_sta_del(rwnx_hw, cur->sta_idx, false);
3123
+ if ((error != 0) && (error != -EPIPE))
3124
+ return;
3125
+
3126
+#ifdef CONFIG_RWNX_BFMER
3127
+ // Disable Beamformer if supported
3128
+ rwnx_bfmer_report_del(rwnx_hw, cur);
3129
+ rwnx_mu_group_sta_del(rwnx_hw, cur);
3130
+#endif /* CONFIG_RWNX_BFMER */
3131
+
3132
+ list_del(&cur->list);
3133
+#ifdef CONFIG_DEBUG_FS
3134
+ rwnx_dbgfs_unregister_rc_stat(rwnx_hw, cur);
3135
+#endif
3136
+ found++;
3137
+ break;
3138
+ }
3139
+ }
3140
+
3141
+ if (!found)
3142
+ return;
3143
+
3144
+ rwnx_update_mesh_power_mode(rwnx_vif);
3145
+}
3146
+
3147
+void apm_probe_sta_work_process(struct work_struct *work)
3148
+{
3149
+ struct apm_probe_sta *probe_sta = container_of(work, struct apm_probe_sta, apmprobestaWork);
3150
+ struct rwnx_vif *rwnx_vif = container_of(probe_sta, struct rwnx_vif, sta_probe);
3151
+ bool found = false;
3152
+ struct rwnx_sta *cur, *tmp;
3153
+
3154
+ u8 *mac = rwnx_vif->sta_probe.sta_mac_addr;
3155
+
3156
+ RWNX_DBG(RWNX_FN_ENTRY_STR);
3157
+
3158
+ list_for_each_entry_safe(cur, tmp, &rwnx_vif->ap.sta_list, list) {
3159
+ if (!memcmp(cur->mac_addr, mac, ETH_ALEN)) {
3160
+ found = true;
3161
+ break;
3162
+ }
3163
+ }
3164
+
3165
+ printk("sta %pM found = %d\n", mac, found);
3166
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0)
3167
+ if (found)
3168
+ cfg80211_probe_status(rwnx_vif->ndev, mac, (u64)rwnx_vif->sta_probe.probe_id, 1, 0, false, GFP_ATOMIC);
3169
+ else
3170
+ cfg80211_probe_status(rwnx_vif->ndev, mac, (u64)rwnx_vif->sta_probe.probe_id, 0, 0, false, GFP_ATOMIC);
3171
+#else
3172
+ if (found)
3173
+ cfg80211_probe_status(rwnx_vif->ndev, mac, (u64)rwnx_vif->sta_probe.probe_id, 1, GFP_ATOMIC);
3174
+ else
3175
+ cfg80211_probe_status(rwnx_vif->ndev, mac, (u64)rwnx_vif->sta_probe.probe_id, 0, GFP_ATOMIC);
3176
+
3177
+#endif
3178
+ rwnx_vif->sta_probe.probe_id++;
3179
+}
28083180 /**
28093181 * @change_station: Modify a given station. Note that flags changes are not much
28103182 * validated in cfg80211, in particular the auth/assoc/authorized flags
....@@ -2860,8 +3232,9 @@
28603232 sta->uapsd_tids &= ~(1 << tid);
28613233 }
28623234 memcpy(sta->mac_addr, mac, ETH_ALEN);
3235
+#ifdef CONFIG_DEBUG_FS
28633236 rwnx_dbgfs_register_rc_stat(rwnx_hw, sta);
2864
-
3237
+#endif
28653238 /* Ensure that we won't process PS change or channel switch ind*/
28663239 spin_lock_bh(&rwnx_hw->cb_lock);
28673240 rwnx_txq_sta_init(rwnx_hw, sta, rwnx_txq_vif_get_status(rwnx_vif));
....@@ -2974,6 +3347,12 @@
29743347
29753348 RWNX_DBG(RWNX_FN_ENTRY_STR);
29763349
3350
+ INIT_WORK(&rwnx_vif->sta_probe.apmprobestaWork, apm_probe_sta_work_process);
3351
+ rwnx_vif->sta_probe.apmprobesta_wq = create_singlethread_workqueue("apmprobe_wq");
3352
+ if (!rwnx_vif->sta_probe.apmprobesta_wq) {
3353
+ txrx_err("insufficient memory to create apmprobe_wq.\n");
3354
+ return -ENOBUFS;
3355
+ }
29773356 if (rwnx_vif->wdev.iftype == NL80211_IFTYPE_P2P_GO)
29783357 rwnx_hw->is_p2p_connected = 1;
29793358 /* Forward the information to the LMAC */
....@@ -3068,23 +3447,10 @@
30683447
30693448 rwnx_send_bcn(rwnx_hw, buf, vif->vif_index, bcn->len);
30703449
3071
-#if 0
3072
- // Sync buffer for FW
3073
- error = rwnx_ipc_elem_var_allocs(rwnx_hw, &elem, bcn->len, DMA_TO_DEVICE,
3074
- buf, NULL, NULL);
3075
- if (error)
3076
- return error;
3077
-#endif
30783450 // Forward the information to the LMAC
3079
- error = rwnx_send_bcn_change(rwnx_hw, vif->vif_index, elem.dma_addr,
3451
+ error = rwnx_send_bcn_change(rwnx_hw, vif->vif_index, 0,
30803452 bcn->len, bcn->head_len, bcn->tim_len, NULL);
30813453
3082
-#if 0
3083
- rwnx_ipc_elem_var_deallocs(rwnx_hw, &elem);
3084
-#else
3085
-
3086
-
3087
-#endif
30883454 return error;
30893455 }
30903456
....@@ -3117,6 +3483,9 @@
31173483 rwnx_txq_vif_deinit(rwnx_hw, rwnx_vif);
31183484 rwnx_del_bcn(&rwnx_vif->ap.bcn);
31193485 rwnx_del_csa(rwnx_vif);
3486
+
3487
+ flush_workqueue(rwnx_vif->sta_probe.apmprobesta_wq);
3488
+ destroy_workqueue(rwnx_vif->sta_probe.apmprobesta_wq);
31203489
31213490 netif_tx_stop_all_queues(dev);
31223491 netif_carrier_off(dev);
....@@ -3195,9 +3564,33 @@
31953564 int rwnx_cfg80211_probe_client(struct wiphy *wiphy, struct net_device *dev,
31963565 const u8 *peer, u64 *cookie)
31973566 {
3567
+ //struct rwnx_hw *rwnx_hw = wiphy_priv(wiphy);
3568
+ struct rwnx_vif *vif = netdev_priv(dev);
3569
+ struct rwnx_sta *sta = NULL;
3570
+
3571
+ RWNX_DBG(RWNX_FN_ENTRY_STR);
3572
+
3573
+ if ((RWNX_VIF_TYPE(vif) != NL80211_IFTYPE_AP) && (RWNX_VIF_TYPE(vif) != NL80211_IFTYPE_P2P_GO) &&
3574
+ (RWNX_VIF_TYPE(vif) != NL80211_IFTYPE_AP_VLAN))
3575
+ return -EINVAL;
3576
+ list_for_each_entry(sta, &vif->ap.sta_list, list) {
3577
+ if (sta->valid && ether_addr_equal(sta->mac_addr, peer))
3578
+ break;
3579
+ }
3580
+
3581
+ if (!sta)
3582
+ return -ENOENT;
3583
+
3584
+
3585
+ memcpy(vif->sta_probe.sta_mac_addr, peer, 6);
3586
+ queue_work(vif->sta_probe.apmprobesta_wq, &vif->sta_probe.apmprobestaWork);
3587
+
3588
+ *cookie = vif->sta_probe.probe_id;
3589
+
31983590 return 0;
31993591 }
32003592
3593
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
32013594 /**
32023595 * @mgmt_frame_register: Notify driver that a management frame type was
32033596 * registered. Note that this callback may not sleep, and cannot run
....@@ -3208,6 +3601,7 @@
32083601 u16 frame_type, bool reg)
32093602 {
32103603 }
3604
+#endif
32113605
32123606 /**
32133607 * @set_wiphy_params: Notify that wiphy parameters have changed;
....@@ -3256,7 +3650,6 @@
32563650 return res;
32573651 }
32583652
3259
-#if 0
32603653 /**
32613654 * @set_power_mgmt: set the power save to one of those two modes:
32623655 * Power-save off
....@@ -3266,6 +3659,7 @@
32663659 struct net_device *dev,
32673660 bool enabled, int timeout)
32683661 {
3662
+#if 0
32693663 struct rwnx_hw *rwnx_hw = wiphy_priv(wiphy);
32703664 u8 ps_mode;
32713665
....@@ -3285,8 +3679,13 @@
32853679 }
32863680
32873681 return rwnx_send_me_set_ps_mode(rwnx_hw, ps_mode);
3288
-}
3682
+#else
3683
+ /* TODO
3684
+ * Add handle in the feature!
3685
+ */
3686
+ return 0;
32893687 #endif
3688
+}
32903689
32913690 static int rwnx_cfg80211_set_txq_params(struct wiphy *wiphy, struct net_device *dev,
32923691 struct ieee80211_txq_params *params)
....@@ -3332,13 +3731,15 @@
33323731 struct rwnx_vif *rwnx_vif = container_of(wdev, struct rwnx_vif, wdev);
33333732 struct rwnx_roc_elem *roc_elem;
33343733 struct mm_add_if_cfm add_if_cfm;
3734
+ struct mm_remain_on_channel_cfm roc_cfm;
33353735 int error;
33363736
33373737 RWNX_DBG(RWNX_FN_ENTRY_STR);
33383738
33393739 /* For debug purpose (use ftrace kernel option) */
3740
+#ifdef CREATE_TRACE_POINTS
33403741 trace_roc(rwnx_vif->vif_index, chan->center_freq, duration);
3341
-
3742
+#endif
33423743 /* Check that no other RoC procedure has been launched */
33433744 if (rwnx_hw->roc_elem) {
33443745 msleep(2);
....@@ -3349,7 +3750,7 @@
33493750 }
33503751
33513752 printk("remain:%d,%d,%d\n", rwnx_vif->vif_index, rwnx_vif->is_p2p_vif, rwnx_hw->is_p2p_alive);
3352
- if (rwnx_vif->is_p2p_vif) {
3753
+ if (rwnx_vif == rwnx_hw->p2p_dev_vif && !rwnx_vif->up) {
33533754 if (!rwnx_hw->is_p2p_alive) {
33543755 error = rwnx_send_add_if (rwnx_hw, rwnx_vif->wdev.address, //wdev->netdev->dev_addr,
33553756 RWNX_VIF_TYPE(rwnx_vif), false, &add_if_cfm);
....@@ -3396,14 +3797,19 @@
33963797
33973798 /* Forward the information to the FMAC */
33983799 rwnx_hw->roc_elem = roc_elem;
3399
- error = rwnx_send_roc(rwnx_hw, rwnx_vif, chan, duration);
3800
+ error = rwnx_send_roc(rwnx_hw, rwnx_vif, chan, duration, &roc_cfm);
34003801
34013802 /* If no error, keep all the information for handling of end of procedure */
34023803 if (error == 0) {
3403
-
34043804 /* Set the cookie value */
34053805 *cookie = (u64)(rwnx_hw->roc_cookie_cnt);
3406
-
3806
+ if (roc_cfm.status) {
3807
+ // failed to roc
3808
+ rwnx_hw->roc_elem = NULL;
3809
+ kfree(roc_elem);
3810
+ rwnx_txq_offchan_deinit(rwnx_vif);
3811
+ return -EBUSY;
3812
+ }
34073813 } else {
34083814 /* Free the allocated element */
34093815 rwnx_hw->roc_elem = NULL;
....@@ -3424,13 +3830,15 @@
34243830 u64 cookie)
34253831 {
34263832 struct rwnx_hw *rwnx_hw = wiphy_priv(wiphy);
3833
+#ifdef CREATE_TRACE_POINTS
34273834 struct rwnx_vif *rwnx_vif = container_of(wdev, struct rwnx_vif, wdev);//netdev_priv(wdev->netdev);
3428
-
3835
+#endif
34293836 RWNX_DBG(RWNX_FN_ENTRY_STR);
34303837
34313838 /* For debug purpose (use ftrace kernel option) */
3839
+#ifdef CREATE_TRACE_POINTS
34323840 trace_cancel_roc(rwnx_vif->vif_index);
3433
-
3841
+#endif
34343842 /* Check if a RoC procedure is pending */
34353843 if (!rwnx_hw->roc_elem) {
34363844 return 0;
....@@ -3578,11 +3986,11 @@
35783986 /* Get STA on which management frame has to be sent */
35793987 rwnx_sta = rwnx_retrieve_sta(rwnx_hw, rwnx_vif, mgmt->da,
35803988 mgmt->frame_control, ap);
3581
-
3989
+#ifdef CREATE_TRACE_POINTS
35823990 trace_mgmt_tx((channel) ? channel->center_freq : 0,
35833991 rwnx_vif->vif_index, (rwnx_sta) ? rwnx_sta->sta_idx : 0xFF,
35843992 mgmt);
3585
-
3993
+#endif
35863994 if (ap || rwnx_sta)
35873995 goto send_frame;
35883996
....@@ -3718,7 +4126,6 @@
37184126 {
37194127 struct rwnx_hw *rwnx_hw = wiphy_priv(wiphy);
37204128 struct rwnx_vif *vif = netdev_priv(dev);
3721
- struct rwnx_ipc_elem_var elem;
37224129 struct rwnx_bcn *bcn, *bcn_after;
37234130 struct rwnx_csa *csa;
37244131 u16 csa_oft[BCN_MAX_CSA_CPT];
....@@ -3752,8 +4159,7 @@
37524159 }
37534160 }
37544161
3755
- error = rwnx_ipc_elem_var_allocs(rwnx_hw, &elem, bcn->len,
3756
- DMA_TO_DEVICE, buf, NULL, NULL);
4162
+ error = rwnx_send_bcn(rwnx_hw, buf, vif->vif_index, bcn->len);
37574163 if (error) {
37584164 goto end;
37594165 }
....@@ -3775,8 +4181,7 @@
37754181 goto end;
37764182 }
37774183
3778
- error = rwnx_ipc_elem_var_allocs(rwnx_hw, &csa->elem, bcn_after->len,
3779
- DMA_TO_DEVICE, buf, NULL, NULL);
4184
+ error = rwnx_send_bcn(rwnx_hw, buf, vif->vif_index, bcn_after->len);
37804185 if (error) {
37814186 goto end;
37824187 }
....@@ -3786,7 +4191,7 @@
37864191 csa->chandef = params->chandef;
37874192
37884193 /* Send new Beacon. FW will extract channel and count from the beacon */
3789
- error = rwnx_send_bcn_change(rwnx_hw, vif->vif_index, elem.dma_addr,
4194
+ error = rwnx_send_bcn_change(rwnx_hw, vif->vif_index, 0,
37904195 bcn->len, bcn->head_len, bcn->tim_len, csa_oft);
37914196
37924197 if (error) {
....@@ -3794,11 +4199,14 @@
37944199 goto end;
37954200 } else {
37964201 INIT_WORK(&csa->work, rwnx_csa_finish);
3797
- rwnx_cfg80211_ch_switch_started_notify(dev, &csa->chandef, params->count);
4202
+ rwnx_cfg80211_ch_switch_started_notify(dev, &csa->chandef, params->count
4203
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 11, 0)
4204
+ , params->block_tx
4205
+#endif
4206
+ );
37984207 }
37994208
38004209 end:
3801
- rwnx_ipc_elem_var_deallocs(rwnx_hw, &elem);
38024210 return error;
38034211 }
38044212 #endif
....@@ -3933,7 +4341,9 @@
39334341
39344342 /* Set TDLS not active */
39354343 rwnx_vif->sta.tdls_sta->tdls.active = false;
4344
+#ifdef CONFIG_DEBUG_FS
39364345 rwnx_dbgfs_unregister_rc_stat(rwnx_hw, rwnx_vif->sta.tdls_sta);
4346
+#endif
39374347 // Remove TDLS station
39384348 rwnx_vif->tdls_status = TDLS_LINK_IDLE;
39394349 rwnx_vif->sta.tdls_sta = NULL;
....@@ -4035,102 +4445,9 @@
40354445 struct rwnx_sta_stats *stats = &sta->stats;
40364446 struct rx_vector_1 *rx_vect1 = &stats->last_rx.rx_vect1;
40374447 union rwnx_rate_ctrl_info *rate_info;
4038
- struct mm_get_sta_txinfo_cfm cfm;
4448
+ struct mm_get_sta_info_cfm cfm;
40394449
4040
- sinfo->inactive_time = jiffies_to_msecs(jiffies - vif->rwnx_hw->stats.last_tx);
4041
- sinfo->rx_bytes = vif->net_stats.rx_bytes;
4042
- sinfo->tx_bytes = vif->net_stats.tx_bytes;
4043
- sinfo->tx_packets = vif->net_stats.tx_packets;
4044
- sinfo->rx_packets = vif->net_stats.rx_packets;
4045
- sinfo->signal = rx_vect1->rssi1;
4046
-
4047
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
4048
- switch (rx_vect1->ch_bw) {
4049
- case PHY_CHNL_BW_20:
4050
- sinfo->rxrate.bw = RATE_INFO_BW_20;
4051
- break;
4052
- case PHY_CHNL_BW_40:
4053
- sinfo->rxrate.bw = RATE_INFO_BW_40;
4054
- break;
4055
- case PHY_CHNL_BW_80:
4056
- sinfo->rxrate.bw = RATE_INFO_BW_80;
4057
- break;
4058
- case PHY_CHNL_BW_160:
4059
- sinfo->rxrate.bw = RATE_INFO_BW_160;
4060
- break;
4061
- default:
4062
- #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)
4063
- sinfo->rxrate.bw = RATE_INFO_BW_HE_RU;
4064
- #else
4065
- sinfo->rxrate.bw = RATE_INFO_BW_20;
4066
- #endif
4067
- break;
4068
- }
4069
- #endif
4070
-
4071
- switch (rx_vect1->format_mod) {
4072
- case FORMATMOD_NON_HT:
4073
- case FORMATMOD_NON_HT_DUP_OFDM:
4074
- sinfo->rxrate.flags = 0;
4075
- sinfo->rxrate.legacy = legrates_lut_rate[legrates_lut[rx_vect1->leg_rate]];
4076
- break;
4077
- case FORMATMOD_HT_MF:
4078
- case FORMATMOD_HT_GF:
4079
- sinfo->rxrate.flags = RATE_INFO_FLAGS_MCS;
4080
- if (rx_vect1->ht.short_gi)
4081
- sinfo->rxrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
4082
- sinfo->rxrate.mcs = rx_vect1->ht.mcs;
4083
- break;
4084
- case FORMATMOD_VHT:
4085
- sinfo->rxrate.flags = RATE_INFO_FLAGS_VHT_MCS;
4086
- if (rx_vect1->vht.short_gi)
4087
- sinfo->rxrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
4088
- sinfo->rxrate.mcs = rx_vect1->vht.mcs;
4089
- sinfo->rxrate.nss = rx_vect1->vht.nss;
4090
- break;
4091
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)
4092
- case FORMATMOD_HE_MU:
4093
- sinfo->rxrate.he_ru_alloc = rx_vect1->he.ru_size;
4094
- case FORMATMOD_HE_SU:
4095
- case FORMATMOD_HE_ER:
4096
- sinfo->rxrate.flags = RATE_INFO_FLAGS_HE_MCS;
4097
- sinfo->rxrate.mcs = rx_vect1->he.mcs;
4098
- sinfo->rxrate.nss = rx_vect1->he.nss;
4099
- sinfo->rxrate.he_gi = rx_vect1->he.gi_type;
4100
- sinfo->rxrate.he_dcm = rx_vect1->he.dcm;
4101
- break;
4102
-#else
4103
- //kernel not support he
4104
- case FORMATMOD_HE_MU:
4105
- case FORMATMOD_HE_SU:
4106
- case FORMATMOD_HE_ER:
4107
- sinfo->rxrate.flags = RATE_INFO_FLAGS_VHT_MCS;
4108
- sinfo->rxrate.mcs = rx_vect1->he.mcs;
4109
- sinfo->rxrate.nss = rx_vect1->he.nss;
4110
-#endif
4111
- default:
4112
- return -EINVAL;
4113
- }
4114
-
4115
-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)
4116
- sinfo->filled = (STATION_INFO_INACTIVE_TIME |
4117
- STATION_INFO_RX_BYTES64 |
4118
- STATION_INFO_TX_BYTES64 |
4119
- STATION_INFO_RX_PACKETS |
4120
- STATION_INFO_TX_PACKETS |
4121
- STATION_INFO_SIGNAL |
4122
- STATION_INFO_RX_BITRATE);
4123
-#else
4124
- sinfo->filled = (BIT(NL80211_STA_INFO_INACTIVE_TIME) |
4125
- BIT(NL80211_STA_INFO_RX_BYTES64) |
4126
- BIT(NL80211_STA_INFO_TX_BYTES64) |
4127
- BIT(NL80211_STA_INFO_RX_PACKETS) |
4128
- BIT(NL80211_STA_INFO_TX_PACKETS) |
4129
- BIT(NL80211_STA_INFO_SIGNAL) |
4130
- BIT(NL80211_STA_INFO_RX_BITRATE));
4131
-#endif
4132
-
4133
- rwnx_send_get_sta_txinfo_req(vif->rwnx_hw, sta->sta_idx, &cfm);
4450
+ rwnx_send_get_sta_info_req(vif->rwnx_hw, sta->sta_idx, &cfm);
41344451 sinfo->tx_failed = cfm.txfailed;
41354452 rate_info = (union rwnx_rate_ctrl_info *)&cfm.rate_info;
41364453 switch (rate_info->formatModTx) {
....@@ -4192,42 +4509,97 @@
41924509 sinfo->txrate.nss = 1;
41934510 sinfo->filled |= (BIT(NL80211_STA_INFO_TX_BITRATE) | BIT(NL80211_STA_INFO_TX_FAILED));
41944511
4195
- #if 0
4196
- // Mesh specific info
4197
- if (RWNX_VIF_TYPE(vif) == NL80211_IFTYPE_MESH_POINT) {
4198
- struct mesh_peer_info_cfm peer_info_cfm;
4199
- if (rwnx_send_mesh_peer_info_req(vif->rwnx_hw, vif, sta->sta_idx,
4200
- &peer_info_cfm))
4201
- return -ENOMEM;
4512
+ sinfo->inactive_time = jiffies_to_msecs(jiffies - vif->rwnx_hw->stats.last_tx);
4513
+ sinfo->rx_bytes = vif->net_stats.rx_bytes;
4514
+ sinfo->tx_bytes = vif->net_stats.tx_bytes;
4515
+ sinfo->tx_packets = vif->net_stats.tx_packets;
4516
+ sinfo->rx_packets = vif->net_stats.rx_packets;
4517
+ sinfo->signal = (s8)cfm.rssi;
4518
+ sinfo->rxrate.nss = 1;
42024519
4203
- peer_info_cfm.last_bcn_age = peer_info_cfm.last_bcn_age / 1000;
4204
- if (peer_info_cfm.last_bcn_age < sinfo->inactive_time)
4205
- sinfo->inactive_time = peer_info_cfm.last_bcn_age;
4206
-
4207
- sinfo->llid = peer_info_cfm.local_link_id;
4208
- sinfo->plid = peer_info_cfm.peer_link_id;
4209
- sinfo->plink_state = peer_info_cfm.link_state;
4210
- sinfo->local_pm = peer_info_cfm.local_ps_mode;
4211
- sinfo->peer_pm = peer_info_cfm.peer_ps_mode;
4212
- sinfo->nonpeer_pm = peer_info_cfm.non_peer_ps_mode;
4213
-
4214
-#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)
4215
- sinfo->filled |= (STATION_INFO_LLID |
4216
- STATION_INFO_PLID |
4217
- STATION_INFO_PLINK_STATE |
4218
- STATION_INFO_LOCAL_PM |
4219
- STATION_INFO_PEER_PM |
4220
- STATION_INFO_NONPEER_PM);
4221
-#else
4222
- sinfo->filled |= (BIT(NL80211_STA_INFO_LLID) |
4223
- BIT(NL80211_STA_INFO_PLID) |
4224
- BIT(NL80211_STA_INFO_PLINK_STATE) |
4225
- BIT(NL80211_STA_INFO_LOCAL_PM) |
4226
- BIT(NL80211_STA_INFO_PEER_PM) |
4227
- BIT(NL80211_STA_INFO_NONPEER_PM));
4228
-#endif
4520
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 0, 0)
4521
+ switch (rx_vect1->ch_bw) {
4522
+ case PHY_CHNL_BW_20:
4523
+ sinfo->rxrate.bw = RATE_INFO_BW_20;
4524
+ break;
4525
+ case PHY_CHNL_BW_40:
4526
+ sinfo->rxrate.bw = RATE_INFO_BW_40;
4527
+ break;
4528
+ case PHY_CHNL_BW_80:
4529
+ sinfo->rxrate.bw = RATE_INFO_BW_80;
4530
+ break;
4531
+ case PHY_CHNL_BW_160:
4532
+ sinfo->rxrate.bw = RATE_INFO_BW_160;
4533
+ break;
4534
+ default:
4535
+ #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)
4536
+ sinfo->rxrate.bw = RATE_INFO_BW_HE_RU;
4537
+ #else
4538
+ sinfo->rxrate.bw = RATE_INFO_BW_20;
4539
+ #endif
4540
+ break;
42294541 }
42304542 #endif
4543
+
4544
+ switch (rx_vect1->format_mod) {
4545
+ case FORMATMOD_NON_HT:
4546
+ case FORMATMOD_NON_HT_DUP_OFDM:
4547
+ sinfo->rxrate.flags = 0;
4548
+ sinfo->rxrate.legacy = legrates_lut_rate[legrates_lut[rx_vect1->leg_rate]];
4549
+ break;
4550
+ case FORMATMOD_HT_MF:
4551
+ case FORMATMOD_HT_GF:
4552
+ sinfo->rxrate.flags = RATE_INFO_FLAGS_MCS;
4553
+ if (rx_vect1->ht.short_gi)
4554
+ sinfo->rxrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
4555
+ sinfo->rxrate.mcs = rx_vect1->ht.mcs;
4556
+ break;
4557
+ case FORMATMOD_VHT:
4558
+ sinfo->rxrate.flags = RATE_INFO_FLAGS_VHT_MCS;
4559
+ if (rx_vect1->vht.short_gi)
4560
+ sinfo->rxrate.flags |= RATE_INFO_FLAGS_SHORT_GI;
4561
+ sinfo->rxrate.mcs = rx_vect1->vht.mcs;
4562
+ break;
4563
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)
4564
+ case FORMATMOD_HE_MU:
4565
+ sinfo->rxrate.he_ru_alloc = rx_vect1->he.ru_size;
4566
+ case FORMATMOD_HE_SU:
4567
+ case FORMATMOD_HE_ER:
4568
+ sinfo->rxrate.flags = RATE_INFO_FLAGS_HE_MCS;
4569
+ sinfo->rxrate.mcs = rx_vect1->he.mcs;
4570
+ sinfo->rxrate.he_gi = rx_vect1->he.gi_type;
4571
+ sinfo->rxrate.he_dcm = rx_vect1->he.dcm;
4572
+ break;
4573
+#else
4574
+ //kernel not support he
4575
+ case FORMATMOD_HE_MU:
4576
+ case FORMATMOD_HE_SU:
4577
+ case FORMATMOD_HE_ER:
4578
+ sinfo->rxrate.flags = RATE_INFO_FLAGS_VHT_MCS;
4579
+ sinfo->rxrate.mcs = rx_vect1->he.mcs;
4580
+ break;
4581
+#endif
4582
+ default:
4583
+ return -EINVAL;
4584
+ }
4585
+
4586
+#if LINUX_VERSION_CODE < KERNEL_VERSION(4, 0, 0)
4587
+ sinfo->filled |= (STATION_INFO_INACTIVE_TIME |
4588
+ STATION_INFO_RX_BYTES64 |
4589
+ STATION_INFO_TX_BYTES64 |
4590
+ STATION_INFO_RX_PACKETS |
4591
+ STATION_INFO_TX_PACKETS |
4592
+ STATION_INFO_SIGNAL |
4593
+ STATION_INFO_RX_BITRATE);
4594
+#else
4595
+ sinfo->filled |= (BIT(NL80211_STA_INFO_INACTIVE_TIME) |
4596
+ BIT(NL80211_STA_INFO_RX_BYTES64) |
4597
+ BIT(NL80211_STA_INFO_TX_BYTES64) |
4598
+ BIT(NL80211_STA_INFO_RX_PACKETS) |
4599
+ BIT(NL80211_STA_INFO_TX_PACKETS) |
4600
+ BIT(NL80211_STA_INFO_SIGNAL) |
4601
+ BIT(NL80211_STA_INFO_RX_BITRATE));
4602
+#endif
42314603
42324604 return 0;
42334605 }
....@@ -4261,7 +4633,7 @@
42614633 if (sta)
42624634 return rwnx_fill_station_info(sta, vif, sinfo);
42634635
4264
- return -EINVAL;
4636
+ return -ENOENT;
42654637 }
42664638
42674639
....@@ -4739,12 +5111,14 @@
47395111 .stop_ap = rwnx_cfg80211_stop_ap,
47405112 .set_monitor_channel = rwnx_cfg80211_set_monitor_channel,
47415113 .probe_client = rwnx_cfg80211_probe_client,
5114
+#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0)
47425115 .mgmt_frame_register = rwnx_cfg80211_mgmt_frame_register,
5116
+#endif
47435117 .set_wiphy_params = rwnx_cfg80211_set_wiphy_params,
47445118 .set_txq_params = rwnx_cfg80211_set_txq_params,
47455119 .set_tx_power = rwnx_cfg80211_set_tx_power,
47465120 // .get_tx_power = rwnx_cfg80211_get_tx_power,
4747
-// .set_power_mgmt = rwnx_cfg80211_set_power_mgmt,
5121
+ .set_power_mgmt = rwnx_cfg80211_set_power_mgmt,
47485122 .get_station = rwnx_cfg80211_get_station,
47495123 .remain_on_channel = rwnx_cfg80211_remain_on_channel,
47505124 .cancel_remain_on_channel = rwnx_cfg80211_cancel_remain_on_channel,
....@@ -4763,7 +5137,7 @@
47635137 .tdls_mgmt = rwnx_cfg80211_tdls_mgmt,
47645138 .tdls_oper = rwnx_cfg80211_tdls_oper,
47655139 .change_bss = rwnx_cfg80211_change_bss,
4766
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0)
5140
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0) || defined(CONFIG_WPA3_FOR_OLD_KERNEL)
47675141 .external_auth = rwnx_cfg80211_external_auth,
47685142 #endif
47695143 };
....@@ -4837,1815 +5211,6 @@
48375211 }
48385212
48395213 extern int rwnx_init_aic(struct rwnx_hw *rwnx_hw);
4840
-#ifdef AICWF_USB_SUPPORT
4841
-u32 patch_tbl[18][2] = {
4842
- {0x0044, 0x00000002}, //hosttype
4843
- {0x0048, 0x00000060},
4844
- {0x004c, 0x00000046},
4845
- {0x0050, 0x00000000}, //ipc base
4846
- {0x0054, 0x001a0000}, //buf base
4847
- {0x0058, 0x001a0140}, //desc base
4848
- {0x005c, 0x00001020}, //desc size
4849
- {0x0060, 0x001a1020}, //pkt base
4850
- {0x0064, 0x000207e0}, //pkt size
4851
- {0x0068, 0x00000008},
4852
- {0x006c, 0x00000040},
4853
- {0x0070, 0x00000040},
4854
- {0x0074, 0x00000020},
4855
- {0x0078, 0x00000000},
4856
- {0x007c, 0x00000040},
4857
- {0x0080, 0x00190000},
4858
- {0x0084, 0x0000fc00},//63kB
4859
- {0x0088, 0x0019fc00}
4860
-};
4861
-#else
4862
-#ifdef CONFIG_ROM_PATCH_EN
4863
-u32 patch_tbl[][2] = {
4864
- {0x0044, 0x02000001},
4865
- {0x0058, 0x001a0000},
4866
- {0x005c, 0x00002020},
4867
- {0x0060, 0x001a2020}, //pkt base
4868
- {0x0064, 0x00021820}, //pkt size
4869
- {0x0080, 0x00190000},
4870
- {0x0084, 0x0000fc00},//63kB
4871
- {0x0088, 0x0019fc00}
4872
-};
4873
-#else
4874
-u32 patch_tbl[][2] = {
4875
-};
4876
-#endif
4877
-#endif
4878
-
4879
-u32 patch_tbl_1[14][2] = {
4880
- {0x171b24, 0x1c4021}, //61
4881
- {0x171c00, 0x1c40b1}, //116
4882
- {0x172124, 0x1c43ed}, //12*8 + 1720c4
4883
- {0x171bfc, 0x1c4849}, //115, 171a30 + 115 * 4
4884
- {0x171ee4, 0x1c4941}, //301
4885
- {0x171ee8, 0x1c4b09}, //302
4886
- {0x172134, 0x1c4d65}, //14/15/16/17/18 * 8 + 1720c4{0x172134, 0x1c4d65},
4887
- {0x17213c, 0x1c4d65},
4888
- {0x172144, 0x1c4d65},
4889
- {0x17214c, 0x1c4d65},
4890
- {0x172154, 0x1c4d65},
4891
- {0x1721d0, 0x1c53dd}, // 1721c4 + 1*8 + 4
4892
- {0x1721f0, 0x1c5415}, // 1721c4 + 5*8 + 4
4893
- {0x171eb0, 0x1c54a1}, // 288
4894
-};
4895
-
4896
-u32 func_tbl[1721] = {
4897
- 0x8cc88cc3,
4898
- 0xd8084283,
4899
- 0x1ac0d205,
4900
- 0xbfcc283f,
4901
- 0x20012000,
4902
- 0x20014770,
4903
- 0x20004770,
4904
- 0xbf004770,
4905
- 0x481d4a1c,
4906
- 0xb538491d,
4907
- 0x68056913,
4908
- 0xf8b16914,
4909
- 0xf8b100b0,
4910
- 0xf5a310b2,
4911
- 0xeb0363fa,
4912
- 0x1b1b1345,
4913
- 0x1a5b1a1b,
4914
- 0xdb1a2b00,
4915
- 0x681b4b15,
4916
- 0x68dcb143,
4917
- 0x1ae36913,
4918
- 0x63faf5a3,
4919
- 0x1a5b1a1b,
4920
- 0xdb012b00,
4921
- 0xbd382001,
4922
- 0x681b4b0f,
4923
- 0x3000f9b3,
4924
- 0xda062b00,
4925
- 0x1ae46913,
4926
- 0x549cf504,
4927
- 0x2c003408,
4928
- 0x2000db01,
4929
- 0x4909bd38,
4930
- 0xf44f4809,
4931
- 0xf66b7202,
4932
- 0x2000fad9,
4933
- 0xbf00bd38,
4934
- 0x40501000,
4935
- 0x40328040,
4936
- 0x0017192c,
4937
- 0x00178bf0,
4938
- 0x00173250,
4939
- 0x001c5a3c,
4940
- 0x001c56b4,
4941
- 0x4ff0e92d,
4942
- 0x8c05461c,
4943
- 0x3062f893,
4944
- 0x9020f8d2,
4945
- 0xf8d06987,
4946
- 0xb089b01c,
4947
- 0x02ad4616,
4948
- 0x2012e9dd,
4949
- 0xf8b4b9d3,
4950
- 0xf1bcc068,
4951
- 0xd0150f00,
4952
- 0x6ab38b52,
4953
- 0xf202fb0c,
4954
- 0x07189205,
4955
- 0xf20cfb05,
4956
- 0xd0199206,
4957
- 0xebb72300,
4958
- 0xf44f0a09,
4959
- 0x930776fa,
4960
- 0xf5039b05,
4961
- 0xe9c473c8,
4962
- 0xe071a31f,
4963
- 0xf0402800,
4964
- 0x950680ba,
4965
- 0x0a01f04f,
4966
- 0x6ab28b50,
4967
- 0xf000fb0a,
4968
- 0x90050712,
4969
- 0x8122f040,
4970
- 0xf8df6af2,
4971
- 0xf8dfc2bc,
4972
- 0xf8dc82bc,
4973
- 0x48983000,
4974
- 0x1203f3c2,
4975
- 0x037ff023,
4976
- 0x2002f818,
4977
- 0xf8cc4313,
4978
- 0x6ab33000,
4979
- 0xf3c34a93,
4980
- 0xea4113c0,
4981
- 0xf04f5103,
4982
- 0x60014300,
4983
- 0xf3bf6013,
4984
- 0xbf008f4f,
4985
- 0x00586813,
4986
- 0x4b8dd5fc,
4987
- 0xf9b16819,
4988
- 0x29001000,
4989
- 0x80aef2c0,
4990
- 0x68124a88,
4991
- 0xfa82fa1f,
4992
- 0x07126ab2,
4993
- 0x809df040,
4994
- 0xf8df6af2,
4995
- 0x4882c25c,
4996
- 0x1000f8dc,
4997
- 0x1203f3c2,
4998
- 0x017ff021,
4999
- 0x2002f818,
5000
- 0xf8cc430a,
5001
- 0x6ab22000,
5002
- 0xf3c2497c,
5003
- 0x051212c0,
5004
- 0x0218f042,
5005
- 0x4600f04f,
5006
- 0x600e6002,
5007
- 0x8f4ff3bf,
5008
- 0x680abf00,
5009
- 0xd5fc0056,
5010
- 0xf9b3681b,
5011
- 0x2b003000,
5012
- 0x4a72db6e,
5013
- 0x3062f894,
5014
- 0x22006816,
5015
- 0xebaab2b6,
5016
- 0x92070a06,
5017
- 0x0909ebb7,
5018
- 0x0a0aeb19,
5019
- 0xd0872b00,
5020
- 0x79e5ea4f,
5021
- 0x464b462a,
5022
- 0x46594638,
5023
- 0xfc50f679,
5024
- 0x92021bba,
5025
- 0xfb009a07,
5026
- 0xeb6bf309,
5027
- 0xfb050202,
5028
- 0x92033301,
5029
- 0x0105fba0,
5030
- 0xe9dd4419,
5031
- 0x42992302,
5032
- 0x4290bf08,
5033
- 0xe9cdbf38,
5034
- 0x4b5e0102,
5035
- 0x6702e9dd,
5036
- 0x9b066819,
5037
- 0x018918f6,
5038
- 0x9905d430,
5039
- 0xf5a11a71,
5040
- 0x4b597ac8,
5041
- 0x69194a59,
5042
- 0x691b6812,
5043
- 0x44511a89,
5044
- 0xf5a31acb,
5045
- 0x3b1453a5,
5046
- 0x6a632b00,
5047
- 0x1949bfb8,
5048
- 0xd022428b,
5049
- 0x6a1a4b52,
5050
- 0xd04142a2,
5051
- 0xf1044d51,
5052
- 0xf8d50018,
5053
- 0x479831e0,
5054
- 0x30a8f8d5,
5055
- 0xb0094620,
5056
- 0x4ff0e8bd,
5057
- 0xf8904718,
5058
- 0xf1baa002,
5059
- 0xd1010f00,
5060
- 0xa003f890,
5061
- 0xf00afb05,
5062
- 0xe73d9006,
5063
- 0x98054946,
5064
- 0xeba11a09,
5065
- 0x44b20a0a,
5066
- 0xb009e7cb,
5067
- 0x8ff0e8bd,
5068
- 0x0058680b,
5069
- 0x4941d48d,
5070
- 0xf44f4841,
5071
- 0xf66b72ae,
5072
- 0x2200f98f,
5073
- 0x3062f894,
5074
- 0xf5aa9207,
5075
- 0xf44f7afa,
5076
- 0xe78776fa,
5077
- 0x00516812,
5078
- 0xaf4ef53f,
5079
- 0x48384937,
5080
- 0x72aef44f,
5081
- 0xf97cf66b,
5082
- 0x7afaf44f,
5083
- 0xe7474b2c,
5084
- 0x62614a2c,
5085
- 0x01926812,
5086
- 0x4a32d4b8,
5087
- 0x68124d32,
5088
- 0x1024f893,
5089
- 0x4207f3c2,
5090
- 0x2d23f885,
5091
- 0x4a2fbb61,
5092
- 0x6812492f,
5093
- 0x20016809,
5094
- 0xf885b2d2,
5095
- 0xf8832d24,
5096
- 0x780b0024,
5097
- 0xd1054283,
5098
- 0x4a2b492a,
5099
- 0x6813600b,
5100
- 0x60134303,
5101
- 0x2d23f895,
5102
- 0x3d24f895,
5103
- 0xd21b429a,
5104
- 0x681b4b17,
5105
- 0x3000f9b3,
5106
- 0xda0d2b00,
5107
- 0x2d23f895,
5108
- 0x3d24f895,
5109
- 0xd307429a,
5110
- 0x48214920,
5111
- 0xf44f4d15,
5112
- 0xf66b7221,
5113
- 0xe787f96f,
5114
- 0xe7854d12,
5115
- 0xf44f2200,
5116
- 0x920776fa,
5117
- 0xe7354692,
5118
- 0x4b124814,
5119
- 0x1d23f895,
5120
- 0x2d24f895,
5121
- 0x6806681b,
5122
- 0xb2f64816,
5123
- 0x96000c1b,
5124
- 0xff82f66a,
5125
- 0xbf00e7d4,
5126
- 0x40328160,
5127
- 0x4032816c,
5128
- 0x00173250,
5129
- 0x4032004c,
5130
- 0x40501000,
5131
- 0x403280a4,
5132
- 0x00178d3c,
5133
- 0x00171a30,
5134
- 0xfffffe70,
5135
- 0x001c5a20,
5136
- 0x001c56e0,
5137
- 0x40328044,
5138
- 0x001e4000,
5139
- 0x40320090,
5140
- 0x00173270,
5141
- 0x40328070,
5142
- 0x40328074,
5143
- 0x001c5a58,
5144
- 0x001c5718,
5145
- 0x001c5704,
5146
- 0x40328164,
5147
- 0x00041830,
5148
- 0x4ff0e92d,
5149
- 0x9354f8df,
5150
- 0xb020f8d9,
5151
- 0xf44fb083,
5152
- 0xf6692000,
5153
- 0xf1bbfd9b,
5154
- 0xf0000f00,
5155
- 0x4cb480f1,
5156
- 0xa33cf8df,
5157
- 0x4fb37fa1,
5158
- 0x8338f8df,
5159
- 0x29004eb2,
5160
- 0x80e6f000,
5161
- 0xd50e0708,
5162
- 0xf8db4bb0,
5163
- 0x681b0070,
5164
- 0x2010f8da,
5165
- 0x4403685b,
5166
- 0x2b001a9b,
5167
- 0x80c7f2c0,
5168
- 0x01f7f001,
5169
- 0x074a77a1,
5170
- 0x8095f100,
5171
- 0xd515078b,
5172
- 0x3004f8db,
5173
- 0x0302f023,
5174
- 0x3004f8cb,
5175
- 0x301df899,
5176
- 0xd1082b05,
5177
- 0x48a34da2,
5178
- 0x31d8f8d5,
5179
- 0x23004798,
5180
- 0xf8897fa1,
5181
- 0xf001301d,
5182
- 0x77a101fd,
5183
- 0xd52d07cd,
5184
- 0x01586833,
5185
- 0x809ff140,
5186
- 0x0c096831,
5187
- 0x7f7cf411,
5188
- 0x80a6f000,
5189
- 0x4b983910,
5190
- 0x01fff001,
5191
- 0x1281eb01,
5192
- 0x03c2eb03,
5193
- 0x2021f893,
5194
- 0xf0002a00,
5195
- 0x4a93809d,
5196
- 0x68137f99,
5197
- 0xf9b34a92,
5198
- 0xf44f3000,
5199
- 0xfb0060a4,
5200
- 0x2b002201,
5201
- 0xf2c09200,
5202
- 0x683b809c,
5203
- 0x2fe0f413,
5204
- 0x80a5f000,
5205
- 0xf0017fa1,
5206
- 0x77a101fe,
5207
- 0xd59e068a,
5208
- 0x49894e88,
5209
- 0xf3c56835,
5210
- 0x463a1741,
5211
- 0xf66a2002,
5212
- 0x2300ff23,
5213
- 0x1547f3c5,
5214
- 0x3078f88b,
5215
- 0xf0402f00,
5216
- 0x4e7b80af,
5217
- 0x4d824a81,
5218
- 0xf4236813,
5219
- 0x60137300,
5220
- 0x3004f8db,
5221
- 0x21d8f8d6,
5222
- 0x0301f023,
5223
- 0x3004f8cb,
5224
- 0x0028f10b,
5225
- 0x682a4790,
5226
- 0x2b027813,
5227
- 0x8114f000,
5228
- 0x680b4974,
5229
- 0x0301f023,
5230
- 0x7813600b,
5231
- 0xd1122b01,
5232
- 0x41fff501,
5233
- 0x4a733134,
5234
- 0x3010f8da,
5235
- 0xf8b26808,
5236
- 0xf8d610b2,
5237
- 0xeb0321e0,
5238
- 0x1a591340,
5239
- 0x0018f10b,
5240
- 0x682b4790,
5241
- 0x2b02781b,
5242
- 0x80b4f000,
5243
- 0xf0017fa1,
5244
- 0x77a101df,
5245
- 0x4968e74f,
5246
- 0x20024d5d,
5247
- 0xfedcf66a,
5248
- 0x68634966,
5249
- 0xf022680a,
5250
- 0x600a0204,
5251
- 0xf4436822,
5252
- 0x431a7300,
5253
- 0xf8d5614a,
5254
- 0x60631498,
5255
- 0x0063f89b,
5256
- 0x3494f8d5,
5257
- 0x4798465a,
5258
- 0x7fa1683b,
5259
- 0x737cf023,
5260
- 0xf8d8603b,
5261
- 0xf0013000,
5262
- 0xf44301fb,
5263
- 0xf8c80380,
5264
- 0x77a13000,
5265
- 0x4856e742,
5266
- 0xfe66f66a,
5267
- 0x2200e782,
5268
- 0x006cf89b,
5269
- 0xf6584611,
5270
- 0xb160fd17,
5271
- 0xe72f7fa1,
5272
- 0xf66a4850,
5273
- 0xe775fe59,
5274
- 0xf66a484f,
5275
- 0xe771fe55,
5276
- 0xe8bdb003,
5277
- 0xf8da8ff0,
5278
- 0x7fa13010,
5279
- 0x3070f8cb,
5280
- 0x4593e71e,
5281
- 0xaf61f43f,
5282
- 0x48494948,
5283
- 0x22e6f240,
5284
- 0xf818f66b,
5285
- 0xf413683b,
5286
- 0xf47f2fe0,
5287
- 0x6832af5b,
5288
- 0x49446833,
5289
- 0xf3c30fd0,
5290
- 0x46057380,
5291
- 0x20024602,
5292
- 0xf66a9301,
5293
- 0x9b01fe81,
5294
- 0x0205ea53,
5295
- 0xf43f4628,
5296
- 0x4d2baf49,
5297
- 0x46199a00,
5298
- 0x323cf8d5,
5299
- 0x68334798,
5300
- 0x4300f023,
5301
- 0x68336033,
5302
- 0x4380f023,
5303
- 0xe7396033,
5304
- 0x2010f8da,
5305
- 0x529cf502,
5306
- 0x32084631,
5307
- 0xf8dae005,
5308
- 0x1ad33010,
5309
- 0xf2c02b00,
5310
- 0x680b80b2,
5311
- 0xd5f6071b,
5312
- 0x8080f8df,
5313
- 0x3000f8d8,
5314
- 0x0308f023,
5315
- 0x3000f8c8,
5316
- 0x3000f8d8,
5317
- 0xd51206de,
5318
- 0x49274e15,
5319
- 0xf66a2002,
5320
- 0xf8d6fe4b,
5321
- 0xf005323c,
5322
- 0x08780101,
5323
- 0x4798465a,
5324
- 0x3000f8d8,
5325
- 0x0310f023,
5326
- 0x3000f8c8,
5327
- 0x4b1fe722,
5328
- 0x4e0b491f,
5329
- 0x601d2501,
5330
- 0xf66a2002,
5331
- 0x4b1dfe35,
5332
- 0xe717601d,
5333
- 0x22304b1c,
5334
- 0xf657601a,
5335
- 0xe745fddb,
5336
- 0x00178bb8,
5337
- 0x40320074,
5338
- 0x40320070,
5339
- 0x00173244,
5340
- 0x00171a30,
5341
- 0x00178d48,
5342
- 0x00175aa8,
5343
- 0x00173250,
5344
- 0x00177738,
5345
- 0x4032008c,
5346
- 0x001c57ec,
5347
- 0x4033b390,
5348
- 0x00173270,
5349
- 0x0017192c,
5350
- 0x001c578c,
5351
- 0x4032004c,
5352
- 0x001c5790,
5353
- 0x001c57a8,
5354
- 0x001c57bc,
5355
- 0x001c5a70,
5356
- 0x001c57d0,
5357
- 0x001c57e0,
5358
- 0x001c580c,
5359
- 0x40328564,
5360
- 0x001c5818,
5361
- 0x40328568,
5362
- 0x40320038,
5363
- 0x00178d3c,
5364
- 0x40501000,
5365
- 0x4032006c,
5366
- 0x8310f3ef,
5367
- 0xd40307d8,
5368
- 0x4b31b672,
5369
- 0x601a2201,
5370
- 0x4f314b30,
5371
- 0x3201681a,
5372
- 0x2100601a,
5373
- 0x6039683a,
5374
- 0x080ff002,
5375
- 0x2010f8da,
5376
- 0x46164631,
5377
- 0xf247460a,
5378
- 0xe0045030,
5379
- 0x1010f8da,
5380
- 0x42811b89,
5381
- 0x6839d81b,
5382
- 0xd1f70709,
5383
- 0x49264825,
5384
- 0xc000f8d0,
5385
- 0x4616680f,
5386
- 0x2010f8da,
5387
- 0x0f00f1b8,
5388
- 0x4a22d11a,
5389
- 0x60112104,
5390
- 0xb132681a,
5391
- 0x3a01491a,
5392
- 0x680b601a,
5393
- 0xb103b90a,
5394
- 0x682ab662,
5395
- 0x491ce6b0,
5396
- 0x20029200,
5397
- 0xfdb0f66a,
5398
- 0x9a004b14,
5399
- 0x4919e7d3,
5400
- 0xf66a2002,
5401
- 0xe74bfda9,
5402
- 0x070cea07,
5403
- 0xd4e0077f,
5404
- 0x1600e9cd,
5405
- 0x46164680,
5406
- 0x077ae001,
5407
- 0x9a00d412,
5408
- 0x7000f8d8,
5409
- 0xf8da6812,
5410
- 0xf2471010,
5411
- 0x1b895030,
5412
- 0xea074281,
5413
- 0xd9f00702,
5414
- 0x2002490b,
5415
- 0xfd8cf66a,
5416
- 0xe7ea4b02,
5417
- 0xe7c49e01,
5418
- 0x0017569c,
5419
- 0x00172600,
5420
- 0x40320038,
5421
- 0x4032806c,
5422
- 0x40328074,
5423
- 0x40328070,
5424
- 0x001c5828,
5425
- 0x001c57f8,
5426
- 0x001c5834,
5427
- 0xf890b5f8,
5428
- 0x2b003064,
5429
- 0xf890d03a,
5430
- 0x4604308a,
5431
- 0xd1362b00,
5432
- 0xf8944e32,
5433
- 0x4a32306c,
5434
- 0x6a674932,
5435
- 0xeb036a09,
5436
- 0xeb021383,
5437
- 0x42a103c3,
5438
- 0x443d685d,
5439
- 0xf8d6d044,
5440
- 0x462931e0,
5441
- 0x0018f104,
5442
- 0x46204798,
5443
- 0xfafaf65e,
5444
- 0x1080f8d4,
5445
- 0x3214f8d6,
5446
- 0x46204439,
5447
- 0xf8d64798,
5448
- 0x462a30a4,
5449
- 0x46204639,
5450
- 0xb9784798,
5451
- 0x3078f894,
5452
- 0x49216862,
5453
- 0xb2db3301,
5454
- 0x0201f042,
5455
- 0xf8846809,
5456
- 0x60623078,
5457
- 0x4293780a,
5458
- 0xd029d811,
5459
- 0x3b01bdf8,
5460
- 0x2b01b2db,
5461
- 0x308af880,
5462
- 0x2b02d912,
5463
- 0xd1c04e13,
5464
- 0x0063f890,
5465
- 0x31c0f8d6,
5466
- 0x47982100,
5467
- 0xf8d6e7b9,
5468
- 0xf8941164,
5469
- 0x4622006c,
5470
- 0x40f8e8bd,
5471
- 0xbb84f658,
5472
- 0x40f8e8bd,
5473
- 0xbb3af65e,
5474
- 0x62654b0c,
5475
- 0x30b5f893,
5476
- 0xd1ba2b00,
5477
- 0x681b4b0a,
5478
- 0x2b02781b,
5479
- 0xe7b4d1af,
5480
- 0xe8bd4620,
5481
- 0xf66540f8,
5482
- 0xbf00b8d1,
5483
- 0x00171a30,
5484
- 0x00175aa8,
5485
- 0x00178d3c,
5486
- 0x00173244,
5487
- 0x0017192c,
5488
- 0x00173270,
5489
- 0x4c5cb538,
5490
- 0x68224b5c,
5491
- 0xf002495c,
5492
- 0x701a020f,
5493
- 0xf66a2002,
5494
- 0x6823fcef,
5495
- 0xd02e0718,
5496
- 0x4a594958,
5497
- 0x2000680b,
5498
- 0x4300f023,
5499
- 0x6020600b,
5500
- 0x07596813,
5501
- 0x4b55d5fc,
5502
- 0x4a554952,
5503
- 0x60182004,
5504
- 0xf043680b,
5505
- 0x600b4300,
5506
- 0xf0436813,
5507
- 0x60136300,
5508
- 0x20024950,
5509
- 0xfcd0f66a,
5510
- 0x4a4f4b47,
5511
- 0x494f4847,
5512
- 0x601c2420,
5513
- 0x24016813,
5514
- 0x0310f043,
5515
- 0x70446013,
5516
- 0x781b680b,
5517
- 0xd0382b03,
5518
- 0xd0062b01,
5519
- 0x4a44bd38,
5520
- 0xf0236813,
5521
- 0x60136300,
5522
- 0x4a45e7e2,
5523
- 0x035b6813,
5524
- 0x4a44d5fc,
5525
- 0x311c6911,
5526
- 0x1acb6913,
5527
- 0xdafb2b00,
5528
- 0x681c4b41,
5529
- 0x4b41b174,
5530
- 0xf9b3681b,
5531
- 0x2b003000,
5532
- 0x4a3fdb4e,
5533
- 0xf8b268e3,
5534
- 0x4a3a10b2,
5535
- 0x21041a5b,
5536
- 0x60916313,
5537
- 0x4a3c493b,
5538
- 0xf443680b,
5539
- 0x600b4300,
5540
- 0xf4436d13,
5541
- 0x65134300,
5542
- 0xf0236dd3,
5543
- 0xf0430303,
5544
- 0xf0434300,
5545
- 0x65d30301,
5546
- 0x4b2fbd38,
5547
- 0xb174681c,
5548
- 0x681b4b2e,
5549
- 0x3000f9b3,
5550
- 0xdb152b00,
5551
- 0x68e34a2c,
5552
- 0x10b2f8b2,
5553
- 0x1a5b4a27,
5554
- 0x63132104,
5555
- 0x4b2b6091,
5556
- 0xf042681a,
5557
- 0x601a0201,
5558
- 0x075a681b,
5559
- 0x4b28d5ae,
5560
- 0x7200f44f,
5561
- 0xbd38601a,
5562
- 0x4d214b1e,
5563
- 0x68e3691a,
5564
- 0x10b2f8b5,
5565
- 0x1a521a9a,
5566
- 0xdae32a00,
5567
- 0x48224921,
5568
- 0x32dbf240,
5569
- 0xfddef66a,
5570
- 0xf8b568e3,
5571
- 0xe7d910b2,
5572
- 0x69124d17,
5573
- 0xf8b568e3,
5574
- 0x1a9a10b2,
5575
- 0x2a001a52,
5576
- 0x4918daab,
5577
- 0xf2404818,
5578
- 0xf66a32e9,
5579
- 0x68e3fdcb,
5580
- 0x10b2f8b5,
5581
- 0xbf00e7a1,
5582
- 0x40320038,
5583
- 0x00172604,
5584
- 0x001c5844,
5585
- 0x40328074,
5586
- 0x4032806c,
5587
- 0x40328070,
5588
- 0x40328048,
5589
- 0x001c584c,
5590
- 0x40580010,
5591
- 0x00173274,
5592
- 0x40041020,
5593
- 0x40501000,
5594
- 0x00178bf0,
5595
- 0x00173250,
5596
- 0x0017192c,
5597
- 0x40240014,
5598
- 0x40506000,
5599
- 0x40044084,
5600
- 0x40044100,
5601
- 0x001c5a8c,
5602
- 0x001c5854,
5603
- 0xf890b380,
5604
- 0xb36b3064,
5605
- 0x47f0e92d,
5606
- 0x4a7b4b7a,
5607
- 0xf8df4e7b,
5608
- 0xf8df920c,
5609
- 0x4d7a8240,
5610
- 0x460c487a,
5611
- 0x2702497a,
5612
- 0xc470f8d1,
5613
- 0x7180f8c3,
5614
- 0x49786892,
5615
- 0xc044f8c2,
5616
- 0x601f2201,
5617
- 0xf8d97032,
5618
- 0x680b2010,
5619
- 0xf0236072,
5620
- 0x600b0302,
5621
- 0x1000f8d8,
5622
- 0xc0b2f8b5,
5623
- 0x68018f8b,
5624
- 0xebb34463,
5625
- 0xea4f1f41,
5626
- 0xd3021a41,
5627
- 0x87f0e8bd,
5628
- 0x496b4770,
5629
- 0xf66a4638,
5630
- 0xf8d9fbdf,
5631
- 0x68f32010,
5632
- 0x2b001a9b,
5633
- 0xf2804b67,
5634
- 0xf89380a2,
5635
- 0xf8932d23,
5636
- 0x2a012d24,
5637
- 0xf893d90a,
5638
- 0x68612d23,
5639
- 0xf0002a00,
5640
- 0xf893809e,
5641
- 0x3a012d23,
5642
- 0xaa02fb01,
5643
- 0x3d23f893,
5644
- 0x4652495d,
5645
- 0xf66a2002,
5646
- 0xf8d8fbbf,
5647
- 0xf8b53000,
5648
- 0x8f9a00b2,
5649
- 0x4b594955,
5650
- 0xc178f8df,
5651
- 0x680b691c,
5652
- 0xebaa4402,
5653
- 0xf0220202,
5654
- 0xf0030703,
5655
- 0x433b0303,
5656
- 0x600b4f53,
5657
- 0x60b2683b,
5658
- 0x0301f043,
5659
- 0xf8dc603b,
5660
- 0xf8dc3000,
5661
- 0xf3c31000,
5662
- 0xf4210309,
5663
- 0xf043717f,
5664
- 0xf0210301,
5665
- 0x430b0103,
5666
- 0x3000f8cc,
5667
- 0x4422683b,
5668
- 0x60f2075b,
5669
- 0x4b47d503,
5670
- 0x7200f44f,
5671
- 0x4a46601a,
5672
- 0x68134c46,
5673
- 0xf043493d,
5674
- 0x60130308,
5675
- 0xf0436823,
5676
- 0x60230302,
5677
- 0xf5a2680b,
5678
- 0x3a1022fe,
5679
- 0x0301f043,
5680
- 0x6911600b,
5681
- 0x7196f501,
5682
- 0x1a5b6913,
5683
- 0xdbfb2b00,
5684
- 0x681b4b3b,
5685
- 0x2b01781b,
5686
- 0x493ad188,
5687
- 0x6a4b4c3a,
5688
- 0xf0236824,
5689
- 0xf04303ff,
5690
- 0x624b03df,
5691
- 0xf4236a4b,
5692
- 0xf443437f,
5693
- 0x624b435f,
5694
- 0x4b34b194,
5695
- 0xf9b3681b,
5696
- 0x2b003000,
5697
- 0x68e2db31,
5698
- 0x48316861,
5699
- 0xfb04f66a,
5700
- 0x10b2f8b5,
5701
- 0x4a2568e3,
5702
- 0x21041a5b,
5703
- 0x60916313,
5704
- 0x4a28492c,
5705
- 0xf443680b,
5706
- 0x600b4300,
5707
- 0xf4436d13,
5708
- 0x65134300,
5709
- 0xf0236dd3,
5710
- 0xf0430303,
5711
- 0xf0434300,
5712
- 0x65d30301,
5713
- 0xf4436813,
5714
- 0x60135380,
5715
- 0x4922e74e,
5716
- 0x3d23f893,
5717
- 0x46524638,
5718
- 0xfb2ef66a,
5719
- 0xf893e76d,
5720
- 0x3a012d24,
5721
- 0xaa02fb01,
5722
- 0x6913e760,
5723
- 0x1ad368e2,
5724
- 0x28001a18,
5725
- 0x4919dac8,
5726
- 0xf2404819,
5727
- 0xf66a4231,
5728
- 0xe7c0fca1,
5729
- 0xe000e100,
5730
- 0xe000ed00,
5731
- 0x00173254,
5732
- 0x0017192c,
5733
- 0x40328040,
5734
- 0x00171a30,
5735
- 0x40320084,
5736
- 0x001c589c,
5737
- 0x001e4000,
5738
- 0x001c58b8,
5739
- 0x40501000,
5740
- 0x40044084,
5741
- 0x40044100,
5742
- 0x40580010,
5743
- 0x40580018,
5744
- 0x00173274,
5745
- 0x40506000,
5746
- 0x00178bf0,
5747
- 0x00173250,
5748
- 0x001c58c8,
5749
- 0x40240014,
5750
- 0x001c58a4,
5751
- 0x001c5aac,
5752
- 0x001c5854,
5753
- 0x00173244,
5754
- 0x4ff0e92d,
5755
- 0x4abd4bbc,
5756
- 0xf852681b,
5757
- 0xf9b34020,
5758
- 0x4abb3000,
5759
- 0x8b02ed2d,
5760
- 0x02c0eb02,
5761
- 0xee082b00,
5762
- 0xb08b2a10,
5763
- 0xea4f4683,
5764
- 0xf2c005c0,
5765
- 0x462082c4,
5766
- 0xf8d0f669,
5767
- 0xf8534bb2,
5768
- 0xf1b9903b,
5769
- 0xf0000f00,
5770
- 0x230080e5,
5771
- 0x3303e9cd,
5772
- 0xf5059302,
5773
- 0x9301629e,
5774
- 0xf10b469a,
5775
- 0x9208039e,
5776
- 0x464c9305,
5777
- 0xf898e079,
5778
- 0x06df3004,
5779
- 0x80d2f140,
5780
- 0xf4226932,
5781
- 0x9a010900,
5782
- 0x9010f8c6,
5783
- 0x065d3201,
5784
- 0xf1009201,
5785
- 0x4fa180e0,
5786
- 0xf8d74620,
5787
- 0x47983418,
5788
- 0xf4036b63,
5789
- 0xf5b31360,
5790
- 0xbf081f20,
5791
- 0xf3ef46a2,
5792
- 0x07d98310,
5793
- 0xb672d403,
5794
- 0x22014b99,
5795
- 0x4d99601a,
5796
- 0xee18682b,
5797
- 0x33010a10,
5798
- 0xf669602b,
5799
- 0x6b63f951,
5800
- 0x1360f403,
5801
- 0x1f60f5b3,
5802
- 0x80a9f000,
5803
- 0xb133682b,
5804
- 0x3b014a8f,
5805
- 0x602b6812,
5806
- 0xb102b90b,
5807
- 0xf8dfb662,
5808
- 0xf8d88240,
5809
- 0x78193000,
5810
- 0xf419b391,
5811
- 0xd1050300,
5812
- 0x002ef9b4,
5813
- 0x28008de2,
5814
- 0x817ef2c0,
5815
- 0x302cf894,
5816
- 0x202af894,
5817
- 0xf8b44884,
5818
- 0xeb03c008,
5819
- 0x441303c3,
5820
- 0x530ef203,
5821
- 0xf8502901,
5822
- 0xeba22023,
5823
- 0xf840020c,
5824
- 0xf0002023,
5825
- 0x6ce080d5,
5826
- 0xf650b138,
5827
- 0xf8d8fd4f,
5828
- 0x781e3000,
5829
- 0xf0002e01,
5830
- 0x4621810f,
5831
- 0xf66a4658,
5832
- 0x6b63fc95,
5833
- 0x1360f403,
5834
- 0x1f60f5b3,
5835
- 0x80eaf000,
5836
- 0xf8534b6d,
5837
- 0x2c00403b,
5838
- 0xf8d4d05c,
5839
- 0x6d268048,
5840
- 0x0f00f1b8,
5841
- 0xaf7ff47f,
5842
- 0x8310f3ef,
5843
- 0xd40307d9,
5844
- 0x4b67b672,
5845
- 0x601a2201,
5846
- 0x682b4d66,
5847
- 0x0a10ee18,
5848
- 0x602b3301,
5849
- 0xf8ecf669,
5850
- 0xb133682b,
5851
- 0x3b014a60,
5852
- 0x602b6812,
5853
- 0xb102b90b,
5854
- 0x4f5cb662,
5855
- 0x9178f8df,
5856
- 0x817cf8df,
5857
- 0xf6764620,
5858
- 0xf8d7ff21,
5859
- 0x46203418,
5860
- 0xf8d74798,
5861
- 0x220033ac,
5862
- 0xf18bfa5f,
5863
- 0x47984620,
5864
- 0x302cf894,
5865
- 0x102af894,
5866
- 0xeb038922,
5867
- 0x440b03c3,
5868
- 0x530ef203,
5869
- 0x1023f859,
5870
- 0xf8491a8a,
5871
- 0xf8d82023,
5872
- 0x781b3000,
5873
- 0xd0642b01,
5874
- 0xd0532b02,
5875
- 0xd1082b03,
5876
- 0x3054f894,
5877
- 0xf0002b01,
5878
- 0x8de381db,
5879
- 0xf10007d9,
5880
- 0x4621814c,
5881
- 0xf66a4658,
5882
- 0x4b3ffc31,
5883
- 0x403bf853,
5884
- 0xd1a22c00,
5885
- 0xecbdb00b,
5886
- 0xe8bd8b02,
5887
- 0x4b388ff0,
5888
- 0xf9b3681b,
5889
- 0x2b003000,
5890
- 0x808bf2c0,
5891
- 0xe9dd4650,
5892
- 0xf6761201,
5893
- 0x4640fee7,
5894
- 0xfbeef659,
5895
- 0xe9cd2300,
5896
- 0x469a3301,
5897
- 0xf8d8e742,
5898
- 0xb1b220dc,
5899
- 0x8ce38811,
5900
- 0x1311eba3,
5901
- 0x030bf3c3,
5902
- 0x71fef240,
5903
- 0xd816428b,
5904
- 0xea4f2b3f,
5905
- 0xd8121113,
5906
- 0x0241eb02,
5907
- 0x030ff003,
5908
- 0xfa428852,
5909
- 0x07d8f303,
5910
- 0x9b02d509,
5911
- 0x93023301,
5912
- 0x0304f44f,
5913
- 0x0903ea49,
5914
- 0x9010f8c6,
5915
- 0xf44fe6fb,
5916
- 0xe7f72380,
5917
- 0x3054f894,
5918
- 0xf0002b01,
5919
- 0x8de38117,
5920
- 0xd5ae07da,
5921
- 0xf6682080,
5922
- 0xf8d8ff75,
5923
- 0x781b3000,
5924
- 0xf894e79c,
5925
- 0x2b013054,
5926
- 0x80f7f000,
5927
- 0x07db8de3,
5928
- 0x2080d59f,
5929
- 0xff66f668,
5930
- 0x3000f8d8,
5931
- 0xe78b781b,
5932
- 0x3054f894,
5933
- 0xf47f2b01,
5934
- 0xf890af26,
5935
- 0xf0433f20,
5936
- 0xf1060302,
5937
- 0xf8800110,
5938
- 0x22043f20,
5939
- 0xf6512012,
5940
- 0x8ba1fd2b,
5941
- 0x46224809,
5942
- 0xf91ef66a,
5943
- 0xbf00e713,
5944
- 0x00173250,
5945
- 0x0003fc40,
5946
- 0x00175980,
5947
- 0x00171a30,
5948
- 0x0017569c,
5949
- 0x00172600,
5950
- 0x00173278,
5951
- 0x001c5904,
5952
- 0x00173274,
5953
- 0x2b009b03,
5954
- 0x808bf040,
5955
- 0xf48bfa5f,
5956
- 0xf6682080,
5957
- 0x4620ff2f,
5958
- 0xfebef659,
5959
- 0x93032300,
5960
- 0xf1bae706,
5961
- 0xf47f0f00,
5962
- 0x49aaaf71,
5963
- 0xf24048aa,
5964
- 0xf66a42e7,
5965
- 0xe769fac7,
5966
- 0xe9d34ba8,
5967
- 0x69130201,
5968
- 0x46804798,
5969
- 0xf43f2800,
5970
- 0xf650aee8,
5971
- 0x4603fd49,
5972
- 0xf0002800,
5973
- 0x22008096,
5974
- 0x600249a1,
5975
- 0x605a6808,
5976
- 0x609a4440,
5977
- 0xf3ef6018,
5978
- 0x07d28210,
5979
- 0x812ef140,
5980
- 0x6829489c,
5981
- 0x31016802,
5982
- 0x0201f042,
5983
- 0x60026029,
5984
- 0x68124a98,
5985
- 0xd4fb0790,
5986
- 0x68124a97,
5987
- 0xf0002a00,
5988
- 0x4e968116,
5989
- 0x2a006872,
5990
- 0x8149f000,
5991
- 0x4a926053,
5992
- 0x681289b0,
5993
- 0x4b906073,
5994
- 0x30013201,
5995
- 0x601a81b0,
5996
- 0x68134a8c,
5997
- 0x0301f023,
5998
- 0x29006013,
5999
- 0xaeadf43f,
6000
- 0x39014b8b,
6001
- 0x6029681b,
6002
- 0xf47f2900,
6003
- 0x2b00aea6,
6004
- 0xaea3f43f,
6005
- 0xe6a0b662,
6006
- 0x49866d20,
6007
- 0x64a36503,
6008
- 0xf8946103,
6009
- 0x63e3502b,
6010
- 0xf3c29b05,
6011
- 0x20a4020e,
6012
- 0x0201f042,
6013
- 0x3005fb10,
6014
- 0x63a4f44f,
6015
- 0x1305fb03,
6016
- 0xeb0185e2,
6017
- 0x4a7c00c0,
6018
- 0x46219304,
6019
- 0xffe2f668,
6020
- 0xf4036b63,
6021
- 0xf5b31360,
6022
- 0xd0021f60,
6023
- 0x93032301,
6024
- 0x9804e686,
6025
- 0xfd60f656,
6026
- 0xf43f2800,
6027
- 0x4d73af6f,
6028
- 0x31fff895,
6029
- 0xf47f2b00,
6030
- 0x9b04af69,
6031
- 0xf8cd9a08,
6032
- 0xfa5fb00c,
6033
- 0xf8ddf48b,
6034
- 0x46d39014,
6035
- 0x4698189e,
6036
- 0xe00946ba,
6037
- 0xff74f668,
6038
- 0x3424f8da,
6039
- 0x46214638,
6040
- 0xf8954798,
6041
- 0xb92331ff,
6042
- 0x7039f858,
6043
- 0x2f004630,
6044
- 0x46dad1f0,
6045
- 0xb00cf8dd,
6046
- 0x2080e74a,
6047
- 0xfe7af668,
6048
- 0x4640e6af,
6049
- 0xfb92f650,
6050
- 0xf899e647,
6051
- 0x22043f20,
6052
- 0x0302f043,
6053
- 0x0110f106,
6054
- 0xf8892012,
6055
- 0xf6513f20,
6056
- 0x8de3fc43,
6057
- 0xf53f07da,
6058
- 0xe6fdaefc,
6059
- 0xf6539306,
6060
- 0x9b06f95d,
6061
- 0x28009007,
6062
- 0x80c0f000,
6063
- 0x4b509309,
6064
- 0x2a00681a,
6065
- 0x80c2f000,
6066
- 0xf6684618,
6067
- 0x9b07ff39,
6068
- 0xf04f2204,
6069
- 0x21120e00,
6070
- 0x70994684,
6071
- 0xf883701a,
6072
- 0xf883e001,
6073
- 0xf106e003,
6074
- 0x18980110,
6075
- 0xc018f8cd,
6076
- 0xfdc4f678,
6077
- 0x8a194b42,
6078
- 0xf5b19b09,
6079
- 0xd85a7fc3,
6080
- 0xb29b1c4b,
6081
- 0x00ca9309,
6082
- 0x4b3e9806,
6083
- 0x68188181,
6084
- 0x4b3d9907,
6085
- 0x0c02eb00,
6086
- 0x0e01f04f,
6087
- 0x1004f8cc,
6088
- 0x400b5881,
6089
- 0x6380f043,
6090
- 0x0308f043,
6091
- 0xf8995083,
6092
- 0x4a333782,
6093
- 0x82119909,
6094
- 0xf8894473,
6095
- 0x9b063782,
6096
- 0x22082100,
6097
- 0xc004f8c3,
6098
- 0xe00ef883,
6099
- 0x609a6019,
6100
- 0x8310f3ef,
6101
- 0xd40307db,
6102
- 0x4b25b672,
6103
- 0xe000f8c3,
6104
- 0x482a682b,
6105
- 0x33019906,
6106
- 0xf668602b,
6107
- 0xf8d7fea5,
6108
- 0x47983444,
6109
- 0xb133682b,
6110
- 0x3b014a1d,
6111
- 0x602b6812,
6112
- 0xb102b90b,
6113
- 0x8de3b662,
6114
- 0xf53f07d8,
6115
- 0xe67cae7b,
6116
- 0x69324b1f,
6117
- 0x601a681b,
6118
- 0xffaef64e,
6119
- 0x4b1de61d,
6120
- 0x421c681b,
6121
- 0xad37f47f,
6122
- 0x481b490a,
6123
- 0x6293f44f,
6124
- 0xf988f66a,
6125
- 0x2200e52f,
6126
- 0x46119309,
6127
- 0x4a17e7a4,
6128
- 0xbb6a6812,
6129
- 0x4e094a15,
6130
- 0xe6e86013,
6131
- 0x4a08b672,
6132
- 0xe6cd6016,
6133
- 0x001c5ad0,
6134
- 0x001c58ec,
6135
- 0x001755b4,
6136
- 0x001719e4,
6137
- 0x40240060,
6138
- 0x40240064,
6139
- 0x0017559c,
6140
- 0x0017569c,
6141
- 0x00177738,
6142
- 0x001c4001,
6143
- 0x00175780,
6144
- 0x0017469c,
6145
- 0x001755d4,
6146
- 0x31ff0000,
6147
- 0x001746a4,
6148
- 0x00180000,
6149
- 0x0017a5a0,
6150
- 0x001c58d4,
6151
- 0x40240068,
6152
- 0x9306480b,
6153
- 0xff78f669,
6154
- 0x9b066829,
6155
- 0x4809e7ca,
6156
- 0xf6699306,
6157
- 0x6829ff71,
6158
- 0xe6b09b06,
6159
- 0xb00b4806,
6160
- 0x8b02ecbd,
6161
- 0x4ff0e8bd,
6162
- 0xbcdef64f,
6163
- 0xe7f64803,
6164
- 0x001c591c,
6165
- 0x001c5924,
6166
- 0x001c5938,
6167
- 0x001c594c,
6168
- 0xf240b530,
6169
- 0xb0834003,
6170
- 0x4619460d,
6171
- 0xf6682308,
6172
- 0xe9d5f98d,
6173
- 0x46043200,
6174
- 0x3200e9c0,
6175
- 0xe9cd4611,
6176
- 0x48042200,
6177
- 0xff48f669,
6178
- 0xf6684620,
6179
- 0x2000f9af,
6180
- 0xbd30b003,
6181
- 0x001c5970,
6182
- 0x460cb570,
6183
- 0x4619b084,
6184
- 0x4012f240,
6185
- 0xf6682308,
6186
- 0x6822f971,
6187
- 0x429a4b12,
6188
- 0xd0104605,
6189
- 0x686168a3,
6190
- 0xe9c54810,
6191
- 0xe9cd2300,
6192
- 0x92003301,
6193
- 0xf669461a,
6194
- 0x4628ff27,
6195
- 0xf98ef668,
6196
- 0xb0042000,
6197
- 0xe9d4bd70,
6198
- 0x68116301,
6199
- 0x404b4808,
6200
- 0x404b4033,
6201
- 0xe9d46013,
6202
- 0x680a1300,
6203
- 0x68a29200,
6204
- 0xff12f669,
6205
- 0xe7dd6822,
6206
- 0x40344058,
6207
- 0x001c59cc,
6208
- 0x001c59b0,
6209
- 0xbf002332,
6210
- 0xf0133b01,
6211
- 0xd1fa03ff,
6212
- 0xbf004770,
6213
- 0xbf0023c8,
6214
- 0xf0133b01,
6215
- 0xd1fa03ff,
6216
- 0xbf004770,
6217
- 0x49724a71,
6218
- 0xf8df6813,
6219
- 0xf023c208,
6220
- 0xb5f00302,
6221
- 0x680b6013,
6222
- 0x4c6f4a6e,
6223
- 0xf4234f6f,
6224
- 0x600b6300,
6225
- 0x496e6813,
6226
- 0xf4232800,
6227
- 0xbf1c7380,
6228
- 0x468c4627,
6229
- 0x20326013,
6230
- 0x3801bf00,
6231
- 0x00fff010,
6232
- 0xf8dfd1fa,
6233
- 0x4a63e18c,
6234
- 0x3000f8de,
6235
- 0xf4234e65,
6236
- 0xf8ce5380,
6237
- 0x68133000,
6238
- 0x7300f423,
6239
- 0xf8de6013,
6240
- 0xf4433000,
6241
- 0xf8ce6380,
6242
- 0xf8de3000,
6243
- 0xf4433000,
6244
- 0xf8ce6300,
6245
- 0x46723000,
6246
- 0x1cc125ff,
6247
- 0x4664b2c9,
6248
- 0xf0236813,
6249
- 0x430b03ff,
6250
- 0xf8546013,
6251
- 0x60333b04,
6252
- 0xf4436813,
6253
- 0x60137380,
6254
- 0xbf00bf00,
6255
- 0xbf00bf00,
6256
- 0x049b6813,
6257
- 0x3901d5fc,
6258
- 0x428db2c9,
6259
- 0x3004d1e8,
6260
- 0x28803504,
6261
- 0xf10cb2ed,
6262
- 0xd1de0c10,
6263
- 0x3000f8de,
6264
- 0x6380f423,
6265
- 0x3000f8ce,
6266
- 0xbf0023c8,
6267
- 0xf0133b01,
6268
- 0xd1fa03ff,
6269
- 0x493f4c3e,
6270
- 0x48436822,
6271
- 0x6200f422,
6272
- 0x680a6022,
6273
- 0x0280f042,
6274
- 0x680a600a,
6275
- 0x7280f442,
6276
- 0x600a3f04,
6277
- 0xf022680a,
6278
- 0x431a021f,
6279
- 0xf857600a,
6280
- 0x60022f04,
6281
- 0xf042680a,
6282
- 0x600a0220,
6283
- 0xbf00bf00,
6284
- 0xbf00bf00,
6285
- 0x0552680a,
6286
- 0x3301d5fc,
6287
- 0xd1e92b10,
6288
- 0xf023680b,
6289
- 0x600b0380,
6290
- 0xbf0023c8,
6291
- 0xf0133b01,
6292
- 0xd1fa03ff,
6293
- 0x4a2d4927,
6294
- 0xf423680b,
6295
- 0x600b7380,
6296
- 0xf4436813,
6297
- 0x60131300,
6298
- 0xbf002332,
6299
- 0xf0133b01,
6300
- 0xd1fa03ff,
6301
- 0x4a1f4b1e,
6302
- 0x4d256819,
6303
- 0x48264c25,
6304
- 0xf4414e26,
6305
- 0x60195180,
6306
- 0xf4416811,
6307
- 0x60117100,
6308
- 0xf4416819,
6309
- 0x60196100,
6310
- 0x4b216811,
6311
- 0x7180f441,
6312
- 0x682a6011,
6313
- 0xf442491f,
6314
- 0x602a5280,
6315
- 0xf4226822,
6316
- 0x60222280,
6317
- 0xf0226802,
6318
- 0x60025200,
6319
- 0x60306818,
6320
- 0x45bbf5a5,
6321
- 0x685c3d78,
6322
- 0x689d602c,
6323
- 0x4a16600d,
6324
- 0x601568dd,
6325
- 0x691d4815,
6326
- 0xe9d36005,
6327
- 0x4c145005,
6328
- 0x602569db,
6329
- 0x61136108,
6330
- 0xbf00bdf0,
6331
- 0x40580018,
6332
- 0x40344060,
6333
- 0x4034406c,
6334
- 0x001718a4,
6335
- 0x00171824,
6336
- 0x00171624,
6337
- 0x40344064,
6338
- 0x40344070,
6339
- 0x40344058,
6340
- 0x40342014,
6341
- 0x40342018,
6342
- 0x4034201c,
6343
- 0x4033c218,
6344
- 0x001718e4,
6345
- 0x4033c220,
6346
- 0x4033c224,
6347
- 0x4033c228,
6348
- 0x4033c22c,
6349
- 0x00171324,
6350
- 0x6c616821,
6351
- 0x6e6f615f,
6352
- 0x656d6974,
6353
- 0x69745f72,
6354
- 0x705f656d,
6355
- 0x28747361,
6356
- 0x656d6974,
6357
- 0x743e2d72,
6358
- 0x20656d69,
6359
- 0x3035202b,
6360
- 0x00293030,
6361
- 0x616d786e,
6362
- 0x69745f63,
6363
- 0x6f5f656d,
6364
- 0x69615f6e,
6365
- 0x61765f72,
6366
- 0x5f64696c,
6367
- 0x66746567,
6368
- 0x21202928,
6369
- 0x0030203d,
6370
- 0x6d697464,
6371
- 0x2c64253a,
6372
- 0x252c6425,
6373
- 0x64252c64,
6374
- 0x00000a0d,
6375
- 0x6f76282a,
6376
- 0x6974616c,
6377
- 0x7520656c,
6378
- 0x38746e69,
6379
- 0x2a20745f,
6380
- 0x5f672629,
6381
- 0x5f6e6f61,
6382
- 0x72616873,
6383
- 0x642e6465,
6384
- 0x5f6d6974,
6385
- 0x5f746e63,
6386
- 0x736e6f61,
6387
- 0x65726168,
6388
- 0x203c2064,
6389
- 0x6f76282a,
6390
- 0x6974616c,
6391
- 0x7520656c,
6392
- 0x38746e69,
6393
- 0x2a20745f,
6394
- 0x5f672629,
6395
- 0x5f6e6f61,
6396
- 0x72616873,
6397
- 0x642e6465,
6398
- 0x5f6d6974,
6399
- 0x69726570,
6400
- 0x615f646f,
6401
- 0x68736e6f,
6402
- 0x64657261,
6403
- 0x00000000,
6404
- 0x00002c4c,
6405
- 0x654b849b,
6406
- 0x78646979,
6407
- 0x766e6920,
6408
- 0x64696c61,
6409
- 0x3230252c,
6410
- 0x00000a58,
6411
- 0x6e49849b,
6412
- 0x696c6176,
6413
- 0x656b2064,
6414
- 0x78646979,
6415
- 0x0000000a,
6416
- 0x6e49849b,
6417
- 0x696c6176,
6418
- 0x54532064,
6419
- 0x64253a41,
6420
- 0x0000000a,
6421
- 0x5f666976,
6422
- 0x20617473,
6423
- 0x76203d3d,
6424
- 0x00006669,
6425
- 0x64253d54,
6426
- 0x0d64252c,
6427
- 0x0000000a,
6428
- 0x3a4e4342,
6429
- 0x0a0d6425,
6430
- 0x00000000,
6431
- 0x206e6362,
6432
- 0x656e6f64,
6433
- 0x6d697420,
6434
- 0x74756f65,
6435
- 0x00000a0d,
6436
- 0x20736366,
6437
- 0x0a0d6b6f,
6438
- 0x00000000,
6439
- 0x20736366,
6440
- 0x20746f6e,
6441
- 0x0a0d6b6f,
6442
- 0x00000000,
6443
- 0x656c6469,
6444
- 0x72726520,
6445
- 0x00000a0d,
6446
- 0x656c6469,
6447
- 0x746e6920,
6448
- 0x72726520,
6449
- 0x00000a0d,
6450
- 0x2c642564,
6451
- 0x00000000,
6452
- 0x0a0d6564,
6453
- 0x00000000,
6454
- 0x6c616821,
6455
- 0x63616d5f,
6456
- 0x745f7768,
6457
- 0x5f656d69,
6458
- 0x74736170,
6459
- 0x6d697428,
6460
- 0x3e2d7265,
6461
- 0x656d6974,
6462
- 0x67202d20,
6463
- 0x6669775f,
6464
- 0x65735f69,
6465
- 0x6e697474,
6466
- 0x702e7367,
6467
- 0x6f5f7277,
6468
- 0x5f6e6570,
6469
- 0x64737973,
6470
- 0x79616c65,
6471
- 0x00000029,
6472
- 0x78253d74,
6473
- 0x00000a0d,
6474
- 0x20746f6e,
6475
- 0x74736170,
6476
- 0x6425203a,
6477
- 0x0d64252c,
6478
- 0x0000000a,
6479
- 0x73736170,
6480
- 0x6425203a,
6481
- 0x0d64252c,
6482
- 0x0000000a,
6483
- 0x3a706c73,
6484
- 0x252c7825,
6485
- 0x000a0d78,
6486
- 0x655f656b,
6487
- 0x675f7476,
6488
- 0x29287465,
6489
- 0x65202620,
6490
- 0x625f7476,
6491
- 0x00007469,
6492
- 0x65647874,
6493
- 0x665f6373,
6494
- 0x74737269,
6495
- 0x203d2120,
6496
- 0x4c4c554e,
6497
- 0x00000000,
6498
- 0x73212121,
6499
- 0x20646e65,
6500
- 0x206d6663,
6501
- 0x78253a31,
6502
- 0x0d78252c,
6503
- 0x0000000a,
6504
- 0x0d677562,
6505
- 0x0000000a,
6506
- 0x6f696473,
6507
- 0x69617420,
6508
- 0x7265206c,
6509
- 0x0d726f72,
6510
- 0x0000000a,
6511
- 0x3a727265,
6512
- 0x206f6e20,
6513
- 0x2067736d,
6514
- 0x21746b70,
6515
- 0x00000a0d,
6516
- 0x21727265,
6517
- 0x74202121,
6518
- 0x63206c78,
6519
- 0x6e206d66,
6520
- 0x7562206f,
6521
- 0x72656666,
6522
- 0x726f6620,
6523
- 0x62737520,
6524
- 0x00000a0d,
6525
- 0x4244819d,
6526
- 0x57203a47,
6527
- 0x69746972,
6528
- 0x6d20676e,
6529
- 0x726f6d65,
6530
- 0x69772079,
6531
- 0x30206874,
6532
- 0x38302578,
6533
- 0x202f2078,
6534
- 0x203a6425,
6535
- 0x2578305b,
6536
- 0x5d783830,
6537
- 0x30203d20,
6538
- 0x38302578,
6539
- 0x202f2078,
6540
- 0x000a6425,
6541
- 0x6b73616d,
6542
- 0x69727720,
6543
- 0x253a6574,
6544
- 0x78252c78,
6545
- 0x2c78252c,
6546
- 0x0a0d7825,
6547
- 0x00000000,
6548
- 0x4244819d,
6549
- 0x57203a47,
6550
- 0x69746972,
6551
- 0x6d20676e,
6552
- 0x726f6d65,
6553
- 0x69772079,
6554
- 0x6d206874,
6555
- 0x3a6b7361,
6556
- 0x30257830,
6557
- 0x202c7838,
6558
- 0x61746164,
6559
- 0x2578303a,
6560
- 0x20783830,
6561
- 0x6425202f,
6562
- 0x305b203a,
6563
- 0x38302578,
6564
- 0x3d205d78,
6565
- 0x25783020,
6566
- 0x20783830,
6567
- 0x6425202f,
6568
- 0x0000000a,
6569
- 0x5f6c6168,
6570
- 0x6863616d,
6571
- 0x78725f77,
6572
- 0x6e63625f,
6573
- 0x7275645f,
6574
- 0x6f697461,
6575
- 0x0000006e,
6576
- 0x5f6c6168,
6577
- 0x6863616d,
6578
- 0x6c735f77,
6579
- 0x5f706565,
6580
- 0x63656863,
6581
- 0x61705f6b,
6582
- 0x00686374,
6583
- 0x745f6d6d,
6584
- 0x5f747462,
6585
- 0x706d6f63,
6586
- 0x5f657475,
6587
- 0x63746170,
6588
- 0x00000068,
6589
- 0x735f6d6d,
6590
- 0x7065656c,
6591
- 0x6f666e69,
6592
- 0x5f78725f,
6593
- 0x5f747665,
6594
- 0x63746170,
6595
- 0x00000068,
6596
- 0x786e7772,
6597
- 0x656c735f,
6598
- 0x635f7065,
6599
- 0x61676b6c,
6600
- 0x635f6574,
6601
- 0x69666e6f,
6602
- 0x61705f67,
6603
- 0x00686374,
6604
- 0x786e7772,
6605
- 0x656c735f,
6606
- 0x645f7065,
6607
- 0x73706565,
6608
- 0x7065656c,
6609
- 0x6e6f635f,
6610
- 0x5f676966,
6611
- 0x63746170,
6612
- 0x00000068,
6613
- 0x5f6c7874,
6614
- 0x5f6d6663,
6615
- 0x5f747665,
6616
- 0x63746170,
6617
- 0x00000068,
6618
-
6619
-};
6620
-
6621
-u32 syscfg_tbl[][2] = {
6622
- //{0x40500014, 0x00000102}, // 1)
6623
- //{0x40500018, 0x0000010D}, // 2)
6624
- //{0x40500004, 0x00000010}, // 3) the order should not be changed
6625
- //{0x40503004, 0x11100000},//fix gpio
6626
- #ifdef CONFIG_PMIC_SETTING
6627
- #if 1 // U02 bootrom only
6628
- {0x40040000, 0x00001AC8}, // 1) fix panic
6629
- {0x40040084, 0x00011580},
6630
- {0x40040080, 0x00000001},
6631
- {0x40100058, 0x00000000},
6632
- #endif
6633
- {0x50000000, 0x03220204}, // 2) pmic interface init
6634
- {0x50019150, 0x00000002}, // 3) for 26m xtal, set div1
6635
- {0x50017008, 0x00000000}, // 4) stop wdg
6636
- #endif /* CONFIG_PMIC_SETTING */
6637
-};
6638
-
6639
-u32 syscfg_tbl_masked[][3] = {
6640
- {0x40506024, 0x000000FF, 0x000000DF}, // for clk gate lp_level
6641
- #ifdef CONFIG_PMIC_SETTING
6642
- //{0x50017008, 0x00000002, 0x00000000}, // stop wdg
6643
- #endif /* CONFIG_PMIC_SETTING */
6644
-};
6645
-
6646
-u32 rf_tbl_masked[][3] = {
6647
- {0x40344058, 0x00800000, 0x00000000},// pll trx
6648
-};
66495214
66505215 #if IS_ENABLED(CONFIG_SUNXI_ADDR_MGT)
66515216 #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0)
....@@ -6663,6 +5228,7 @@
66635228 *
66645229 */
66655230 extern int aicwf_vendor_init(struct wiphy *wiphy);
5231
+extern txpwr_idx_conf_t nvram_txpwr_idx;
66665232
66675233 int rwnx_cfg80211_init(struct rwnx_plat *rwnx_plat, void **platform_data)
66685234 {
....@@ -6675,8 +5241,10 @@
66755241 u8 dflt_mac[ETH_ALEN] = { 0x88, 0x00, 0x33, 0x77, 0x10, 0x99};
66765242 u8 addr_str[20];
66775243 struct mm_set_rf_calib_cfm cfm;
5244
+ struct mm_get_fw_version_cfm fw_version;
66785245 u8_l mac_addr_efuse[ETH_ALEN];
66795246 struct aicbsp_feature_t feature;
5247
+ struct mm_set_stack_start_cfm set_start_cfm;
66805248 (void)addr_str;
66815249
66825250 RWNX_DBG(RWNX_FN_ENTRY_STR);
....@@ -6707,8 +5275,8 @@
67075275 #endif
67085276 rwnx_hw->mod_params = &rwnx_mod_params;
67095277 rwnx_hw->tcp_pacing_shift = 7;
6710
- rwnx_hw->band_5g_support = feature.band_5g_support;
67115278
5279
+ aicwf_wakeup_lock_init(rwnx_hw);
67125280 rwnx_init_aic(rwnx_hw);
67135281 /* set device pointer for wiphy */
67145282 set_wiphy_dev(wiphy, rwnx_hw->dev);
....@@ -6753,7 +5321,35 @@
67535321 /* Cookie can not be 0 */
67545322 rwnx_hw->roc_cookie_cnt = 1;
67555323
5324
+ INIT_LIST_HEAD(&rwnx_hw->vifs);
5325
+ INIT_LIST_HEAD(&rwnx_hw->defrag_list);
5326
+ spin_lock_init(&rwnx_hw->defrag_lock);
5327
+ mutex_init(&rwnx_hw->mutex);
5328
+ mutex_init(&rwnx_hw->dbgdump_elem.mutex);
5329
+ spin_lock_init(&rwnx_hw->tx_lock);
5330
+ spin_lock_init(&rwnx_hw->cb_lock);
5331
+
5332
+ INIT_WORK(&rwnx_hw->apmStalossWork, apm_staloss_work_process);
5333
+ rwnx_hw->apmStaloss_wq = create_singlethread_workqueue("apmStaloss_wq");
5334
+ if (!rwnx_hw->apmStaloss_wq) {
5335
+ txrx_err("insufficient memory to create apmStaloss workqueue.\n");
5336
+ goto err_cache;
5337
+ }
5338
+
67565339 wiphy->mgmt_stypes = rwnx_default_mgmt_stypes;
5340
+
5341
+ rwnx_hw->fwlog_en = feature.fwlog_en;
5342
+ ret = rwnx_send_set_stack_start_req(rwnx_hw, 1, feature.hwinfo < 0, feature.hwinfo, feature.fwlog_en, &set_start_cfm);
5343
+ if (ret)
5344
+ goto err_lmac_reqs;
5345
+
5346
+ printk("is 5g support = %d, vendor_info = 0x%02X\n", set_start_cfm.is_5g_support, set_start_cfm.vendor_info);
5347
+ rwnx_hw->band_5g_support = set_start_cfm.is_5g_support;
5348
+ rwnx_hw->vendor_info = (feature.hwinfo < 0) ? set_start_cfm.vendor_info : feature.hwinfo;
5349
+
5350
+ ret = rwnx_send_get_fw_version_req(rwnx_hw, &fw_version);
5351
+ memcpy(wiphy->fw_version, fw_version.fw_version, fw_version.fw_version_len > 32 ? 32 : fw_version.fw_version_len);
5352
+ printk("Firmware Version: %s", fw_version.fw_version);
67575353
67585354 wiphy->bands[NL80211_BAND_2GHZ] = &rwnx_band_2GHz;
67595355 if (rwnx_hw->band_5g_support)
....@@ -6796,7 +5392,7 @@
67965392 #endif
67975393 0;
67985394
6799
-#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0)
5395
+#if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 17, 0) || defined(CONFIG_WPA3_FOR_OLD_KERNEL)
68005396 wiphy->features |= NL80211_FEATURE_SAE;
68015397 #endif
68025398
....@@ -6824,13 +5420,6 @@
68245420
68255421 tasklet_init(&rwnx_hw->task, rwnx_task, (unsigned long)rwnx_hw);
68265422
6827
- INIT_LIST_HEAD(&rwnx_hw->vifs);
6828
-
6829
- mutex_init(&rwnx_hw->mutex);
6830
- mutex_init(&rwnx_hw->dbgdump_elem.mutex);
6831
- spin_lock_init(&rwnx_hw->tx_lock);
6832
- spin_lock_init(&rwnx_hw->cb_lock);
6833
-
68345423 //system_config(rwnx_hw);
68355424
68365425 ret = rwnx_platform_on(rwnx_hw, NULL);
....@@ -6845,8 +5434,15 @@
68455434
68465435 //rf_config(rwnx_hw);
68475436 #endif
6848
-
68495437 ret = rwnx_send_rf_calib_req(rwnx_hw, &cfm);
5438
+ if (ret)
5439
+ goto err_lmac_reqs;
5440
+
5441
+ ret = rwnx_send_txpwr_idx_req(rwnx_hw);
5442
+ if (ret)
5443
+ goto err_lmac_reqs;
5444
+
5445
+ ret = rwnx_send_txpwr_ofst_req(rwnx_hw);
68505446 if (ret)
68515447 goto err_lmac_reqs;
68525448 #if 0
....@@ -6922,14 +5518,13 @@
69225518 rwnx_send_me_chan_config_req(rwnx_hw);
69235519 *platform_data = rwnx_hw;
69245520
6925
-#if 0
5521
+#ifdef CONFIG_DEBUG_FS
69265522 ret = rwnx_dbgfs_register(rwnx_hw, "rwnx");
69275523 if (ret) {
69285524 wiphy_err(wiphy, "Failed to register debugfs entries");
69295525 goto err_debugfs;
69305526 }
69315527 #endif
6932
-
69335528 rtnl_lock();
69345529
69355530 /* Add an initial station interface */
....@@ -6949,18 +5544,20 @@
69495544 return 0;
69505545
69515546 err_add_interface:
6952
-//err_debugfs:
6953
-
5547
+#ifdef CONFIG_DEBUG_FS
5548
+ rwnx_dbgfs_unregister(rwnx_hw);
5549
+err_debugfs:
5550
+#endif
69545551 wiphy_unregister(rwnx_hw->wiphy);
69555552 err_register_wiphy:
69565553 err_lmac_reqs:
69575554 printk("err_lmac_reqs\n");
6958
- //rwnx_fw_trace_dump(rwnx_hw);
69595555 rwnx_platform_off(rwnx_hw, NULL);
69605556 err_platon:
69615557 //err_config:
69625558 kmem_cache_destroy(rwnx_hw->sw_txhdr_cache);
69635559 err_cache:
5560
+ aicwf_wakeup_lock_deinit(rwnx_hw);
69645561 wiphy_free(wiphy);
69655562 err_out:
69665563 return ret;
....@@ -6971,15 +5568,42 @@
69715568 */
69725569 void rwnx_cfg80211_deinit(struct rwnx_hw *rwnx_hw)
69735570 {
5571
+ struct mm_set_stack_start_cfm set_start_cfm;
5572
+ struct defrag_ctrl_info *defrag_ctrl = NULL;
5573
+
69745574 RWNX_DBG(RWNX_FN_ENTRY_STR);
69755575
5576
+#ifdef AICWF_USB_SUPPORT
5577
+ if (rwnx_hw->usbdev->bus_if->state != BUS_DOWN_ST)
5578
+#else
5579
+ if (rwnx_hw->sdiodev->bus_if->state != BUS_DOWN_ST)
5580
+#endif
5581
+ rwnx_send_set_stack_start_req(rwnx_hw, 0, 0, 0, 0, &set_start_cfm);
5582
+
5583
+ rwnx_hw->fwlog_en = 0;
5584
+ spin_lock_bh(&rwnx_hw->defrag_lock);
5585
+ if (!list_empty(&rwnx_hw->defrag_list)) {
5586
+ list_for_each_entry(defrag_ctrl, &rwnx_hw->defrag_list, list) {
5587
+ list_del_init(&defrag_ctrl->list);
5588
+ if (timer_pending(&defrag_ctrl->defrag_timer))
5589
+ del_timer_sync(&defrag_ctrl->defrag_timer);
5590
+ dev_kfree_skb(defrag_ctrl->skb);
5591
+ kfree(defrag_ctrl);
5592
+ }
5593
+ }
5594
+ spin_unlock_bh(&rwnx_hw->defrag_lock);
5595
+#ifdef CONFIG_DEBUG_FS
69765596 rwnx_dbgfs_unregister(rwnx_hw);
5597
+#endif
5598
+ flush_workqueue(rwnx_hw->apmStaloss_wq);
5599
+ destroy_workqueue(rwnx_hw->apmStaloss_wq);
69775600
69785601 rwnx_wdev_unregister(rwnx_hw);
69795602 wiphy_unregister(rwnx_hw->wiphy);
69805603 rwnx_radar_detection_deinit(&rwnx_hw->radar);
69815604 rwnx_platform_off(rwnx_hw, NULL);
69825605 kmem_cache_destroy(rwnx_hw->sw_txhdr_cache);
5606
+ aicwf_wakeup_lock_deinit(rwnx_hw);
69835607 wiphy_free(rwnx_hw->wiphy);
69845608 }
69855609
....@@ -6999,11 +5623,19 @@
69995623 //static DECLARE_WORK(aicsmac_driver_work, aicsmac_driver_register);
70005624
70015625 struct completion hostif_register_done;
5626
+static int rwnx_driver_err = -1;
70025627
70035628 #define REGISTRATION_TIMEOUT 9000
70045629
70055630 void aicwf_hostif_ready(void)
70065631 {
5632
+ rwnx_driver_err = 0;
5633
+ complete(&hostif_register_done);
5634
+}
5635
+
5636
+void aicwf_hostif_fail(void)
5637
+{
5638
+ rwnx_driver_err = 1;
70075639 complete(&hostif_register_done);
70085640 }
70095641
....@@ -7012,19 +5644,23 @@
70125644 RWNX_DBG(RWNX_FN_ENTRY_STR);
70135645 rwnx_print_version();
70145646
7015
- init_completion(&hostif_register_done);
5647
+ if (aicbsp_set_subsys(AIC_WIFI, AIC_PWR_ON) < 0) {
5648
+ printk("%s, set power on fail!\n", __func__);
5649
+ return -ENODEV;
5650
+ }
70165651
7017
- aicbsp_set_subsys(AIC_WIFI, AIC_PWR_ON);
5652
+ init_completion(&hostif_register_done);
70185653 aicsmac_driver_register();
70195654
7020
- if ((wait_for_completion_timeout(&hostif_register_done, msecs_to_jiffies(REGISTRATION_TIMEOUT)) == 0)) {
5655
+ if ((wait_for_completion_timeout(&hostif_register_done, msecs_to_jiffies(REGISTRATION_TIMEOUT)) == 0) || rwnx_driver_err) {
70215656 printk("register_driver timeout or error\n");
70225657 #ifdef AICWF_SDIO_SUPPORT
70235658 aicwf_sdio_exit();
70245659 #endif /* AICWF_SDIO_SUPPORT */
70255660 #ifdef AICWF_USB_SUPPORT
7026
- aicwf_usb_exit();
5661
+ aicwf_usb_exit();
70275662 #endif /*AICWF_USB_SUPPORT */
5663
+ aicbsp_set_subsys(AIC_WIFI, AIC_PWR_OFF);
70285664 return -ENODEV;
70295665 }
70305666