wifi: fix wifi close issue and ap62x8 open fail issue
[GitHub/LineageOS/G12/android_hardware_amlogic_kernel-modules_dhd-driver.git] / bcmdhd.1.579.77.41.1.cn / dhd_config.c
index 798fc6b0b3e3286dfd561b1d3042194222dc02fa..27d0e9db91426349084d7808c40db69a8e3feec8 100644 (file)
@@ -1215,6 +1215,39 @@ dhd_conf_set_ap_in_suspend(dhd_pub_t *dhd, int suspend)
        return mode;\r
 }\r
 \r
+void\r
+dhd_conf_set_eapol_status(dhd_pub_t *dhd, char *ifname, char *dump_data)\r
+{\r
+       unsigned char type;\r
+       int pair, ack, mic, kerr, req, sec, install;\r
+       unsigned short us_tmp;\r
+\r
+       if (!(dhd->conf->in4way&DONT_DELETE_GC_AFTER_WPS) || strncmp(ifname, "p2p", 3)) {\r
+               return;\r
+       }\r
+\r
+       type = dump_data[15];\r
+       if ((type == 0) && (dump_data[22] == 254) && (dump_data[30] == 5)) {\r
+               dhd->conf->eapol_status = EAPOL_STATUS_WPS_DONE;\r
+               CONFIG_TRACE(("EAP Packet, WSC Done\n"));\r
+       } else if (type == 3 && dump_data[18] == 2) {\r
+               us_tmp = (dump_data[19] << 8) | dump_data[20];\r
+               pair =  0 != (us_tmp & 0x08);\r
+               ack = 0  != (us_tmp & 0x80);\r
+               mic = 0  != (us_tmp & 0x100);\r
+               kerr =  0 != (us_tmp & 0x400);\r
+               req = 0  != (us_tmp & 0x800);\r
+               sec = 0  != (us_tmp & 0x200);\r
+               install  = 0 != (us_tmp & 0x40);\r
+               if (pair && !install && !ack && mic && sec && !req && !kerr) {\r
+                       dhd->conf->eapol_status = EAPOL_STATUS_M4;\r
+                       CONFIG_TRACE(("EAPOL Packet, 4-way handshake, M4\n"));\r
+               }\r
+       }\r
+\r
+       return;\r
+}\r
+\r
 #ifdef PROP_TXSTATUS\r
 int\r
 dhd_conf_get_disable_proptx(dhd_pub_t *dhd)\r
@@ -1974,6 +2007,7 @@ dhd_conf_read_sdio_params(dhd_pub_t *dhd, char *full_param, uint len_param)
                conf->sd_f2_blocksize = (int)simple_strtol(data, NULL, 10);\r
                printf("%s: sd_f2_blocksize = %d\n", __FUNCTION__, conf->sd_f2_blocksize);\r
        }\r
+#if defined(HW_OOB)\r
        else if (!strncmp("oob_enabled_later=", full_param, len_param)) {\r
                if (!strncmp(data, "0", 1))\r
                        conf->oob_enabled_later = FALSE;\r
@@ -1981,6 +2015,7 @@ dhd_conf_read_sdio_params(dhd_pub_t *dhd, char *full_param, uint len_param)
                        conf->oob_enabled_later = TRUE;\r
                printf("%s: oob_enabled_later = %d\n", __FUNCTION__, conf->oob_enabled_later);\r
        }\r
+#endif\r
        else if (!strncmp("dpc_cpucore=", full_param, len_param)) {\r
                conf->dpc_cpucore = (int)simple_strtol(data, NULL, 10);\r
                printf("%s: dpc_cpucore = %d\n", __FUNCTION__, conf->dpc_cpucore);\r
@@ -2027,7 +2062,7 @@ dhd_conf_read_sdio_params(dhd_pub_t *dhd, char *full_param, uint len_param)
                printf("%s: deferred_tx_len = %d\n", __FUNCTION__, conf->deferred_tx_len);\r
        }\r
        else if (!strncmp("txctl_tmo_fix=", full_param, len_param)) {\r
-               conf->txctl_tmo_fix = (int)simple_strtol(data, NULL, 10);\r
+               conf->txctl_tmo_fix = (int)simple_strtol(data, NULL, 0);\r
                printf("%s: txctl_tmo_fix = %d\n", __FUNCTION__, conf->txctl_tmo_fix);\r
        }\r
        else if (!strncmp("tx_max_offset=", full_param, len_param)) {\r
@@ -2268,6 +2303,10 @@ dhd_conf_read_others(dhd_pub_t *dhd, char *full_param, uint len_param)
                conf->in4way = (int)simple_strtol(data, NULL, 0);\r
                printf("%s: in4way = 0x%x\n", __FUNCTION__, conf->in4way);\r
        }\r
