Loading drivers/net/wireless/ath/ath10k/core.c +4 −2 Original line number Original line Diff line number Diff line Loading @@ -680,8 +680,8 @@ static void ath10k_core_restart(struct work_struct *work) switch (ar->state) { switch (ar->state) { case ATH10K_STATE_ON: case ATH10K_STATE_ON: ath10k_halt(ar); ar->state = ATH10K_STATE_RESTARTING; ar->state = ATH10K_STATE_RESTARTING; ath10k_halt(ar); ieee80211_restart_hw(ar->hw); ieee80211_restart_hw(ar->hw); break; break; case ATH10K_STATE_OFF: case ATH10K_STATE_OFF: Loading Loading @@ -908,7 +908,9 @@ void ath10k_core_stop(struct ath10k *ar) lockdep_assert_held(&ar->conf_mutex); lockdep_assert_held(&ar->conf_mutex); /* try to suspend target */ /* try to suspend target */ if (ar->state != ATH10K_STATE_RESTARTING) ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND_AND_DISABLE_INTR); ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND_AND_DISABLE_INTR); ath10k_debug_stop(ar); ath10k_debug_stop(ar); ath10k_htc_stop(&ar->htc); ath10k_htc_stop(&ar->htc); ath10k_htt_detach(&ar->htt); ath10k_htt_detach(&ar->htt); Loading drivers/net/wireless/ath/ath10k/mac.c +16 −0 Original line number Original line Diff line number Diff line Loading @@ -2291,6 +2291,8 @@ static void ath10k_tx(struct ieee80211_hw *hw, */ */ void ath10k_halt(struct ath10k *ar) void ath10k_halt(struct ath10k *ar) { { struct ath10k_vif *arvif; lockdep_assert_held(&ar->conf_mutex); lockdep_assert_held(&ar->conf_mutex); if (ath10k_monitor_is_enabled(ar)) { if (ath10k_monitor_is_enabled(ar)) { Loading @@ -2313,6 +2315,17 @@ void ath10k_halt(struct ath10k *ar) ar->scan.in_progress = false; ar->scan.in_progress = false; ieee80211_scan_completed(ar->hw, true); ieee80211_scan_completed(ar->hw, true); } } list_for_each_entry(arvif, &ar->arvifs, list) { if (!arvif->beacon) continue; dma_unmap_single(arvif->ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr, arvif->beacon->len, DMA_TO_DEVICE); dev_kfree_skb_any(arvif->beacon); arvif->beacon = NULL; } spin_unlock_bh(&ar->data_lock); spin_unlock_bh(&ar->data_lock); } } Loading Loading @@ -2771,6 +2784,9 @@ static void ath10k_remove_interface(struct ieee80211_hw *hw, spin_lock_bh(&ar->data_lock); spin_lock_bh(&ar->data_lock); if (arvif->beacon) { if (arvif->beacon) { dma_unmap_single(arvif->ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr, arvif->beacon->len, DMA_TO_DEVICE); dev_kfree_skb_any(arvif->beacon); dev_kfree_skb_any(arvif->beacon); arvif->beacon = NULL; arvif->beacon = NULL; } } Loading drivers/net/wireless/ath/ath10k/pci.c +17 −1 Original line number Original line Diff line number Diff line Loading @@ -2452,6 +2452,10 @@ static int ath10k_pci_wait_for_target_init(struct ath10k *ar) if (val == 0xffffffff) if (val == 0xffffffff) continue; continue; /* the device has crashed so don't bother trying anymore */ if (val & FW_IND_EVENT_PENDING) break; if (val & FW_IND_INITIALIZED) if (val & FW_IND_INITIALIZED) break; break; Loading @@ -2464,7 +2468,19 @@ static int ath10k_pci_wait_for_target_init(struct ath10k *ar) mdelay(10); mdelay(10); } while (time_before(jiffies, timeout)); } while (time_before(jiffies, timeout)); if (val == 0xffffffff || !(val & FW_IND_INITIALIZED)) { if (val == 0xffffffff) { ath10k_err("failed to read device register, device is gone\n"); ret = -EIO; goto out; } if (val & FW_IND_EVENT_PENDING) { ath10k_warn("device has crashed during init\n"); ret = -ECOMM; goto out; } if (!(val & FW_IND_INITIALIZED)) { ath10k_err("failed to receive initialized event from target: %08x\n", ath10k_err("failed to receive initialized event from target: %08x\n", val); val); ret = -ETIMEDOUT; ret = -ETIMEDOUT; Loading drivers/net/wireless/ath/ath10k/wmi.c +2 −0 Original line number Original line Diff line number Diff line Loading @@ -1431,6 +1431,7 @@ static void ath10k_wmi_event_host_swba(struct ath10k *ar, struct sk_buff *skb) ATH10K_SKB_CB(arvif->beacon)->paddr, ATH10K_SKB_CB(arvif->beacon)->paddr, arvif->beacon->len, DMA_TO_DEVICE); arvif->beacon->len, DMA_TO_DEVICE); dev_kfree_skb_any(arvif->beacon); dev_kfree_skb_any(arvif->beacon); arvif->beacon = NULL; } } ATH10K_SKB_CB(bcn)->paddr = dma_map_single(arvif->ar->dev, ATH10K_SKB_CB(bcn)->paddr = dma_map_single(arvif->ar->dev, Loading @@ -1440,6 +1441,7 @@ static void ath10k_wmi_event_host_swba(struct ath10k *ar, struct sk_buff *skb) ATH10K_SKB_CB(bcn)->paddr); ATH10K_SKB_CB(bcn)->paddr); if (ret) { if (ret) { ath10k_warn("failed to map beacon: %d\n", ret); ath10k_warn("failed to map beacon: %d\n", ret); dev_kfree_skb_any(bcn); goto skip; goto skip; } } Loading Loading
drivers/net/wireless/ath/ath10k/core.c +4 −2 Original line number Original line Diff line number Diff line Loading @@ -680,8 +680,8 @@ static void ath10k_core_restart(struct work_struct *work) switch (ar->state) { switch (ar->state) { case ATH10K_STATE_ON: case ATH10K_STATE_ON: ath10k_halt(ar); ar->state = ATH10K_STATE_RESTARTING; ar->state = ATH10K_STATE_RESTARTING; ath10k_halt(ar); ieee80211_restart_hw(ar->hw); ieee80211_restart_hw(ar->hw); break; break; case ATH10K_STATE_OFF: case ATH10K_STATE_OFF: Loading Loading @@ -908,7 +908,9 @@ void ath10k_core_stop(struct ath10k *ar) lockdep_assert_held(&ar->conf_mutex); lockdep_assert_held(&ar->conf_mutex); /* try to suspend target */ /* try to suspend target */ if (ar->state != ATH10K_STATE_RESTARTING) ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND_AND_DISABLE_INTR); ath10k_wait_for_suspend(ar, WMI_PDEV_SUSPEND_AND_DISABLE_INTR); ath10k_debug_stop(ar); ath10k_debug_stop(ar); ath10k_htc_stop(&ar->htc); ath10k_htc_stop(&ar->htc); ath10k_htt_detach(&ar->htt); ath10k_htt_detach(&ar->htt); Loading
drivers/net/wireless/ath/ath10k/mac.c +16 −0 Original line number Original line Diff line number Diff line Loading @@ -2291,6 +2291,8 @@ static void ath10k_tx(struct ieee80211_hw *hw, */ */ void ath10k_halt(struct ath10k *ar) void ath10k_halt(struct ath10k *ar) { { struct ath10k_vif *arvif; lockdep_assert_held(&ar->conf_mutex); lockdep_assert_held(&ar->conf_mutex); if (ath10k_monitor_is_enabled(ar)) { if (ath10k_monitor_is_enabled(ar)) { Loading @@ -2313,6 +2315,17 @@ void ath10k_halt(struct ath10k *ar) ar->scan.in_progress = false; ar->scan.in_progress = false; ieee80211_scan_completed(ar->hw, true); ieee80211_scan_completed(ar->hw, true); } } list_for_each_entry(arvif, &ar->arvifs, list) { if (!arvif->beacon) continue; dma_unmap_single(arvif->ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr, arvif->beacon->len, DMA_TO_DEVICE); dev_kfree_skb_any(arvif->beacon); arvif->beacon = NULL; } spin_unlock_bh(&ar->data_lock); spin_unlock_bh(&ar->data_lock); } } Loading Loading @@ -2771,6 +2784,9 @@ static void ath10k_remove_interface(struct ieee80211_hw *hw, spin_lock_bh(&ar->data_lock); spin_lock_bh(&ar->data_lock); if (arvif->beacon) { if (arvif->beacon) { dma_unmap_single(arvif->ar->dev, ATH10K_SKB_CB(arvif->beacon)->paddr, arvif->beacon->len, DMA_TO_DEVICE); dev_kfree_skb_any(arvif->beacon); dev_kfree_skb_any(arvif->beacon); arvif->beacon = NULL; arvif->beacon = NULL; } } Loading
drivers/net/wireless/ath/ath10k/pci.c +17 −1 Original line number Original line Diff line number Diff line Loading @@ -2452,6 +2452,10 @@ static int ath10k_pci_wait_for_target_init(struct ath10k *ar) if (val == 0xffffffff) if (val == 0xffffffff) continue; continue; /* the device has crashed so don't bother trying anymore */ if (val & FW_IND_EVENT_PENDING) break; if (val & FW_IND_INITIALIZED) if (val & FW_IND_INITIALIZED) break; break; Loading @@ -2464,7 +2468,19 @@ static int ath10k_pci_wait_for_target_init(struct ath10k *ar) mdelay(10); mdelay(10); } while (time_before(jiffies, timeout)); } while (time_before(jiffies, timeout)); if (val == 0xffffffff || !(val & FW_IND_INITIALIZED)) { if (val == 0xffffffff) { ath10k_err("failed to read device register, device is gone\n"); ret = -EIO; goto out; } if (val & FW_IND_EVENT_PENDING) { ath10k_warn("device has crashed during init\n"); ret = -ECOMM; goto out; } if (!(val & FW_IND_INITIALIZED)) { ath10k_err("failed to receive initialized event from target: %08x\n", ath10k_err("failed to receive initialized event from target: %08x\n", val); val); ret = -ETIMEDOUT; ret = -ETIMEDOUT; Loading
drivers/net/wireless/ath/ath10k/wmi.c +2 −0 Original line number Original line Diff line number Diff line Loading @@ -1431,6 +1431,7 @@ static void ath10k_wmi_event_host_swba(struct ath10k *ar, struct sk_buff *skb) ATH10K_SKB_CB(arvif->beacon)->paddr, ATH10K_SKB_CB(arvif->beacon)->paddr, arvif->beacon->len, DMA_TO_DEVICE); arvif->beacon->len, DMA_TO_DEVICE); dev_kfree_skb_any(arvif->beacon); dev_kfree_skb_any(arvif->beacon); arvif->beacon = NULL; } } ATH10K_SKB_CB(bcn)->paddr = dma_map_single(arvif->ar->dev, ATH10K_SKB_CB(bcn)->paddr = dma_map_single(arvif->ar->dev, Loading @@ -1440,6 +1441,7 @@ static void ath10k_wmi_event_host_swba(struct ath10k *ar, struct sk_buff *skb) ATH10K_SKB_CB(bcn)->paddr); ATH10K_SKB_CB(bcn)->paddr); if (ret) { if (ret) { ath10k_warn("failed to map beacon: %d\n", ret); ath10k_warn("failed to map beacon: %d\n", ret); dev_kfree_skb_any(bcn); goto skip; goto skip; } } Loading