hc
2023-11-06 e3e12f52b214121840b44c91de5b3e5af5d3eb84
kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_config.c
....@@ -141,7 +141,7 @@
141141 {BCM43751_CHIP_ID, 1, DONT_CARE, "bcm43751a1_pcie_ag", ""},
142142 {BCM43751_CHIP_ID, 2, DONT_CARE, "bcm43751a2_pcie_ag", ""},
143143 {BCM43752_CHIP_ID, 1, DONT_CARE, "bcm43752a1_pcie_ag", ""},
144
- {BCM43752_CHIP_ID, 2, DONT_CARE, "bcm43752a2_pcie_ag", "AP6275P"},
144
+ {BCM43752_CHIP_ID, 2, DONT_CARE, "bcm43752a2_pcie_ag", "ap6275p"},
145145 {BCM4375_CHIP_ID, 5, DONT_CARE, "bcm4375b4_pcie_ag", ""},
146146 #endif
147147 #ifdef BCMDBUS
....@@ -271,7 +271,6 @@
271271 chip == BCM4334_CHIP_ID || chip == BCM43340_CHIP_ID ||
272272 chip == BCM43341_CHIP_ID || chip == BCM4324_CHIP_ID ||
273273 chip == BCM4335_CHIP_ID || chip == BCM4339_CHIP_ID ||
274
- chip == BCM4354_CHIP_ID || chip == BCM4356_CHIP_ID ||
275274 chip == BCM43143_CHIP_ID || chip == BCM43242_CHIP_ID ||
276275 chip == BCM43569_CHIP_ID) {
277276 return false;
....@@ -282,7 +281,7 @@
282281 #endif
283282
284283 #ifdef BCMSDIO
285
-bool
284
+static void
286285 dhd_conf_disable_slpauto(dhd_pub_t *dhd)
287286 {
288287 uint chip = dhd->conf->chip;
....@@ -296,10 +295,9 @@
296295 chip == BCM43430_CHIP_ID ||
297296 chip == BCM4345_CHIP_ID || chip == BCM43454_CHIP_ID ||
298297 chip == BCM4359_CHIP_ID) {
299
- return false;
298
+ dhd_slpauto = FALSE;
300299 }
301
-
302
- return true;
300
+ CONFIG_MSG("dhd_slpauto = %d\n", dhd_slpauto);
303301 }
304302 #endif
305303
....@@ -1377,7 +1375,6 @@
13771375
13781376 return;
13791377 }
1380
-
13811378 #endif /* DHD_LINUX_STD_FW_API */
13821379
13831380 void
....@@ -1415,7 +1412,6 @@
14151412 #endif
14161413
14171414 #ifdef DHD_LINUX_STD_FW_API
1418
- // preprocess the filename to only left 'name'
14191415 dhd_conf_add_filepath(dhd, fw_path);
14201416 dhd_conf_add_filepath(dhd, nv_path);
14211417 dhd_conf_add_filepath(dhd, dhd->clm_path);
....@@ -2464,12 +2460,24 @@
24642460 int *hostsleep_set, int *hostsleep_val, int *ret)
24652461 {
24662462 if (dhd->conf->insuspend & (NO_TXCTL_IN_SUSPEND | WOWL_IN_SUSPEND)) {
2463
+ int wowl_dngldown = 0;
2464
+#ifdef WL_EXT_WOWL
2465
+ wowl_dngldown = dhd_conf_wowl_dngldown(dhd);
2466
+#endif
24672467 if (cmd == WLC_SET_VAR) {
24682468 char *psleep = NULL;
2469
- psleep = strstr(buf, "hostsleep");
2470
- if (psleep) {
2471
- *hostsleep_set = 1;
2472
- memcpy(hostsleep_val, psleep+strlen("hostsleep")+1, sizeof(int));
2469
+ if (wowl_dngldown) {
2470
+ psleep = strstr(buf, "wowl_activate");
2471
+ if (psleep) {
2472
+ *hostsleep_set = 1;
2473
+ memcpy(hostsleep_val, psleep+strlen("wowl_activate")+1, sizeof(int));
2474
+ }
2475
+ } else {
2476
+ psleep = strstr(buf, "hostsleep");
2477
+ if (psleep) {
2478
+ *hostsleep_set = 1;
2479
+ memcpy(hostsleep_val, psleep+strlen("hostsleep")+1, sizeof(int));
2480
+ }
24732481 }
24742482 }
24752483 if (dhd->hostsleep && (!*hostsleep_set || *hostsleep_val)) {
....@@ -2710,6 +2718,21 @@
27102718 }
27112719
27122720 return ret;
2721
+}
2722
+
2723
+int
2724
+dhd_conf_wowl_dngldown(dhd_pub_t *dhd)
2725
+{
2726
+ int wowl_dngldown = 0;
2727
+#ifdef BCMDBUS
2728
+ uint insuspend = 0;
2729
+ insuspend = dhd_conf_get_insuspend(dhd, ALL_IN_SUSPEND);
2730
+ if ((insuspend & WOWL_IN_SUSPEND) && dhd_master_mode) {
2731
+ wowl_dngldown = dhd->conf->wowl_dngldown;
2732
+ }
2733
+#endif
2734
+
2735
+ return wowl_dngldown;
27132736 }
27142737 #endif
27152738
....@@ -2971,8 +2994,12 @@
29712994 for(i=0; i<conf->pkt_filter_add.count; i++) {
29722995 dhd_conf_wowl_pattern(dhd, ifidx, TRUE, conf->pkt_filter_add.filter[i]);
29732996 }
2997
+ CONFIG_MSG("wowl = 0x%x\n", conf->wowl);
29742998 dhd_conf_set_intiovar(dhd, ifidx, WLC_SET_VAR, "wowl", conf->wowl, 0, FALSE);
2975
- dhd_conf_set_intiovar(dhd, ifidx, WLC_SET_VAR, "wowl_activate", 1, 0, FALSE);
2999
+#ifdef BCMDBUS
3000
+ CONFIG_MSG("wowl_dngldown = %d\n", conf->wowl_dngldown);
3001
+ dhd_conf_set_intiovar(dhd, ifidx, WLC_SET_VAR, "wowl_dngldown", conf->wowl_dngldown, 1, FALSE);
3002
+#endif
29763003 dhd_conf_wowl_wakeind(dhd, ifidx, TRUE);
29773004 }
29783005 #endif
....@@ -2988,7 +3015,7 @@
29883015 #ifdef WL_EXT_WOWL
29893016 if (insuspend & WOWL_IN_SUSPEND) {
29903017 dhd_conf_wowl_wakeind(dhd, ifidx, FALSE);
2991
- dhd_conf_set_intiovar(dhd, ifidx, WLC_SET_VAR, "wowl_activate", 0, 0, FALSE);
3018
+// dhd_conf_set_intiovar(dhd, ifidx, WLC_SET_VAR, "wowl_activate", 0, 0, FALSE);
29923019 dhd_conf_set_intiovar(dhd, ifidx, WLC_SET_VAR, "wowl", 0, 0, FALSE);
29933020 dhd_conf_wowl_pattern(dhd, ifidx, FALSE, "clr");
29943021 }
....@@ -3038,19 +3065,32 @@
30383065
30393066 if (suspend) {
30403067 if (insuspend & (WOWL_IN_SUSPEND | NO_TXCTL_IN_SUSPEND)) {
3041
-#ifdef BCMSDIO
30423068 uint32 intstatus = 0;
3043
- int ret = 0;
3044
-#endif
3045
- int hostsleep = 2;
3069
+ int ret = 0, hostsleep = 2, wowl_dngldown = 0;
30463070 #ifdef WL_EXT_WOWL
30473071 hostsleep = 1;
3072
+ if ((insuspend & WOWL_IN_SUSPEND) && dhd_master_mode) {
3073
+ dhd_conf_set_intiovar(dhd, 0, WLC_SET_VAR, "wowl_activate", 1, 0, FALSE);
3074
+#ifdef BCMDBUS
3075
+ wowl_dngldown = dhd->conf->wowl_dngldown;
30483076 #endif
3049
- dhd_conf_set_intiovar(dhd, 0, WLC_SET_VAR, "hostsleep", hostsleep, 0, FALSE);
3077
+ }
3078
+#endif
3079
+ if (!wowl_dngldown) {
3080
+ dhd_conf_set_intiovar(dhd, 0, WLC_SET_VAR, "hostsleep", hostsleep, 0, FALSE);
3081
+ }
30503082 #ifdef BCMSDIO
30513083 ret = dhd_bus_sleep(dhd, TRUE, &intstatus);
3052
- CONFIG_TRACE("ret = %d, intstatus = 0x%x\n", ret, intstatus);
30533084 #endif
3085
+#ifdef BCMPCIE
3086
+ ret = dhd_bus_sleep(dhd, TRUE, NULL);
3087
+#endif
3088
+#ifdef BCMDBUS
3089
+ if (wowl_dngldown) {
3090
+ ret = dhd_bus_sleep(dhd, TRUE, NULL);
3091
+ }
3092
+#endif
3093
+ CONFIG_MSG("ret = %d, intstatus = 0x%x\n", ret, intstatus);
30543094 }
30553095 } else {
30563096 if (insuspend & (WOWL_IN_SUSPEND | NO_TXCTL_IN_SUSPEND)) {
....@@ -3976,9 +4016,9 @@
39764016 CONFIG_MSG("dhd_doflow = %d\n", dhd_doflow);
39774017 }
39784018 else if (!strncmp("dhd_slpauto=", full_param, len_param)) {
3979
- if (!strncmp(data, "0", 1))
3980
- dhd_slpauto = FALSE;
3981
- else if (dhd_conf_disable_slpauto(dhd))
4019
+ if (!strncmp(data, "0", 1)) {
4020
+ dhd_conf_disable_slpauto(dhd);
4021
+ } else
39824022 dhd_slpauto = TRUE;
39834023 CONFIG_MSG("dhd_slpauto = %d\n", dhd_slpauto);
39844024 }
....@@ -4150,6 +4190,14 @@
41504190 conf->enq_hdr_pkt = (int)simple_strtol(data, NULL, 0);
41514191 CONFIG_MSG("enq_hdr_pkt = 0x%x\n", conf->enq_hdr_pkt);
41524192 }
4193
+ else if (!strncmp("aspm=", full_param, len_param)) {
4194
+ conf->aspm = (int)simple_strtol(data, NULL, 0);
4195
+ CONFIG_MSG("aspm = %d\n", conf->aspm);
4196
+ }
4197
+ else if (!strncmp("l1ss=", full_param, len_param)) {
4198
+ conf->l1ss = (int)simple_strtol(data, NULL, 0);
4199
+ CONFIG_MSG("l1ss = %d\n", conf->l1ss);
4200
+ }
41534201 else
41544202 return false;
41554203
....@@ -4208,6 +4256,12 @@
42084256 conf->wowl = (int)simple_strtol(data, NULL, 0);
42094257 CONFIG_MSG("wowl = 0x%x\n", conf->wowl);
42104258 }
4259
+#ifdef BCMDBUS
4260
+ else if (!strncmp("wowl_dngldown=", full_param, len_param)) {
4261
+ conf->wowl_dngldown = (int)simple_strtol(data, NULL, 0);
4262
+ CONFIG_MSG("wowl_dngldown = 0x%x\n", conf->wowl_dngldown);
4263
+ }
4264
+#endif
42114265 #endif
42124266 else if (!strncmp("rekey_offload=", full_param, len_param)) {
42134267 if (!strncmp(data, "1", 1))
....@@ -4819,7 +4873,108 @@
48194873 }
48204874
48214875 }
4876
+
4877
+static void
4878
+dhd_conf_set_ampdu_mpdu(dhd_pub_t *dhd)
4879
+{
4880
+ uint chip = dhd->conf->chip;
4881
+ char ampdu_mpdu[32] = "ampdu_mpdu=";
4882
+ int val = -1;
4883
+
4884
+ if (chip == BCM43362_CHIP_ID || chip == BCM4330_CHIP_ID ||
4885
+ chip == BCM4334_CHIP_ID || chip == BCM43340_CHIP_ID ||
4886
+ chip == BCM43341_CHIP_ID || chip == BCM4324_CHIP_ID ||
4887
+ chip == BCM4335_CHIP_ID || chip == BCM4339_CHIP_ID ||
4888
+ chip == BCM4354_CHIP_ID || chip == BCM4356_CHIP_ID ||
4889
+ chip == BCM4371_CHIP_ID ||
4890
+ chip == BCM43430_CHIP_ID ||
4891
+ chip == BCM4345_CHIP_ID || chip == BCM43454_CHIP_ID ||
4892
+ chip == BCM4359_CHIP_ID || chip == BCM43012_CHIP_ID) {
4893
+ val = 16;
4894
+ } else if (chip == BCM43751_CHIP_ID || chip == BCM43752_CHIP_ID) {
4895
+ val = 32;
4896
+ }
4897
+
4898
+ if (val > 0) {
4899
+ snprintf(ampdu_mpdu+strlen(ampdu_mpdu), sizeof(ampdu_mpdu), "%d", val);
4900
+ dhd_conf_set_wl_cmd(dhd, ampdu_mpdu, TRUE);
4901
+ }
4902
+}
4903
+
4904
+#if defined(SDIO_ISR_THREAD)
4905
+static void
4906
+dhd_conf_set_intr_extn(dhd_pub_t *dhd)
4907
+{
4908
+ uint chip = dhd->conf->chip;
4909
+
4910
+ if (chip == BCM43012_CHIP_ID ||
4911
+ chip == BCM4335_CHIP_ID || chip == BCM4339_CHIP_ID ||
4912
+ chip == BCM43454_CHIP_ID || chip == BCM4345_CHIP_ID ||
4913
+ chip == BCM4354_CHIP_ID || chip == BCM4356_CHIP_ID ||
4914
+ chip == BCM4345_CHIP_ID || chip == BCM4371_CHIP_ID ||
4915
+ chip == BCM4359_CHIP_ID ||
4916
+ chip == BCM43751_CHIP_ID || chip == BCM43752_CHIP_ID ||
4917
+ chip == BCM4375_CHIP_ID) {
4918
+ CONFIG_TRACE("enable intr_extn\n");
4919
+ dhd->conf->intr_extn = TRUE;
4920
+ }
4921
+}
4922
+#endif /* SDIO_ISR_THREAD */
48224923 #endif
4924
+
4925
+static void
4926
+dhd_conf_set_txbf(dhd_pub_t *dhd)
4927
+{
4928
+ uint chip = dhd->conf->chip;
4929
+
4930
+ if (chip == BCM4354_CHIP_ID || chip == BCM4356_CHIP_ID ||
4931
+ chip == BCM4371_CHIP_ID || chip == BCM4359_CHIP_ID ||
4932
+ chip == BCM43569_CHIP_ID ||
4933
+ chip == BCM43751_CHIP_ID || chip == BCM43752_CHIP_ID ||
4934
+ chip == BCM4375_CHIP_ID) {
4935
+ CONFIG_TRACE("enable txbf\n");
4936
+ dhd_conf_set_intiovar(dhd, 0, WLC_SET_VAR, "txbf", 1, 0, FALSE);
4937
+ }
4938
+}
4939
+
4940
+static void
4941
+dhd_conf_tput_improve(dhd_pub_t *dhd)
4942
+{
4943
+ struct dhd_conf *conf = dhd->conf;
4944
+ uint chip = conf->chip;
4945
+ uint chiprev = conf->chiprev;
4946
+
4947
+ if ((chip == BCM43430_CHIP_ID && chiprev == 2) ||
4948
+ chip == BCM43012_CHIP_ID ||
4949
+ chip == BCM4335_CHIP_ID || chip == BCM4339_CHIP_ID ||
4950
+ chip == BCM43454_CHIP_ID || chip == BCM4345_CHIP_ID ||
4951
+ chip == BCM4354_CHIP_ID || chip == BCM4356_CHIP_ID ||
4952
+ chip == BCM4345_CHIP_ID || chip == BCM4371_CHIP_ID ||
4953
+ chip == BCM43569_CHIP_ID || chip == BCM4359_CHIP_ID ||
4954
+ chip == BCM43751_CHIP_ID || chip == BCM43752_CHIP_ID ||
4955
+ chip == BCM4375_CHIP_ID) {
4956
+ CONFIG_TRACE("enable tput parameters\n");
4957
+#ifdef DHDTCPACK_SUPPRESS
4958
+#ifdef BCMSDIO
4959
+ conf->tcpack_sup_mode = TCPACK_SUP_REPLACE;
4960
+#endif
4961
+#endif
4962
+#if defined(BCMSDIO) || defined(BCMPCIE)
4963
+ dhd_rxbound = 128;
4964
+ dhd_txbound = 64;
4965
+#endif
4966
+ conf->frameburst = 1;
4967
+#ifdef BCMSDIO
4968
+ conf->dhd_txminmax = -1;
4969
+ conf->txinrx_thres = 128;
4970
+#endif
4971
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0))
4972
+ conf->orphan_move = 1;
4973
+#else
4974
+ conf->orphan_move = 0;
4975
+#endif
4976
+ }
4977
+}
48234978
48244979 #ifdef UPDATE_MODULE_NAME
48254980 #if defined(BCMSDIO) || defined(BCMPCIE)
....@@ -4915,26 +5070,14 @@
49155070 dhd_conf_preinit_ioctls_sta(dhd, 0);
49165071 dhd_conf_set_wl_cmd(dhd, wl_preinit, TRUE);
49175072 #if defined(BCMSDIO)
4918
- if (conf->chip == BCM43751_CHIP_ID || conf->chip == BCM43752_CHIP_ID) {
4919
- char ampdu_mpdu[] = "ampdu_mpdu=32";
4920
- dhd_conf_set_wl_cmd(dhd, ampdu_mpdu, TRUE);
4921
- } else {
4922
- char ampdu_mpdu[] = "ampdu_mpdu=16";
4923
- dhd_conf_set_wl_cmd(dhd, ampdu_mpdu, TRUE);
4924
- }
5073
+ dhd_conf_set_ampdu_mpdu(dhd);
49255074 #endif
49265075
49275076 #ifdef DHD_TPUT_PATCH
49285077 if (dhd->conf->mtu)
49295078 dhd_change_mtu(dhd, dhd->conf->mtu, 0);
49305079 #endif
4931
- if (conf->chip == BCM4354_CHIP_ID || conf->chip == BCM4356_CHIP_ID ||
4932
- conf->chip == BCM4371_CHIP_ID || conf->chip == BCM4359_CHIP_ID ||
4933
- conf->chip == BCM43569_CHIP_ID ||
4934
- conf->chip == BCM43751_CHIP_ID || conf->chip == BCM43752_CHIP_ID ||
4935
- conf->chip == BCM4375_CHIP_ID) {
4936
- dhd_conf_set_intiovar(dhd, 0, WLC_SET_VAR, "txbf", 1, 0, FALSE);
4937
- }
5080
+ dhd_conf_set_txbf(dhd);
49385081 if (conf->chip == BCM4375_CHIP_ID) {
49395082 char he_cmd[] = "110=1, nmode=1, vhtmode=1, he=enab 1";
49405083 dhd_conf_set_wl_cmd(dhd, he_cmd, TRUE);
....@@ -5115,10 +5258,12 @@
51155258 #endif
51165259 #endif
51175260 #ifdef BCMPCIE
5118
- conf->bus_deepsleep_disable = 1;
5261
+ conf->bus_deepsleep_disable = -1;
51195262 conf->flow_ring_queue_threshold = FLOW_RING_QUEUE_THRESHOLD;
51205263 conf->d2h_intr_method = -1;
51215264 conf->d2h_intr_control = -1;
5265
+ conf->aspm = -1;
5266
+ conf->l1ss = -1;
51225267 conf->enq_hdr_pkt = 0;
51235268 #endif
51245269 conf->dpc_cpucore = -1;
....@@ -5135,6 +5280,9 @@
51355280 #ifdef WL_EXT_WOWL
51365281 dhd_master_mode = TRUE;
51375282 conf->wowl = WL_WOWL_NET|WL_WOWL_DIS|WL_WOWL_BCN;
5283
+#ifdef BCMDBUS
5284
+ conf->wowl_dngldown = 0;
5285
+#endif
51385286 conf->insuspend |= (WOWL_IN_SUSPEND | NO_TXDATA_IN_SUSPEND);
51395287 #endif
51405288 if (conf->suspend_mode == PM_NOTIFIER || conf->suspend_mode == SUSPEND_MODE_2)
....@@ -5226,46 +5374,9 @@
52265374 memset(conf->isam_enable, 0, sizeof(conf->isam_enable));
52275375 #endif
52285376 #if defined(SDIO_ISR_THREAD)
5229
- if (conf->chip == BCM43012_CHIP_ID ||
5230
- conf->chip == BCM4335_CHIP_ID || conf->chip == BCM4339_CHIP_ID ||
5231
- conf->chip == BCM43454_CHIP_ID || conf->chip == BCM4345_CHIP_ID ||
5232
- conf->chip == BCM4354_CHIP_ID || conf->chip == BCM4356_CHIP_ID ||
5233
- conf->chip == BCM4345_CHIP_ID || conf->chip == BCM4371_CHIP_ID ||
5234
- conf->chip == BCM4359_CHIP_ID ||
5235
- conf->chip == BCM43751_CHIP_ID || conf->chip == BCM43752_CHIP_ID ||
5236
- conf->chip == BCM4375_CHIP_ID) {
5237
- conf->intr_extn = TRUE;
5238
- }
5377
+ dhd_conf_set_intr_extn(dhd);
52395378 #endif
5240
- if ((conf->chip == BCM43430_CHIP_ID && conf->chiprev == 2) ||
5241
- conf->chip == BCM43012_CHIP_ID ||
5242
- conf->chip == BCM4335_CHIP_ID || conf->chip == BCM4339_CHIP_ID ||
5243
- conf->chip == BCM43454_CHIP_ID || conf->chip == BCM4345_CHIP_ID ||
5244
- conf->chip == BCM4354_CHIP_ID || conf->chip == BCM4356_CHIP_ID ||
5245
- conf->chip == BCM4345_CHIP_ID || conf->chip == BCM4371_CHIP_ID ||
5246
- conf->chip == BCM43569_CHIP_ID || conf->chip == BCM4359_CHIP_ID ||
5247
- conf->chip == BCM43751_CHIP_ID || conf->chip == BCM43752_CHIP_ID ||
5248
- conf->chip == BCM4375_CHIP_ID) {
5249
-#ifdef DHDTCPACK_SUPPRESS
5250
-#ifdef BCMSDIO
5251
- conf->tcpack_sup_mode = TCPACK_SUP_REPLACE;
5252
-#endif
5253
-#endif
5254
-#if defined(BCMSDIO) || defined(BCMPCIE)
5255
- dhd_rxbound = 128;
5256
- dhd_txbound = 64;
5257
-#endif
5258
- conf->frameburst = 1;
5259
-#ifdef BCMSDIO
5260
- conf->dhd_txminmax = -1;
5261
- conf->txinrx_thres = 128;
5262
-#endif
5263
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 1, 0))
5264
- conf->orphan_move = 1;
5265
-#else
5266
- conf->orphan_move = 0;
5267
-#endif
5268
- }
5379
+ dhd_conf_tput_improve(dhd);
52695380 #ifdef DHD_TPUT_PATCH
52705381 if (conf->chip == BCM43751_CHIP_ID || conf->chip == BCM43752_CHIP_ID ||
52715382 conf->chip == BCM4375_CHIP_ID) {