+       else if (!strncmp("max_wait_gc_time=", full_param, len_param)) {\r
+               conf->max_wait_gc_time = (int)simple_strtol(data, NULL, 0);\r
+               printf("%s: max_wait_gc_time = %d\n", __FUNCTION__, conf->max_wait_gc_time);\r
+       }\r
        else if (!strncmp("wl_preinit=", full_param, len_param)) {\r
                if (!(conf->wl_preinit = kmalloc(len_param+1, GFP_KERNEL))) {\r
                        CONFIG_ERROR(("%s: kmalloc failed\n", __FUNCTION__));\r
@@ -2530,8 +2569,8 @@ dhd_conf_set_wl_preinit(dhd_pub_t *dhd, char *data)
        char name[32], *pch, *pick_tmp, *pick_tmp2;\r
 \r
        /* Process wl_preinit:\r
-        * wl_preinit=[cmd]/[val], [cmd]/[val] \\r
-        * Ex: wl_preinit=86/0, mpc/0\r
+        * wl_preinit=[cmd]=[val], [cmd]=[val]\r
+        * Ex: wl_preinit=86=0, mpc=0\r
         */\r
        pick_tmp = data;\r
        while (pick_tmp && (pick_tmp2 = bcmstrtok(&pick_tmp, ",", 0)) != NULL) {\r
@@ -2701,13 +2740,15 @@ dhd_conf_preinit(dhd_pub_t *dhd)
        conf->txglom_ext = FALSE;\r
        conf->tx_max_offset = 0;\r
        conf->txglomsize = SDPCM_DEFGLOM_SIZE;\r
-       conf->txctl_tmo_fix = 300;\r
+       conf->txctl_tmo_fix = -1;\r
        conf->txglom_mode = SDPCM_TXGLOM_CPY;\r
        conf->deferred_tx_len = 0;\r
        conf->dhd_txminmax = 1;\r
        conf->txinrx_thres = -1;\r
        conf->sd_f2_blocksize = 0;\r
+#if defined(HW_OOB)\r
        conf->oob_enabled_later = FALSE;\r
+#endif\r
        conf->orphan_move = 0;\r
 #endif\r
 #ifdef BCMPCIE\r
@@ -2747,6 +2788,7 @@ dhd_conf_preinit(dhd_pub_t *dhd)
        conf->ctrl_resched = 2;\r
        conf->dhd_ioctl_timeout_msec = 0;\r
        conf->in4way = NO_SCAN_IN4WAY;\r
+       conf->max_wait_gc_time = 300;\r
 #ifdef ISAM_PREINIT\r
        memset(conf->isam_init, 0, sizeof(conf->isam_init));\r
        memset(conf->isam_config, 0, sizeof(conf->isam_config));\r
@@ -2758,9 +2800,11 @@ dhd_conf_preinit(dhd_pub_t *dhd)
 #ifdef CUSTOMER_HW_AMLOGIC\r
        dhd_slpauto = FALSE;\r
 #endif\r
-       if (conf->chip == BCM4354_CHIP_ID || conf->chip == BCM4356_CHIP_ID ||\r
-                       conf->chip == BCM4371_CHIP_ID || conf->chip == BCM43569_CHIP_ID ||\r
-                       conf->chip == BCM4359_CHIP_ID || conf->chip == BCM4362_CHIP_ID) {\r
+       if (conf->chip == BCM4335_CHIP_ID || conf->chip == BCM4339_CHIP_ID ||\r
+                       conf->chip == BCM4354_CHIP_ID || conf->chip == BCM4356_CHIP_ID ||\r
+                       conf->chip == BCM4345_CHIP_ID || conf->chip == BCM4371_CHIP_ID ||\r
+                       conf->chip == BCM43569_CHIP_ID || conf->chip == BCM4359_CHIP_ID ||\r
+                       conf->chip == BCM4362_CHIP_ID) {\r
 #ifdef DHDTCPACK_SUPPRESS\r
 #ifdef BCMSDIO\r
                conf->tcpack_sup_mode = TCPACK_SUP_REPLACE;\r
@@ -2776,7 +2820,6 @@ dhd_conf_preinit(dhd_pub_t *dhd)
                conf->dhd_txminmax = -1;\r
                conf->txinrx_thres = 128;\r
                conf->sd_f2_blocksize = CUSTOM_SDIO_F2_BLKSIZE;\r
-               conf->oob_enabled_later = TRUE;\r
 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0))\r
                conf->orphan_move = 1;\r
 #else\r