hc
2024-05-16 8d2a02b24d66aa359e83eebc1ed3c0f85367a1cb
kernel/drivers/net/wireless/rockchip_wlan/rkwifi/bcmdhd/dhd_linux.c
old mode 100644new mode 100755
....@@ -65,11 +65,9 @@
6565 #include <asm/uaccess.h>
6666 #include <asm/unaligned.h>
6767 #include <dhd_linux_priv.h>
68
-#ifdef BCMPCIE
69
-#if defined(CUSTOMER_HW_ROCKCHIP) && defined(CUSTOMER_HW_ROCKCHIP_RK3588)
68
+#if defined(CUSTOMER_HW_ROCKCHIP) && defined(BCMPCIE)
7069 #include <rk_dhd_pcie_linux.h>
71
-#endif /* CUSTOMER_HW_ROCKCHIP && CUSTOMER_HW_ROCKCHIP_RK3588 */
72
-#endif /* BCMPCIE */
70
+#endif /* CUSTOMER_HW_ROCKCHIP && BCMPCIE */
7371
7472 #include <epivers.h>
7573 #include <bcmutils.h>
....@@ -372,6 +370,7 @@
372370 static void dhd_hang_process(struct work_struct *work_data);
373371 #endif /* OEM_ANDROID */
374372 MODULE_LICENSE("GPL and additional rights");
373
+MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver);
375374
376375 #if defined(MULTIPLE_SUPPLICANT)
377376 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25))
....@@ -1147,16 +1146,9 @@
11471146 dhd_pub_t *dhd = &dhdinfo->pub;
11481147 struct dhd_conf *conf = dhd->conf;
11491148 int suspend_mode = conf->suspend_mode;
1150
-#if defined(BCMDBUS) && defined(WL_EXT_WOWL)
1151
- int wowl_dngldown = 0;
1152
-#endif
11531149
11541150 BCM_REFERENCE(dhdinfo);
11551151 BCM_REFERENCE(suspend);
1156
-
1157
-#if defined(BCMDBUS) && defined(WL_EXT_WOWL)
1158
- wowl_dngldown = dhd_conf_wowl_dngldown(dhd);
1159
-#endif
11601152
11611153 switch (action) {
11621154 case PM_HIBERNATION_PREPARE:
....@@ -1189,9 +1181,6 @@
11891181 dhd_conf_set_suspend_resume(dhd, suspend);
11901182 DHD_OS_WAKE_LOCK_RESTORE(dhd);
11911183 } else {
1192
-#ifdef BCMDBUS
1193
- if (dhd->busstate == DHD_BUS_DATA) {
1194
-#endif
11951184 if (suspend_mode == PM_NOTIFIER || suspend_mode == SUSPEND_MODE_2)
11961185 dhd_conf_set_suspend_resume(dhd, suspend);
11971186 #if defined(SUPPORT_P2P_GO_PS) && defined(PROP_TXSTATUS)
....@@ -1199,20 +1188,6 @@
11991188 #endif /* defined(SUPPORT_P2P_GO_PS) && defined(PROP_TXSTATUS) */
12001189 if (suspend_mode == PM_NOTIFIER)
12011190 dhd_suspend_resume_helper(dhdinfo, suspend, 0);
1202
-#ifdef BCMDBUS
1203
- } else {
1204
-#if defined(BCMDBUS) && defined(WL_EXT_WOWL)
1205
- if (wowl_dngldown) {
1206
- printf("%s: reset power\n", __FUNCTION__);
1207
- dhd_wifi_platform_set_power(dhd, FALSE);
1208
- dhd_wifi_platform_set_power(dhd, TRUE);
1209
- } else
1210
-#endif
1211
- {
1212
- printf("%s: skip resume since bus suspeneded\n", __FUNCTION__);
1213
- }
1214
- }
1215
-#endif
12161191 }
12171192
12181193 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)) && (LINUX_VERSION_CODE <= \
....@@ -3566,9 +3541,6 @@
35663541 return;
35673542 }
35683543
3569
-#ifdef DHD_NOTIFY_MAC_CHANGED
3570
- rtnl_lock();
3571
-#endif /* DHD_NOTIFY_MAC_CHANGED */
35723544 dhd_net_if_lock_local(dhd);
35733545 DHD_OS_WAKE_LOCK(&dhd->pub);
35743546
....@@ -3583,17 +3555,22 @@
35833555
35843556 ifp->set_macaddress = FALSE;
35853557
3558
+#ifdef DHD_NOTIFY_MAC_CHANGED
3559
+ rtnl_lock();
3560
+#endif /* DHD_NOTIFY_MAC_CHANGED */
3561
+
35863562 if (_dhd_set_mac_address(dhd, ifp->idx, ifp->mac_addr, TRUE) == 0)
35873563 DHD_INFO(("%s: MACID is overwritten\n", __FUNCTION__));
35883564 else
35893565 DHD_ERROR(("%s: _dhd_set_mac_address() failed\n", __FUNCTION__));
35903566
3591
-done:
3592
- DHD_OS_WAKE_UNLOCK(&dhd->pub);
3593
- dhd_net_if_unlock_local(dhd);
35943567 #ifdef DHD_NOTIFY_MAC_CHANGED
35953568 rtnl_unlock();
35963569 #endif /* DHD_NOTIFY_MAC_CHANGED */
3570
+
3571
+done:
3572
+ DHD_OS_WAKE_UNLOCK(&dhd->pub);
3573
+ dhd_net_if_unlock_local(dhd);
35973574 }
35983575
35993576 static void
....@@ -4432,13 +4409,24 @@
44324409 #endif
44334410 /* Make sure there's enough room for any header */
44344411 #if !defined(BCM_ROUTER_DHD)
4435
- if (skb_cow(skb, (dhd->pub.hdrlen + htsfdlystat_sz))) {
4436
- DHD_ERROR(("%s: skb_cow failed\n",
4437
- dhd_ifname(&dhd->pub, ifidx)));
4412
+ if (skb_headroom(skb) < dhd->pub.hdrlen + htsfdlystat_sz) {
4413
+ struct sk_buff *skb2;
4414
+
4415
+ DHD_INFO(("%s: insufficient headroom\n",
4416
+ dhd_ifname(&dhd->pub, ifidx)));
4417
+ dhd->pub.tx_realloc++;
4418
+
44384419 bcm_object_trace_opr(skb, BCM_OBJDBG_REMOVE, __FUNCTION__, __LINE__);
4439
- dev_kfree_skb_any(skb);
4440
- ret = -ENOMEM;
4441
- goto done;
4420
+ skb2 = skb_realloc_headroom(skb, dhd->pub.hdrlen + htsfdlystat_sz);
4421
+
4422
+ dev_kfree_skb(skb);
4423
+ if ((skb = skb2) == NULL) {
4424
+ DHD_ERROR(("%s: skb_realloc_headroom failed\n",
4425
+ dhd_ifname(&dhd->pub, ifidx)));
4426
+ ret = -ENOMEM;
4427
+ goto done;
4428
+ }
4429
+ bcm_object_trace_opr(skb, BCM_OBJDBG_ADD_PKT, __FUNCTION__, __LINE__);
44424430 }
44434431 #endif /* !BCM_ROUTER_DHD */
44444432
....@@ -4772,11 +4760,6 @@
47724760 static void
47734761 __dhd_txflowcontrol(dhd_pub_t *dhdp, struct net_device *net, bool state)
47744762 {
4775
-
4776
- if (net->reg_state != NETREG_REGISTERED) {
4777
- return;
4778
- }
4779
-
47804763 if (state == ON) {
47814764 if (!netif_queue_stopped(net)) {
47824765 DHD_INFO(("%s: Stop Netif Queue\n", __FUNCTION__));
....@@ -8713,6 +8696,16 @@
87138696 }
87148697 #endif /* DHD_PCIE_NATIVE_RUNTIMEPM */
87158698
8699
+#ifdef CONFIG_HAS_WAKELOCK
8700
+#define dhd_wake_lock_unlock_destroy(wlock) \
8701
+{ \
8702
+ if (dhd_wake_lock_active(wlock)) { \
8703
+ dhd_wake_unlock(wlock); \
8704
+ } \
8705
+ dhd_wake_lock_destroy(wlock); \
8706
+}
8707
+#endif /* CONFIG_HAS_WAKELOCK */
8708
+
87168709 #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0) && defined(DHD_TCP_LIMIT_OUTPUT)
87178710 #define DHD_TCP_LIMIT_OUTPUT_BYTES (4 * 1024 * 1024)
87188711 #ifndef TCP_DEFAULT_LIMIT_OUTPUT
....@@ -8782,7 +8775,7 @@
87828775
87838776 #if defined(WL_STATIC_IF) && defined(WL_CFG80211)
87848777 /* If static if is operational, don't reset the chip */
8785
- if ((!dhd->pub.hang_was_sent) && wl_cfg80211_static_if_active(cfg)) {
8778
+ if (wl_cfg80211_static_if_active(cfg)) {
87868779 WL_MSG(net->name, "static if operational. skip chip reset.\n");
87878780 skip_reset = true;
87888781 wl_cfg80211_sta_ifdown(net);
....@@ -8790,7 +8783,7 @@
87908783 }
87918784 #endif /* WL_STATIC_IF && WL_CFG80211 */
87928785 #ifdef DHD_NOTIFY_MAC_CHANGED
8793
- if (!dhd->pub.hang_was_sent && dhd->pub.skip_dhd_stop) {
8786
+ if (dhd->pub.skip_dhd_stop) {
87948787 WL_MSG(net->name, "skip chip reset.\n");
87958788 skip_reset = true;
87968789 #if defined(WL_CFG80211)
....@@ -9084,14 +9077,14 @@
90849077 {
90859078 struct file *fp;
90869079 const char *clm = VENDOR_PATH CONFIG_BCMDHD_CLM_PATH;
9080
+ fp = filp_open(clm, O_RDONLY, 0);
90879081
9088
- fp = dhd_filp_open(clm, O_RDONLY, 0);
9089
- if (IS_ERR(fp) || (fp == NULL)) {
9082
+ if (IS_ERR(fp)) {
90909083 DHD_ERROR(("%s: filp_open(%s) failed(%d) schedule wl_accel_work\n",
90919084 __FUNCTION__, clm, (int)IS_ERR(fp)));
90929085 return FALSE;
90939086 }
9094
- dhd_filp_close(fp, NULL);
9087
+ filp_close(fp, NULL);
90959088
90969089 return TRUE;
90979090 }
....@@ -10446,13 +10439,8 @@
1044610439 #endif /* DHDTCPACK_SUPPRESS && BCMPCIE */
1044710440 if (need_rtnl_lock)
1044810441 unregister_netdev(ifp->net);
10449
- else {
10450
-#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0)) && defined(WL_CFG80211)
10451
- cfg80211_unregister_netdevice(ifp->net);
10452
-#else
10442
+ else
1045310443 unregister_netdevice(ifp->net);
10454
-#endif
10455
- }
1045610444 #if defined(WLDWDS) && defined(WL_EXT_IAPSTA)
1045710445 if (ifp->dwds) {
1045810446 wl_ext_iapsta_dettach_dwds_netdev(ifp->net, ifidx, ifp->bssidx);
....@@ -10591,7 +10579,7 @@
1059110579 if (!fp || !buf || buflen == 0)
1059210580 return -1;
1059310581
10594
- if (dhd_vfs_write((struct file *)fp, buf, buflen, &wr_posn) < 0)
10582
+ if (vfs_write((struct file *)fp, buf, buflen, &wr_posn) < 0)
1059510583 return -1;
1059610584
1059710585 *posn = wr_posn;
....@@ -10607,7 +10595,7 @@
1060710595 if (!file || !buf)
1060810596 return -1;
1060910597
10610
- return dhd_vfs_read(filep, buf, size, &filep->f_pos);
10598
+ return vfs_read(filep, buf, size, &filep->f_pos);
1061110599 }
1061210600
1061310601 int
....@@ -10623,6 +10611,135 @@
1062310611 return 0;
1062410612 }
1062510613
10614
+static int
10615
+dhd_init_logstrs_array(osl_t *osh, dhd_event_log_t *temp)
10616
+{
10617
+ struct file *filep = NULL;
10618
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
10619
+ struct kstat stat;
10620
+ mm_segment_t fs;
10621
+ int error = 0;
10622
+#endif
10623
+ char *raw_fmts = NULL;
10624
+ int logstrs_size = 0;
10625
+
10626
+ if (control_logtrace != LOGTRACE_PARSED_FMT) {
10627
+ DHD_ERROR_NO_HW4(("%s : turned off logstr parsing\n", __FUNCTION__));
10628
+ return BCME_ERROR;
10629
+ }
10630
+
10631
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
10632
+ fs = get_fs();
10633
+ set_fs(KERNEL_DS);
10634
+#endif
10635
+
10636
+ filep = filp_open(logstrs_path, O_RDONLY, 0);
10637
+
10638
+ if (IS_ERR(filep)) {
10639
+ DHD_ERROR_NO_HW4(("%s: Failed to open the file %s \n", __FUNCTION__, logstrs_path));
10640
+ goto fail;
10641
+ }
10642
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
10643
+ error = vfs_stat(logstrs_path, &stat);
10644
+ if (error) {
10645
+ DHD_ERROR_NO_HW4(("%s: Failed to stat file %s \n", __FUNCTION__, logstrs_path));
10646
+ goto fail;
10647
+ }
10648
+ logstrs_size = (int) stat.size;
10649
+#else
10650
+ logstrs_size = dhd_os_get_image_size(filep);
10651
+#endif
10652
+
10653
+ if (logstrs_size == 0) {
10654
+ DHD_ERROR(("%s: return as logstrs_size is 0\n", __FUNCTION__));
10655
+ goto fail1;
10656
+ }
10657
+
10658
+ if (temp->raw_fmts != NULL) {
10659
+ raw_fmts = temp->raw_fmts; /* reuse already malloced raw_fmts */
10660
+ } else {
10661
+ raw_fmts = MALLOC(osh, logstrs_size);
10662
+ if (raw_fmts == NULL) {
10663
+ DHD_ERROR(("%s: Failed to allocate memory \n", __FUNCTION__));
10664
+ goto fail;
10665
+ }
10666
+ }
10667
+
10668
+ if (vfs_read(filep, raw_fmts, logstrs_size, &filep->f_pos) != logstrs_size) {
10669
+ DHD_ERROR_NO_HW4(("%s: Failed to read file %s\n", __FUNCTION__, logstrs_path));
10670
+ goto fail;
10671
+ }
10672
+
10673
+ if (dhd_parse_logstrs_file(osh, raw_fmts, logstrs_size, temp)
10674
+ == BCME_OK) {
10675
+ filp_close(filep, NULL);
10676
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
10677
+ set_fs(fs);
10678
+#endif
10679
+ return BCME_OK;
10680
+ }
10681
+
10682
+fail:
10683
+ if (raw_fmts) {
10684
+ MFREE(osh, raw_fmts, logstrs_size);
10685
+ }
10686
+ if (temp->fmts != NULL) {
10687
+ MFREE(osh, temp->fmts, temp->num_fmts * sizeof(char *));
10688
+ }
10689
+
10690
+fail1:
10691
+ if (!IS_ERR(filep))
10692
+ filp_close(filep, NULL);
10693
+
10694
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
10695
+ set_fs(fs);
10696
+#endif
10697
+ temp->fmts = NULL;
10698
+ temp->raw_fmts = NULL;
10699
+
10700
+ return BCME_ERROR;
10701
+}
10702
+
10703
+static int
10704
+dhd_read_map(osl_t *osh, char *fname, uint32 *ramstart, uint32 *rodata_start,
10705
+ uint32 *rodata_end)
10706
+{
10707
+ struct file *filep = NULL;
10708
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
10709
+ mm_segment_t fs;
10710
+#endif
10711
+ int err = BCME_ERROR;
10712
+
10713
+ if (fname == NULL) {
10714
+ DHD_ERROR(("%s: ERROR fname is NULL \n", __FUNCTION__));
10715
+ return BCME_ERROR;
10716
+ }
10717
+
10718
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
10719
+ fs = get_fs();
10720
+ set_fs(KERNEL_DS);
10721
+#endif
10722
+
10723
+ filep = filp_open(fname, O_RDONLY, 0);
10724
+ if (IS_ERR(filep)) {
10725
+ DHD_ERROR_NO_HW4(("%s: Failed to open %s \n", __FUNCTION__, fname));
10726
+ goto fail;
10727
+ }
10728
+
10729
+ if ((err = dhd_parse_map_file(osh, filep, ramstart,
10730
+ rodata_start, rodata_end)) < 0)
10731
+ goto fail;
10732
+
10733
+fail:
10734
+ if (!IS_ERR(filep))
10735
+ filp_close(filep, NULL);
10736
+
10737
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
10738
+ set_fs(fs);
10739
+#endif
10740
+
10741
+ return err;
10742
+}
1062610743 #ifdef DHD_COREDUMP
1062710744 #define PC_FOUND_BIT 0x01
1062810745 #define LR_FOUND_BIT 0x02
....@@ -10682,8 +10799,8 @@
1068210799 set_fs(KERNEL_DS);
1068310800 #endif
1068410801
10685
- filep = dhd_filp_open(fname, O_RDONLY, 0);
10686
- if (IS_ERR(filep) || (filep == NULL)) {
10802
+ filep = filp_open(fname, O_RDONLY, 0);
10803
+ if (IS_ERR(filep)) {
1068710804 DHD_ERROR(("%s: Failed to open %s \n", __FUNCTION__, fname));
1068810805 goto fail;
1068910806 }
....@@ -10845,7 +10962,7 @@
1084510962 }
1084610963 #else
1084710964 if (!IS_ERR(filep))
10848
- dhd_filp_close(filep, NULL);
10965
+ filp_close(filep, NULL);
1084910966
1085010967 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
1085110968 set_fs(fs);
....@@ -11220,8 +11337,8 @@
1122011337 set_fs(KERNEL_DS);
1122111338 #endif
1122211339
11223
- filep = dhd_filp_open(str_file, O_RDONLY, 0);
11224
- if (IS_ERR(filep) || (filep == NULL)) {
11340
+ filep = filp_open(str_file, O_RDONLY, 0);
11341
+ if (IS_ERR(filep)) {
1122511342 DHD_ERROR(("%s: Failed to open the file %s \n", __FUNCTION__, str_file));
1122611343 goto fail;
1122711344 }
....@@ -11258,7 +11375,7 @@
1125811375 }
1125911376 }
1126011377
11261
- error = dhd_vfs_read(filep, raw_fmts, logstrs_size, (&filep->f_pos));
11378
+ error = vfs_read(filep, raw_fmts, logstrs_size, (&filep->f_pos));
1126211379 if (error != logstrs_size) {
1126311380 DHD_ERROR(("%s: %s read failed %d \n", __FUNCTION__, str_file, error));
1126411381 goto fail;
....@@ -11276,7 +11393,7 @@
1127611393 temp->rom_rodata_end = rodata_end;
1127711394 }
1127811395
11279
- dhd_filp_close(filep, NULL);
11396
+ filp_close(filep, NULL);
1128011397 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
1128111398 set_fs(fs);
1128211399 #endif
....@@ -11290,7 +11407,7 @@
1129011407
1129111408 fail1:
1129211409 if (!IS_ERR(filep))
11293
- dhd_filp_close(filep, NULL);
11410
+ filp_close(filep, NULL);
1129411411
1129511412 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
1129611413 set_fs(fs);
....@@ -11652,7 +11769,9 @@
1165211769 dhd->wakelock_counter = 0;
1165311770 /* wakelocks prevent a system from going into a low power state */
1165411771 #ifdef CONFIG_HAS_WAKELOCK
11655
- dhd_wake_lock_init(dhd->wl_wdwake, dhd_bus_to_dev(bus), "wlan_wd_wake");
11772
+ // terence 20161023: can not destroy wl_wifi when wlan down, it will happen null pointer in dhd_ioctl_entry
11773
+ dhd_wake_lock_init(&dhd->wl_wifi, WAKE_LOCK_SUSPEND, "wlan_wake");
11774
+ dhd_wake_lock_init(&dhd->wl_wdwake, WAKE_LOCK_SUSPEND, "wlan_wd_wake");
1165611775 #endif /* CONFIG_HAS_WAKELOCK */
1165711776
1165811777 #if defined(OEM_ANDROID)
....@@ -11698,12 +11817,6 @@
1169811817 goto fail;
1169911818 }
1170011819 #endif /* WL_EVENT */
11701
-#ifdef WL_TIMER
11702
- if (wl_timer_attach(net) != 0) {
11703
- DHD_ERROR(("wl_ext_timer_attach failed\n"));
11704
- goto fail;
11705
- }
11706
-#endif /* WL_TIMER */
1170711820 #ifdef WL_ESCAN
1170811821 /* Attach and link in the escan */
1170911822 if (wl_escan_attach(net) != 0) {
....@@ -11866,6 +11979,13 @@
1186611979 }
1186711980 #endif /* DHD_PCIE_RUNTIMEPM */
1186811981
11982
+#ifdef SHOW_LOGTRACE
11983
+ skb_queue_head_init(&dhd->evt_trace_queue);
11984
+
11985
+ /* Create ring proc entries */
11986
+ dhd_dbg_ring_proc_create(&dhd->pub);
11987
+#endif /* SHOW_LOGTRACE */
11988
+
1186911989 #ifdef BTLOG
1187011990 skb_queue_head_init(&dhd->bt_log_queue);
1187111991 #endif /* BTLOG */
....@@ -11897,13 +12017,6 @@
1189712017 }
1189812018 }
1189912019 #endif /* !BCMDBUS */
11900
-
11901
-#ifdef SHOW_LOGTRACE
11902
- skb_queue_head_init(&dhd->evt_trace_queue);
11903
-
11904
- /* Create ring proc entries */
11905
- dhd_dbg_ring_proc_create(&dhd->pub);
11906
-#endif /* SHOW_LOGTRACE */
1190712020
1190812021 dhd_state |= DHD_ATTACH_STATE_THREADS_CREATED;
1190912022
....@@ -12788,12 +12901,10 @@
1278812901 dhd_bus_l1ss_enable_rc_ep(dhdp->bus, TRUE);
1278912902 #endif /* BT_OVER_PCIE */
1279012903
12791
-#ifdef BCMPCIE
12792
-#if defined(CUSTOMER_HW_ROCKCHIP) && defined(CUSTOMER_HW_ROCKCHIP_RK3588)
12904
+#if defined(CUSTOMER_HW_ROCKCHIP) && defined(BCMPCIE)
1279312905 if (IS_ENABLED(CONFIG_PCIEASPM_ROCKCHIP_WIFI_EXTENSION))
1279412906 rk_dhd_bus_l1ss_enable_rc_ep(dhdp->bus, TRUE);
1279512907 #endif /* CUSTOMER_HW_ROCKCHIP && BCMPCIE */
12796
-#endif /* BCMPCIE */
1279712908
1279812909 #if defined(CONFIG_ARCH_EXYNOS) && defined(BCMPCIE)
1279912910 #if !defined(CONFIG_SOC_EXYNOS8890) && !defined(SUPPORT_EXYNOS7420)
....@@ -13351,7 +13462,7 @@
1335113462
1335213463 old_fs = get_fs();
1335313464 set_fs(get_ds());
13354
- if ((ret = dhd_vfs_stat(config_path, &stat))) {
13465
+ if ((ret = vfs_stat(config_path, &stat))) {
1335513466 set_fs(old_fs);
1335613467 printk(KERN_ERR "%s: Failed to get information (%d)\n",
1335713468 config_path, ret);
....@@ -13814,8 +13925,12 @@
1381413925 else {
1381513926 bcmstrtok(&ptr, "\n", 0);
1381613927 /* Print fw version info */
13928
+ DHD_ERROR(("Firmware version = %s\n", buf));
1381713929 strncpy(fw_version, buf, FW_VER_STR_LEN);
1381813930 fw_version[FW_VER_STR_LEN-1] = '\0';
13931
+#if defined(BCMSDIO) || defined(BCMPCIE)
13932
+ dhd_set_version_info(dhd, buf);
13933
+#endif /* BCMSDIO || BCMPCIE */
1381913934 }
1382013935
1382113936 /* query for 'wlc_ver' to get version info from firmware */
....@@ -13830,12 +13945,14 @@
1383013945 dhd->wlc_ver_major = wlc_ver.wlc_ver_major;
1383113946 dhd->wlc_ver_minor = wlc_ver.wlc_ver_minor;
1383213947 }
13948
+#ifdef BOARD_HIKEY
1383313949 /* Set op_mode as MFG_MODE if WLTEST is present in "wl ver" */
1383413950 if (strstr(fw_version, "WLTEST") != NULL) {
1383513951 DHD_ERROR(("%s: wl ver has WLTEST, setting op_mode as DHD_FLAG_MFG_MODE\n",
1383613952 __FUNCTION__));
1383713953 op_mode = DHD_FLAG_MFG_MODE;
1383813954 }
13955
+#endif /* BOARD_HIKEY */
1383913956 /* get a capabilities from firmware */
1384013957 ret = dhd_get_fw_capabilities(dhd);
1384113958
....@@ -13992,7 +14109,6 @@
1399214109
1399314110 DHD_ERROR(("Firmware up: op_mode=0x%04x, MAC="MACDBG"\n",
1399414111 dhd->op_mode, MAC2STRDBG(dhd->mac.octet)));
13995
- dhd_set_version_info(dhd, fw_version);
1399614112 #if defined(DHD_BLOB_EXISTENCE_CHECK)
1399714113 if (!dhd->is_blob)
1399814114 #endif /* DHD_BLOB_EXISTENCE_CHECK */
....@@ -14185,10 +14301,6 @@
1418514301 dhd_update_flow_prio_map(dhd, DHD_FLOW_PRIO_LLR_MAP);
1418614302 #endif /* defined(BCMPCIE) && defined(EAPOL_PKT_PRIO) */
1418714303
14188
-#if defined(BCMSDIO) && defined(DHD_LOSSLESS_ROAMING)
14189
- dhd_update_sdio_data_prio_map(dhd);
14190
-#endif /* BCMSDIO && DHD_LOSSLESS_ROAMING */
14191
-
1419214304 #ifdef ARP_OFFLOAD_SUPPORT
1419314305 DHD_ERROR(("arp_enable:%d arp_ol:%d\n",
1419414306 dhd->arpoe_enable, dhd->arpol_configured));
....@@ -14200,64 +14312,60 @@
1420014312 */
1420114313 #ifdef PKT_FILTER_SUPPORT
1420214314 /* Setup default defintions for pktfilter , enable in suspend */
14203
- if (dhd_master_mode) {
14204
- dhd->pktfilter_count = 6;
14205
- dhd->pktfilter[DHD_BROADCAST_FILTER_NUM] = NULL;
14206
- if (!FW_SUPPORTED(dhd, pf6)) {
14207
- dhd->pktfilter[DHD_MULTICAST4_FILTER_NUM] = NULL;
14208
- dhd->pktfilter[DHD_MULTICAST6_FILTER_NUM] = NULL;
14209
- } else {
14210
- /* Immediately pkt filter TYPE 6 Discard IPv4/IPv6 Multicast Packet */
14211
- dhd->pktfilter[DHD_MULTICAST4_FILTER_NUM] = DISCARD_IPV4_MCAST;
14212
- dhd->pktfilter[DHD_MULTICAST6_FILTER_NUM] = DISCARD_IPV6_MCAST;
14213
- }
14214
- /* apply APP pktfilter */
14215
- dhd->pktfilter[DHD_ARP_FILTER_NUM] = "105 0 0 12 0xFFFF 0x0806";
14315
+ dhd->pktfilter_count = 6;
14316
+ dhd->pktfilter[DHD_BROADCAST_FILTER_NUM] = NULL;
14317
+ if (!FW_SUPPORTED(dhd, pf6)) {
14318
+ dhd->pktfilter[DHD_MULTICAST4_FILTER_NUM] = NULL;
14319
+ dhd->pktfilter[DHD_MULTICAST6_FILTER_NUM] = NULL;
14320
+ } else {
14321
+ /* Immediately pkt filter TYPE 6 Discard IPv4/IPv6 Multicast Packet */
14322
+ dhd->pktfilter[DHD_MULTICAST4_FILTER_NUM] = DISCARD_IPV4_MCAST;
14323
+ dhd->pktfilter[DHD_MULTICAST6_FILTER_NUM] = DISCARD_IPV6_MCAST;
14324
+ }
14325
+ /* apply APP pktfilter */
14326
+ dhd->pktfilter[DHD_ARP_FILTER_NUM] = "105 0 0 12 0xFFFF 0x0806";
1421614327
1421714328 #ifdef BLOCK_IPV6_PACKET
14218
- /* Setup filter to allow only IPv4 unicast frames */
14219
- dhd->pktfilter[DHD_UNICAST_FILTER_NUM] = "100 0 0 0 "
14220
- HEX_PREF_STR UNI_FILTER_STR ZERO_ADDR_STR ETHER_TYPE_STR IPV6_FILTER_STR
14221
- " "
14222
- HEX_PREF_STR ZERO_ADDR_STR ZERO_ADDR_STR ETHER_TYPE_STR ZERO_TYPE_STR;
14329
+ /* Setup filter to allow only IPv4 unicast frames */
14330
+ dhd->pktfilter[DHD_UNICAST_FILTER_NUM] = "100 0 0 0 "
14331
+ HEX_PREF_STR UNI_FILTER_STR ZERO_ADDR_STR ETHER_TYPE_STR IPV6_FILTER_STR
14332
+ " "
14333
+ HEX_PREF_STR ZERO_ADDR_STR ZERO_ADDR_STR ETHER_TYPE_STR ZERO_TYPE_STR;
1422314334 #else
14224
- /* Setup filter to allow only unicast */
14225
- dhd->pktfilter[DHD_UNICAST_FILTER_NUM] = "100 0 0 0 0x01 0x00";
14335
+ /* Setup filter to allow only unicast */
14336
+ dhd->pktfilter[DHD_UNICAST_FILTER_NUM] = "100 0 0 0 0x01 0x00";
1422614337 #endif /* BLOCK_IPV6_PACKET */
1422714338
1422814339 #ifdef PASS_IPV4_SUSPEND
14229
- /* XXX customer want to get IPv4 multicast packets */
14230
- dhd->pktfilter[DHD_MDNS_FILTER_NUM] = "104 0 0 0 0xFFFFFF 0x01005E";
14340
+ /* XXX customer want to get IPv4 multicast packets */
14341
+ dhd->pktfilter[DHD_MDNS_FILTER_NUM] = "104 0 0 0 0xFFFFFF 0x01005E";
1423114342 #else
14232
- /* Add filter to pass multicastDNS packet and NOT filter out as Broadcast */
14233
- dhd->pktfilter[DHD_MDNS_FILTER_NUM] = NULL;
14343
+ /* Add filter to pass multicastDNS packet and NOT filter out as Broadcast */
14344
+ dhd->pktfilter[DHD_MDNS_FILTER_NUM] = NULL;
1423414345 #endif /* PASS_IPV4_SUSPEND */
14235
- if (FW_SUPPORTED(dhd, pf6)) {
14236
- /* Immediately pkt filter TYPE 6 Dicard Broadcast IP packet */
14237
- dhd->pktfilter[DHD_IP4BCAST_DROP_FILTER_NUM] = DISCARD_IPV4_BCAST;
14238
- /* Immediately pkt filter TYPE 6 Dicard Cisco STP packet */
14239
- dhd->pktfilter[DHD_LLC_STP_DROP_FILTER_NUM] = DISCARD_LLC_STP;
14240
- /* Immediately pkt filter TYPE 6 Dicard Cisco XID protocol */
14241
- dhd->pktfilter[DHD_LLC_XID_DROP_FILTER_NUM] = DISCARD_LLC_XID;
14242
- /* Immediately pkt filter TYPE 6 Dicard NETBIOS packet(port 137) */
14243
- dhd->pktfilter[DHD_UDPNETBIOS_DROP_FILTER_NUM] = DISCARD_UDPNETBIOS;
14244
- dhd->pktfilter_count = 11;
14245
- }
14346
+ if (FW_SUPPORTED(dhd, pf6)) {
14347
+ /* Immediately pkt filter TYPE 6 Dicard Broadcast IP packet */
14348
+ dhd->pktfilter[DHD_IP4BCAST_DROP_FILTER_NUM] = DISCARD_IPV4_BCAST;
14349
+ /* Immediately pkt filter TYPE 6 Dicard Cisco STP packet */
14350
+ dhd->pktfilter[DHD_LLC_STP_DROP_FILTER_NUM] = DISCARD_LLC_STP;
14351
+ /* Immediately pkt filter TYPE 6 Dicard Cisco XID protocol */
14352
+ dhd->pktfilter[DHD_LLC_XID_DROP_FILTER_NUM] = DISCARD_LLC_XID;
14353
+ /* Immediately pkt filter TYPE 6 Dicard NETBIOS packet(port 137) */
14354
+ dhd->pktfilter[DHD_UDPNETBIOS_DROP_FILTER_NUM] = DISCARD_UDPNETBIOS;
14355
+ dhd->pktfilter_count = 11;
14356
+ }
1424614357
1424714358 #ifdef GAN_LITE_NAT_KEEPALIVE_FILTER
14248
- dhd->pktfilter_count = 4;
14249
- /* Setup filter to block broadcast and NAT Keepalive packets */
14250
- /* discard all broadcast packets */
14251
- dhd->pktfilter[DHD_UNICAST_FILTER_NUM] = "100 0 0 0 0xffffff 0xffffff";
14252
- /* discard NAT Keepalive packets */
14253
- dhd->pktfilter[DHD_BROADCAST_FILTER_NUM] = "102 0 0 36 0xffffffff 0x11940009";
14254
- /* discard NAT Keepalive packets */
14255
- dhd->pktfilter[DHD_MULTICAST4_FILTER_NUM] = "104 0 0 38 0xffffffff 0x11940009";
14256
- dhd->pktfilter[DHD_MULTICAST6_FILTER_NUM] = NULL;
14359
+ dhd->pktfilter_count = 4;
14360
+ /* Setup filter to block broadcast and NAT Keepalive packets */
14361
+ /* discard all broadcast packets */
14362
+ dhd->pktfilter[DHD_UNICAST_FILTER_NUM] = "100 0 0 0 0xffffff 0xffffff";
14363
+ /* discard NAT Keepalive packets */
14364
+ dhd->pktfilter[DHD_BROADCAST_FILTER_NUM] = "102 0 0 36 0xffffffff 0x11940009";
14365
+ /* discard NAT Keepalive packets */
14366
+ dhd->pktfilter[DHD_MULTICAST4_FILTER_NUM] = "104 0 0 38 0xffffffff 0x11940009";
14367
+ dhd->pktfilter[DHD_MULTICAST6_FILTER_NUM] = NULL;
1425714368 #endif /* GAN_LITE_NAT_KEEPALIVE_FILTER */
14258
- } else
14259
- dhd_conf_discard_pkt_filter(dhd);
14260
- dhd_conf_add_pkt_filter(dhd);
1426114369
1426214370 #if defined(SOFTAP)
1426314371 if (ap_fw_loaded) {
....@@ -14499,7 +14607,6 @@
1449914607 dhd_set_bandlock(dhd);
1450014608
1450114609 done:
14502
- dhd_conf_postinit_ioctls(dhd);
1450314610 if (iov_buf) {
1450414611 MFREE(dhd->osh, iov_buf, WLC_IOCTL_SMLEN);
1450514612 }
....@@ -14768,12 +14875,14 @@
1476814875 fw_version[FW_VER_STR_LEN-1] = '\0';
1476914876 }
1477014877
14878
+#ifdef BOARD_HIKEY
1477114879 /* Set op_mode as MFG_MODE if WLTEST is present in "wl ver" */
1477214880 if (strstr(fw_version, "WLTEST") != NULL) {
1477314881 DHD_ERROR(("%s: wl ver has WLTEST, setting op_mode as DHD_FLAG_MFG_MODE\n",
1477414882 __FUNCTION__));
1477514883 op_mode = DHD_FLAG_MFG_MODE;
1477614884 }
14885
+#endif /* BOARD_HIKEY */
1477714886
1477814887 if ((!op_mode && dhd_get_fw_mode(dhd->info) == DHD_FLAG_MFG_MODE) ||
1477914888 (op_mode == DHD_FLAG_MFG_MODE)) {
....@@ -15329,7 +15438,7 @@
1532915438 }
1533015439
1533115440 #else /* OEM_ANDROID */
15332
- if ((ret = dhd_apply_default_clm(dhd, dhd->clm_path)) < 0) {
15441
+ if ((ret = dhd_apply_default_clm(dhd, clm_path)) < 0) {
1533315442 DHD_ERROR(("%s: CLM set failed. Abort initialization.\n", __FUNCTION__));
1533415443 goto done;
1533515444 }
....@@ -15721,10 +15830,6 @@
1572115830 dhd_update_flow_prio_map(dhd, DHD_FLOW_PRIO_LLR_MAP);
1572215831 #endif /* defined(BCMPCIE) && defined(EAPOL_PKT_PRIO) */
1572315832
15724
-#if defined(BCMSDIO) && defined(DHD_LOSSLESS_ROAMING)
15725
- dhd_update_sdio_data_prio_map(dhd);
15726
-#endif /* BCMSDIO && DHD_LOSSLESS_ROAMING */
15727
-
1572815833 #ifdef RSSI_MONITOR_SUPPORT
1572915834 setbit(mask, WLC_E_RSSI_LQM);
1573015835 #endif /* RSSI_MONITOR_SUPPORT */
....@@ -15762,9 +15867,6 @@
1576215867 setbit(mask, WLC_E_DELTS_IND);
1576315868 #endif /* WL_BCNRECV */
1576415869 setbit(mask, WLC_E_COUNTRY_CODE_CHANGED);
15765
-#if defined(WL_TWT) || defined(WL_TWT_HAL_IF)
15766
- setbit(mask, WLC_E_TWT);
15767
-#endif /* WL_TWT || WL_TWT_HAL_IF */
1576815870
1576915871 /* Write updated Event mask */
1577015872 eventmask_msg->ver = EVENTMSGS_VER;
....@@ -17269,9 +17371,6 @@
1726917371 #ifdef WL_ESCAN
1727017372 wl_escan_detach(dev);
1727117373 #endif /* WL_ESCAN */
17272
-#ifdef WL_TIMER
17273
- wl_timer_dettach(dhdp);
17274
-#endif /* WL_TIMER */
1727517374 #ifdef WL_EVENT
1727617375 wl_ext_event_dettach(dhdp);
1727717376 #endif /* WL_EVENT */
....@@ -17545,7 +17644,9 @@
1754517644 DHD_TRACE(("wd wakelock count:%d\n", dhd->wakelock_wd_counter));
1754617645 #ifdef CONFIG_HAS_WAKELOCK
1754717646 dhd->wakelock_wd_counter = 0;
17548
- dhd_wake_lock_destroy(dhd->wl_wdwake);
17647
+ dhd_wake_lock_unlock_destroy(&dhd->wl_wdwake);
17648
+ // terence 20161023: can not destroy wl_wifi when wlan down, it will happen null pointer in dhd_ioctl_entry
17649
+ dhd_wake_lock_unlock_destroy(&dhd->wl_wifi);
1754917650 #endif /* CONFIG_HAS_WAKELOCK */
1755017651 if (dhd->dhd_state & DHD_ATTACH_STATE_WAKELOCKS_INIT) {
1755117652 DHD_OS_WAKE_LOCK_DESTROY(dhd);
....@@ -18425,7 +18526,7 @@
1842518526 /* convert to BCME_NOTFOUND error for error handling */
1842618527 ret = BCME_NOTFOUND;
1842718528 } else
18428
- DHD_ERROR(("%s: %s (%zu bytes) open success\n", __FUNCTION__, file_path, (*fw)->size));
18529
+ DHD_ERROR(("%s: %s (%zu bytes) open success\n", __FUNCTION__, file_path, (*fw)->size));
1842918530
1843018531 return ret;
1843118532 }
....@@ -18443,14 +18544,14 @@
1844318544 struct file *fp;
1844418545 int size;
1844518546
18446
- fp = dhd_filp_open(filename, O_RDONLY, 0);
18547
+ fp = filp_open(filename, O_RDONLY, 0);
1844718548 /*
18448
- * 2.6.11 (FC4) supports dhd_filp_open() but later revs don't?
18549
+ * 2.6.11 (FC4) supports filp_open() but later revs don't?
1844918550 * Alternative:
1845018551 * fp = open_namei(AT_FDCWD, filename, O_RD, 0);
1845118552 * ???
1845218553 */
18453
- if (IS_ERR(fp) || (fp == NULL)) {
18554
+ if (IS_ERR(fp)) {
1845418555 fp = NULL;
1845518556 goto err;
1845618557 }
....@@ -18461,7 +18562,7 @@
1846118562 goto err;
1846218563 }
1846318564
18464
- size = dhd_i_size_read(file_inode(fp));
18565
+ size = i_size_read(file_inode(fp));
1846518566 if (size <= 0) {
1846618567 DHD_ERROR(("%s: %s file size invalid %d\n", __FUNCTION__, filename, size));
1846718568 fp = NULL;
....@@ -18485,8 +18586,8 @@
1848518586 return 0;
1848618587 }
1848718588
18488
- size = dhd_i_size_read(file_inode(fp));
18489
- rdlen = dhd_kernel_read_compat(fp, fp->f_pos, buf, MIN(len, size));
18589
+ size = i_size_read(file_inode(fp));
18590
+ rdlen = kernel_read_compat(fp, fp->f_pos, buf, MIN(len, size));
1849018591
1849118592 if (len >= size && size != rdlen) {
1849218593 return -EIO;
....@@ -18511,7 +18612,7 @@
1851118612 if (!image)
1851218613 return 0;
1851318614
18514
- rd_len = dhd_kernel_read_compat(fp, fp->f_pos, str, len);
18615
+ rd_len = kernel_read_compat(fp, fp->f_pos, str, len);
1851518616 str_end = strnchr(str, len, '\n');
1851618617 if (str_end == NULL) {
1851718618 goto err;
....@@ -18536,7 +18637,7 @@
1853618637 return 0;
1853718638 }
1853818639
18539
- size = dhd_i_size_read(file_inode(fp));
18640
+ size = i_size_read(file_inode(fp));
1854018641
1854118642 return size;
1854218643 }
....@@ -18545,7 +18646,7 @@
1854518646 dhd_os_close_image1(dhd_pub_t *pub, void *image)
1854618647 {
1854718648 if (image) {
18548
- dhd_filp_close((struct file *)image, NULL);
18649
+ filp_close((struct file *)image, NULL);
1854918650 }
1855018651 }
1855118652
....@@ -20888,14 +20989,14 @@
2088820989 #endif
2088920990
2089020991 /* open file to write */
20891
- fp = dhd_filp_open(file_name, flags, 0664);
20892
- if (IS_ERR(fp) || (fp == NULL)) {
20992
+ fp = filp_open(file_name, flags, 0664);
20993
+ if (IS_ERR(fp)) {
2089320994 DHD_ERROR(("open file error, err = %ld\n", PTR_ERR(fp)));
2089420995 goto exit;
2089520996 }
2089620997
2089720998 /* Write buf to file */
20898
- ret = dhd_vfs_write(fp, buf, size, &pos);
20999
+ ret = vfs_write(fp, buf, size, &pos);
2089921000 if (ret < 0) {
2090021001 DHD_ERROR(("write file error, err = %d\n", ret));
2090121002 goto exit;
....@@ -20903,7 +21004,7 @@
2090321004
2090421005 /* Sync file from filesystem to physical media */
2090521006 #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35))
20906
- ret = dhd_vfs_fsync(fp, 0);
21007
+ ret = vfs_fsync(fp, 0);
2090721008 #else
2090821009 ret = vfs_fsync(fp, fp->f_path.dentry, 0);
2090921010 #endif
....@@ -20916,7 +21017,7 @@
2091621017 exit:
2091721018 /* close file before return */
2091821019 if (!IS_ERR(fp))
20919
- dhd_filp_close(fp, current->files);
21020
+ filp_close(fp, current->files);
2092021021
2092121022 /* restore previous address limit */
2092221023 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
....@@ -21108,14 +21209,14 @@
2110821209 */
2110921210 file_mode = O_CREAT | O_WRONLY | O_SYNC;
2111021211 {
21111
- struct file *fp = dhd_filp_open(memdump_path, file_mode, 0664);
21212
+ struct file *fp = filp_open(memdump_path, file_mode, 0664);
2111221213 /* Check if it is live Brix image having /installmedia, else use /data */
21113
- if (IS_ERR(fp) || (fp == NULL)) {
21214
+ if (IS_ERR(fp)) {
2111421215 DHD_ERROR(("open file %s, try /data/\n", memdump_path));
2111521216 snprintf(memdump_path, sizeof(memdump_path), "%s%s_%s_" "%s",
2111621217 "/data/", fname, memdump_type, dhd->debug_dump_time_str);
2111721218 } else {
21118
- dhd_filp_close(fp, NULL);
21219
+ filp_close(fp, NULL);
2111921220 }
2112021221 }
2112121222 #else
....@@ -21153,15 +21254,11 @@
2115321254 ret = dhd->wakelock_rx_timeout_enable > dhd->wakelock_ctrl_timeout_enable ?
2115421255 dhd->wakelock_rx_timeout_enable : dhd->wakelock_ctrl_timeout_enable;
2115521256 #ifdef CONFIG_HAS_WAKELOCK
21156
-#ifdef DHD_DEBUG_WAKE_LOCK
21157
- printf("%s: rx_timeout=%dms, ctrl_timeout=%dms\n", __FUNCTION__,
21158
- dhd->wakelock_rx_timeout_enable, dhd->wakelock_ctrl_timeout_enable);
21159
-#endif
2116021257 if (dhd->wakelock_rx_timeout_enable)
21161
- dhd_wake_lock_timeout(dhd->wl_rxwake,
21258
+ dhd_wake_lock_timeout(&dhd->wl_rxwake,
2116221259 msecs_to_jiffies(dhd->wakelock_rx_timeout_enable));
2116321260 if (dhd->wakelock_ctrl_timeout_enable)
21164
- dhd_wake_lock_timeout(dhd->wl_ctrlwake,
21261
+ dhd_wake_lock_timeout(&dhd->wl_ctrlwake,
2116521262 msecs_to_jiffies(dhd->wakelock_ctrl_timeout_enable));
2116621263 #endif
2116721264 dhd->wakelock_rx_timeout_enable = 0;
....@@ -21218,8 +21315,8 @@
2121821315 DHD_WAKE_SPIN_LOCK(&dhd->wakelock_spinlock, flags);
2121921316 dhd->wakelock_ctrl_timeout_enable = 0;
2122021317 #ifdef CONFIG_HAS_WAKELOCK
21221
- if (dhd_wake_lock_active(dhd->wl_ctrlwake))
21222
- dhd_wake_unlock(dhd->wl_ctrlwake);
21318
+ if (dhd_wake_lock_active(&dhd->wl_ctrlwake))
21319
+ dhd_wake_unlock(&dhd->wl_ctrlwake);
2122321320 #endif
2122421321 DHD_WAKE_SPIN_UNLOCK(&dhd->wakelock_spinlock, flags);
2122521322 }
....@@ -21453,7 +21550,7 @@
2145321550 DHD_WAKE_SPIN_LOCK(&dhd->wakelock_spinlock, flags);
2145421551 if (dhd->wakelock_counter == 0 && !dhd->waive_wakelock) {
2145521552 #ifdef CONFIG_HAS_WAKELOCK
21456
- dhd_wake_lock(dhd->wl_wifi);
21553
+ dhd_wake_lock(&dhd->wl_wifi);
2145721554 #elif defined(BCMSDIO)
2145821555 dhd_bus_dev_pm_stay_awake(pub);
2145921556 #endif
....@@ -21477,7 +21574,7 @@
2147721574
2147821575 if (dhd) {
2147921576 #ifdef CONFIG_HAS_WAKELOCK
21480
- dhd_wake_lock(dhd->wl_evtwake);
21577
+ dhd_wake_lock(&dhd->wl_evtwake);
2148121578 #elif defined(BCMSDIO)
2148221579 dhd_bus_dev_pm_stay_awake(pub);
2148321580 #endif
....@@ -21491,7 +21588,7 @@
2149121588 dhd_info_t *dhd = (dhd_info_t *)(pub->info);
2149221589
2149321590 if (dhd) {
21494
- dhd_wake_lock_timeout(dhd->wl_pmwake, msecs_to_jiffies(val));
21591
+ dhd_wake_lock_timeout(&dhd->wl_pmwake, msecs_to_jiffies(val));
2149521592 }
2149621593 #endif /* CONFIG_HAS_WAKE_LOCK */
2149721594 }
....@@ -21503,7 +21600,7 @@
2150321600 dhd_info_t *dhd = (dhd_info_t *)(pub->info);
2150421601
2150521602 if (dhd) {
21506
- dhd_wake_lock_timeout(dhd->wl_txflwake, msecs_to_jiffies(val));
21603
+ dhd_wake_lock_timeout(&dhd->wl_txflwake, msecs_to_jiffies(val));
2150721604 }
2150821605 #endif /* CONFIG_HAS_WAKE_LOCK */
2150921606 }
....@@ -21515,7 +21612,7 @@
2151521612 dhd_info_t *dhd = (dhd_info_t *)(pub->info);
2151621613
2151721614 if (dhd) {
21518
- dhd_wake_lock_timeout(dhd->wl_nanwake, msecs_to_jiffies(val));
21615
+ dhd_wake_lock_timeout(&dhd->wl_nanwake, msecs_to_jiffies(val));
2151921616 }
2152021617 #endif /* CONFIG_HAS_WAKE_LOCK */
2152121618 }
....@@ -21549,7 +21646,7 @@
2154921646 #endif /* DHD_TRACE_WAKE_LOCK */
2155021647 if (dhd->wakelock_counter == 0 && !dhd->waive_wakelock) {
2155121648 #ifdef CONFIG_HAS_WAKELOCK
21552
- dhd_wake_unlock(dhd->wl_wifi);
21649
+ dhd_wake_unlock(&dhd->wl_wifi);
2155321650 #elif defined(BCMSDIO)
2155421651 dhd_bus_dev_pm_relax(pub);
2155521652 #endif
....@@ -21567,7 +21664,7 @@
2156721664
2156821665 if (dhd) {
2156921666 #ifdef CONFIG_HAS_WAKELOCK
21570
- dhd_wake_unlock(dhd->wl_evtwake);
21667
+ dhd_wake_unlock(&dhd->wl_evtwake);
2157121668 #elif defined(BCMSDIO)
2157221669 dhd_bus_dev_pm_relax(pub);
2157321670 #endif
....@@ -21581,8 +21678,8 @@
2158121678
2158221679 if (dhd) {
2158321680 /* if wl_pmwake is active, unlock it */
21584
- if (dhd_wake_lock_active(dhd->wl_pmwake)) {
21585
- dhd_wake_unlock(dhd->wl_pmwake);
21681
+ if (dhd_wake_lock_active(&dhd->wl_pmwake)) {
21682
+ dhd_wake_unlock(&dhd->wl_pmwake);
2158621683 }
2158721684 }
2158821685 #endif /* CONFIG_HAS_WAKELOCK */
....@@ -21595,8 +21692,8 @@
2159521692
2159621693 if (dhd) {
2159721694 /* if wl_txflwake is active, unlock it */
21598
- if (dhd_wake_lock_active(dhd->wl_txflwake)) {
21599
- dhd_wake_unlock(dhd->wl_txflwake);
21695
+ if (dhd_wake_lock_active(&dhd->wl_txflwake)) {
21696
+ dhd_wake_unlock(&dhd->wl_txflwake);
2160021697 }
2160121698 }
2160221699 #endif /* CONFIG_HAS_WAKELOCK */
....@@ -21609,8 +21706,8 @@
2160921706
2161021707 if (dhd) {
2161121708 /* if wl_nanwake is active, unlock it */
21612
- if (dhd_wake_lock_active(dhd->wl_nanwake)) {
21613
- dhd_wake_unlock(dhd->wl_nanwake);
21709
+ if (dhd_wake_lock_active(&dhd->wl_nanwake)) {
21710
+ dhd_wake_unlock(&dhd->wl_nanwake);
2161421711 }
2161521712 }
2161621713 #endif /* CONFIG_HAS_WAKELOCK */
....@@ -21635,8 +21732,8 @@
2163521732
2163621733 #ifdef CONFIG_HAS_WAKELOCK
2163721734 c = dhd->wakelock_counter;
21638
- l1 = dhd_wake_lock_active(dhd->wl_wifi);
21639
- l2 = dhd_wake_lock_active(dhd->wl_wdwake);
21735
+ l1 = dhd_wake_lock_active(&dhd->wl_wifi);
21736
+ l2 = dhd_wake_lock_active(&dhd->wl_wdwake);
2164021737 lock_active = (l1 || l2);
2164121738 /* Indicate to the SD Host to avoid going to suspend if internal locks are up */
2164221739 if (lock_active) {
....@@ -21679,20 +21776,20 @@
2167921776
2168021777 #ifdef CONFIG_HAS_WAKELOCK
2168121778 c = dhd->wakelock_counter;
21682
- l1 = dhd_wake_lock_active(dhd->wl_wifi);
21683
- l2 = dhd_wake_lock_active(dhd->wl_wdwake);
21684
- l3 = dhd_wake_lock_active(dhd->wl_rxwake);
21685
- l4 = dhd_wake_lock_active(dhd->wl_ctrlwake);
21686
- l7 = dhd_wake_lock_active(dhd->wl_evtwake);
21779
+ l1 = dhd_wake_lock_active(&dhd->wl_wifi);
21780
+ l2 = dhd_wake_lock_active(&dhd->wl_wdwake);
21781
+ l3 = dhd_wake_lock_active(&dhd->wl_rxwake);
21782
+ l4 = dhd_wake_lock_active(&dhd->wl_ctrlwake);
21783
+ l7 = dhd_wake_lock_active(&dhd->wl_evtwake);
2168721784 #ifdef BCMPCIE_OOB_HOST_WAKE
21688
- l5 = dhd_wake_lock_active(dhd->wl_intrwake);
21785
+ l5 = dhd_wake_lock_active(&dhd->wl_intrwake);
2168921786 #endif /* BCMPCIE_OOB_HOST_WAKE */
2169021787 #ifdef DHD_USE_SCAN_WAKELOCK
21691
- l6 = dhd_wake_lock_active(dhd->wl_scanwake);
21788
+ l6 = dhd_wake_lock_active(&dhd->wl_scanwake);
2169221789 #endif /* DHD_USE_SCAN_WAKELOCK */
21693
- l8 = dhd_wake_lock_active(dhd->wl_pmwake);
21694
- l9 = dhd_wake_lock_active(dhd->wl_txflwake);
21695
- l10 = dhd_wake_lock_active(dhd->wl_nanwake);
21790
+ l8 = dhd_wake_lock_active(&dhd->wl_pmwake);
21791
+ l9 = dhd_wake_lock_active(&dhd->wl_txflwake);
21792
+ l10 = dhd_wake_lock_active(&dhd->wl_nanwake);
2169621793 lock_active = (l1 || l2 || l3 || l4 || l5 || l6 || l7 || l8 || l9 || l10);
2169721794
2169821795 /* Indicate to the Host to avoid going to suspend if internal locks are up */
....@@ -21732,7 +21829,7 @@
2173221829 if (dhd->wakelock_wd_counter == 0 && !dhd->waive_wakelock) {
2173321830 #ifdef CONFIG_HAS_WAKELOCK
2173421831 /* if wakelock_wd_counter was never used : lock it at once */
21735
- dhd_wake_lock(dhd->wl_wdwake);
21832
+ dhd_wake_lock(&dhd->wl_wdwake);
2173621833 #endif
2173721834 }
2173821835 dhd->wakelock_wd_counter++;
....@@ -21754,7 +21851,7 @@
2175421851 dhd->wakelock_wd_counter = 0;
2175521852 if (!dhd->waive_wakelock) {
2175621853 #ifdef CONFIG_HAS_WAKELOCK
21757
- dhd_wake_unlock(dhd->wl_wdwake);
21854
+ dhd_wake_unlock(&dhd->wl_wdwake);
2175821855 #endif
2175921856 }
2176021857 }
....@@ -21767,13 +21864,16 @@
2176721864 void
2176821865 dhd_os_oob_irq_wake_lock_timeout(dhd_pub_t *pub, int val)
2176921866 {
21770
-#ifdef CONFIG_HAS_WAKELOCK
2177121867 dhd_info_t *dhd = (dhd_info_t *)(pub->info);
2177221868
2177321869 if (dhd) {
21774
- dhd_wake_lock_timeout(dhd->wl_intrwake, msecs_to_jiffies(val));
21775
- }
21870
+#ifdef CONFIG_HAS_WAKELOCK
21871
+ dhd_wake_lock_timeout(&dhd->wl_intrwake, msecs_to_jiffies(val));
21872
+#else
21873
+ printk("%s: =========\n",__FUNCTION__);
21874
+ wake_lock_timeout(&dhd->rx_wakelock, 5*HZ);
2177621875 #endif /* CONFIG_HAS_WAKELOCK */
21876
+ }
2177721877 }
2177821878
2177921879 void
....@@ -21784,8 +21884,8 @@
2178421884
2178521885 if (dhd) {
2178621886 /* if wl_intrwake is active, unlock it */
21787
- if (dhd_wake_lock_active(dhd->wl_intrwake)) {
21788
- dhd_wake_unlock(dhd->wl_intrwake);
21887
+ if (dhd_wake_lock_active(&dhd->wl_intrwake)) {
21888
+ dhd_wake_unlock(&dhd->wl_intrwake);
2178921889 }
2179021890 }
2179121891 #endif /* CONFIG_HAS_WAKELOCK */
....@@ -21800,7 +21900,7 @@
2180021900 dhd_info_t *dhd = (dhd_info_t *)(pub->info);
2180121901
2180221902 if (dhd) {
21803
- dhd_wake_lock_timeout(dhd->wl_scanwake, msecs_to_jiffies(val));
21903
+ dhd_wake_lock_timeout(&dhd->wl_scanwake, msecs_to_jiffies(val));
2180421904 }
2180521905 #endif /* CONFIG_HAS_WAKELOCK */
2180621906 }
....@@ -21813,8 +21913,8 @@
2181321913
2181421914 if (dhd) {
2181521915 /* if wl_scanwake is active, unlock it */
21816
- if (dhd_wake_lock_active(dhd->wl_scanwake)) {
21817
- dhd_wake_unlock(dhd->wl_scanwake);
21916
+ if (dhd_wake_lock_active(&dhd->wl_scanwake)) {
21917
+ dhd_wake_unlock(&dhd->wl_scanwake);
2181821918 }
2181921919 }
2182021920 #endif /* CONFIG_HAS_WAKELOCK */
....@@ -21880,13 +21980,13 @@
2188021980
2188121981 if (dhd->wakelock_before_waive == 0 && dhd->wakelock_counter > 0) {
2188221982 #ifdef CONFIG_HAS_WAKELOCK
21883
- dhd_wake_lock(dhd->wl_wifi);
21983
+ dhd_wake_lock(&dhd->wl_wifi);
2188421984 #elif defined(BCMSDIO)
2188521985 dhd_bus_dev_pm_stay_awake(&dhd->pub);
2188621986 #endif
2188721987 } else if (dhd->wakelock_before_waive > 0 && dhd->wakelock_counter == 0) {
2188821988 #ifdef CONFIG_HAS_WAKELOCK
21889
- dhd_wake_unlock(dhd->wl_wifi);
21989
+ dhd_wake_unlock(&dhd->wl_wifi);
2189021990 #elif defined(BCMSDIO)
2189121991 dhd_bus_dev_pm_relax(&dhd->pub);
2189221992 #endif
....@@ -21906,23 +22006,24 @@
2190622006 dhd->wakelock_ctrl_timeout_enable = 0;
2190722007 /* wakelocks prevent a system from going into a low power state */
2190822008 #ifdef CONFIG_HAS_WAKELOCK
21909
- dhd_wake_lock_init(dhd->wl_wifi, dhd_bus_to_dev(dhd->pub.bus), "wlan_wake");
21910
- dhd_wake_lock_init(dhd->wl_rxwake, dhd_bus_to_dev(dhd->pub.bus), "wlan_rx_wake");
21911
- dhd_wake_lock_init(dhd->wl_ctrlwake, dhd_bus_to_dev(dhd->pub.bus), "wlan_ctrl_wake");
21912
- dhd_wake_lock_init(dhd->wl_evtwake, dhd_bus_to_dev(dhd->pub.bus), "wlan_evt_wake");
21913
- dhd_wake_lock_init(dhd->wl_pmwake, dhd_bus_to_dev(dhd->pub.bus), "wlan_pm_wake");
21914
- dhd_wake_lock_init(dhd->wl_txflwake, dhd_bus_to_dev(dhd->pub.bus), "wlan_txfl_wake");
22009
+ // terence 20161023: can not destroy wl_wifi when wlan down, it will happen null pointer in dhd_ioctl_entry
22010
+ dhd_wake_lock_init(&dhd->wl_rxwake, WAKE_LOCK_SUSPEND, "wlan_rx_wake");
22011
+ dhd_wake_lock_init(&dhd->wl_ctrlwake, WAKE_LOCK_SUSPEND, "wlan_ctrl_wake");
22012
+ dhd_wake_lock_init(&dhd->wl_evtwake, WAKE_LOCK_SUSPEND, "wlan_evt_wake");
22013
+ dhd_wake_lock_init(&dhd->wl_pmwake, WAKE_LOCK_SUSPEND, "wlan_pm_wake");
22014
+ dhd_wake_lock_init(&dhd->wl_txflwake, WAKE_LOCK_SUSPEND, "wlan_txfl_wake");
2191522015 #ifdef BCMPCIE_OOB_HOST_WAKE
21916
- dhd_wake_lock_init(dhd->wl_intrwake, dhd_bus_to_dev(dhd->pub.bus), "wlan_oob_irq_wake");
22016
+ dhd_wake_lock_init(&dhd->wl_intrwake, WAKE_LOCK_SUSPEND, "wlan_oob_irq_wake");
2191722017 #endif /* BCMPCIE_OOB_HOST_WAKE */
2191822018 #ifdef DHD_USE_SCAN_WAKELOCK
21919
- dhd_wake_lock_init(dhd->wl_scanwake, dhd_bus_to_dev(dhd->pub.bus), "wlan_scan_wake");
22019
+ dhd_wake_lock_init(&dhd->wl_scanwake, WAKE_LOCK_SUSPEND, "wlan_scan_wake");
2192022020 #endif /* DHD_USE_SCAN_WAKELOCK */
21921
- dhd_wake_lock_init(dhd->wl_nanwake, dhd_bus_to_dev(dhd->pub.bus), "wlan_nan_wake");
22021
+ dhd_wake_lock_init(&dhd->wl_nanwake, WAKE_LOCK_SUSPEND, "wlan_nan_wake");
2192222022 #endif /* CONFIG_HAS_WAKELOCK */
2192322023 #ifdef DHD_TRACE_WAKE_LOCK
2192422024 dhd_wk_lock_trace_init(dhd);
2192522025 #endif /* DHD_TRACE_WAKE_LOCK */
22026
+ wake_lock_init(&dhd->rx_wakelock, WAKE_LOCK_SUSPEND, "wlan_rx_wakelock");
2192622027 }
2192722028
2192822029 void dhd_os_wake_lock_destroy(struct dhd_info *dhd)
....@@ -21932,19 +22033,19 @@
2193222033 dhd->wakelock_counter = 0;
2193322034 dhd->wakelock_rx_timeout_enable = 0;
2193422035 dhd->wakelock_ctrl_timeout_enable = 0;
21935
- dhd_wake_lock_destroy(dhd->wl_wifi);
21936
- dhd_wake_lock_destroy(dhd->wl_rxwake);
21937
- dhd_wake_lock_destroy(dhd->wl_ctrlwake);
21938
- dhd_wake_lock_destroy(dhd->wl_evtwake);
21939
- dhd_wake_lock_destroy(dhd->wl_pmwake);
21940
- dhd_wake_lock_destroy(dhd->wl_txflwake);
22036
+ // terence 20161023: can not destroy wl_wifi when wlan down, it will happen null pointer in dhd_ioctl_entry
22037
+ dhd_wake_lock_unlock_destroy(&dhd->wl_rxwake);
22038
+ dhd_wake_lock_unlock_destroy(&dhd->wl_ctrlwake);
22039
+ dhd_wake_lock_unlock_destroy(&dhd->wl_evtwake);
22040
+ dhd_wake_lock_unlock_destroy(&dhd->wl_pmwake);
22041
+ dhd_wake_lock_unlock_destroy(&dhd->wl_txflwake);
2194122042 #ifdef BCMPCIE_OOB_HOST_WAKE
21942
- dhd_wake_lock_destroy(dhd->wl_intrwake);
22043
+ dhd_wake_lock_unlock_destroy(&dhd->wl_intrwake);
2194322044 #endif /* BCMPCIE_OOB_HOST_WAKE */
2194422045 #ifdef DHD_USE_SCAN_WAKELOCK
21945
- dhd_wake_lock_destroy(dhd->wl_scanwake);
22046
+ dhd_wake_lock_unlock_destroy(&dhd->wl_scanwake);
2194622047 #endif /* DHD_USE_SCAN_WAKELOCK */
21947
- dhd_wake_lock_destroy(dhd->wl_nanwake);
22048
+ dhd_wake_lock_unlock_destroy(&dhd->wl_nanwake);
2194822049 #ifdef DHD_TRACE_WAKE_LOCK
2194922050 dhd_wk_lock_trace_deinit(dhd);
2195022051 #endif /* DHD_TRACE_WAKE_LOCK */
....@@ -21955,6 +22056,7 @@
2195522056 while (dhd_os_wake_unlock(&dhd->pub));
2195622057 }
2195722058 #endif /* CONFIG_HAS_WAKELOCK */
22059
+ wake_lock_destroy(&dhd->rx_wakelock);
2195822060 }
2195922061
2196022062 bool dhd_os_check_if_up(dhd_pub_t *pub)
....@@ -22479,8 +22581,8 @@
2247922581 loff_t pos = 0;
2248022582
2248122583 /* Read memdump info from the file */
22482
- fp = dhd_filp_open(filepath, file_mode, 0);
22483
- if (IS_ERR(fp) || (fp == NULL)) {
22584
+ fp = filp_open(filepath, file_mode, 0);
22585
+ if (IS_ERR(fp)) {
2248422586 DHD_ERROR(("%s: File [%s] doesn't exist\n", __FUNCTION__, filepath));
2248522587 #if defined(CONFIG_X86) && defined(OEM_ANDROID)
2248622588 /* Check if it is Live Brix Image */
....@@ -22490,8 +22592,8 @@
2249022592 /* Try if it is Installed Brix Image */
2249122593 filepath = RNDINFO_INST".in";
2249222594 DHD_ERROR(("%s: Try File [%s]\n", __FUNCTION__, filepath));
22493
- fp = dhd_filp_open(filepath, file_mode, 0);
22494
- if (IS_ERR(fp) || (fp == NULL)) {
22595
+ fp = filp_open(filepath, file_mode, 0);
22596
+ if (IS_ERR(fp)) {
2249522597 DHD_ERROR(("%s: File [%s] doesn't exist\n", __FUNCTION__, filepath));
2249622598 goto err1;
2249722599 }
....@@ -22504,7 +22606,7 @@
2250422606 set_fs(KERNEL_DS);
2250522607
2250622608 /* Handle success case */
22507
- ret = dhd_vfs_read(fp, (char *)&dhd->rnd_len, sizeof(dhd->rnd_len), &pos);
22609
+ ret = vfs_read(fp, (char *)&dhd->rnd_len, sizeof(dhd->rnd_len), &pos);
2250822610 if (ret < 0) {
2250922611 DHD_ERROR(("%s: rnd_len read error, ret=%d\n", __FUNCTION__, ret));
2251022612 goto err2;
....@@ -22516,14 +22618,14 @@
2251622618 goto err2;
2251722619 }
2251822620
22519
- ret = dhd_vfs_read(fp, (char *)dhd->rnd_buf, dhd->rnd_len, &pos);
22621
+ ret = vfs_read(fp, (char *)dhd->rnd_buf, dhd->rnd_len, &pos);
2252022622 if (ret < 0) {
2252122623 DHD_ERROR(("%s: rnd_buf read error, ret=%d\n", __FUNCTION__, ret));
2252222624 goto err3;
2252322625 }
2252422626
2252522627 set_fs(old_fs);
22526
- dhd_filp_close(fp, NULL);
22628
+ filp_close(fp, NULL);
2252722629
2252822630 DHD_ERROR(("%s: RND read from %s\n", __FUNCTION__, filepath));
2252922631 return BCME_OK;
....@@ -22533,7 +22635,7 @@
2253322635 dhd->rnd_buf = NULL;
2253422636 err2:
2253522637 set_fs(old_fs);
22536
- dhd_filp_close(fp, NULL);
22638
+ filp_close(fp, NULL);
2253722639 err1:
2253822640 return BCME_ERROR;
2253922641 }
....@@ -22549,8 +22651,8 @@
2254922651 loff_t pos = 0;
2255022652
2255122653 /* Read memdump info from the file */
22552
- fp = dhd_filp_open(filepath, file_mode, 0664);
22553
- if (IS_ERR(fp) || (fp == NULL)) {
22654
+ fp = filp_open(filepath, file_mode, 0664);
22655
+ if (IS_ERR(fp)) {
2255422656 DHD_ERROR(("%s: File [%s] doesn't exist\n", __FUNCTION__, filepath));
2255522657 #if defined(CONFIG_X86) && defined(OEM_ANDROID)
2255622658 /* Check if it is Live Brix Image */
....@@ -22560,8 +22662,8 @@
2256022662 /* Try if it is Installed Brix Image */
2256122663 filepath = RNDINFO_INST".out";
2256222664 DHD_ERROR(("%s: Try File [%s]\n", __FUNCTION__, filepath));
22563
- fp = dhd_filp_open(filepath, file_mode, 0664);
22564
- if (IS_ERR(fp) || (fp == NULL)) {
22665
+ fp = filp_open(filepath, file_mode, 0664);
22666
+ if (IS_ERR(fp)) {
2256522667 DHD_ERROR(("%s: File [%s] doesn't exist\n", __FUNCTION__, filepath));
2256622668 goto err1;
2256722669 }
....@@ -22574,26 +22676,26 @@
2257422676 set_fs(KERNEL_DS);
2257522677
2257622678 /* Handle success case */
22577
- ret = dhd_vfs_write(fp, (char *)&rnd_len, sizeof(rnd_len), &pos);
22679
+ ret = vfs_write(fp, (char *)&rnd_len, sizeof(rnd_len), &pos);
2257822680 if (ret < 0) {
2257922681 DHD_ERROR(("%s: rnd_len write error, ret=%d\n", __FUNCTION__, ret));
2258022682 goto err2;
2258122683 }
2258222684
22583
- ret = dhd_vfs_write(fp, (char *)rnd_buf, rnd_len, &pos);
22685
+ ret = vfs_write(fp, (char *)rnd_buf, rnd_len, &pos);
2258422686 if (ret < 0) {
2258522687 DHD_ERROR(("%s: rnd_buf write error, ret=%d\n", __FUNCTION__, ret));
2258622688 goto err2;
2258722689 }
2258822690
2258922691 set_fs(old_fs);
22590
- dhd_filp_close(fp, NULL);
22692
+ filp_close(fp, NULL);
2259122693 DHD_ERROR(("%s: RND written to %s\n", __FUNCTION__, filepath));
2259222694 return BCME_OK;
2259322695
2259422696 err2:
2259522697 set_fs(old_fs);
22596
- dhd_filp_close(fp, NULL);
22698
+ filp_close(fp, NULL);
2259722699 err1:
2259822700 return BCME_ERROR;
2259922701
....@@ -24511,8 +24613,8 @@
2451124613 else
2451224614 file_mode = O_CREAT | O_RDWR | O_SYNC;
2451324615
24514
- fp = dhd_filp_open(dump_path, file_mode, 0664);
24515
- if (IS_ERR(fp) || (fp == NULL)) {
24616
+ fp = filp_open(dump_path, file_mode, 0664);
24617
+ if (IS_ERR(fp)) {
2451624618 /* If android installed image, try '/data' directory */
2451724619 #if defined(CONFIG_X86) && defined(OEM_ANDROID)
2451824620 DHD_ERROR(("%s: File open error on Installed android image, trying /data...\n",
....@@ -24523,8 +24625,8 @@
2452324625 sizeof(dump_path) - strlen(dump_path),
2452424626 "_%s", dhdp->debug_dump_time_str);
2452524627 }
24526
- fp = dhd_filp_open(dump_path, file_mode, 0664);
24527
- if (IS_ERR(fp) || (fp == NULL)) {
24628
+ fp = filp_open(dump_path, file_mode, 0664);
24629
+ if (IS_ERR(fp)) {
2452824630 ret = PTR_ERR(fp);
2452924631 DHD_ERROR(("open file error, err = %d\n", ret));
2453024632 goto exit2;
....@@ -24538,7 +24640,7 @@
2453824640 }
2453924641
2454024642 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
24541
- ret = dhd_vfs_stat(dump_path, &stat);
24643
+ ret = vfs_stat(dump_path, &stat);
2454224644 if (ret < 0) {
2454324645 DHD_ERROR(("file stat error, err = %d\n", ret));
2454424646 goto exit2;
....@@ -24707,7 +24809,7 @@
2470724809
2470824810 exit2:
2470924811 if (!IS_ERR(fp) && fp != NULL) {
24710
- dhd_filp_close(fp, NULL);
24812
+ filp_close(fp, NULL);
2471124813 DHD_ERROR(("%s: Finished writing log dump to file - '%s' \n",
2471224814 __FUNCTION__, dump_path));
2471324815 }
....@@ -24742,7 +24844,7 @@
2474224844 int ret = BCME_OK;
2474324845
2474424846 if (fp) {
24745
- ret = dhd_vfs_write(fp, mem_buf, buf_len, (loff_t *)pos);
24847
+ ret = vfs_write(fp, mem_buf, buf_len, (loff_t *)pos);
2474624848 if (ret < 0) {
2474724849 DHD_ERROR(("write file error, err = %d\n", ret));
2474824850 goto exit;
....@@ -26643,8 +26745,8 @@
2664326745 struct file *fp;
2664426746 char *filepath = VENDOR_PATH CONFIG_BCMDHD_CLM_PATH;
2664526747
26646
- fp = dhd_filp_open(filepath, O_RDONLY, 0);
26647
- if (IS_ERR(fp) || (fp == NULL)) {
26748
+ fp = filp_open(filepath, O_RDONLY, 0);
26749
+ if (IS_ERR(fp)) {
2664826750 DHD_ERROR(("%s: ----- blob file doesn't exist (%s) -----\n", __FUNCTION__,
2664926751 filepath));
2665026752 dhdp->is_blob = FALSE;
....@@ -26656,7 +26758,7 @@
2665626758 #else
2665726759 BCM_REFERENCE(fw_path);
2665826760 #endif /* SKIP_CONCATE_BLOB */
26659
- dhd_filp_close(fp, NULL);
26761
+ filp_close(fp, NULL);
2666026762 }
2666126763 }
2666226764 #endif /* DHD_BLOB_EXISTENCE_CHECK */
....@@ -26813,14 +26915,14 @@
2681326915 #endif
2681426916
2681526917 /* File is always created. */
26816
- fp = dhd_filp_open(filepath, O_RDWR | O_CREAT, 0664);
26817
- if (IS_ERR(fp) || (fp == NULL)) {
26918
+ fp = filp_open(filepath, O_RDWR | O_CREAT, 0664);
26919
+ if (IS_ERR(fp)) {
2681826920 DHD_ERROR(("%s: Couldn't open file '%s' err %ld\n",
2681926921 __FUNCTION__, filepath, PTR_ERR(fp)));
2682026922 ret = BCME_ERROR;
2682126923 } else {
2682226924 if (fp->f_mode & FMODE_WRITE) {
26823
- ret = dhd_vfs_write(fp, buf, buf_len, &fp->f_pos);
26925
+ ret = vfs_write(fp, buf, buf_len, &fp->f_pos);
2682426926 if (ret < 0) {
2682526927 DHD_ERROR(("%s: Couldn't write file '%s'\n",
2682626928 __FUNCTION__, filepath));
....@@ -26829,7 +26931,7 @@
2682926931 ret = BCME_OK;
2683026932 }
2683126933 }
26832
- dhd_filp_close(fp, NULL);
26934
+ filp_close(fp, NULL);
2683326935 }
2683426936
2683526937 /* restore previous address limit */
....@@ -26855,8 +26957,8 @@
2685526957 set_fs(KERNEL_DS);
2685626958 #endif
2685726959
26858
- fp = dhd_filp_open(filepath, O_RDONLY, 0);
26859
- if (IS_ERR(fp) || (fp == NULL)) {
26960
+ fp = filp_open(filepath, O_RDONLY, 0);
26961
+ if (IS_ERR(fp)) {
2686026962 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
2686126963 set_fs(old_fs);
2686226964 #endif
....@@ -26864,8 +26966,8 @@
2686426966 return BCME_ERROR;
2686526967 }
2686626968
26867
- ret = dhd_kernel_read_compat(fp, 0, buf, buf_len);
26868
- dhd_filp_close(fp, NULL);
26969
+ ret = kernel_read_compat(fp, 0, buf, buf_len);
26970
+ filp_close(fp, NULL);
2686926971
2687026972 /* restore previous address limit */
2687126973 #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0))
....@@ -27172,7 +27274,15 @@
2717227274 dhd_get_random_bytes(uint8 *buf, uint len)
2717327275 {
2717427276 #ifdef BCMPCIE
27175
- get_random_bytes(buf, len);
27277
+#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0))
27278
+ int rndlen = get_random_bytes_arch(buf, len);
27279
+ if (rndlen != len) {
27280
+ bzero(buf, len);
27281
+ get_random_bytes(buf, len);
27282
+ }
27283
+#else
27284
+ get_random_bytes_arch(buf, len);
27285
+#endif
2717627286 #endif /* BCMPCIE */
2717727287 return BCME_OK;
2717827288 }
....@@ -29657,15 +29767,27 @@
2965729767 }
2965829768 /* END of DHD RING */
2965929769
29770
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0))
29771
+#define DHD_VFS_INODE(dir) (dir->d_inode)
29772
+#else
29773
+#define DHD_VFS_INODE(dir) d_inode(dir)
29774
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 19, 0) */
29775
+
29776
+#if (LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0))
29777
+#define DHD_VFS_UNLINK(dir, b, c) vfs_unlink(DHD_VFS_INODE(dir), b)
29778
+#else
29779
+#define DHD_VFS_UNLINK(dir, b, c) vfs_unlink(DHD_VFS_INODE(dir), b, c)
29780
+#endif /* LINUX_VERSION_CODE < KERNEL_VERSION(3, 13, 0) */
29781
+
2966029782 #if ((defined DHD_DUMP_MNGR) || (defined DNGL_AXI_ERROR_LOGGING))
2966129783 int
2966229784 dhd_file_delete(char *path)
2966329785 {
29664
- struct path file_path = {.dentry = 0};
29786
+ struct path file_path;
2966529787 int err;
2966629788 struct dentry *dir;
2966729789
29668
- err = dhd_kern_path(path, 0, &file_path);
29790
+ err = kern_path(path, 0, &file_path);
2966929791
2967029792 if (err < 0) {
2967129793 DHD_ERROR(("Failed to get kern-path delete file: %s error: %d\n", path, err));