old mode 100644new mode 100755| .. | .. |
|---|
| 65 | 65 | #include <asm/uaccess.h> |
|---|
| 66 | 66 | #include <asm/unaligned.h> |
|---|
| 67 | 67 | #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) |
|---|
| 70 | 69 | #include <rk_dhd_pcie_linux.h> |
|---|
| 71 | | -#endif /* CUSTOMER_HW_ROCKCHIP && CUSTOMER_HW_ROCKCHIP_RK3588 */ |
|---|
| 72 | | -#endif /* BCMPCIE */ |
|---|
| 70 | +#endif /* CUSTOMER_HW_ROCKCHIP && BCMPCIE */ |
|---|
| 73 | 71 | |
|---|
| 74 | 72 | #include <epivers.h> |
|---|
| 75 | 73 | #include <bcmutils.h> |
|---|
| .. | .. |
|---|
| 372 | 370 | static void dhd_hang_process(struct work_struct *work_data); |
|---|
| 373 | 371 | #endif /* OEM_ANDROID */ |
|---|
| 374 | 372 | MODULE_LICENSE("GPL and additional rights"); |
|---|
| 373 | +MODULE_IMPORT_NS(VFS_internal_I_am_really_a_filesystem_and_am_NOT_a_driver); |
|---|
| 375 | 374 | |
|---|
| 376 | 375 | #if defined(MULTIPLE_SUPPLICANT) |
|---|
| 377 | 376 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 25)) |
|---|
| .. | .. |
|---|
| 1147 | 1146 | dhd_pub_t *dhd = &dhdinfo->pub; |
|---|
| 1148 | 1147 | struct dhd_conf *conf = dhd->conf; |
|---|
| 1149 | 1148 | int suspend_mode = conf->suspend_mode; |
|---|
| 1150 | | -#if defined(BCMDBUS) && defined(WL_EXT_WOWL) |
|---|
| 1151 | | - int wowl_dngldown = 0; |
|---|
| 1152 | | -#endif |
|---|
| 1153 | 1149 | |
|---|
| 1154 | 1150 | BCM_REFERENCE(dhdinfo); |
|---|
| 1155 | 1151 | BCM_REFERENCE(suspend); |
|---|
| 1156 | | - |
|---|
| 1157 | | -#if defined(BCMDBUS) && defined(WL_EXT_WOWL) |
|---|
| 1158 | | - wowl_dngldown = dhd_conf_wowl_dngldown(dhd); |
|---|
| 1159 | | -#endif |
|---|
| 1160 | 1152 | |
|---|
| 1161 | 1153 | switch (action) { |
|---|
| 1162 | 1154 | case PM_HIBERNATION_PREPARE: |
|---|
| .. | .. |
|---|
| 1189 | 1181 | dhd_conf_set_suspend_resume(dhd, suspend); |
|---|
| 1190 | 1182 | DHD_OS_WAKE_LOCK_RESTORE(dhd); |
|---|
| 1191 | 1183 | } else { |
|---|
| 1192 | | -#ifdef BCMDBUS |
|---|
| 1193 | | - if (dhd->busstate == DHD_BUS_DATA) { |
|---|
| 1194 | | -#endif |
|---|
| 1195 | 1184 | if (suspend_mode == PM_NOTIFIER || suspend_mode == SUSPEND_MODE_2) |
|---|
| 1196 | 1185 | dhd_conf_set_suspend_resume(dhd, suspend); |
|---|
| 1197 | 1186 | #if defined(SUPPORT_P2P_GO_PS) && defined(PROP_TXSTATUS) |
|---|
| .. | .. |
|---|
| 1199 | 1188 | #endif /* defined(SUPPORT_P2P_GO_PS) && defined(PROP_TXSTATUS) */ |
|---|
| 1200 | 1189 | if (suspend_mode == PM_NOTIFIER) |
|---|
| 1201 | 1190 | 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 |
|---|
| 1216 | 1191 | } |
|---|
| 1217 | 1192 | |
|---|
| 1218 | 1193 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 27)) && (LINUX_VERSION_CODE <= \ |
|---|
| .. | .. |
|---|
| 3566 | 3541 | return; |
|---|
| 3567 | 3542 | } |
|---|
| 3568 | 3543 | |
|---|
| 3569 | | -#ifdef DHD_NOTIFY_MAC_CHANGED |
|---|
| 3570 | | - rtnl_lock(); |
|---|
| 3571 | | -#endif /* DHD_NOTIFY_MAC_CHANGED */ |
|---|
| 3572 | 3544 | dhd_net_if_lock_local(dhd); |
|---|
| 3573 | 3545 | DHD_OS_WAKE_LOCK(&dhd->pub); |
|---|
| 3574 | 3546 | |
|---|
| .. | .. |
|---|
| 3583 | 3555 | |
|---|
| 3584 | 3556 | ifp->set_macaddress = FALSE; |
|---|
| 3585 | 3557 | |
|---|
| 3558 | +#ifdef DHD_NOTIFY_MAC_CHANGED |
|---|
| 3559 | + rtnl_lock(); |
|---|
| 3560 | +#endif /* DHD_NOTIFY_MAC_CHANGED */ |
|---|
| 3561 | + |
|---|
| 3586 | 3562 | if (_dhd_set_mac_address(dhd, ifp->idx, ifp->mac_addr, TRUE) == 0) |
|---|
| 3587 | 3563 | DHD_INFO(("%s: MACID is overwritten\n", __FUNCTION__)); |
|---|
| 3588 | 3564 | else |
|---|
| 3589 | 3565 | DHD_ERROR(("%s: _dhd_set_mac_address() failed\n", __FUNCTION__)); |
|---|
| 3590 | 3566 | |
|---|
| 3591 | | -done: |
|---|
| 3592 | | - DHD_OS_WAKE_UNLOCK(&dhd->pub); |
|---|
| 3593 | | - dhd_net_if_unlock_local(dhd); |
|---|
| 3594 | 3567 | #ifdef DHD_NOTIFY_MAC_CHANGED |
|---|
| 3595 | 3568 | rtnl_unlock(); |
|---|
| 3596 | 3569 | #endif /* DHD_NOTIFY_MAC_CHANGED */ |
|---|
| 3570 | + |
|---|
| 3571 | +done: |
|---|
| 3572 | + DHD_OS_WAKE_UNLOCK(&dhd->pub); |
|---|
| 3573 | + dhd_net_if_unlock_local(dhd); |
|---|
| 3597 | 3574 | } |
|---|
| 3598 | 3575 | |
|---|
| 3599 | 3576 | static void |
|---|
| .. | .. |
|---|
| 4432 | 4409 | #endif |
|---|
| 4433 | 4410 | /* Make sure there's enough room for any header */ |
|---|
| 4434 | 4411 | #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 | + |
|---|
| 4438 | 4419 | 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__); |
|---|
| 4442 | 4430 | } |
|---|
| 4443 | 4431 | #endif /* !BCM_ROUTER_DHD */ |
|---|
| 4444 | 4432 | |
|---|
| .. | .. |
|---|
| 4772 | 4760 | static void |
|---|
| 4773 | 4761 | __dhd_txflowcontrol(dhd_pub_t *dhdp, struct net_device *net, bool state) |
|---|
| 4774 | 4762 | { |
|---|
| 4775 | | - |
|---|
| 4776 | | - if (net->reg_state != NETREG_REGISTERED) { |
|---|
| 4777 | | - return; |
|---|
| 4778 | | - } |
|---|
| 4779 | | - |
|---|
| 4780 | 4763 | if (state == ON) { |
|---|
| 4781 | 4764 | if (!netif_queue_stopped(net)) { |
|---|
| 4782 | 4765 | DHD_INFO(("%s: Stop Netif Queue\n", __FUNCTION__)); |
|---|
| .. | .. |
|---|
| 8713 | 8696 | } |
|---|
| 8714 | 8697 | #endif /* DHD_PCIE_NATIVE_RUNTIMEPM */ |
|---|
| 8715 | 8698 | |
|---|
| 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 | + |
|---|
| 8716 | 8709 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0) && defined(DHD_TCP_LIMIT_OUTPUT) |
|---|
| 8717 | 8710 | #define DHD_TCP_LIMIT_OUTPUT_BYTES (4 * 1024 * 1024) |
|---|
| 8718 | 8711 | #ifndef TCP_DEFAULT_LIMIT_OUTPUT |
|---|
| .. | .. |
|---|
| 8782 | 8775 | |
|---|
| 8783 | 8776 | #if defined(WL_STATIC_IF) && defined(WL_CFG80211) |
|---|
| 8784 | 8777 | /* 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)) { |
|---|
| 8786 | 8779 | WL_MSG(net->name, "static if operational. skip chip reset.\n"); |
|---|
| 8787 | 8780 | skip_reset = true; |
|---|
| 8788 | 8781 | wl_cfg80211_sta_ifdown(net); |
|---|
| .. | .. |
|---|
| 8790 | 8783 | } |
|---|
| 8791 | 8784 | #endif /* WL_STATIC_IF && WL_CFG80211 */ |
|---|
| 8792 | 8785 | #ifdef DHD_NOTIFY_MAC_CHANGED |
|---|
| 8793 | | - if (!dhd->pub.hang_was_sent && dhd->pub.skip_dhd_stop) { |
|---|
| 8786 | + if (dhd->pub.skip_dhd_stop) { |
|---|
| 8794 | 8787 | WL_MSG(net->name, "skip chip reset.\n"); |
|---|
| 8795 | 8788 | skip_reset = true; |
|---|
| 8796 | 8789 | #if defined(WL_CFG80211) |
|---|
| .. | .. |
|---|
| 9084 | 9077 | { |
|---|
| 9085 | 9078 | struct file *fp; |
|---|
| 9086 | 9079 | const char *clm = VENDOR_PATH CONFIG_BCMDHD_CLM_PATH; |
|---|
| 9080 | + fp = filp_open(clm, O_RDONLY, 0); |
|---|
| 9087 | 9081 | |
|---|
| 9088 | | - fp = dhd_filp_open(clm, O_RDONLY, 0); |
|---|
| 9089 | | - if (IS_ERR(fp) || (fp == NULL)) { |
|---|
| 9082 | + if (IS_ERR(fp)) { |
|---|
| 9090 | 9083 | DHD_ERROR(("%s: filp_open(%s) failed(%d) schedule wl_accel_work\n", |
|---|
| 9091 | 9084 | __FUNCTION__, clm, (int)IS_ERR(fp))); |
|---|
| 9092 | 9085 | return FALSE; |
|---|
| 9093 | 9086 | } |
|---|
| 9094 | | - dhd_filp_close(fp, NULL); |
|---|
| 9087 | + filp_close(fp, NULL); |
|---|
| 9095 | 9088 | |
|---|
| 9096 | 9089 | return TRUE; |
|---|
| 9097 | 9090 | } |
|---|
| .. | .. |
|---|
| 10446 | 10439 | #endif /* DHDTCPACK_SUPPRESS && BCMPCIE */ |
|---|
| 10447 | 10440 | if (need_rtnl_lock) |
|---|
| 10448 | 10441 | 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 |
|---|
| 10453 | 10443 | unregister_netdevice(ifp->net); |
|---|
| 10454 | | -#endif |
|---|
| 10455 | | - } |
|---|
| 10456 | 10444 | #if defined(WLDWDS) && defined(WL_EXT_IAPSTA) |
|---|
| 10457 | 10445 | if (ifp->dwds) { |
|---|
| 10458 | 10446 | wl_ext_iapsta_dettach_dwds_netdev(ifp->net, ifidx, ifp->bssidx); |
|---|
| .. | .. |
|---|
| 10591 | 10579 | if (!fp || !buf || buflen == 0) |
|---|
| 10592 | 10580 | return -1; |
|---|
| 10593 | 10581 | |
|---|
| 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) |
|---|
| 10595 | 10583 | return -1; |
|---|
| 10596 | 10584 | |
|---|
| 10597 | 10585 | *posn = wr_posn; |
|---|
| .. | .. |
|---|
| 10607 | 10595 | if (!file || !buf) |
|---|
| 10608 | 10596 | return -1; |
|---|
| 10609 | 10597 | |
|---|
| 10610 | | - return dhd_vfs_read(filep, buf, size, &filep->f_pos); |
|---|
| 10598 | + return vfs_read(filep, buf, size, &filep->f_pos); |
|---|
| 10611 | 10599 | } |
|---|
| 10612 | 10600 | |
|---|
| 10613 | 10601 | int |
|---|
| .. | .. |
|---|
| 10623 | 10611 | return 0; |
|---|
| 10624 | 10612 | } |
|---|
| 10625 | 10613 | |
|---|
| 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 | +} |
|---|
| 10626 | 10743 | #ifdef DHD_COREDUMP |
|---|
| 10627 | 10744 | #define PC_FOUND_BIT 0x01 |
|---|
| 10628 | 10745 | #define LR_FOUND_BIT 0x02 |
|---|
| .. | .. |
|---|
| 10682 | 10799 | set_fs(KERNEL_DS); |
|---|
| 10683 | 10800 | #endif |
|---|
| 10684 | 10801 | |
|---|
| 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)) { |
|---|
| 10687 | 10804 | DHD_ERROR(("%s: Failed to open %s \n", __FUNCTION__, fname)); |
|---|
| 10688 | 10805 | goto fail; |
|---|
| 10689 | 10806 | } |
|---|
| .. | .. |
|---|
| 10845 | 10962 | } |
|---|
| 10846 | 10963 | #else |
|---|
| 10847 | 10964 | if (!IS_ERR(filep)) |
|---|
| 10848 | | - dhd_filp_close(filep, NULL); |
|---|
| 10965 | + filp_close(filep, NULL); |
|---|
| 10849 | 10966 | |
|---|
| 10850 | 10967 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) |
|---|
| 10851 | 10968 | set_fs(fs); |
|---|
| .. | .. |
|---|
| 11220 | 11337 | set_fs(KERNEL_DS); |
|---|
| 11221 | 11338 | #endif |
|---|
| 11222 | 11339 | |
|---|
| 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)) { |
|---|
| 11225 | 11342 | DHD_ERROR(("%s: Failed to open the file %s \n", __FUNCTION__, str_file)); |
|---|
| 11226 | 11343 | goto fail; |
|---|
| 11227 | 11344 | } |
|---|
| .. | .. |
|---|
| 11258 | 11375 | } |
|---|
| 11259 | 11376 | } |
|---|
| 11260 | 11377 | |
|---|
| 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)); |
|---|
| 11262 | 11379 | if (error != logstrs_size) { |
|---|
| 11263 | 11380 | DHD_ERROR(("%s: %s read failed %d \n", __FUNCTION__, str_file, error)); |
|---|
| 11264 | 11381 | goto fail; |
|---|
| .. | .. |
|---|
| 11276 | 11393 | temp->rom_rodata_end = rodata_end; |
|---|
| 11277 | 11394 | } |
|---|
| 11278 | 11395 | |
|---|
| 11279 | | - dhd_filp_close(filep, NULL); |
|---|
| 11396 | + filp_close(filep, NULL); |
|---|
| 11280 | 11397 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) |
|---|
| 11281 | 11398 | set_fs(fs); |
|---|
| 11282 | 11399 | #endif |
|---|
| .. | .. |
|---|
| 11290 | 11407 | |
|---|
| 11291 | 11408 | fail1: |
|---|
| 11292 | 11409 | if (!IS_ERR(filep)) |
|---|
| 11293 | | - dhd_filp_close(filep, NULL); |
|---|
| 11410 | + filp_close(filep, NULL); |
|---|
| 11294 | 11411 | |
|---|
| 11295 | 11412 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) |
|---|
| 11296 | 11413 | set_fs(fs); |
|---|
| .. | .. |
|---|
| 11652 | 11769 | dhd->wakelock_counter = 0; |
|---|
| 11653 | 11770 | /* wakelocks prevent a system from going into a low power state */ |
|---|
| 11654 | 11771 | #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"); |
|---|
| 11656 | 11775 | #endif /* CONFIG_HAS_WAKELOCK */ |
|---|
| 11657 | 11776 | |
|---|
| 11658 | 11777 | #if defined(OEM_ANDROID) |
|---|
| .. | .. |
|---|
| 11698 | 11817 | goto fail; |
|---|
| 11699 | 11818 | } |
|---|
| 11700 | 11819 | #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 */ |
|---|
| 11707 | 11820 | #ifdef WL_ESCAN |
|---|
| 11708 | 11821 | /* Attach and link in the escan */ |
|---|
| 11709 | 11822 | if (wl_escan_attach(net) != 0) { |
|---|
| .. | .. |
|---|
| 11866 | 11979 | } |
|---|
| 11867 | 11980 | #endif /* DHD_PCIE_RUNTIMEPM */ |
|---|
| 11868 | 11981 | |
|---|
| 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 | + |
|---|
| 11869 | 11989 | #ifdef BTLOG |
|---|
| 11870 | 11990 | skb_queue_head_init(&dhd->bt_log_queue); |
|---|
| 11871 | 11991 | #endif /* BTLOG */ |
|---|
| .. | .. |
|---|
| 11897 | 12017 | } |
|---|
| 11898 | 12018 | } |
|---|
| 11899 | 12019 | #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 */ |
|---|
| 11907 | 12020 | |
|---|
| 11908 | 12021 | dhd_state |= DHD_ATTACH_STATE_THREADS_CREATED; |
|---|
| 11909 | 12022 | |
|---|
| .. | .. |
|---|
| 12788 | 12901 | dhd_bus_l1ss_enable_rc_ep(dhdp->bus, TRUE); |
|---|
| 12789 | 12902 | #endif /* BT_OVER_PCIE */ |
|---|
| 12790 | 12903 | |
|---|
| 12791 | | -#ifdef BCMPCIE |
|---|
| 12792 | | -#if defined(CUSTOMER_HW_ROCKCHIP) && defined(CUSTOMER_HW_ROCKCHIP_RK3588) |
|---|
| 12904 | +#if defined(CUSTOMER_HW_ROCKCHIP) && defined(BCMPCIE) |
|---|
| 12793 | 12905 | if (IS_ENABLED(CONFIG_PCIEASPM_ROCKCHIP_WIFI_EXTENSION)) |
|---|
| 12794 | 12906 | rk_dhd_bus_l1ss_enable_rc_ep(dhdp->bus, TRUE); |
|---|
| 12795 | 12907 | #endif /* CUSTOMER_HW_ROCKCHIP && BCMPCIE */ |
|---|
| 12796 | | -#endif /* BCMPCIE */ |
|---|
| 12797 | 12908 | |
|---|
| 12798 | 12909 | #if defined(CONFIG_ARCH_EXYNOS) && defined(BCMPCIE) |
|---|
| 12799 | 12910 | #if !defined(CONFIG_SOC_EXYNOS8890) && !defined(SUPPORT_EXYNOS7420) |
|---|
| .. | .. |
|---|
| 13351 | 13462 | |
|---|
| 13352 | 13463 | old_fs = get_fs(); |
|---|
| 13353 | 13464 | set_fs(get_ds()); |
|---|
| 13354 | | - if ((ret = dhd_vfs_stat(config_path, &stat))) { |
|---|
| 13465 | + if ((ret = vfs_stat(config_path, &stat))) { |
|---|
| 13355 | 13466 | set_fs(old_fs); |
|---|
| 13356 | 13467 | printk(KERN_ERR "%s: Failed to get information (%d)\n", |
|---|
| 13357 | 13468 | config_path, ret); |
|---|
| .. | .. |
|---|
| 13814 | 13925 | else { |
|---|
| 13815 | 13926 | bcmstrtok(&ptr, "\n", 0); |
|---|
| 13816 | 13927 | /* Print fw version info */ |
|---|
| 13928 | + DHD_ERROR(("Firmware version = %s\n", buf)); |
|---|
| 13817 | 13929 | strncpy(fw_version, buf, FW_VER_STR_LEN); |
|---|
| 13818 | 13930 | 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 */ |
|---|
| 13819 | 13934 | } |
|---|
| 13820 | 13935 | |
|---|
| 13821 | 13936 | /* query for 'wlc_ver' to get version info from firmware */ |
|---|
| .. | .. |
|---|
| 13830 | 13945 | dhd->wlc_ver_major = wlc_ver.wlc_ver_major; |
|---|
| 13831 | 13946 | dhd->wlc_ver_minor = wlc_ver.wlc_ver_minor; |
|---|
| 13832 | 13947 | } |
|---|
| 13948 | +#ifdef BOARD_HIKEY |
|---|
| 13833 | 13949 | /* Set op_mode as MFG_MODE if WLTEST is present in "wl ver" */ |
|---|
| 13834 | 13950 | if (strstr(fw_version, "WLTEST") != NULL) { |
|---|
| 13835 | 13951 | DHD_ERROR(("%s: wl ver has WLTEST, setting op_mode as DHD_FLAG_MFG_MODE\n", |
|---|
| 13836 | 13952 | __FUNCTION__)); |
|---|
| 13837 | 13953 | op_mode = DHD_FLAG_MFG_MODE; |
|---|
| 13838 | 13954 | } |
|---|
| 13955 | +#endif /* BOARD_HIKEY */ |
|---|
| 13839 | 13956 | /* get a capabilities from firmware */ |
|---|
| 13840 | 13957 | ret = dhd_get_fw_capabilities(dhd); |
|---|
| 13841 | 13958 | |
|---|
| .. | .. |
|---|
| 13992 | 14109 | |
|---|
| 13993 | 14110 | DHD_ERROR(("Firmware up: op_mode=0x%04x, MAC="MACDBG"\n", |
|---|
| 13994 | 14111 | dhd->op_mode, MAC2STRDBG(dhd->mac.octet))); |
|---|
| 13995 | | - dhd_set_version_info(dhd, fw_version); |
|---|
| 13996 | 14112 | #if defined(DHD_BLOB_EXISTENCE_CHECK) |
|---|
| 13997 | 14113 | if (!dhd->is_blob) |
|---|
| 13998 | 14114 | #endif /* DHD_BLOB_EXISTENCE_CHECK */ |
|---|
| .. | .. |
|---|
| 14185 | 14301 | dhd_update_flow_prio_map(dhd, DHD_FLOW_PRIO_LLR_MAP); |
|---|
| 14186 | 14302 | #endif /* defined(BCMPCIE) && defined(EAPOL_PKT_PRIO) */ |
|---|
| 14187 | 14303 | |
|---|
| 14188 | | -#if defined(BCMSDIO) && defined(DHD_LOSSLESS_ROAMING) |
|---|
| 14189 | | - dhd_update_sdio_data_prio_map(dhd); |
|---|
| 14190 | | -#endif /* BCMSDIO && DHD_LOSSLESS_ROAMING */ |
|---|
| 14191 | | - |
|---|
| 14192 | 14304 | #ifdef ARP_OFFLOAD_SUPPORT |
|---|
| 14193 | 14305 | DHD_ERROR(("arp_enable:%d arp_ol:%d\n", |
|---|
| 14194 | 14306 | dhd->arpoe_enable, dhd->arpol_configured)); |
|---|
| .. | .. |
|---|
| 14200 | 14312 | */ |
|---|
| 14201 | 14313 | #ifdef PKT_FILTER_SUPPORT |
|---|
| 14202 | 14314 | /* 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"; |
|---|
| 14216 | 14327 | |
|---|
| 14217 | 14328 | #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; |
|---|
| 14223 | 14334 | #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"; |
|---|
| 14226 | 14337 | #endif /* BLOCK_IPV6_PACKET */ |
|---|
| 14227 | 14338 | |
|---|
| 14228 | 14339 | #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"; |
|---|
| 14231 | 14342 | #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; |
|---|
| 14234 | 14345 | #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 | + } |
|---|
| 14246 | 14357 | |
|---|
| 14247 | 14358 | #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; |
|---|
| 14257 | 14368 | #endif /* GAN_LITE_NAT_KEEPALIVE_FILTER */ |
|---|
| 14258 | | - } else |
|---|
| 14259 | | - dhd_conf_discard_pkt_filter(dhd); |
|---|
| 14260 | | - dhd_conf_add_pkt_filter(dhd); |
|---|
| 14261 | 14369 | |
|---|
| 14262 | 14370 | #if defined(SOFTAP) |
|---|
| 14263 | 14371 | if (ap_fw_loaded) { |
|---|
| .. | .. |
|---|
| 14499 | 14607 | dhd_set_bandlock(dhd); |
|---|
| 14500 | 14608 | |
|---|
| 14501 | 14609 | done: |
|---|
| 14502 | | - dhd_conf_postinit_ioctls(dhd); |
|---|
| 14503 | 14610 | if (iov_buf) { |
|---|
| 14504 | 14611 | MFREE(dhd->osh, iov_buf, WLC_IOCTL_SMLEN); |
|---|
| 14505 | 14612 | } |
|---|
| .. | .. |
|---|
| 14768 | 14875 | fw_version[FW_VER_STR_LEN-1] = '\0'; |
|---|
| 14769 | 14876 | } |
|---|
| 14770 | 14877 | |
|---|
| 14878 | +#ifdef BOARD_HIKEY |
|---|
| 14771 | 14879 | /* Set op_mode as MFG_MODE if WLTEST is present in "wl ver" */ |
|---|
| 14772 | 14880 | if (strstr(fw_version, "WLTEST") != NULL) { |
|---|
| 14773 | 14881 | DHD_ERROR(("%s: wl ver has WLTEST, setting op_mode as DHD_FLAG_MFG_MODE\n", |
|---|
| 14774 | 14882 | __FUNCTION__)); |
|---|
| 14775 | 14883 | op_mode = DHD_FLAG_MFG_MODE; |
|---|
| 14776 | 14884 | } |
|---|
| 14885 | +#endif /* BOARD_HIKEY */ |
|---|
| 14777 | 14886 | |
|---|
| 14778 | 14887 | if ((!op_mode && dhd_get_fw_mode(dhd->info) == DHD_FLAG_MFG_MODE) || |
|---|
| 14779 | 14888 | (op_mode == DHD_FLAG_MFG_MODE)) { |
|---|
| .. | .. |
|---|
| 15329 | 15438 | } |
|---|
| 15330 | 15439 | |
|---|
| 15331 | 15440 | #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) { |
|---|
| 15333 | 15442 | DHD_ERROR(("%s: CLM set failed. Abort initialization.\n", __FUNCTION__)); |
|---|
| 15334 | 15443 | goto done; |
|---|
| 15335 | 15444 | } |
|---|
| .. | .. |
|---|
| 15721 | 15830 | dhd_update_flow_prio_map(dhd, DHD_FLOW_PRIO_LLR_MAP); |
|---|
| 15722 | 15831 | #endif /* defined(BCMPCIE) && defined(EAPOL_PKT_PRIO) */ |
|---|
| 15723 | 15832 | |
|---|
| 15724 | | -#if defined(BCMSDIO) && defined(DHD_LOSSLESS_ROAMING) |
|---|
| 15725 | | - dhd_update_sdio_data_prio_map(dhd); |
|---|
| 15726 | | -#endif /* BCMSDIO && DHD_LOSSLESS_ROAMING */ |
|---|
| 15727 | | - |
|---|
| 15728 | 15833 | #ifdef RSSI_MONITOR_SUPPORT |
|---|
| 15729 | 15834 | setbit(mask, WLC_E_RSSI_LQM); |
|---|
| 15730 | 15835 | #endif /* RSSI_MONITOR_SUPPORT */ |
|---|
| .. | .. |
|---|
| 15762 | 15867 | setbit(mask, WLC_E_DELTS_IND); |
|---|
| 15763 | 15868 | #endif /* WL_BCNRECV */ |
|---|
| 15764 | 15869 | 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 */ |
|---|
| 15768 | 15870 | |
|---|
| 15769 | 15871 | /* Write updated Event mask */ |
|---|
| 15770 | 15872 | eventmask_msg->ver = EVENTMSGS_VER; |
|---|
| .. | .. |
|---|
| 17269 | 17371 | #ifdef WL_ESCAN |
|---|
| 17270 | 17372 | wl_escan_detach(dev); |
|---|
| 17271 | 17373 | #endif /* WL_ESCAN */ |
|---|
| 17272 | | -#ifdef WL_TIMER |
|---|
| 17273 | | - wl_timer_dettach(dhdp); |
|---|
| 17274 | | -#endif /* WL_TIMER */ |
|---|
| 17275 | 17374 | #ifdef WL_EVENT |
|---|
| 17276 | 17375 | wl_ext_event_dettach(dhdp); |
|---|
| 17277 | 17376 | #endif /* WL_EVENT */ |
|---|
| .. | .. |
|---|
| 17545 | 17644 | DHD_TRACE(("wd wakelock count:%d\n", dhd->wakelock_wd_counter)); |
|---|
| 17546 | 17645 | #ifdef CONFIG_HAS_WAKELOCK |
|---|
| 17547 | 17646 | 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); |
|---|
| 17549 | 17650 | #endif /* CONFIG_HAS_WAKELOCK */ |
|---|
| 17550 | 17651 | if (dhd->dhd_state & DHD_ATTACH_STATE_WAKELOCKS_INIT) { |
|---|
| 17551 | 17652 | DHD_OS_WAKE_LOCK_DESTROY(dhd); |
|---|
| .. | .. |
|---|
| 18425 | 18526 | /* convert to BCME_NOTFOUND error for error handling */ |
|---|
| 18426 | 18527 | ret = BCME_NOTFOUND; |
|---|
| 18427 | 18528 | } 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)); |
|---|
| 18429 | 18530 | |
|---|
| 18430 | 18531 | return ret; |
|---|
| 18431 | 18532 | } |
|---|
| .. | .. |
|---|
| 18443 | 18544 | struct file *fp; |
|---|
| 18444 | 18545 | int size; |
|---|
| 18445 | 18546 | |
|---|
| 18446 | | - fp = dhd_filp_open(filename, O_RDONLY, 0); |
|---|
| 18547 | + fp = filp_open(filename, O_RDONLY, 0); |
|---|
| 18447 | 18548 | /* |
|---|
| 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? |
|---|
| 18449 | 18550 | * Alternative: |
|---|
| 18450 | 18551 | * fp = open_namei(AT_FDCWD, filename, O_RD, 0); |
|---|
| 18451 | 18552 | * ??? |
|---|
| 18452 | 18553 | */ |
|---|
| 18453 | | - if (IS_ERR(fp) || (fp == NULL)) { |
|---|
| 18554 | + if (IS_ERR(fp)) { |
|---|
| 18454 | 18555 | fp = NULL; |
|---|
| 18455 | 18556 | goto err; |
|---|
| 18456 | 18557 | } |
|---|
| .. | .. |
|---|
| 18461 | 18562 | goto err; |
|---|
| 18462 | 18563 | } |
|---|
| 18463 | 18564 | |
|---|
| 18464 | | - size = dhd_i_size_read(file_inode(fp)); |
|---|
| 18565 | + size = i_size_read(file_inode(fp)); |
|---|
| 18465 | 18566 | if (size <= 0) { |
|---|
| 18466 | 18567 | DHD_ERROR(("%s: %s file size invalid %d\n", __FUNCTION__, filename, size)); |
|---|
| 18467 | 18568 | fp = NULL; |
|---|
| .. | .. |
|---|
| 18485 | 18586 | return 0; |
|---|
| 18486 | 18587 | } |
|---|
| 18487 | 18588 | |
|---|
| 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)); |
|---|
| 18490 | 18591 | |
|---|
| 18491 | 18592 | if (len >= size && size != rdlen) { |
|---|
| 18492 | 18593 | return -EIO; |
|---|
| .. | .. |
|---|
| 18511 | 18612 | if (!image) |
|---|
| 18512 | 18613 | return 0; |
|---|
| 18513 | 18614 | |
|---|
| 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); |
|---|
| 18515 | 18616 | str_end = strnchr(str, len, '\n'); |
|---|
| 18516 | 18617 | if (str_end == NULL) { |
|---|
| 18517 | 18618 | goto err; |
|---|
| .. | .. |
|---|
| 18536 | 18637 | return 0; |
|---|
| 18537 | 18638 | } |
|---|
| 18538 | 18639 | |
|---|
| 18539 | | - size = dhd_i_size_read(file_inode(fp)); |
|---|
| 18640 | + size = i_size_read(file_inode(fp)); |
|---|
| 18540 | 18641 | |
|---|
| 18541 | 18642 | return size; |
|---|
| 18542 | 18643 | } |
|---|
| .. | .. |
|---|
| 18545 | 18646 | dhd_os_close_image1(dhd_pub_t *pub, void *image) |
|---|
| 18546 | 18647 | { |
|---|
| 18547 | 18648 | if (image) { |
|---|
| 18548 | | - dhd_filp_close((struct file *)image, NULL); |
|---|
| 18649 | + filp_close((struct file *)image, NULL); |
|---|
| 18549 | 18650 | } |
|---|
| 18550 | 18651 | } |
|---|
| 18551 | 18652 | |
|---|
| .. | .. |
|---|
| 20888 | 20989 | #endif |
|---|
| 20889 | 20990 | |
|---|
| 20890 | 20991 | /* 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)) { |
|---|
| 20893 | 20994 | DHD_ERROR(("open file error, err = %ld\n", PTR_ERR(fp))); |
|---|
| 20894 | 20995 | goto exit; |
|---|
| 20895 | 20996 | } |
|---|
| 20896 | 20997 | |
|---|
| 20897 | 20998 | /* Write buf to file */ |
|---|
| 20898 | | - ret = dhd_vfs_write(fp, buf, size, &pos); |
|---|
| 20999 | + ret = vfs_write(fp, buf, size, &pos); |
|---|
| 20899 | 21000 | if (ret < 0) { |
|---|
| 20900 | 21001 | DHD_ERROR(("write file error, err = %d\n", ret)); |
|---|
| 20901 | 21002 | goto exit; |
|---|
| .. | .. |
|---|
| 20903 | 21004 | |
|---|
| 20904 | 21005 | /* Sync file from filesystem to physical media */ |
|---|
| 20905 | 21006 | #if (LINUX_VERSION_CODE >= KERNEL_VERSION(2, 6, 35)) |
|---|
| 20906 | | - ret = dhd_vfs_fsync(fp, 0); |
|---|
| 21007 | + ret = vfs_fsync(fp, 0); |
|---|
| 20907 | 21008 | #else |
|---|
| 20908 | 21009 | ret = vfs_fsync(fp, fp->f_path.dentry, 0); |
|---|
| 20909 | 21010 | #endif |
|---|
| .. | .. |
|---|
| 20916 | 21017 | exit: |
|---|
| 20917 | 21018 | /* close file before return */ |
|---|
| 20918 | 21019 | if (!IS_ERR(fp)) |
|---|
| 20919 | | - dhd_filp_close(fp, current->files); |
|---|
| 21020 | + filp_close(fp, current->files); |
|---|
| 20920 | 21021 | |
|---|
| 20921 | 21022 | /* restore previous address limit */ |
|---|
| 20922 | 21023 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) |
|---|
| .. | .. |
|---|
| 21108 | 21209 | */ |
|---|
| 21109 | 21210 | file_mode = O_CREAT | O_WRONLY | O_SYNC; |
|---|
| 21110 | 21211 | { |
|---|
| 21111 | | - struct file *fp = dhd_filp_open(memdump_path, file_mode, 0664); |
|---|
| 21212 | + struct file *fp = filp_open(memdump_path, file_mode, 0664); |
|---|
| 21112 | 21213 | /* Check if it is live Brix image having /installmedia, else use /data */ |
|---|
| 21113 | | - if (IS_ERR(fp) || (fp == NULL)) { |
|---|
| 21214 | + if (IS_ERR(fp)) { |
|---|
| 21114 | 21215 | DHD_ERROR(("open file %s, try /data/\n", memdump_path)); |
|---|
| 21115 | 21216 | snprintf(memdump_path, sizeof(memdump_path), "%s%s_%s_" "%s", |
|---|
| 21116 | 21217 | "/data/", fname, memdump_type, dhd->debug_dump_time_str); |
|---|
| 21117 | 21218 | } else { |
|---|
| 21118 | | - dhd_filp_close(fp, NULL); |
|---|
| 21219 | + filp_close(fp, NULL); |
|---|
| 21119 | 21220 | } |
|---|
| 21120 | 21221 | } |
|---|
| 21121 | 21222 | #else |
|---|
| .. | .. |
|---|
| 21153 | 21254 | ret = dhd->wakelock_rx_timeout_enable > dhd->wakelock_ctrl_timeout_enable ? |
|---|
| 21154 | 21255 | dhd->wakelock_rx_timeout_enable : dhd->wakelock_ctrl_timeout_enable; |
|---|
| 21155 | 21256 | #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 |
|---|
| 21160 | 21257 | if (dhd->wakelock_rx_timeout_enable) |
|---|
| 21161 | | - dhd_wake_lock_timeout(dhd->wl_rxwake, |
|---|
| 21258 | + dhd_wake_lock_timeout(&dhd->wl_rxwake, |
|---|
| 21162 | 21259 | msecs_to_jiffies(dhd->wakelock_rx_timeout_enable)); |
|---|
| 21163 | 21260 | if (dhd->wakelock_ctrl_timeout_enable) |
|---|
| 21164 | | - dhd_wake_lock_timeout(dhd->wl_ctrlwake, |
|---|
| 21261 | + dhd_wake_lock_timeout(&dhd->wl_ctrlwake, |
|---|
| 21165 | 21262 | msecs_to_jiffies(dhd->wakelock_ctrl_timeout_enable)); |
|---|
| 21166 | 21263 | #endif |
|---|
| 21167 | 21264 | dhd->wakelock_rx_timeout_enable = 0; |
|---|
| .. | .. |
|---|
| 21218 | 21315 | DHD_WAKE_SPIN_LOCK(&dhd->wakelock_spinlock, flags); |
|---|
| 21219 | 21316 | dhd->wakelock_ctrl_timeout_enable = 0; |
|---|
| 21220 | 21317 | #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); |
|---|
| 21223 | 21320 | #endif |
|---|
| 21224 | 21321 | DHD_WAKE_SPIN_UNLOCK(&dhd->wakelock_spinlock, flags); |
|---|
| 21225 | 21322 | } |
|---|
| .. | .. |
|---|
| 21453 | 21550 | DHD_WAKE_SPIN_LOCK(&dhd->wakelock_spinlock, flags); |
|---|
| 21454 | 21551 | if (dhd->wakelock_counter == 0 && !dhd->waive_wakelock) { |
|---|
| 21455 | 21552 | #ifdef CONFIG_HAS_WAKELOCK |
|---|
| 21456 | | - dhd_wake_lock(dhd->wl_wifi); |
|---|
| 21553 | + dhd_wake_lock(&dhd->wl_wifi); |
|---|
| 21457 | 21554 | #elif defined(BCMSDIO) |
|---|
| 21458 | 21555 | dhd_bus_dev_pm_stay_awake(pub); |
|---|
| 21459 | 21556 | #endif |
|---|
| .. | .. |
|---|
| 21477 | 21574 | |
|---|
| 21478 | 21575 | if (dhd) { |
|---|
| 21479 | 21576 | #ifdef CONFIG_HAS_WAKELOCK |
|---|
| 21480 | | - dhd_wake_lock(dhd->wl_evtwake); |
|---|
| 21577 | + dhd_wake_lock(&dhd->wl_evtwake); |
|---|
| 21481 | 21578 | #elif defined(BCMSDIO) |
|---|
| 21482 | 21579 | dhd_bus_dev_pm_stay_awake(pub); |
|---|
| 21483 | 21580 | #endif |
|---|
| .. | .. |
|---|
| 21491 | 21588 | dhd_info_t *dhd = (dhd_info_t *)(pub->info); |
|---|
| 21492 | 21589 | |
|---|
| 21493 | 21590 | 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)); |
|---|
| 21495 | 21592 | } |
|---|
| 21496 | 21593 | #endif /* CONFIG_HAS_WAKE_LOCK */ |
|---|
| 21497 | 21594 | } |
|---|
| .. | .. |
|---|
| 21503 | 21600 | dhd_info_t *dhd = (dhd_info_t *)(pub->info); |
|---|
| 21504 | 21601 | |
|---|
| 21505 | 21602 | 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)); |
|---|
| 21507 | 21604 | } |
|---|
| 21508 | 21605 | #endif /* CONFIG_HAS_WAKE_LOCK */ |
|---|
| 21509 | 21606 | } |
|---|
| .. | .. |
|---|
| 21515 | 21612 | dhd_info_t *dhd = (dhd_info_t *)(pub->info); |
|---|
| 21516 | 21613 | |
|---|
| 21517 | 21614 | 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)); |
|---|
| 21519 | 21616 | } |
|---|
| 21520 | 21617 | #endif /* CONFIG_HAS_WAKE_LOCK */ |
|---|
| 21521 | 21618 | } |
|---|
| .. | .. |
|---|
| 21549 | 21646 | #endif /* DHD_TRACE_WAKE_LOCK */ |
|---|
| 21550 | 21647 | if (dhd->wakelock_counter == 0 && !dhd->waive_wakelock) { |
|---|
| 21551 | 21648 | #ifdef CONFIG_HAS_WAKELOCK |
|---|
| 21552 | | - dhd_wake_unlock(dhd->wl_wifi); |
|---|
| 21649 | + dhd_wake_unlock(&dhd->wl_wifi); |
|---|
| 21553 | 21650 | #elif defined(BCMSDIO) |
|---|
| 21554 | 21651 | dhd_bus_dev_pm_relax(pub); |
|---|
| 21555 | 21652 | #endif |
|---|
| .. | .. |
|---|
| 21567 | 21664 | |
|---|
| 21568 | 21665 | if (dhd) { |
|---|
| 21569 | 21666 | #ifdef CONFIG_HAS_WAKELOCK |
|---|
| 21570 | | - dhd_wake_unlock(dhd->wl_evtwake); |
|---|
| 21667 | + dhd_wake_unlock(&dhd->wl_evtwake); |
|---|
| 21571 | 21668 | #elif defined(BCMSDIO) |
|---|
| 21572 | 21669 | dhd_bus_dev_pm_relax(pub); |
|---|
| 21573 | 21670 | #endif |
|---|
| .. | .. |
|---|
| 21581 | 21678 | |
|---|
| 21582 | 21679 | if (dhd) { |
|---|
| 21583 | 21680 | /* 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); |
|---|
| 21586 | 21683 | } |
|---|
| 21587 | 21684 | } |
|---|
| 21588 | 21685 | #endif /* CONFIG_HAS_WAKELOCK */ |
|---|
| .. | .. |
|---|
| 21595 | 21692 | |
|---|
| 21596 | 21693 | if (dhd) { |
|---|
| 21597 | 21694 | /* 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); |
|---|
| 21600 | 21697 | } |
|---|
| 21601 | 21698 | } |
|---|
| 21602 | 21699 | #endif /* CONFIG_HAS_WAKELOCK */ |
|---|
| .. | .. |
|---|
| 21609 | 21706 | |
|---|
| 21610 | 21707 | if (dhd) { |
|---|
| 21611 | 21708 | /* 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); |
|---|
| 21614 | 21711 | } |
|---|
| 21615 | 21712 | } |
|---|
| 21616 | 21713 | #endif /* CONFIG_HAS_WAKELOCK */ |
|---|
| .. | .. |
|---|
| 21635 | 21732 | |
|---|
| 21636 | 21733 | #ifdef CONFIG_HAS_WAKELOCK |
|---|
| 21637 | 21734 | 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); |
|---|
| 21640 | 21737 | lock_active = (l1 || l2); |
|---|
| 21641 | 21738 | /* Indicate to the SD Host to avoid going to suspend if internal locks are up */ |
|---|
| 21642 | 21739 | if (lock_active) { |
|---|
| .. | .. |
|---|
| 21679 | 21776 | |
|---|
| 21680 | 21777 | #ifdef CONFIG_HAS_WAKELOCK |
|---|
| 21681 | 21778 | 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); |
|---|
| 21687 | 21784 | #ifdef BCMPCIE_OOB_HOST_WAKE |
|---|
| 21688 | | - l5 = dhd_wake_lock_active(dhd->wl_intrwake); |
|---|
| 21785 | + l5 = dhd_wake_lock_active(&dhd->wl_intrwake); |
|---|
| 21689 | 21786 | #endif /* BCMPCIE_OOB_HOST_WAKE */ |
|---|
| 21690 | 21787 | #ifdef DHD_USE_SCAN_WAKELOCK |
|---|
| 21691 | | - l6 = dhd_wake_lock_active(dhd->wl_scanwake); |
|---|
| 21788 | + l6 = dhd_wake_lock_active(&dhd->wl_scanwake); |
|---|
| 21692 | 21789 | #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); |
|---|
| 21696 | 21793 | lock_active = (l1 || l2 || l3 || l4 || l5 || l6 || l7 || l8 || l9 || l10); |
|---|
| 21697 | 21794 | |
|---|
| 21698 | 21795 | /* Indicate to the Host to avoid going to suspend if internal locks are up */ |
|---|
| .. | .. |
|---|
| 21732 | 21829 | if (dhd->wakelock_wd_counter == 0 && !dhd->waive_wakelock) { |
|---|
| 21733 | 21830 | #ifdef CONFIG_HAS_WAKELOCK |
|---|
| 21734 | 21831 | /* 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); |
|---|
| 21736 | 21833 | #endif |
|---|
| 21737 | 21834 | } |
|---|
| 21738 | 21835 | dhd->wakelock_wd_counter++; |
|---|
| .. | .. |
|---|
| 21754 | 21851 | dhd->wakelock_wd_counter = 0; |
|---|
| 21755 | 21852 | if (!dhd->waive_wakelock) { |
|---|
| 21756 | 21853 | #ifdef CONFIG_HAS_WAKELOCK |
|---|
| 21757 | | - dhd_wake_unlock(dhd->wl_wdwake); |
|---|
| 21854 | + dhd_wake_unlock(&dhd->wl_wdwake); |
|---|
| 21758 | 21855 | #endif |
|---|
| 21759 | 21856 | } |
|---|
| 21760 | 21857 | } |
|---|
| .. | .. |
|---|
| 21767 | 21864 | void |
|---|
| 21768 | 21865 | dhd_os_oob_irq_wake_lock_timeout(dhd_pub_t *pub, int val) |
|---|
| 21769 | 21866 | { |
|---|
| 21770 | | -#ifdef CONFIG_HAS_WAKELOCK |
|---|
| 21771 | 21867 | dhd_info_t *dhd = (dhd_info_t *)(pub->info); |
|---|
| 21772 | 21868 | |
|---|
| 21773 | 21869 | 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); |
|---|
| 21776 | 21875 | #endif /* CONFIG_HAS_WAKELOCK */ |
|---|
| 21876 | + } |
|---|
| 21777 | 21877 | } |
|---|
| 21778 | 21878 | |
|---|
| 21779 | 21879 | void |
|---|
| .. | .. |
|---|
| 21784 | 21884 | |
|---|
| 21785 | 21885 | if (dhd) { |
|---|
| 21786 | 21886 | /* 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); |
|---|
| 21789 | 21889 | } |
|---|
| 21790 | 21890 | } |
|---|
| 21791 | 21891 | #endif /* CONFIG_HAS_WAKELOCK */ |
|---|
| .. | .. |
|---|
| 21800 | 21900 | dhd_info_t *dhd = (dhd_info_t *)(pub->info); |
|---|
| 21801 | 21901 | |
|---|
| 21802 | 21902 | 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)); |
|---|
| 21804 | 21904 | } |
|---|
| 21805 | 21905 | #endif /* CONFIG_HAS_WAKELOCK */ |
|---|
| 21806 | 21906 | } |
|---|
| .. | .. |
|---|
| 21813 | 21913 | |
|---|
| 21814 | 21914 | if (dhd) { |
|---|
| 21815 | 21915 | /* 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); |
|---|
| 21818 | 21918 | } |
|---|
| 21819 | 21919 | } |
|---|
| 21820 | 21920 | #endif /* CONFIG_HAS_WAKELOCK */ |
|---|
| .. | .. |
|---|
| 21880 | 21980 | |
|---|
| 21881 | 21981 | if (dhd->wakelock_before_waive == 0 && dhd->wakelock_counter > 0) { |
|---|
| 21882 | 21982 | #ifdef CONFIG_HAS_WAKELOCK |
|---|
| 21883 | | - dhd_wake_lock(dhd->wl_wifi); |
|---|
| 21983 | + dhd_wake_lock(&dhd->wl_wifi); |
|---|
| 21884 | 21984 | #elif defined(BCMSDIO) |
|---|
| 21885 | 21985 | dhd_bus_dev_pm_stay_awake(&dhd->pub); |
|---|
| 21886 | 21986 | #endif |
|---|
| 21887 | 21987 | } else if (dhd->wakelock_before_waive > 0 && dhd->wakelock_counter == 0) { |
|---|
| 21888 | 21988 | #ifdef CONFIG_HAS_WAKELOCK |
|---|
| 21889 | | - dhd_wake_unlock(dhd->wl_wifi); |
|---|
| 21989 | + dhd_wake_unlock(&dhd->wl_wifi); |
|---|
| 21890 | 21990 | #elif defined(BCMSDIO) |
|---|
| 21891 | 21991 | dhd_bus_dev_pm_relax(&dhd->pub); |
|---|
| 21892 | 21992 | #endif |
|---|
| .. | .. |
|---|
| 21906 | 22006 | dhd->wakelock_ctrl_timeout_enable = 0; |
|---|
| 21907 | 22007 | /* wakelocks prevent a system from going into a low power state */ |
|---|
| 21908 | 22008 | #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"); |
|---|
| 21915 | 22015 | #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"); |
|---|
| 21917 | 22017 | #endif /* BCMPCIE_OOB_HOST_WAKE */ |
|---|
| 21918 | 22018 | #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"); |
|---|
| 21920 | 22020 | #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"); |
|---|
| 21922 | 22022 | #endif /* CONFIG_HAS_WAKELOCK */ |
|---|
| 21923 | 22023 | #ifdef DHD_TRACE_WAKE_LOCK |
|---|
| 21924 | 22024 | dhd_wk_lock_trace_init(dhd); |
|---|
| 21925 | 22025 | #endif /* DHD_TRACE_WAKE_LOCK */ |
|---|
| 22026 | + wake_lock_init(&dhd->rx_wakelock, WAKE_LOCK_SUSPEND, "wlan_rx_wakelock"); |
|---|
| 21926 | 22027 | } |
|---|
| 21927 | 22028 | |
|---|
| 21928 | 22029 | void dhd_os_wake_lock_destroy(struct dhd_info *dhd) |
|---|
| .. | .. |
|---|
| 21932 | 22033 | dhd->wakelock_counter = 0; |
|---|
| 21933 | 22034 | dhd->wakelock_rx_timeout_enable = 0; |
|---|
| 21934 | 22035 | 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); |
|---|
| 21941 | 22042 | #ifdef BCMPCIE_OOB_HOST_WAKE |
|---|
| 21942 | | - dhd_wake_lock_destroy(dhd->wl_intrwake); |
|---|
| 22043 | + dhd_wake_lock_unlock_destroy(&dhd->wl_intrwake); |
|---|
| 21943 | 22044 | #endif /* BCMPCIE_OOB_HOST_WAKE */ |
|---|
| 21944 | 22045 | #ifdef DHD_USE_SCAN_WAKELOCK |
|---|
| 21945 | | - dhd_wake_lock_destroy(dhd->wl_scanwake); |
|---|
| 22046 | + dhd_wake_lock_unlock_destroy(&dhd->wl_scanwake); |
|---|
| 21946 | 22047 | #endif /* DHD_USE_SCAN_WAKELOCK */ |
|---|
| 21947 | | - dhd_wake_lock_destroy(dhd->wl_nanwake); |
|---|
| 22048 | + dhd_wake_lock_unlock_destroy(&dhd->wl_nanwake); |
|---|
| 21948 | 22049 | #ifdef DHD_TRACE_WAKE_LOCK |
|---|
| 21949 | 22050 | dhd_wk_lock_trace_deinit(dhd); |
|---|
| 21950 | 22051 | #endif /* DHD_TRACE_WAKE_LOCK */ |
|---|
| .. | .. |
|---|
| 21955 | 22056 | while (dhd_os_wake_unlock(&dhd->pub)); |
|---|
| 21956 | 22057 | } |
|---|
| 21957 | 22058 | #endif /* CONFIG_HAS_WAKELOCK */ |
|---|
| 22059 | + wake_lock_destroy(&dhd->rx_wakelock); |
|---|
| 21958 | 22060 | } |
|---|
| 21959 | 22061 | |
|---|
| 21960 | 22062 | bool dhd_os_check_if_up(dhd_pub_t *pub) |
|---|
| .. | .. |
|---|
| 22479 | 22581 | loff_t pos = 0; |
|---|
| 22480 | 22582 | |
|---|
| 22481 | 22583 | /* 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)) { |
|---|
| 22484 | 22586 | DHD_ERROR(("%s: File [%s] doesn't exist\n", __FUNCTION__, filepath)); |
|---|
| 22485 | 22587 | #if defined(CONFIG_X86) && defined(OEM_ANDROID) |
|---|
| 22486 | 22588 | /* Check if it is Live Brix Image */ |
|---|
| .. | .. |
|---|
| 22490 | 22592 | /* Try if it is Installed Brix Image */ |
|---|
| 22491 | 22593 | filepath = RNDINFO_INST".in"; |
|---|
| 22492 | 22594 | 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)) { |
|---|
| 22495 | 22597 | DHD_ERROR(("%s: File [%s] doesn't exist\n", __FUNCTION__, filepath)); |
|---|
| 22496 | 22598 | goto err1; |
|---|
| 22497 | 22599 | } |
|---|
| .. | .. |
|---|
| 22504 | 22606 | set_fs(KERNEL_DS); |
|---|
| 22505 | 22607 | |
|---|
| 22506 | 22608 | /* 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); |
|---|
| 22508 | 22610 | if (ret < 0) { |
|---|
| 22509 | 22611 | DHD_ERROR(("%s: rnd_len read error, ret=%d\n", __FUNCTION__, ret)); |
|---|
| 22510 | 22612 | goto err2; |
|---|
| .. | .. |
|---|
| 22516 | 22618 | goto err2; |
|---|
| 22517 | 22619 | } |
|---|
| 22518 | 22620 | |
|---|
| 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); |
|---|
| 22520 | 22622 | if (ret < 0) { |
|---|
| 22521 | 22623 | DHD_ERROR(("%s: rnd_buf read error, ret=%d\n", __FUNCTION__, ret)); |
|---|
| 22522 | 22624 | goto err3; |
|---|
| 22523 | 22625 | } |
|---|
| 22524 | 22626 | |
|---|
| 22525 | 22627 | set_fs(old_fs); |
|---|
| 22526 | | - dhd_filp_close(fp, NULL); |
|---|
| 22628 | + filp_close(fp, NULL); |
|---|
| 22527 | 22629 | |
|---|
| 22528 | 22630 | DHD_ERROR(("%s: RND read from %s\n", __FUNCTION__, filepath)); |
|---|
| 22529 | 22631 | return BCME_OK; |
|---|
| .. | .. |
|---|
| 22533 | 22635 | dhd->rnd_buf = NULL; |
|---|
| 22534 | 22636 | err2: |
|---|
| 22535 | 22637 | set_fs(old_fs); |
|---|
| 22536 | | - dhd_filp_close(fp, NULL); |
|---|
| 22638 | + filp_close(fp, NULL); |
|---|
| 22537 | 22639 | err1: |
|---|
| 22538 | 22640 | return BCME_ERROR; |
|---|
| 22539 | 22641 | } |
|---|
| .. | .. |
|---|
| 22549 | 22651 | loff_t pos = 0; |
|---|
| 22550 | 22652 | |
|---|
| 22551 | 22653 | /* 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)) { |
|---|
| 22554 | 22656 | DHD_ERROR(("%s: File [%s] doesn't exist\n", __FUNCTION__, filepath)); |
|---|
| 22555 | 22657 | #if defined(CONFIG_X86) && defined(OEM_ANDROID) |
|---|
| 22556 | 22658 | /* Check if it is Live Brix Image */ |
|---|
| .. | .. |
|---|
| 22560 | 22662 | /* Try if it is Installed Brix Image */ |
|---|
| 22561 | 22663 | filepath = RNDINFO_INST".out"; |
|---|
| 22562 | 22664 | 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)) { |
|---|
| 22565 | 22667 | DHD_ERROR(("%s: File [%s] doesn't exist\n", __FUNCTION__, filepath)); |
|---|
| 22566 | 22668 | goto err1; |
|---|
| 22567 | 22669 | } |
|---|
| .. | .. |
|---|
| 22574 | 22676 | set_fs(KERNEL_DS); |
|---|
| 22575 | 22677 | |
|---|
| 22576 | 22678 | /* 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); |
|---|
| 22578 | 22680 | if (ret < 0) { |
|---|
| 22579 | 22681 | DHD_ERROR(("%s: rnd_len write error, ret=%d\n", __FUNCTION__, ret)); |
|---|
| 22580 | 22682 | goto err2; |
|---|
| 22581 | 22683 | } |
|---|
| 22582 | 22684 | |
|---|
| 22583 | | - ret = dhd_vfs_write(fp, (char *)rnd_buf, rnd_len, &pos); |
|---|
| 22685 | + ret = vfs_write(fp, (char *)rnd_buf, rnd_len, &pos); |
|---|
| 22584 | 22686 | if (ret < 0) { |
|---|
| 22585 | 22687 | DHD_ERROR(("%s: rnd_buf write error, ret=%d\n", __FUNCTION__, ret)); |
|---|
| 22586 | 22688 | goto err2; |
|---|
| 22587 | 22689 | } |
|---|
| 22588 | 22690 | |
|---|
| 22589 | 22691 | set_fs(old_fs); |
|---|
| 22590 | | - dhd_filp_close(fp, NULL); |
|---|
| 22692 | + filp_close(fp, NULL); |
|---|
| 22591 | 22693 | DHD_ERROR(("%s: RND written to %s\n", __FUNCTION__, filepath)); |
|---|
| 22592 | 22694 | return BCME_OK; |
|---|
| 22593 | 22695 | |
|---|
| 22594 | 22696 | err2: |
|---|
| 22595 | 22697 | set_fs(old_fs); |
|---|
| 22596 | | - dhd_filp_close(fp, NULL); |
|---|
| 22698 | + filp_close(fp, NULL); |
|---|
| 22597 | 22699 | err1: |
|---|
| 22598 | 22700 | return BCME_ERROR; |
|---|
| 22599 | 22701 | |
|---|
| .. | .. |
|---|
| 24511 | 24613 | else |
|---|
| 24512 | 24614 | file_mode = O_CREAT | O_RDWR | O_SYNC; |
|---|
| 24513 | 24615 | |
|---|
| 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)) { |
|---|
| 24516 | 24618 | /* If android installed image, try '/data' directory */ |
|---|
| 24517 | 24619 | #if defined(CONFIG_X86) && defined(OEM_ANDROID) |
|---|
| 24518 | 24620 | DHD_ERROR(("%s: File open error on Installed android image, trying /data...\n", |
|---|
| .. | .. |
|---|
| 24523 | 24625 | sizeof(dump_path) - strlen(dump_path), |
|---|
| 24524 | 24626 | "_%s", dhdp->debug_dump_time_str); |
|---|
| 24525 | 24627 | } |
|---|
| 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)) { |
|---|
| 24528 | 24630 | ret = PTR_ERR(fp); |
|---|
| 24529 | 24631 | DHD_ERROR(("open file error, err = %d\n", ret)); |
|---|
| 24530 | 24632 | goto exit2; |
|---|
| .. | .. |
|---|
| 24538 | 24640 | } |
|---|
| 24539 | 24641 | |
|---|
| 24540 | 24642 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) |
|---|
| 24541 | | - ret = dhd_vfs_stat(dump_path, &stat); |
|---|
| 24643 | + ret = vfs_stat(dump_path, &stat); |
|---|
| 24542 | 24644 | if (ret < 0) { |
|---|
| 24543 | 24645 | DHD_ERROR(("file stat error, err = %d\n", ret)); |
|---|
| 24544 | 24646 | goto exit2; |
|---|
| .. | .. |
|---|
| 24707 | 24809 | |
|---|
| 24708 | 24810 | exit2: |
|---|
| 24709 | 24811 | if (!IS_ERR(fp) && fp != NULL) { |
|---|
| 24710 | | - dhd_filp_close(fp, NULL); |
|---|
| 24812 | + filp_close(fp, NULL); |
|---|
| 24711 | 24813 | DHD_ERROR(("%s: Finished writing log dump to file - '%s' \n", |
|---|
| 24712 | 24814 | __FUNCTION__, dump_path)); |
|---|
| 24713 | 24815 | } |
|---|
| .. | .. |
|---|
| 24742 | 24844 | int ret = BCME_OK; |
|---|
| 24743 | 24845 | |
|---|
| 24744 | 24846 | 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); |
|---|
| 24746 | 24848 | if (ret < 0) { |
|---|
| 24747 | 24849 | DHD_ERROR(("write file error, err = %d\n", ret)); |
|---|
| 24748 | 24850 | goto exit; |
|---|
| .. | .. |
|---|
| 26643 | 26745 | struct file *fp; |
|---|
| 26644 | 26746 | char *filepath = VENDOR_PATH CONFIG_BCMDHD_CLM_PATH; |
|---|
| 26645 | 26747 | |
|---|
| 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)) { |
|---|
| 26648 | 26750 | DHD_ERROR(("%s: ----- blob file doesn't exist (%s) -----\n", __FUNCTION__, |
|---|
| 26649 | 26751 | filepath)); |
|---|
| 26650 | 26752 | dhdp->is_blob = FALSE; |
|---|
| .. | .. |
|---|
| 26656 | 26758 | #else |
|---|
| 26657 | 26759 | BCM_REFERENCE(fw_path); |
|---|
| 26658 | 26760 | #endif /* SKIP_CONCATE_BLOB */ |
|---|
| 26659 | | - dhd_filp_close(fp, NULL); |
|---|
| 26761 | + filp_close(fp, NULL); |
|---|
| 26660 | 26762 | } |
|---|
| 26661 | 26763 | } |
|---|
| 26662 | 26764 | #endif /* DHD_BLOB_EXISTENCE_CHECK */ |
|---|
| .. | .. |
|---|
| 26813 | 26915 | #endif |
|---|
| 26814 | 26916 | |
|---|
| 26815 | 26917 | /* 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)) { |
|---|
| 26818 | 26920 | DHD_ERROR(("%s: Couldn't open file '%s' err %ld\n", |
|---|
| 26819 | 26921 | __FUNCTION__, filepath, PTR_ERR(fp))); |
|---|
| 26820 | 26922 | ret = BCME_ERROR; |
|---|
| 26821 | 26923 | } else { |
|---|
| 26822 | 26924 | 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); |
|---|
| 26824 | 26926 | if (ret < 0) { |
|---|
| 26825 | 26927 | DHD_ERROR(("%s: Couldn't write file '%s'\n", |
|---|
| 26826 | 26928 | __FUNCTION__, filepath)); |
|---|
| .. | .. |
|---|
| 26829 | 26931 | ret = BCME_OK; |
|---|
| 26830 | 26932 | } |
|---|
| 26831 | 26933 | } |
|---|
| 26832 | | - dhd_filp_close(fp, NULL); |
|---|
| 26934 | + filp_close(fp, NULL); |
|---|
| 26833 | 26935 | } |
|---|
| 26834 | 26936 | |
|---|
| 26835 | 26937 | /* restore previous address limit */ |
|---|
| .. | .. |
|---|
| 26855 | 26957 | set_fs(KERNEL_DS); |
|---|
| 26856 | 26958 | #endif |
|---|
| 26857 | 26959 | |
|---|
| 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)) { |
|---|
| 26860 | 26962 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) |
|---|
| 26861 | 26963 | set_fs(old_fs); |
|---|
| 26862 | 26964 | #endif |
|---|
| .. | .. |
|---|
| 26864 | 26966 | return BCME_ERROR; |
|---|
| 26865 | 26967 | } |
|---|
| 26866 | 26968 | |
|---|
| 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); |
|---|
| 26869 | 26971 | |
|---|
| 26870 | 26972 | /* restore previous address limit */ |
|---|
| 26871 | 26973 | #if (LINUX_VERSION_CODE < KERNEL_VERSION(5, 10, 0)) |
|---|
| .. | .. |
|---|
| 27172 | 27274 | dhd_get_random_bytes(uint8 *buf, uint len) |
|---|
| 27173 | 27275 | { |
|---|
| 27174 | 27276 | #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 |
|---|
| 27176 | 27286 | #endif /* BCMPCIE */ |
|---|
| 27177 | 27287 | return BCME_OK; |
|---|
| 27178 | 27288 | } |
|---|
| .. | .. |
|---|
| 29657 | 29767 | } |
|---|
| 29658 | 29768 | /* END of DHD RING */ |
|---|
| 29659 | 29769 | |
|---|
| 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 | + |
|---|
| 29660 | 29782 | #if ((defined DHD_DUMP_MNGR) || (defined DNGL_AXI_ERROR_LOGGING)) |
|---|
| 29661 | 29783 | int |
|---|
| 29662 | 29784 | dhd_file_delete(char *path) |
|---|
| 29663 | 29785 | { |
|---|
| 29664 | | - struct path file_path = {.dentry = 0}; |
|---|
| 29786 | + struct path file_path; |
|---|
| 29665 | 29787 | int err; |
|---|
| 29666 | 29788 | struct dentry *dir; |
|---|
| 29667 | 29789 | |
|---|
| 29668 | | - err = dhd_kern_path(path, 0, &file_path); |
|---|
| 29790 | + err = kern_path(path, 0, &file_path); |
|---|
| 29669 | 29791 | |
|---|
| 29670 | 29792 | if (err < 0) { |
|---|
| 29671 | 29793 | DHD_ERROR(("Failed to get kern-path delete file: %s error: %d\n", path, err)); |
|---|