old mode 100644new mode 100755.. | .. |
---|
48 | 48 | #include "aicwf_usb.h" |
---|
49 | 49 | #endif |
---|
50 | 50 | #include "aic_bsp_export.h" |
---|
| 51 | +#include "rwnx_wakelock.h" |
---|
51 | 52 | |
---|
52 | 53 | #define RW_DRV_DESCRIPTION "RivieraWaves 11nac driver for Linux cfg80211" |
---|
53 | 54 | #define RW_DRV_COPYRIGHT "Copyright(c) 2015-2017 RivieraWaves" |
---|
.. | .. |
---|
313 | 314 | |
---|
314 | 315 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)) || defined(CONFIG_HE_FOR_OLD_KERNEL) |
---|
315 | 316 | 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), |
---|
317 | 318 | .he_cap = RWNX_HE_CAPABILITIES, |
---|
318 | 319 | }; |
---|
319 | 320 | #endif |
---|
.. | .. |
---|
678 | 679 | |
---|
679 | 680 | static void rwnx_del_csa(struct rwnx_vif *vif) |
---|
680 | 681 | { |
---|
681 | | - struct rwnx_hw *rwnx_hw = vif->rwnx_hw; |
---|
682 | 682 | struct rwnx_csa *csa = vif->ap.csa; |
---|
683 | 683 | |
---|
684 | 684 | if (!csa) |
---|
685 | 685 | return; |
---|
686 | 686 | |
---|
687 | | - rwnx_ipc_elem_var_deallocs(rwnx_hw, &csa->elem); |
---|
688 | 687 | rwnx_del_bcn(&csa->bcn); |
---|
689 | 688 | kfree(csa); |
---|
690 | 689 | vif->ap.csa = NULL; |
---|
691 | 690 | } |
---|
692 | | - |
---|
| 691 | +#if LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0) |
---|
693 | 692 | static void rwnx_csa_finish(struct work_struct *ws) |
---|
694 | 693 | { |
---|
695 | 694 | struct rwnx_csa *csa = container_of(ws, struct rwnx_csa, work); |
---|
696 | 695 | struct rwnx_vif *vif = csa->vif; |
---|
697 | 696 | struct rwnx_hw *rwnx_hw = vif->rwnx_hw; |
---|
698 | 697 | int error = csa->status; |
---|
| 698 | + u8 *buf, *pos; |
---|
699 | 699 | |
---|
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, |
---|
702 | 730 | csa->bcn.len, csa->bcn.head_len, |
---|
703 | 731 | csa->bcn.tim_len, NULL); |
---|
| 732 | + } |
---|
704 | 733 | |
---|
705 | 734 | if (error) { |
---|
706 | 735 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(3, 16, 0)) |
---|
.. | .. |
---|
726 | 755 | } |
---|
727 | 756 | rwnx_del_csa(vif); |
---|
728 | 757 | } |
---|
| 758 | +#endif |
---|
729 | 759 | |
---|
730 | 760 | /** |
---|
731 | 761 | * rwnx_external_auth_enable - Enable external authentication on a vif |
---|
.. | .. |
---|
949 | 979 | rwnx_hw->scan_request = NULL; |
---|
950 | 980 | |
---|
951 | 981 | ret = rwnx_send_scanu_cancel_req(rwnx_hw, NULL); |
---|
| 982 | + mdelay(35);//make sure firmware take affect |
---|
952 | 983 | if (ret) { |
---|
953 | 984 | printk("scanu_cancel fail\n"); |
---|
954 | 985 | 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"); |
---|
955 | 1010 | } |
---|
956 | 1011 | } |
---|
957 | 1012 | |
---|
.. | .. |
---|
960 | 1015 | if (usbdev->state != USB_DOWN_ST) |
---|
961 | 1016 | rwnx_send_remove_if (rwnx_hw, rwnx_vif->vif_index, false); |
---|
962 | 1017 | } |
---|
963 | | -#elif defined(AICWF_SDIO_SUPPORT) |
---|
| 1018 | +#endif |
---|
| 1019 | +#if defined(AICWF_SDIO_SUPPORT) |
---|
964 | 1020 | bus_if = dev_get_drvdata(rwnx_hw->dev); |
---|
965 | 1021 | if (bus_if) { |
---|
966 | 1022 | sdiodev = bus_if->bus_priv.sdio; |
---|
.. | .. |
---|
969 | 1025 | if (sdiodev->bus_if->state != BUS_DOWN_ST) |
---|
970 | 1026 | rwnx_send_remove_if (rwnx_hw, rwnx_vif->vif_index, false); |
---|
971 | 1027 | } |
---|
972 | | -#else |
---|
973 | 1028 | #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 | | - |
---|
981 | 1029 | /* Ensure that we won't process disconnect ind */ |
---|
982 | 1030 | spin_lock_bh(&rwnx_hw->cb_lock); |
---|
983 | 1031 | |
---|
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 | | - |
---|
999 | 1032 | rwnx_hw->vif_table[rwnx_vif->vif_index] = NULL; |
---|
1000 | | - spin_unlock_bh(&rwnx_hw->cb_lock); |
---|
1001 | 1033 | |
---|
1002 | 1034 | rwnx_chanctx_unlink(rwnx_vif); |
---|
1003 | 1035 | |
---|
.. | .. |
---|
1005 | 1037 | rwnx_hw->monitor_vif = RWNX_INVALID_VIF; |
---|
1006 | 1038 | |
---|
1007 | 1039 | rwnx_hw->vif_started--; |
---|
| 1040 | + spin_unlock_bh(&rwnx_hw->cb_lock); |
---|
| 1041 | + |
---|
1008 | 1042 | if (rwnx_hw->vif_started == 0) { |
---|
1009 | 1043 | /* This also lets both ipc sides remain in sync before resetting */ |
---|
1010 | 1044 | #if 0 |
---|
.. | .. |
---|
1041 | 1075 | enum { |
---|
1042 | 1076 | SET_TX, |
---|
1043 | 1077 | SET_TXSTOP, |
---|
| 1078 | + SET_TXTONE, |
---|
1044 | 1079 | SET_RX, |
---|
1045 | 1080 | GET_RX_RESULT, |
---|
1046 | 1081 | SET_RXSTOP, |
---|
1047 | 1082 | SET_RXMETER, |
---|
1048 | | - SET_FREQ_CAL, |
---|
1049 | | - GET_EFUSE, |
---|
1050 | 1083 | SET_POWER, |
---|
1051 | 1084 | SET_XTAL_CAP, |
---|
1052 | 1085 | SET_XTAL_CAP_FINE, |
---|
| 1086 | + GET_EFUSE, |
---|
| 1087 | + SET_FREQ_CAL, |
---|
| 1088 | + SET_FREQ_CAL_FINE, |
---|
| 1089 | + GET_FREQ_CAL, |
---|
1053 | 1090 | SET_MAC_ADDR, |
---|
1054 | 1091 | 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, |
---|
1055 | 1103 | SETSUSPENDMODE, |
---|
1056 | 1104 | }; |
---|
1057 | 1105 | |
---|
.. | .. |
---|
1078 | 1126 | #endif |
---|
1079 | 1127 | |
---|
1080 | 1128 | #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 | | - |
---|
1115 | 1129 | |
---|
1116 | 1130 | static int parse_line (char *line, char *argv[]) |
---|
1117 | 1131 | { |
---|
.. | .. |
---|
1216 | 1230 | u8_l pwr; |
---|
1217 | 1231 | u8_l xtal_cap; |
---|
1218 | 1232 | u8_l xtal_cap_fine; |
---|
| 1233 | + u8_l vendor_info; |
---|
1219 | 1234 | u8_l setsusp_mode; |
---|
1220 | 1235 | #endif |
---|
1221 | 1236 | int ret = 0; |
---|
1222 | | - |
---|
1223 | | - RWNX_DBG(RWNX_FN_ENTRY_STR); |
---|
1224 | 1237 | |
---|
1225 | 1238 | argc = parse_line(command, argv); |
---|
1226 | 1239 | if (argc == 0) { |
---|
.. | .. |
---|
1266 | 1279 | #ifdef AICWF_USB_SUPPORT |
---|
1267 | 1280 | rwnx_send_rftest_req(g_rwnx_plat->usbdev->rwnx_hw, SET_TXSTOP, 0, NULL, NULL); |
---|
1268 | 1281 | #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 | + } |
---|
1269 | 1306 | } else if (strcasecmp(argv[0], "SET_RX") == 0) { |
---|
1270 | 1307 | printk("set_rx\n"); |
---|
1271 | 1308 | if (argc < 3) { |
---|
.. | .. |
---|
1361 | 1398 | #endif |
---|
1362 | 1399 | memcpy(command, &cfm.rftest_result[0], 4); |
---|
1363 | 1400 | 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; |
---|
1420 | 1406 | } |
---|
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); |
---|
1423 | 1411 | #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 | + } |
---|
1427 | 1653 | #endif |
---|
1428 | 1654 | } while (0); |
---|
1429 | 1655 | kfree(cmd); |
---|
.. | .. |
---|
1441 | 1667 | int bytes_written = 0; |
---|
1442 | 1668 | android_wifi_priv_cmd priv_cmd; |
---|
1443 | 1669 | int buf_size = 0; |
---|
1444 | | - |
---|
1445 | | - RWNX_DBG(RWNX_FN_ENTRY_STR); |
---|
1446 | 1670 | |
---|
1447 | 1671 | ///todo: add our lock |
---|
1448 | 1672 | //net_os_wake_lock(net); |
---|
.. | .. |
---|
1502 | 1726 | |
---|
1503 | 1727 | /* outputs */ |
---|
1504 | 1728 | 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 | | - |
---|
1508 | 1729 | |
---|
1509 | 1730 | bytes_written = handle_private_cmd(net, command, priv_cmd.total_len); |
---|
1510 | 1731 | if (bytes_written >= 0) { |
---|
.. | .. |
---|
1552 | 1773 | printk("IOCTL SIOCDEVPRIVATE\n"); |
---|
1553 | 1774 | break; |
---|
1554 | 1775 | case (SIOCDEVPRIVATE+1): |
---|
1555 | | - printk("IOCTL PRIVATE\n"); |
---|
1556 | 1776 | android_priv_cmd(net, req, cmd); |
---|
1557 | 1777 | break; |
---|
1558 | 1778 | default: |
---|
.. | .. |
---|
1858 | 2078 | atomic_set(&rwnx_hw->p2p_alive_timer_count, 0); |
---|
1859 | 2079 | |
---|
1860 | 2080 | 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); |
---|
1862 | 2083 | |
---|
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); |
---|
1865 | 2086 | |
---|
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 | + } |
---|
1870 | 2092 | } |
---|
1871 | 2093 | |
---|
1872 | 2094 | |
---|
.. | .. |
---|
2155 | 2377 | if (type == NL80211_IFTYPE_P2P_CLIENT || type == NL80211_IFTYPE_P2P_GO) |
---|
2156 | 2378 | p2p = true; |
---|
2157 | 2379 | |
---|
2158 | | - if (type == NL80211_IFTYPE_AP || type == NL80211_IFTYPE_P2P_GO) { |
---|
2159 | 2380 | if (vif->up) { |
---|
2160 | 2381 | /* Abort scan request on the vif */ |
---|
2161 | 2382 | if (vif->rwnx_hw->scan_request && |
---|
.. | .. |
---|
2198 | 2419 | vif->vif_index = add_if_cfm.inst_nbr; |
---|
2199 | 2420 | vif->rwnx_hw->vif_table[add_if_cfm.inst_nbr] = vif; |
---|
2200 | 2421 | spin_unlock_bh(&vif->rwnx_hw->cb_lock); |
---|
2201 | | - } |
---|
2202 | 2422 | } |
---|
2203 | 2423 | return 0; |
---|
2204 | 2424 | } |
---|
.. | .. |
---|
2215 | 2435 | |
---|
2216 | 2436 | static void rwnx_cfgp2p_stop_p2p_device(struct wiphy *wiphy, struct wireless_dev *wdev) |
---|
2217 | 2437 | { |
---|
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 |
---|
2245 | 2438 | int ret = 0; |
---|
2246 | 2439 | struct rwnx_hw *rwnx_hw = wiphy_priv(wiphy); |
---|
2247 | 2440 | struct rwnx_vif *rwnx_vif = container_of(wdev, struct rwnx_vif, wdev); |
---|
.. | .. |
---|
2262 | 2455 | if (ret) |
---|
2263 | 2456 | printk("scanu_cancel fail\n"); |
---|
2264 | 2457 | } |
---|
| 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 | + |
---|
2265 | 2477 | printk("Exit. P2P interface stopped\n"); |
---|
2266 | 2478 | |
---|
2267 | 2479 | return; |
---|
.. | .. |
---|
2477 | 2689 | struct rwnx_vif *rwnx_vif = netdev_priv(dev); |
---|
2478 | 2690 | struct sm_connect_cfm sm_connect_cfm; |
---|
2479 | 2691 | 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)); |
---|
2480 | 2696 | |
---|
2481 | 2697 | RWNX_DBG(RWNX_FN_ENTRY_STR); |
---|
2482 | 2698 | |
---|
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 | + } |
---|
2491 | 2723 | } |
---|
2492 | 2724 | } |
---|
2493 | 2725 | |
---|
.. | .. |
---|
2501 | 2733 | key_params.cipher = sme->crypto.cipher_group; |
---|
2502 | 2734 | rwnx_cfg80211_add_key(wiphy, dev, sme->key_idx, false, NULL, &key_params); |
---|
2503 | 2735 | } |
---|
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) |
---|
2505 | 2737 | else if ((sme->auth_type == NL80211_AUTHTYPE_SAE) && |
---|
2506 | 2738 | !(sme->flags & CONNECT_REQ_EXTERNAL_AUTH_SUPPORT)) { |
---|
2507 | 2739 | netdev_err(dev, "Doesn't support SAE without external authentication\n"); |
---|
.. | .. |
---|
2557 | 2789 | return rwnx_send_sm_disconnect_req(rwnx_hw, rwnx_vif, reason_code); |
---|
2558 | 2790 | } |
---|
2559 | 2791 | |
---|
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) |
---|
2561 | 2793 | /** |
---|
2562 | 2794 | * @external_auth: indicates result of offloaded authentication processing from |
---|
2563 | 2795 | * user space |
---|
.. | .. |
---|
2638 | 2870 | sta->uapsd_tids &= ~(1 << tid); |
---|
2639 | 2871 | } |
---|
2640 | 2872 | memcpy(sta->mac_addr, mac, ETH_ALEN); |
---|
2641 | | - #if 0 |
---|
| 2873 | +#ifdef CONFIG_DEBUG_FS |
---|
2642 | 2874 | rwnx_dbgfs_register_rc_stat(rwnx_hw, sta); |
---|
2643 | | - #endif |
---|
| 2875 | +#endif |
---|
2644 | 2876 | |
---|
2645 | 2877 | /* Ensure that we won't process PS change or channel switch ind*/ |
---|
2646 | 2878 | spin_lock_bh(&rwnx_hw->cb_lock); |
---|
.. | .. |
---|
2657 | 2889 | memset(&sinfo, 0, sizeof(struct station_info)); |
---|
2658 | 2890 | sinfo.assoc_req_ies = NULL; |
---|
2659 | 2891 | 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) |
---|
2661 | 2893 | sinfo.filled |= STATION_INFO_ASSOC_REQ_IES; |
---|
2662 | 2894 | #endif |
---|
2663 | 2895 | cfg80211_new_sta(rwnx_vif->ndev, sta->mac_addr, &sinfo, GFP_KERNEL); |
---|
.. | .. |
---|
2789 | 3021 | #endif /* CONFIG_RWNX_BFMER */ |
---|
2790 | 3022 | |
---|
2791 | 3023 | list_del(&cur->list); |
---|
2792 | | -#if 0 |
---|
| 3024 | +#ifdef CONFIG_DEBUG_FS |
---|
2793 | 3025 | rwnx_dbgfs_unregister_rc_stat(rwnx_hw, cur); |
---|
2794 | 3026 | #endif |
---|
2795 | | - found++; |
---|
| 3027 | + found = true; |
---|
2796 | 3028 | break; |
---|
2797 | 3029 | } |
---|
2798 | 3030 | } |
---|
.. | .. |
---|
2805 | 3037 | return 0; |
---|
2806 | 3038 | } |
---|
2807 | 3039 | |
---|
| 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 | +} |
---|
2808 | 3180 | /** |
---|
2809 | 3181 | * @change_station: Modify a given station. Note that flags changes are not much |
---|
2810 | 3182 | * validated in cfg80211, in particular the auth/assoc/authorized flags |
---|
.. | .. |
---|
2860 | 3232 | sta->uapsd_tids &= ~(1 << tid); |
---|
2861 | 3233 | } |
---|
2862 | 3234 | memcpy(sta->mac_addr, mac, ETH_ALEN); |
---|
| 3235 | +#ifdef CONFIG_DEBUG_FS |
---|
2863 | 3236 | rwnx_dbgfs_register_rc_stat(rwnx_hw, sta); |
---|
2864 | | - |
---|
| 3237 | +#endif |
---|
2865 | 3238 | /* Ensure that we won't process PS change or channel switch ind*/ |
---|
2866 | 3239 | spin_lock_bh(&rwnx_hw->cb_lock); |
---|
2867 | 3240 | rwnx_txq_sta_init(rwnx_hw, sta, rwnx_txq_vif_get_status(rwnx_vif)); |
---|
.. | .. |
---|
2974 | 3347 | |
---|
2975 | 3348 | RWNX_DBG(RWNX_FN_ENTRY_STR); |
---|
2976 | 3349 | |
---|
| 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 | + } |
---|
2977 | 3356 | if (rwnx_vif->wdev.iftype == NL80211_IFTYPE_P2P_GO) |
---|
2978 | 3357 | rwnx_hw->is_p2p_connected = 1; |
---|
2979 | 3358 | /* Forward the information to the LMAC */ |
---|
.. | .. |
---|
3068 | 3447 | |
---|
3069 | 3448 | rwnx_send_bcn(rwnx_hw, buf, vif->vif_index, bcn->len); |
---|
3070 | 3449 | |
---|
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 |
---|
3078 | 3450 | // 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, |
---|
3080 | 3452 | bcn->len, bcn->head_len, bcn->tim_len, NULL); |
---|
3081 | 3453 | |
---|
3082 | | -#if 0 |
---|
3083 | | - rwnx_ipc_elem_var_deallocs(rwnx_hw, &elem); |
---|
3084 | | -#else |
---|
3085 | | - |
---|
3086 | | - |
---|
3087 | | -#endif |
---|
3088 | 3454 | return error; |
---|
3089 | 3455 | } |
---|
3090 | 3456 | |
---|
.. | .. |
---|
3117 | 3483 | rwnx_txq_vif_deinit(rwnx_hw, rwnx_vif); |
---|
3118 | 3484 | rwnx_del_bcn(&rwnx_vif->ap.bcn); |
---|
3119 | 3485 | rwnx_del_csa(rwnx_vif); |
---|
| 3486 | + |
---|
| 3487 | + flush_workqueue(rwnx_vif->sta_probe.apmprobesta_wq); |
---|
| 3488 | + destroy_workqueue(rwnx_vif->sta_probe.apmprobesta_wq); |
---|
3120 | 3489 | |
---|
3121 | 3490 | netif_tx_stop_all_queues(dev); |
---|
3122 | 3491 | netif_carrier_off(dev); |
---|
.. | .. |
---|
3195 | 3564 | int rwnx_cfg80211_probe_client(struct wiphy *wiphy, struct net_device *dev, |
---|
3196 | 3565 | const u8 *peer, u64 *cookie) |
---|
3197 | 3566 | { |
---|
| 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 | + |
---|
3198 | 3590 | return 0; |
---|
3199 | 3591 | } |
---|
3200 | 3592 | |
---|
| 3593 | +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0) |
---|
3201 | 3594 | /** |
---|
3202 | 3595 | * @mgmt_frame_register: Notify driver that a management frame type was |
---|
3203 | 3596 | * registered. Note that this callback may not sleep, and cannot run |
---|
.. | .. |
---|
3208 | 3601 | u16 frame_type, bool reg) |
---|
3209 | 3602 | { |
---|
3210 | 3603 | } |
---|
| 3604 | +#endif |
---|
3211 | 3605 | |
---|
3212 | 3606 | /** |
---|
3213 | 3607 | * @set_wiphy_params: Notify that wiphy parameters have changed; |
---|
.. | .. |
---|
3256 | 3650 | return res; |
---|
3257 | 3651 | } |
---|
3258 | 3652 | |
---|
3259 | | -#if 0 |
---|
3260 | 3653 | /** |
---|
3261 | 3654 | * @set_power_mgmt: set the power save to one of those two modes: |
---|
3262 | 3655 | * Power-save off |
---|
.. | .. |
---|
3266 | 3659 | struct net_device *dev, |
---|
3267 | 3660 | bool enabled, int timeout) |
---|
3268 | 3661 | { |
---|
| 3662 | +#if 0 |
---|
3269 | 3663 | struct rwnx_hw *rwnx_hw = wiphy_priv(wiphy); |
---|
3270 | 3664 | u8 ps_mode; |
---|
3271 | 3665 | |
---|
.. | .. |
---|
3285 | 3679 | } |
---|
3286 | 3680 | |
---|
3287 | 3681 | 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; |
---|
3289 | 3687 | #endif |
---|
| 3688 | +} |
---|
3290 | 3689 | |
---|
3291 | 3690 | static int rwnx_cfg80211_set_txq_params(struct wiphy *wiphy, struct net_device *dev, |
---|
3292 | 3691 | struct ieee80211_txq_params *params) |
---|
.. | .. |
---|
3332 | 3731 | struct rwnx_vif *rwnx_vif = container_of(wdev, struct rwnx_vif, wdev); |
---|
3333 | 3732 | struct rwnx_roc_elem *roc_elem; |
---|
3334 | 3733 | struct mm_add_if_cfm add_if_cfm; |
---|
| 3734 | + struct mm_remain_on_channel_cfm roc_cfm; |
---|
3335 | 3735 | int error; |
---|
3336 | 3736 | |
---|
3337 | 3737 | RWNX_DBG(RWNX_FN_ENTRY_STR); |
---|
3338 | 3738 | |
---|
3339 | 3739 | /* For debug purpose (use ftrace kernel option) */ |
---|
| 3740 | +#ifdef CREATE_TRACE_POINTS |
---|
3340 | 3741 | trace_roc(rwnx_vif->vif_index, chan->center_freq, duration); |
---|
3341 | | - |
---|
| 3742 | +#endif |
---|
3342 | 3743 | /* Check that no other RoC procedure has been launched */ |
---|
3343 | 3744 | if (rwnx_hw->roc_elem) { |
---|
3344 | 3745 | msleep(2); |
---|
.. | .. |
---|
3349 | 3750 | } |
---|
3350 | 3751 | |
---|
3351 | 3752 | 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) { |
---|
3353 | 3754 | if (!rwnx_hw->is_p2p_alive) { |
---|
3354 | 3755 | error = rwnx_send_add_if (rwnx_hw, rwnx_vif->wdev.address, //wdev->netdev->dev_addr, |
---|
3355 | 3756 | RWNX_VIF_TYPE(rwnx_vif), false, &add_if_cfm); |
---|
.. | .. |
---|
3396 | 3797 | |
---|
3397 | 3798 | /* Forward the information to the FMAC */ |
---|
3398 | 3799 | 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); |
---|
3400 | 3801 | |
---|
3401 | 3802 | /* If no error, keep all the information for handling of end of procedure */ |
---|
3402 | 3803 | if (error == 0) { |
---|
3403 | | - |
---|
3404 | 3804 | /* Set the cookie value */ |
---|
3405 | 3805 | *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 | + } |
---|
3407 | 3813 | } else { |
---|
3408 | 3814 | /* Free the allocated element */ |
---|
3409 | 3815 | rwnx_hw->roc_elem = NULL; |
---|
.. | .. |
---|
3424 | 3830 | u64 cookie) |
---|
3425 | 3831 | { |
---|
3426 | 3832 | struct rwnx_hw *rwnx_hw = wiphy_priv(wiphy); |
---|
| 3833 | +#ifdef CREATE_TRACE_POINTS |
---|
3427 | 3834 | struct rwnx_vif *rwnx_vif = container_of(wdev, struct rwnx_vif, wdev);//netdev_priv(wdev->netdev); |
---|
3428 | | - |
---|
| 3835 | +#endif |
---|
3429 | 3836 | RWNX_DBG(RWNX_FN_ENTRY_STR); |
---|
3430 | 3837 | |
---|
3431 | 3838 | /* For debug purpose (use ftrace kernel option) */ |
---|
| 3839 | +#ifdef CREATE_TRACE_POINTS |
---|
3432 | 3840 | trace_cancel_roc(rwnx_vif->vif_index); |
---|
3433 | | - |
---|
| 3841 | +#endif |
---|
3434 | 3842 | /* Check if a RoC procedure is pending */ |
---|
3435 | 3843 | if (!rwnx_hw->roc_elem) { |
---|
3436 | 3844 | return 0; |
---|
.. | .. |
---|
3578 | 3986 | /* Get STA on which management frame has to be sent */ |
---|
3579 | 3987 | rwnx_sta = rwnx_retrieve_sta(rwnx_hw, rwnx_vif, mgmt->da, |
---|
3580 | 3988 | mgmt->frame_control, ap); |
---|
3581 | | - |
---|
| 3989 | +#ifdef CREATE_TRACE_POINTS |
---|
3582 | 3990 | trace_mgmt_tx((channel) ? channel->center_freq : 0, |
---|
3583 | 3991 | rwnx_vif->vif_index, (rwnx_sta) ? rwnx_sta->sta_idx : 0xFF, |
---|
3584 | 3992 | mgmt); |
---|
3585 | | - |
---|
| 3993 | +#endif |
---|
3586 | 3994 | if (ap || rwnx_sta) |
---|
3587 | 3995 | goto send_frame; |
---|
3588 | 3996 | |
---|
.. | .. |
---|
3718 | 4126 | { |
---|
3719 | 4127 | struct rwnx_hw *rwnx_hw = wiphy_priv(wiphy); |
---|
3720 | 4128 | struct rwnx_vif *vif = netdev_priv(dev); |
---|
3721 | | - struct rwnx_ipc_elem_var elem; |
---|
3722 | 4129 | struct rwnx_bcn *bcn, *bcn_after; |
---|
3723 | 4130 | struct rwnx_csa *csa; |
---|
3724 | 4131 | u16 csa_oft[BCN_MAX_CSA_CPT]; |
---|
.. | .. |
---|
3752 | 4159 | } |
---|
3753 | 4160 | } |
---|
3754 | 4161 | |
---|
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); |
---|
3757 | 4163 | if (error) { |
---|
3758 | 4164 | goto end; |
---|
3759 | 4165 | } |
---|
.. | .. |
---|
3775 | 4181 | goto end; |
---|
3776 | 4182 | } |
---|
3777 | 4183 | |
---|
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); |
---|
3780 | 4185 | if (error) { |
---|
3781 | 4186 | goto end; |
---|
3782 | 4187 | } |
---|
.. | .. |
---|
3786 | 4191 | csa->chandef = params->chandef; |
---|
3787 | 4192 | |
---|
3788 | 4193 | /* 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, |
---|
3790 | 4195 | bcn->len, bcn->head_len, bcn->tim_len, csa_oft); |
---|
3791 | 4196 | |
---|
3792 | 4197 | if (error) { |
---|
.. | .. |
---|
3794 | 4199 | goto end; |
---|
3795 | 4200 | } else { |
---|
3796 | 4201 | 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 | + ); |
---|
3798 | 4207 | } |
---|
3799 | 4208 | |
---|
3800 | 4209 | end: |
---|
3801 | | - rwnx_ipc_elem_var_deallocs(rwnx_hw, &elem); |
---|
3802 | 4210 | return error; |
---|
3803 | 4211 | } |
---|
3804 | 4212 | #endif |
---|
.. | .. |
---|
3933 | 4341 | |
---|
3934 | 4342 | /* Set TDLS not active */ |
---|
3935 | 4343 | rwnx_vif->sta.tdls_sta->tdls.active = false; |
---|
| 4344 | +#ifdef CONFIG_DEBUG_FS |
---|
3936 | 4345 | rwnx_dbgfs_unregister_rc_stat(rwnx_hw, rwnx_vif->sta.tdls_sta); |
---|
| 4346 | +#endif |
---|
3937 | 4347 | // Remove TDLS station |
---|
3938 | 4348 | rwnx_vif->tdls_status = TDLS_LINK_IDLE; |
---|
3939 | 4349 | rwnx_vif->sta.tdls_sta = NULL; |
---|
.. | .. |
---|
4035 | 4445 | struct rwnx_sta_stats *stats = &sta->stats; |
---|
4036 | 4446 | struct rx_vector_1 *rx_vect1 = &stats->last_rx.rx_vect1; |
---|
4037 | 4447 | union rwnx_rate_ctrl_info *rate_info; |
---|
4038 | | - struct mm_get_sta_txinfo_cfm cfm; |
---|
| 4448 | + struct mm_get_sta_info_cfm cfm; |
---|
4039 | 4449 | |
---|
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); |
---|
4134 | 4451 | sinfo->tx_failed = cfm.txfailed; |
---|
4135 | 4452 | rate_info = (union rwnx_rate_ctrl_info *)&cfm.rate_info; |
---|
4136 | 4453 | switch (rate_info->formatModTx) { |
---|
.. | .. |
---|
4192 | 4509 | sinfo->txrate.nss = 1; |
---|
4193 | 4510 | sinfo->filled |= (BIT(NL80211_STA_INFO_TX_BITRATE) | BIT(NL80211_STA_INFO_TX_FAILED)); |
---|
4194 | 4511 | |
---|
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; |
---|
4202 | 4519 | |
---|
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; |
---|
4229 | 4541 | } |
---|
4230 | 4542 | #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 |
---|
4231 | 4603 | |
---|
4232 | 4604 | return 0; |
---|
4233 | 4605 | } |
---|
.. | .. |
---|
4261 | 4633 | if (sta) |
---|
4262 | 4634 | return rwnx_fill_station_info(sta, vif, sinfo); |
---|
4263 | 4635 | |
---|
4264 | | - return -EINVAL; |
---|
| 4636 | + return -ENOENT; |
---|
4265 | 4637 | } |
---|
4266 | 4638 | |
---|
4267 | 4639 | |
---|
.. | .. |
---|
4739 | 5111 | .stop_ap = rwnx_cfg80211_stop_ap, |
---|
4740 | 5112 | .set_monitor_channel = rwnx_cfg80211_set_monitor_channel, |
---|
4741 | 5113 | .probe_client = rwnx_cfg80211_probe_client, |
---|
| 5114 | +#if LINUX_VERSION_CODE < KERNEL_VERSION(5, 8, 0) |
---|
4742 | 5115 | .mgmt_frame_register = rwnx_cfg80211_mgmt_frame_register, |
---|
| 5116 | +#endif |
---|
4743 | 5117 | .set_wiphy_params = rwnx_cfg80211_set_wiphy_params, |
---|
4744 | 5118 | .set_txq_params = rwnx_cfg80211_set_txq_params, |
---|
4745 | 5119 | .set_tx_power = rwnx_cfg80211_set_tx_power, |
---|
4746 | 5120 | // .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, |
---|
4748 | 5122 | .get_station = rwnx_cfg80211_get_station, |
---|
4749 | 5123 | .remain_on_channel = rwnx_cfg80211_remain_on_channel, |
---|
4750 | 5124 | .cancel_remain_on_channel = rwnx_cfg80211_cancel_remain_on_channel, |
---|
.. | .. |
---|
4763 | 5137 | .tdls_mgmt = rwnx_cfg80211_tdls_mgmt, |
---|
4764 | 5138 | .tdls_oper = rwnx_cfg80211_tdls_oper, |
---|
4765 | 5139 | .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) |
---|
4767 | 5141 | .external_auth = rwnx_cfg80211_external_auth, |
---|
4768 | 5142 | #endif |
---|
4769 | 5143 | }; |
---|
.. | .. |
---|
4837 | 5211 | } |
---|
4838 | 5212 | |
---|
4839 | 5213 | 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 | | -}; |
---|
6649 | 5214 | |
---|
6650 | 5215 | #if IS_ENABLED(CONFIG_SUNXI_ADDR_MGT) |
---|
6651 | 5216 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(5, 4, 0) |
---|
.. | .. |
---|
6663 | 5228 | * |
---|
6664 | 5229 | */ |
---|
6665 | 5230 | extern int aicwf_vendor_init(struct wiphy *wiphy); |
---|
| 5231 | +extern txpwr_idx_conf_t nvram_txpwr_idx; |
---|
6666 | 5232 | |
---|
6667 | 5233 | int rwnx_cfg80211_init(struct rwnx_plat *rwnx_plat, void **platform_data) |
---|
6668 | 5234 | { |
---|
.. | .. |
---|
6675 | 5241 | u8 dflt_mac[ETH_ALEN] = { 0x88, 0x00, 0x33, 0x77, 0x10, 0x99}; |
---|
6676 | 5242 | u8 addr_str[20]; |
---|
6677 | 5243 | struct mm_set_rf_calib_cfm cfm; |
---|
| 5244 | + struct mm_get_fw_version_cfm fw_version; |
---|
6678 | 5245 | u8_l mac_addr_efuse[ETH_ALEN]; |
---|
6679 | 5246 | struct aicbsp_feature_t feature; |
---|
| 5247 | + struct mm_set_stack_start_cfm set_start_cfm; |
---|
6680 | 5248 | (void)addr_str; |
---|
6681 | 5249 | |
---|
6682 | 5250 | RWNX_DBG(RWNX_FN_ENTRY_STR); |
---|
.. | .. |
---|
6707 | 5275 | #endif |
---|
6708 | 5276 | rwnx_hw->mod_params = &rwnx_mod_params; |
---|
6709 | 5277 | rwnx_hw->tcp_pacing_shift = 7; |
---|
6710 | | - rwnx_hw->band_5g_support = feature.band_5g_support; |
---|
6711 | 5278 | |
---|
| 5279 | + aicwf_wakeup_lock_init(rwnx_hw); |
---|
6712 | 5280 | rwnx_init_aic(rwnx_hw); |
---|
6713 | 5281 | /* set device pointer for wiphy */ |
---|
6714 | 5282 | set_wiphy_dev(wiphy, rwnx_hw->dev); |
---|
.. | .. |
---|
6753 | 5321 | /* Cookie can not be 0 */ |
---|
6754 | 5322 | rwnx_hw->roc_cookie_cnt = 1; |
---|
6755 | 5323 | |
---|
| 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 | + |
---|
6756 | 5339 | 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); |
---|
6757 | 5353 | |
---|
6758 | 5354 | wiphy->bands[NL80211_BAND_2GHZ] = &rwnx_band_2GHz; |
---|
6759 | 5355 | if (rwnx_hw->band_5g_support) |
---|
.. | .. |
---|
6796 | 5392 | #endif |
---|
6797 | 5393 | 0; |
---|
6798 | 5394 | |
---|
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) |
---|
6800 | 5396 | wiphy->features |= NL80211_FEATURE_SAE; |
---|
6801 | 5397 | #endif |
---|
6802 | 5398 | |
---|
.. | .. |
---|
6824 | 5420 | |
---|
6825 | 5421 | tasklet_init(&rwnx_hw->task, rwnx_task, (unsigned long)rwnx_hw); |
---|
6826 | 5422 | |
---|
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 | | - |
---|
6834 | 5423 | //system_config(rwnx_hw); |
---|
6835 | 5424 | |
---|
6836 | 5425 | ret = rwnx_platform_on(rwnx_hw, NULL); |
---|
.. | .. |
---|
6845 | 5434 | |
---|
6846 | 5435 | //rf_config(rwnx_hw); |
---|
6847 | 5436 | #endif |
---|
6848 | | - |
---|
6849 | 5437 | 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); |
---|
6850 | 5446 | if (ret) |
---|
6851 | 5447 | goto err_lmac_reqs; |
---|
6852 | 5448 | #if 0 |
---|
.. | .. |
---|
6922 | 5518 | rwnx_send_me_chan_config_req(rwnx_hw); |
---|
6923 | 5519 | *platform_data = rwnx_hw; |
---|
6924 | 5520 | |
---|
6925 | | -#if 0 |
---|
| 5521 | +#ifdef CONFIG_DEBUG_FS |
---|
6926 | 5522 | ret = rwnx_dbgfs_register(rwnx_hw, "rwnx"); |
---|
6927 | 5523 | if (ret) { |
---|
6928 | 5524 | wiphy_err(wiphy, "Failed to register debugfs entries"); |
---|
6929 | 5525 | goto err_debugfs; |
---|
6930 | 5526 | } |
---|
6931 | 5527 | #endif |
---|
6932 | | - |
---|
6933 | 5528 | rtnl_lock(); |
---|
6934 | 5529 | |
---|
6935 | 5530 | /* Add an initial station interface */ |
---|
.. | .. |
---|
6949 | 5544 | return 0; |
---|
6950 | 5545 | |
---|
6951 | 5546 | err_add_interface: |
---|
6952 | | -//err_debugfs: |
---|
6953 | | - |
---|
| 5547 | +#ifdef CONFIG_DEBUG_FS |
---|
| 5548 | + rwnx_dbgfs_unregister(rwnx_hw); |
---|
| 5549 | +err_debugfs: |
---|
| 5550 | +#endif |
---|
6954 | 5551 | wiphy_unregister(rwnx_hw->wiphy); |
---|
6955 | 5552 | err_register_wiphy: |
---|
6956 | 5553 | err_lmac_reqs: |
---|
6957 | 5554 | printk("err_lmac_reqs\n"); |
---|
6958 | | - //rwnx_fw_trace_dump(rwnx_hw); |
---|
6959 | 5555 | rwnx_platform_off(rwnx_hw, NULL); |
---|
6960 | 5556 | err_platon: |
---|
6961 | 5557 | //err_config: |
---|
6962 | 5558 | kmem_cache_destroy(rwnx_hw->sw_txhdr_cache); |
---|
6963 | 5559 | err_cache: |
---|
| 5560 | + aicwf_wakeup_lock_deinit(rwnx_hw); |
---|
6964 | 5561 | wiphy_free(wiphy); |
---|
6965 | 5562 | err_out: |
---|
6966 | 5563 | return ret; |
---|
.. | .. |
---|
6971 | 5568 | */ |
---|
6972 | 5569 | void rwnx_cfg80211_deinit(struct rwnx_hw *rwnx_hw) |
---|
6973 | 5570 | { |
---|
| 5571 | + struct mm_set_stack_start_cfm set_start_cfm; |
---|
| 5572 | + struct defrag_ctrl_info *defrag_ctrl = NULL; |
---|
| 5573 | + |
---|
6974 | 5574 | RWNX_DBG(RWNX_FN_ENTRY_STR); |
---|
6975 | 5575 | |
---|
| 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 |
---|
6976 | 5596 | rwnx_dbgfs_unregister(rwnx_hw); |
---|
| 5597 | +#endif |
---|
| 5598 | + flush_workqueue(rwnx_hw->apmStaloss_wq); |
---|
| 5599 | + destroy_workqueue(rwnx_hw->apmStaloss_wq); |
---|
6977 | 5600 | |
---|
6978 | 5601 | rwnx_wdev_unregister(rwnx_hw); |
---|
6979 | 5602 | wiphy_unregister(rwnx_hw->wiphy); |
---|
6980 | 5603 | rwnx_radar_detection_deinit(&rwnx_hw->radar); |
---|
6981 | 5604 | rwnx_platform_off(rwnx_hw, NULL); |
---|
6982 | 5605 | kmem_cache_destroy(rwnx_hw->sw_txhdr_cache); |
---|
| 5606 | + aicwf_wakeup_lock_deinit(rwnx_hw); |
---|
6983 | 5607 | wiphy_free(rwnx_hw->wiphy); |
---|
6984 | 5608 | } |
---|
6985 | 5609 | |
---|
.. | .. |
---|
6999 | 5623 | //static DECLARE_WORK(aicsmac_driver_work, aicsmac_driver_register); |
---|
7000 | 5624 | |
---|
7001 | 5625 | struct completion hostif_register_done; |
---|
| 5626 | +static int rwnx_driver_err = -1; |
---|
7002 | 5627 | |
---|
7003 | 5628 | #define REGISTRATION_TIMEOUT 9000 |
---|
7004 | 5629 | |
---|
7005 | 5630 | void aicwf_hostif_ready(void) |
---|
7006 | 5631 | { |
---|
| 5632 | + rwnx_driver_err = 0; |
---|
| 5633 | + complete(&hostif_register_done); |
---|
| 5634 | +} |
---|
| 5635 | + |
---|
| 5636 | +void aicwf_hostif_fail(void) |
---|
| 5637 | +{ |
---|
| 5638 | + rwnx_driver_err = 1; |
---|
7007 | 5639 | complete(&hostif_register_done); |
---|
7008 | 5640 | } |
---|
7009 | 5641 | |
---|
.. | .. |
---|
7012 | 5644 | RWNX_DBG(RWNX_FN_ENTRY_STR); |
---|
7013 | 5645 | rwnx_print_version(); |
---|
7014 | 5646 | |
---|
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 | + } |
---|
7016 | 5651 | |
---|
7017 | | - aicbsp_set_subsys(AIC_WIFI, AIC_PWR_ON); |
---|
| 5652 | + init_completion(&hostif_register_done); |
---|
7018 | 5653 | aicsmac_driver_register(); |
---|
7019 | 5654 | |
---|
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) { |
---|
7021 | 5656 | printk("register_driver timeout or error\n"); |
---|
7022 | 5657 | #ifdef AICWF_SDIO_SUPPORT |
---|
7023 | 5658 | aicwf_sdio_exit(); |
---|
7024 | 5659 | #endif /* AICWF_SDIO_SUPPORT */ |
---|
7025 | 5660 | #ifdef AICWF_USB_SUPPORT |
---|
7026 | | - aicwf_usb_exit(); |
---|
| 5661 | + aicwf_usb_exit(); |
---|
7027 | 5662 | #endif /*AICWF_USB_SUPPORT */ |
---|
| 5663 | + aicbsp_set_subsys(AIC_WIFI, AIC_PWR_OFF); |
---|
7028 | 5664 | return -ENODEV; |
---|
7029 | 5665 | } |
---|
7030 | 5666 | |
---|