.. | .. |
---|
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) |
---|
| 70 | +#include <rk_dhd_pcie_linux.h> |
---|
| 71 | +#endif /* CUSTOMER_HW_ROCKCHIP && CUSTOMER_HW_ROCKCHIP_RK3588 */ |
---|
| 72 | +#endif /* BCMPCIE */ |
---|
68 | 73 | |
---|
69 | 74 | #include <epivers.h> |
---|
70 | 75 | #include <bcmutils.h> |
---|
.. | .. |
---|
1142 | 1147 | dhd_pub_t *dhd = &dhdinfo->pub; |
---|
1143 | 1148 | struct dhd_conf *conf = dhd->conf; |
---|
1144 | 1149 | int suspend_mode = conf->suspend_mode; |
---|
| 1150 | +#if defined(BCMDBUS) && defined(WL_EXT_WOWL) |
---|
| 1151 | + int wowl_dngldown = 0; |
---|
| 1152 | +#endif |
---|
1145 | 1153 | |
---|
1146 | 1154 | BCM_REFERENCE(dhdinfo); |
---|
1147 | 1155 | BCM_REFERENCE(suspend); |
---|
| 1156 | + |
---|
| 1157 | +#if defined(BCMDBUS) && defined(WL_EXT_WOWL) |
---|
| 1158 | + wowl_dngldown = dhd_conf_wowl_dngldown(dhd); |
---|
| 1159 | +#endif |
---|
1148 | 1160 | |
---|
1149 | 1161 | switch (action) { |
---|
1150 | 1162 | case PM_HIBERNATION_PREPARE: |
---|
.. | .. |
---|
1189 | 1201 | dhd_suspend_resume_helper(dhdinfo, suspend, 0); |
---|
1190 | 1202 | #ifdef BCMDBUS |
---|
1191 | 1203 | } else { |
---|
1192 | | - printf("%s: skip resume since bus suspeneded\n", __FUNCTION__); |
---|
| 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 | + } |
---|
1193 | 1214 | } |
---|
1194 | 1215 | #endif |
---|
1195 | 1216 | } |
---|
.. | .. |
---|
3545 | 3566 | return; |
---|
3546 | 3567 | } |
---|
3547 | 3568 | |
---|
| 3569 | +#ifdef DHD_NOTIFY_MAC_CHANGED |
---|
| 3570 | + rtnl_lock(); |
---|
| 3571 | +#endif /* DHD_NOTIFY_MAC_CHANGED */ |
---|
3548 | 3572 | dhd_net_if_lock_local(dhd); |
---|
3549 | 3573 | DHD_OS_WAKE_LOCK(&dhd->pub); |
---|
3550 | 3574 | |
---|
.. | .. |
---|
3559 | 3583 | |
---|
3560 | 3584 | ifp->set_macaddress = FALSE; |
---|
3561 | 3585 | |
---|
3562 | | -#ifdef DHD_NOTIFY_MAC_CHANGED |
---|
3563 | | - rtnl_lock(); |
---|
3564 | | -#endif /* DHD_NOTIFY_MAC_CHANGED */ |
---|
3565 | | - |
---|
3566 | 3586 | if (_dhd_set_mac_address(dhd, ifp->idx, ifp->mac_addr, TRUE) == 0) |
---|
3567 | 3587 | DHD_INFO(("%s: MACID is overwritten\n", __FUNCTION__)); |
---|
3568 | 3588 | else |
---|
3569 | 3589 | DHD_ERROR(("%s: _dhd_set_mac_address() failed\n", __FUNCTION__)); |
---|
3570 | 3590 | |
---|
3571 | | -#ifdef DHD_NOTIFY_MAC_CHANGED |
---|
3572 | | - rtnl_unlock(); |
---|
3573 | | -#endif /* DHD_NOTIFY_MAC_CHANGED */ |
---|
3574 | | - |
---|
3575 | 3591 | done: |
---|
3576 | 3592 | DHD_OS_WAKE_UNLOCK(&dhd->pub); |
---|
3577 | 3593 | dhd_net_if_unlock_local(dhd); |
---|
| 3594 | +#ifdef DHD_NOTIFY_MAC_CHANGED |
---|
| 3595 | + rtnl_unlock(); |
---|
| 3596 | +#endif /* DHD_NOTIFY_MAC_CHANGED */ |
---|
3578 | 3597 | } |
---|
3579 | 3598 | |
---|
3580 | 3599 | static void |
---|
.. | .. |
---|
4413 | 4432 | #endif |
---|
4414 | 4433 | /* Make sure there's enough room for any header */ |
---|
4415 | 4434 | #if !defined(BCM_ROUTER_DHD) |
---|
4416 | | - if (skb_headroom(skb) < dhd->pub.hdrlen + htsfdlystat_sz) { |
---|
4417 | | - struct sk_buff *skb2; |
---|
4418 | | - |
---|
4419 | | - DHD_INFO(("%s: insufficient headroom\n", |
---|
4420 | | - dhd_ifname(&dhd->pub, ifidx))); |
---|
4421 | | - dhd->pub.tx_realloc++; |
---|
4422 | | - |
---|
| 4435 | + if (skb_cow(skb, (dhd->pub.hdrlen + htsfdlystat_sz))) { |
---|
| 4436 | + DHD_ERROR(("%s: skb_cow failed\n", |
---|
| 4437 | + dhd_ifname(&dhd->pub, ifidx))); |
---|
4423 | 4438 | bcm_object_trace_opr(skb, BCM_OBJDBG_REMOVE, __FUNCTION__, __LINE__); |
---|
4424 | | - skb2 = skb_realloc_headroom(skb, dhd->pub.hdrlen + htsfdlystat_sz); |
---|
4425 | | - |
---|
4426 | | - dev_kfree_skb(skb); |
---|
4427 | | - if ((skb = skb2) == NULL) { |
---|
4428 | | - DHD_ERROR(("%s: skb_realloc_headroom failed\n", |
---|
4429 | | - dhd_ifname(&dhd->pub, ifidx))); |
---|
4430 | | - ret = -ENOMEM; |
---|
4431 | | - goto done; |
---|
4432 | | - } |
---|
4433 | | - bcm_object_trace_opr(skb, BCM_OBJDBG_ADD_PKT, __FUNCTION__, __LINE__); |
---|
| 4439 | + dev_kfree_skb_any(skb); |
---|
| 4440 | + ret = -ENOMEM; |
---|
| 4441 | + goto done; |
---|
4434 | 4442 | } |
---|
4435 | 4443 | #endif /* !BCM_ROUTER_DHD */ |
---|
4436 | 4444 | |
---|
.. | .. |
---|
8705 | 8713 | } |
---|
8706 | 8714 | #endif /* DHD_PCIE_NATIVE_RUNTIMEPM */ |
---|
8707 | 8715 | |
---|
8708 | | -#ifdef CONFIG_HAS_WAKELOCK |
---|
8709 | | -#define dhd_wake_lock_unlock_destroy(wlock) \ |
---|
8710 | | -{ \ |
---|
8711 | | - if (dhd_wake_lock_active(wlock)) { \ |
---|
8712 | | - dhd_wake_unlock(wlock); \ |
---|
8713 | | - } \ |
---|
8714 | | - dhd_wake_lock_destroy(wlock); \ |
---|
8715 | | -} |
---|
8716 | | -#endif /* CONFIG_HAS_WAKELOCK */ |
---|
8717 | | - |
---|
8718 | 8716 | #if LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0) && defined(DHD_TCP_LIMIT_OUTPUT) |
---|
8719 | 8717 | #define DHD_TCP_LIMIT_OUTPUT_BYTES (4 * 1024 * 1024) |
---|
8720 | 8718 | #ifndef TCP_DEFAULT_LIMIT_OUTPUT |
---|
.. | .. |
---|
8784 | 8782 | |
---|
8785 | 8783 | #if defined(WL_STATIC_IF) && defined(WL_CFG80211) |
---|
8786 | 8784 | /* If static if is operational, don't reset the chip */ |
---|
8787 | | - if (wl_cfg80211_static_if_active(cfg)) { |
---|
| 8785 | + if ((!dhd->pub.hang_was_sent) && wl_cfg80211_static_if_active(cfg)) { |
---|
8788 | 8786 | WL_MSG(net->name, "static if operational. skip chip reset.\n"); |
---|
8789 | 8787 | skip_reset = true; |
---|
8790 | 8788 | wl_cfg80211_sta_ifdown(net); |
---|
.. | .. |
---|
8792 | 8790 | } |
---|
8793 | 8791 | #endif /* WL_STATIC_IF && WL_CFG80211 */ |
---|
8794 | 8792 | #ifdef DHD_NOTIFY_MAC_CHANGED |
---|
8795 | | - if (dhd->pub.skip_dhd_stop) { |
---|
| 8793 | + if (!dhd->pub.hang_was_sent && dhd->pub.skip_dhd_stop) { |
---|
8796 | 8794 | WL_MSG(net->name, "skip chip reset.\n"); |
---|
8797 | 8795 | skip_reset = true; |
---|
8798 | 8796 | #if defined(WL_CFG80211) |
---|
.. | .. |
---|
10448 | 10446 | #endif /* DHDTCPACK_SUPPRESS && BCMPCIE */ |
---|
10449 | 10447 | if (need_rtnl_lock) |
---|
10450 | 10448 | unregister_netdev(ifp->net); |
---|
10451 | | - else |
---|
| 10449 | + else { |
---|
| 10450 | +#if (LINUX_VERSION_CODE >= KERNEL_VERSION(5, 12, 0)) && defined(WL_CFG80211) |
---|
| 10451 | + cfg80211_unregister_netdevice(ifp->net); |
---|
| 10452 | +#else |
---|
10452 | 10453 | unregister_netdevice(ifp->net); |
---|
| 10454 | +#endif |
---|
| 10455 | + } |
---|
10453 | 10456 | #if defined(WLDWDS) && defined(WL_EXT_IAPSTA) |
---|
10454 | 10457 | if (ifp->dwds) { |
---|
10455 | 10458 | wl_ext_iapsta_dettach_dwds_netdev(ifp->net, ifidx, ifp->bssidx); |
---|
.. | .. |
---|
11649 | 11652 | dhd->wakelock_counter = 0; |
---|
11650 | 11653 | /* wakelocks prevent a system from going into a low power state */ |
---|
11651 | 11654 | #ifdef CONFIG_HAS_WAKELOCK |
---|
11652 | | - // terence 20161023: can not destroy wl_wifi when wlan down, it will happen null pointer in dhd_ioctl_entry |
---|
11653 | | - dhd_wake_lock_init(&dhd->wl_wifi, WAKE_LOCK_SUSPEND, "wlan_wake"); |
---|
11654 | | - dhd_wake_lock_init(&dhd->wl_wdwake, WAKE_LOCK_SUSPEND, "wlan_wd_wake"); |
---|
| 11655 | + dhd_wake_lock_init(dhd->wl_wdwake, dhd_bus_to_dev(bus), "wlan_wd_wake"); |
---|
11655 | 11656 | #endif /* CONFIG_HAS_WAKELOCK */ |
---|
11656 | 11657 | |
---|
11657 | 11658 | #if defined(OEM_ANDROID) |
---|
.. | .. |
---|
11757 | 11758 | dhd_os_start_logging(&dhd->pub, BT_LOG_RING_NAME, 3, 0, 0, 0); |
---|
11758 | 11759 | #endif /* !OEM_ANDROID && BTLOG */ |
---|
11759 | 11760 | #ifdef DBG_PKT_MON |
---|
11760 | | - dhd->pub.dbg->pkt_mon_lock = osl_mutex_lock_init(dhd->pub.osh); |
---|
11761 | | - if (!dhd->pub.dbg->pkt_mon_lock) { |
---|
11762 | | - DHD_ERROR(("%s: pkt_mon_lock init failed !\n", __FUNCTION__)); |
---|
11763 | | - goto fail; |
---|
11764 | | - } |
---|
| 11761 | + dhd->pub.dbg->pkt_mon_lock = osl_spin_lock_init(dhd->pub.osh); |
---|
11765 | 11762 | #ifdef DBG_PKT_MON_INIT_DEFAULT |
---|
11766 | 11763 | dhd_os_dbg_attach_pkt_monitor(&dhd->pub); |
---|
11767 | 11764 | #endif /* DBG_PKT_MON_INIT_DEFAULT */ |
---|
.. | .. |
---|
12790 | 12787 | /* Enable L1SS of RC and EP */ |
---|
12791 | 12788 | dhd_bus_l1ss_enable_rc_ep(dhdp->bus, TRUE); |
---|
12792 | 12789 | #endif /* BT_OVER_PCIE */ |
---|
| 12790 | + |
---|
| 12791 | +#ifdef BCMPCIE |
---|
| 12792 | +#if defined(CUSTOMER_HW_ROCKCHIP) && defined(CUSTOMER_HW_ROCKCHIP_RK3588) |
---|
| 12793 | + if (IS_ENABLED(CONFIG_PCIEASPM_ROCKCHIP_WIFI_EXTENSION)) |
---|
| 12794 | + rk_dhd_bus_l1ss_enable_rc_ep(dhdp->bus, TRUE); |
---|
| 12795 | +#endif /* CUSTOMER_HW_ROCKCHIP && BCMPCIE */ |
---|
| 12796 | +#endif /* BCMPCIE */ |
---|
12793 | 12797 | |
---|
12794 | 12798 | #if defined(CONFIG_ARCH_EXYNOS) && defined(BCMPCIE) |
---|
12795 | 12799 | #if !defined(CONFIG_SOC_EXYNOS8890) && !defined(SUPPORT_EXYNOS7420) |
---|
.. | .. |
---|
17455 | 17459 | if (dhdp->dbg) { |
---|
17456 | 17460 | #ifdef DBG_PKT_MON |
---|
17457 | 17461 | dhd_os_dbg_detach_pkt_monitor(dhdp); |
---|
17458 | | - osl_mutex_lock_deinit(dhd->pub.osh, dhd->pub.dbg->pkt_mon_lock); |
---|
| 17462 | + osl_spin_lock_deinit(dhd->pub.osh, dhd->pub.dbg->pkt_mon_lock); |
---|
17459 | 17463 | #endif /* DBG_PKT_MON */ |
---|
17460 | 17464 | } |
---|
17461 | 17465 | #endif /* DEBUGABILITY */ |
---|
.. | .. |
---|
17541 | 17545 | DHD_TRACE(("wd wakelock count:%d\n", dhd->wakelock_wd_counter)); |
---|
17542 | 17546 | #ifdef CONFIG_HAS_WAKELOCK |
---|
17543 | 17547 | dhd->wakelock_wd_counter = 0; |
---|
17544 | | - dhd_wake_lock_unlock_destroy(&dhd->wl_wdwake); |
---|
17545 | | - // terence 20161023: can not destroy wl_wifi when wlan down, it will happen null pointer in dhd_ioctl_entry |
---|
17546 | | - dhd_wake_lock_unlock_destroy(&dhd->wl_wifi); |
---|
| 17548 | + dhd_wake_lock_destroy(dhd->wl_wdwake); |
---|
17547 | 17549 | #endif /* CONFIG_HAS_WAKELOCK */ |
---|
17548 | 17550 | if (dhd->dhd_state & DHD_ATTACH_STATE_WAKELOCKS_INIT) { |
---|
17549 | 17551 | DHD_OS_WAKE_LOCK_DESTROY(dhd); |
---|
.. | .. |
---|
18423 | 18425 | /* convert to BCME_NOTFOUND error for error handling */ |
---|
18424 | 18426 | ret = BCME_NOTFOUND; |
---|
18425 | 18427 | } else |
---|
18426 | | - DHD_ERROR(("%s: %s (%zu bytes) open success\n", __FUNCTION__, file_path, (*fw)->size)); |
---|
| 18428 | + DHD_ERROR(("%s: %s (%zu bytes) open success\n", __FUNCTION__, file_path, (*fw)->size)); |
---|
18427 | 18429 | |
---|
18428 | 18430 | return ret; |
---|
18429 | 18431 | } |
---|
.. | .. |
---|
21151 | 21153 | ret = dhd->wakelock_rx_timeout_enable > dhd->wakelock_ctrl_timeout_enable ? |
---|
21152 | 21154 | dhd->wakelock_rx_timeout_enable : dhd->wakelock_ctrl_timeout_enable; |
---|
21153 | 21155 | #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 |
---|
21154 | 21160 | if (dhd->wakelock_rx_timeout_enable) |
---|
21155 | | - dhd_wake_lock_timeout(&dhd->wl_rxwake, |
---|
| 21161 | + dhd_wake_lock_timeout(dhd->wl_rxwake, |
---|
21156 | 21162 | msecs_to_jiffies(dhd->wakelock_rx_timeout_enable)); |
---|
21157 | 21163 | if (dhd->wakelock_ctrl_timeout_enable) |
---|
21158 | | - dhd_wake_lock_timeout(&dhd->wl_ctrlwake, |
---|
| 21164 | + dhd_wake_lock_timeout(dhd->wl_ctrlwake, |
---|
21159 | 21165 | msecs_to_jiffies(dhd->wakelock_ctrl_timeout_enable)); |
---|
21160 | 21166 | #endif |
---|
21161 | 21167 | dhd->wakelock_rx_timeout_enable = 0; |
---|
.. | .. |
---|
21212 | 21218 | DHD_WAKE_SPIN_LOCK(&dhd->wakelock_spinlock, flags); |
---|
21213 | 21219 | dhd->wakelock_ctrl_timeout_enable = 0; |
---|
21214 | 21220 | #ifdef CONFIG_HAS_WAKELOCK |
---|
21215 | | - if (dhd_wake_lock_active(&dhd->wl_ctrlwake)) |
---|
21216 | | - dhd_wake_unlock(&dhd->wl_ctrlwake); |
---|
| 21221 | + if (dhd_wake_lock_active(dhd->wl_ctrlwake)) |
---|
| 21222 | + dhd_wake_unlock(dhd->wl_ctrlwake); |
---|
21217 | 21223 | #endif |
---|
21218 | 21224 | DHD_WAKE_SPIN_UNLOCK(&dhd->wakelock_spinlock, flags); |
---|
21219 | 21225 | } |
---|
.. | .. |
---|
21447 | 21453 | DHD_WAKE_SPIN_LOCK(&dhd->wakelock_spinlock, flags); |
---|
21448 | 21454 | if (dhd->wakelock_counter == 0 && !dhd->waive_wakelock) { |
---|
21449 | 21455 | #ifdef CONFIG_HAS_WAKELOCK |
---|
21450 | | - dhd_wake_lock(&dhd->wl_wifi); |
---|
| 21456 | + dhd_wake_lock(dhd->wl_wifi); |
---|
21451 | 21457 | #elif defined(BCMSDIO) |
---|
21452 | 21458 | dhd_bus_dev_pm_stay_awake(pub); |
---|
21453 | 21459 | #endif |
---|
.. | .. |
---|
21471 | 21477 | |
---|
21472 | 21478 | if (dhd) { |
---|
21473 | 21479 | #ifdef CONFIG_HAS_WAKELOCK |
---|
21474 | | - dhd_wake_lock(&dhd->wl_evtwake); |
---|
| 21480 | + dhd_wake_lock(dhd->wl_evtwake); |
---|
21475 | 21481 | #elif defined(BCMSDIO) |
---|
21476 | 21482 | dhd_bus_dev_pm_stay_awake(pub); |
---|
21477 | 21483 | #endif |
---|
.. | .. |
---|
21485 | 21491 | dhd_info_t *dhd = (dhd_info_t *)(pub->info); |
---|
21486 | 21492 | |
---|
21487 | 21493 | if (dhd) { |
---|
21488 | | - dhd_wake_lock_timeout(&dhd->wl_pmwake, msecs_to_jiffies(val)); |
---|
| 21494 | + dhd_wake_lock_timeout(dhd->wl_pmwake, msecs_to_jiffies(val)); |
---|
21489 | 21495 | } |
---|
21490 | 21496 | #endif /* CONFIG_HAS_WAKE_LOCK */ |
---|
21491 | 21497 | } |
---|
.. | .. |
---|
21497 | 21503 | dhd_info_t *dhd = (dhd_info_t *)(pub->info); |
---|
21498 | 21504 | |
---|
21499 | 21505 | if (dhd) { |
---|
21500 | | - dhd_wake_lock_timeout(&dhd->wl_txflwake, msecs_to_jiffies(val)); |
---|
| 21506 | + dhd_wake_lock_timeout(dhd->wl_txflwake, msecs_to_jiffies(val)); |
---|
21501 | 21507 | } |
---|
21502 | 21508 | #endif /* CONFIG_HAS_WAKE_LOCK */ |
---|
21503 | 21509 | } |
---|
.. | .. |
---|
21509 | 21515 | dhd_info_t *dhd = (dhd_info_t *)(pub->info); |
---|
21510 | 21516 | |
---|
21511 | 21517 | if (dhd) { |
---|
21512 | | - dhd_wake_lock_timeout(&dhd->wl_nanwake, msecs_to_jiffies(val)); |
---|
| 21518 | + dhd_wake_lock_timeout(dhd->wl_nanwake, msecs_to_jiffies(val)); |
---|
21513 | 21519 | } |
---|
21514 | 21520 | #endif /* CONFIG_HAS_WAKE_LOCK */ |
---|
21515 | 21521 | } |
---|
.. | .. |
---|
21543 | 21549 | #endif /* DHD_TRACE_WAKE_LOCK */ |
---|
21544 | 21550 | if (dhd->wakelock_counter == 0 && !dhd->waive_wakelock) { |
---|
21545 | 21551 | #ifdef CONFIG_HAS_WAKELOCK |
---|
21546 | | - dhd_wake_unlock(&dhd->wl_wifi); |
---|
| 21552 | + dhd_wake_unlock(dhd->wl_wifi); |
---|
21547 | 21553 | #elif defined(BCMSDIO) |
---|
21548 | 21554 | dhd_bus_dev_pm_relax(pub); |
---|
21549 | 21555 | #endif |
---|
.. | .. |
---|
21561 | 21567 | |
---|
21562 | 21568 | if (dhd) { |
---|
21563 | 21569 | #ifdef CONFIG_HAS_WAKELOCK |
---|
21564 | | - dhd_wake_unlock(&dhd->wl_evtwake); |
---|
| 21570 | + dhd_wake_unlock(dhd->wl_evtwake); |
---|
21565 | 21571 | #elif defined(BCMSDIO) |
---|
21566 | 21572 | dhd_bus_dev_pm_relax(pub); |
---|
21567 | 21573 | #endif |
---|
.. | .. |
---|
21575 | 21581 | |
---|
21576 | 21582 | if (dhd) { |
---|
21577 | 21583 | /* if wl_pmwake is active, unlock it */ |
---|
21578 | | - if (dhd_wake_lock_active(&dhd->wl_pmwake)) { |
---|
21579 | | - dhd_wake_unlock(&dhd->wl_pmwake); |
---|
| 21584 | + if (dhd_wake_lock_active(dhd->wl_pmwake)) { |
---|
| 21585 | + dhd_wake_unlock(dhd->wl_pmwake); |
---|
21580 | 21586 | } |
---|
21581 | 21587 | } |
---|
21582 | 21588 | #endif /* CONFIG_HAS_WAKELOCK */ |
---|
.. | .. |
---|
21589 | 21595 | |
---|
21590 | 21596 | if (dhd) { |
---|
21591 | 21597 | /* if wl_txflwake is active, unlock it */ |
---|
21592 | | - if (dhd_wake_lock_active(&dhd->wl_txflwake)) { |
---|
21593 | | - dhd_wake_unlock(&dhd->wl_txflwake); |
---|
| 21598 | + if (dhd_wake_lock_active(dhd->wl_txflwake)) { |
---|
| 21599 | + dhd_wake_unlock(dhd->wl_txflwake); |
---|
21594 | 21600 | } |
---|
21595 | 21601 | } |
---|
21596 | 21602 | #endif /* CONFIG_HAS_WAKELOCK */ |
---|
.. | .. |
---|
21603 | 21609 | |
---|
21604 | 21610 | if (dhd) { |
---|
21605 | 21611 | /* if wl_nanwake is active, unlock it */ |
---|
21606 | | - if (dhd_wake_lock_active(&dhd->wl_nanwake)) { |
---|
21607 | | - dhd_wake_unlock(&dhd->wl_nanwake); |
---|
| 21612 | + if (dhd_wake_lock_active(dhd->wl_nanwake)) { |
---|
| 21613 | + dhd_wake_unlock(dhd->wl_nanwake); |
---|
21608 | 21614 | } |
---|
21609 | 21615 | } |
---|
21610 | 21616 | #endif /* CONFIG_HAS_WAKELOCK */ |
---|
.. | .. |
---|
21629 | 21635 | |
---|
21630 | 21636 | #ifdef CONFIG_HAS_WAKELOCK |
---|
21631 | 21637 | c = dhd->wakelock_counter; |
---|
21632 | | - l1 = dhd_wake_lock_active(&dhd->wl_wifi); |
---|
21633 | | - l2 = dhd_wake_lock_active(&dhd->wl_wdwake); |
---|
| 21638 | + l1 = dhd_wake_lock_active(dhd->wl_wifi); |
---|
| 21639 | + l2 = dhd_wake_lock_active(dhd->wl_wdwake); |
---|
21634 | 21640 | lock_active = (l1 || l2); |
---|
21635 | 21641 | /* Indicate to the SD Host to avoid going to suspend if internal locks are up */ |
---|
21636 | 21642 | if (lock_active) { |
---|
.. | .. |
---|
21673 | 21679 | |
---|
21674 | 21680 | #ifdef CONFIG_HAS_WAKELOCK |
---|
21675 | 21681 | c = dhd->wakelock_counter; |
---|
21676 | | - l1 = dhd_wake_lock_active(&dhd->wl_wifi); |
---|
21677 | | - l2 = dhd_wake_lock_active(&dhd->wl_wdwake); |
---|
21678 | | - l3 = dhd_wake_lock_active(&dhd->wl_rxwake); |
---|
21679 | | - l4 = dhd_wake_lock_active(&dhd->wl_ctrlwake); |
---|
21680 | | - l7 = dhd_wake_lock_active(&dhd->wl_evtwake); |
---|
| 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); |
---|
21681 | 21687 | #ifdef BCMPCIE_OOB_HOST_WAKE |
---|
21682 | | - l5 = dhd_wake_lock_active(&dhd->wl_intrwake); |
---|
| 21688 | + l5 = dhd_wake_lock_active(dhd->wl_intrwake); |
---|
21683 | 21689 | #endif /* BCMPCIE_OOB_HOST_WAKE */ |
---|
21684 | 21690 | #ifdef DHD_USE_SCAN_WAKELOCK |
---|
21685 | | - l6 = dhd_wake_lock_active(&dhd->wl_scanwake); |
---|
| 21691 | + l6 = dhd_wake_lock_active(dhd->wl_scanwake); |
---|
21686 | 21692 | #endif /* DHD_USE_SCAN_WAKELOCK */ |
---|
21687 | | - l8 = dhd_wake_lock_active(&dhd->wl_pmwake); |
---|
21688 | | - l9 = dhd_wake_lock_active(&dhd->wl_txflwake); |
---|
21689 | | - l10 = dhd_wake_lock_active(&dhd->wl_nanwake); |
---|
| 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); |
---|
21690 | 21696 | lock_active = (l1 || l2 || l3 || l4 || l5 || l6 || l7 || l8 || l9 || l10); |
---|
21691 | 21697 | |
---|
21692 | 21698 | /* Indicate to the Host to avoid going to suspend if internal locks are up */ |
---|
.. | .. |
---|
21726 | 21732 | if (dhd->wakelock_wd_counter == 0 && !dhd->waive_wakelock) { |
---|
21727 | 21733 | #ifdef CONFIG_HAS_WAKELOCK |
---|
21728 | 21734 | /* if wakelock_wd_counter was never used : lock it at once */ |
---|
21729 | | - dhd_wake_lock(&dhd->wl_wdwake); |
---|
| 21735 | + dhd_wake_lock(dhd->wl_wdwake); |
---|
21730 | 21736 | #endif |
---|
21731 | 21737 | } |
---|
21732 | 21738 | dhd->wakelock_wd_counter++; |
---|
.. | .. |
---|
21748 | 21754 | dhd->wakelock_wd_counter = 0; |
---|
21749 | 21755 | if (!dhd->waive_wakelock) { |
---|
21750 | 21756 | #ifdef CONFIG_HAS_WAKELOCK |
---|
21751 | | - dhd_wake_unlock(&dhd->wl_wdwake); |
---|
| 21757 | + dhd_wake_unlock(dhd->wl_wdwake); |
---|
21752 | 21758 | #endif |
---|
21753 | 21759 | } |
---|
21754 | 21760 | } |
---|
.. | .. |
---|
21765 | 21771 | dhd_info_t *dhd = (dhd_info_t *)(pub->info); |
---|
21766 | 21772 | |
---|
21767 | 21773 | if (dhd) { |
---|
21768 | | - dhd_wake_lock_timeout(&dhd->wl_intrwake, msecs_to_jiffies(val)); |
---|
| 21774 | + dhd_wake_lock_timeout(dhd->wl_intrwake, msecs_to_jiffies(val)); |
---|
21769 | 21775 | } |
---|
21770 | 21776 | #endif /* CONFIG_HAS_WAKELOCK */ |
---|
21771 | 21777 | } |
---|
.. | .. |
---|
21778 | 21784 | |
---|
21779 | 21785 | if (dhd) { |
---|
21780 | 21786 | /* if wl_intrwake is active, unlock it */ |
---|
21781 | | - if (dhd_wake_lock_active(&dhd->wl_intrwake)) { |
---|
21782 | | - dhd_wake_unlock(&dhd->wl_intrwake); |
---|
| 21787 | + if (dhd_wake_lock_active(dhd->wl_intrwake)) { |
---|
| 21788 | + dhd_wake_unlock(dhd->wl_intrwake); |
---|
21783 | 21789 | } |
---|
21784 | 21790 | } |
---|
21785 | 21791 | #endif /* CONFIG_HAS_WAKELOCK */ |
---|
.. | .. |
---|
21794 | 21800 | dhd_info_t *dhd = (dhd_info_t *)(pub->info); |
---|
21795 | 21801 | |
---|
21796 | 21802 | if (dhd) { |
---|
21797 | | - dhd_wake_lock_timeout(&dhd->wl_scanwake, msecs_to_jiffies(val)); |
---|
| 21803 | + dhd_wake_lock_timeout(dhd->wl_scanwake, msecs_to_jiffies(val)); |
---|
21798 | 21804 | } |
---|
21799 | 21805 | #endif /* CONFIG_HAS_WAKELOCK */ |
---|
21800 | 21806 | } |
---|
.. | .. |
---|
21807 | 21813 | |
---|
21808 | 21814 | if (dhd) { |
---|
21809 | 21815 | /* if wl_scanwake is active, unlock it */ |
---|
21810 | | - if (dhd_wake_lock_active(&dhd->wl_scanwake)) { |
---|
21811 | | - dhd_wake_unlock(&dhd->wl_scanwake); |
---|
| 21816 | + if (dhd_wake_lock_active(dhd->wl_scanwake)) { |
---|
| 21817 | + dhd_wake_unlock(dhd->wl_scanwake); |
---|
21812 | 21818 | } |
---|
21813 | 21819 | } |
---|
21814 | 21820 | #endif /* CONFIG_HAS_WAKELOCK */ |
---|
.. | .. |
---|
21874 | 21880 | |
---|
21875 | 21881 | if (dhd->wakelock_before_waive == 0 && dhd->wakelock_counter > 0) { |
---|
21876 | 21882 | #ifdef CONFIG_HAS_WAKELOCK |
---|
21877 | | - dhd_wake_lock(&dhd->wl_wifi); |
---|
| 21883 | + dhd_wake_lock(dhd->wl_wifi); |
---|
21878 | 21884 | #elif defined(BCMSDIO) |
---|
21879 | 21885 | dhd_bus_dev_pm_stay_awake(&dhd->pub); |
---|
21880 | 21886 | #endif |
---|
21881 | 21887 | } else if (dhd->wakelock_before_waive > 0 && dhd->wakelock_counter == 0) { |
---|
21882 | 21888 | #ifdef CONFIG_HAS_WAKELOCK |
---|
21883 | | - dhd_wake_unlock(&dhd->wl_wifi); |
---|
| 21889 | + dhd_wake_unlock(dhd->wl_wifi); |
---|
21884 | 21890 | #elif defined(BCMSDIO) |
---|
21885 | 21891 | dhd_bus_dev_pm_relax(&dhd->pub); |
---|
21886 | 21892 | #endif |
---|
.. | .. |
---|
21900 | 21906 | dhd->wakelock_ctrl_timeout_enable = 0; |
---|
21901 | 21907 | /* wakelocks prevent a system from going into a low power state */ |
---|
21902 | 21908 | #ifdef CONFIG_HAS_WAKELOCK |
---|
21903 | | - // terence 20161023: can not destroy wl_wifi when wlan down, it will happen null pointer in dhd_ioctl_entry |
---|
21904 | | - dhd_wake_lock_init(&dhd->wl_rxwake, WAKE_LOCK_SUSPEND, "wlan_rx_wake"); |
---|
21905 | | - dhd_wake_lock_init(&dhd->wl_ctrlwake, WAKE_LOCK_SUSPEND, "wlan_ctrl_wake"); |
---|
21906 | | - dhd_wake_lock_init(&dhd->wl_evtwake, WAKE_LOCK_SUSPEND, "wlan_evt_wake"); |
---|
21907 | | - dhd_wake_lock_init(&dhd->wl_pmwake, WAKE_LOCK_SUSPEND, "wlan_pm_wake"); |
---|
21908 | | - dhd_wake_lock_init(&dhd->wl_txflwake, WAKE_LOCK_SUSPEND, "wlan_txfl_wake"); |
---|
| 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"); |
---|
21909 | 21915 | #ifdef BCMPCIE_OOB_HOST_WAKE |
---|
21910 | | - dhd_wake_lock_init(&dhd->wl_intrwake, WAKE_LOCK_SUSPEND, "wlan_oob_irq_wake"); |
---|
| 21916 | + dhd_wake_lock_init(dhd->wl_intrwake, dhd_bus_to_dev(dhd->pub.bus), "wlan_oob_irq_wake"); |
---|
21911 | 21917 | #endif /* BCMPCIE_OOB_HOST_WAKE */ |
---|
21912 | 21918 | #ifdef DHD_USE_SCAN_WAKELOCK |
---|
21913 | | - dhd_wake_lock_init(&dhd->wl_scanwake, WAKE_LOCK_SUSPEND, "wlan_scan_wake"); |
---|
| 21919 | + dhd_wake_lock_init(dhd->wl_scanwake, dhd_bus_to_dev(dhd->pub.bus), "wlan_scan_wake"); |
---|
21914 | 21920 | #endif /* DHD_USE_SCAN_WAKELOCK */ |
---|
21915 | | - dhd_wake_lock_init(&dhd->wl_nanwake, WAKE_LOCK_SUSPEND, "wlan_nan_wake"); |
---|
| 21921 | + dhd_wake_lock_init(dhd->wl_nanwake, dhd_bus_to_dev(dhd->pub.bus), "wlan_nan_wake"); |
---|
21916 | 21922 | #endif /* CONFIG_HAS_WAKELOCK */ |
---|
21917 | 21923 | #ifdef DHD_TRACE_WAKE_LOCK |
---|
21918 | 21924 | dhd_wk_lock_trace_init(dhd); |
---|
.. | .. |
---|
21926 | 21932 | dhd->wakelock_counter = 0; |
---|
21927 | 21933 | dhd->wakelock_rx_timeout_enable = 0; |
---|
21928 | 21934 | dhd->wakelock_ctrl_timeout_enable = 0; |
---|
21929 | | - // terence 20161023: can not destroy wl_wifi when wlan down, it will happen null pointer in dhd_ioctl_entry |
---|
21930 | | - dhd_wake_lock_unlock_destroy(&dhd->wl_rxwake); |
---|
21931 | | - dhd_wake_lock_unlock_destroy(&dhd->wl_ctrlwake); |
---|
21932 | | - dhd_wake_lock_unlock_destroy(&dhd->wl_evtwake); |
---|
21933 | | - dhd_wake_lock_unlock_destroy(&dhd->wl_pmwake); |
---|
21934 | | - dhd_wake_lock_unlock_destroy(&dhd->wl_txflwake); |
---|
| 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); |
---|
21935 | 21941 | #ifdef BCMPCIE_OOB_HOST_WAKE |
---|
21936 | | - dhd_wake_lock_unlock_destroy(&dhd->wl_intrwake); |
---|
| 21942 | + dhd_wake_lock_destroy(dhd->wl_intrwake); |
---|
21937 | 21943 | #endif /* BCMPCIE_OOB_HOST_WAKE */ |
---|
21938 | 21944 | #ifdef DHD_USE_SCAN_WAKELOCK |
---|
21939 | | - dhd_wake_lock_unlock_destroy(&dhd->wl_scanwake); |
---|
| 21945 | + dhd_wake_lock_destroy(dhd->wl_scanwake); |
---|
21940 | 21946 | #endif /* DHD_USE_SCAN_WAKELOCK */ |
---|
21941 | | - dhd_wake_lock_unlock_destroy(&dhd->wl_nanwake); |
---|
| 21947 | + dhd_wake_lock_destroy(dhd->wl_nanwake); |
---|
21942 | 21948 | #ifdef DHD_TRACE_WAKE_LOCK |
---|
21943 | 21949 | dhd_wk_lock_trace_deinit(dhd); |
---|
21944 | 21950 | #endif /* DHD_TRACE_WAKE_LOCK */ |
---|
.. | .. |
---|
27166 | 27172 | dhd_get_random_bytes(uint8 *buf, uint len) |
---|
27167 | 27173 | { |
---|
27168 | 27174 | #ifdef BCMPCIE |
---|
27169 | | -#if (LINUX_VERSION_CODE >= KERNEL_VERSION(4, 19, 0)) |
---|
27170 | | - int rndlen = get_random_bytes_arch(buf, len); |
---|
27171 | | - if (rndlen != len) { |
---|
27172 | | - bzero(buf, len); |
---|
27173 | | - get_random_bytes(buf, len); |
---|
27174 | | - } |
---|
27175 | | -#else |
---|
27176 | | - get_random_bytes_arch(buf, len); |
---|
27177 | | -#endif |
---|
| 27175 | + get_random_bytes(buf, len); |
---|
27178 | 27176 | #endif /* BCMPCIE */ |
---|
27179 | 27177 | return BCME_OK; |
---|
27180 | 27178 | } |
---|