Loading drivers/net/wireless/ath/wil6210/cfg80211.c +9 −12 Original line number Diff line number Diff line Loading @@ -1408,19 +1408,16 @@ static void wil_cfg80211_stop_p2p_device(struct wiphy *wiphy, struct wireless_dev *wdev) { struct wil6210_priv *wil = wiphy_to_wil(wiphy); u8 started; struct wil_p2p_info *p2p = &wil->p2p; if (!p2p->p2p_dev_started) return; wil_dbg_misc(wil, "%s: entered\n", __func__); mutex_lock(&wil->mutex); started = wil_p2p_stop_discovery(wil); if (started && wil->scan_request) { cfg80211_scan_done(wil->scan_request, 1); wil->scan_request = NULL; wil->radio_wdev = wil->wdev; } wil_p2p_stop_radio_operations(wil); p2p->p2p_dev_started = 0; mutex_unlock(&wil->mutex); wil->p2p.p2p_dev_started = 0; } static struct cfg80211_ops wil_cfg80211_ops = { Loading Loading @@ -1539,11 +1536,11 @@ void wil_p2p_wdev_free(struct wil6210_priv *wil) mutex_lock(&wil->p2p_wdev_mutex); p2p_wdev = wil->p2p_wdev; if (p2p_wdev) { wil->p2p_wdev = NULL; wil->radio_wdev = wil_to_wdev(wil); mutex_unlock(&wil->p2p_wdev_mutex); if (p2p_wdev) { cfg80211_unregister_wdev(p2p_wdev); kfree(p2p_wdev); } mutex_unlock(&wil->p2p_wdev_mutex); } drivers/net/wireless/ath/wil6210/main.c +1 −1 Original line number Diff line number Diff line Loading @@ -1046,7 +1046,7 @@ int __wil_down(struct wil6210_priv *wil) } wil_enable_irq(wil); (void)wil_p2p_stop_discovery(wil); wil_p2p_stop_radio_operations(wil); if (wil->scan_request) { wil_dbg_misc(wil, "Abort scan_request 0x%p\n", Loading drivers/net/wireless/ath/wil6210/p2p.c +43 −0 Original line number Diff line number Diff line Loading @@ -259,3 +259,46 @@ void wil_p2p_search_expired(struct work_struct *work) mutex_unlock(&wil->p2p_wdev_mutex); } } void wil_p2p_stop_radio_operations(struct wil6210_priv *wil) { struct wil_p2p_info *p2p = &wil->p2p; lockdep_assert_held(&wil->mutex); mutex_lock(&wil->p2p_wdev_mutex); if (wil->radio_wdev != wil->p2p_wdev) goto out; if (!p2p->discovery_started) { /* Regular scan on the p2p device */ if (wil->scan_request && wil->scan_request->wdev == wil->p2p_wdev) { cfg80211_scan_done(wil->scan_request, 1); wil->scan_request = NULL; } goto out; } /* Search or listen on p2p device */ mutex_unlock(&wil->p2p_wdev_mutex); wil_p2p_stop_discovery(wil); mutex_lock(&wil->p2p_wdev_mutex); if (wil->scan_request) { /* search */ cfg80211_scan_done(wil->scan_request, 1); wil->scan_request = NULL; } else { /* listen */ cfg80211_remain_on_channel_expired(wil->radio_wdev, p2p->cookie, &p2p->listen_chan, GFP_KERNEL); } out: wil->radio_wdev = wil->wdev; mutex_unlock(&wil->p2p_wdev_mutex); } drivers/net/wireless/ath/wil6210/pcie_bus.c +4 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <linux/interrupt.h> #include <linux/suspend.h> #include "wil6210.h" #include <linux/rtnetlink.h> static bool use_msi = true; module_param(use_msi, bool, S_IRUGO); Loading Loading @@ -293,6 +294,9 @@ static void wil_pcie_remove(struct pci_dev *pdev) #endif /* CONFIG_PM */ wil6210_debugfs_remove(wil); rtnl_lock(); wil_p2p_wdev_free(wil); rtnl_unlock(); wil_if_remove(wil); wil_if_pcie_disable(wil); pci_iounmap(pdev, csr); Loading @@ -300,7 +304,6 @@ static void wil_pcie_remove(struct pci_dev *pdev) pci_disable_device(pdev); if (wil->platform_ops.uninit) wil->platform_ops.uninit(wil->platform_handle); wil_p2p_wdev_free(wil); wil_if_free(wil); } Loading drivers/net/wireless/ath/wil6210/wil6210.h +1 −0 Original line number Diff line number Diff line Loading @@ -837,6 +837,7 @@ u8 wil_p2p_stop_discovery(struct wil6210_priv *wil); int wil_p2p_cancel_listen(struct wil6210_priv *wil, u64 cookie); void wil_p2p_listen_expired(struct work_struct *work); void wil_p2p_search_expired(struct work_struct *work); void wil_p2p_stop_radio_operations(struct wil6210_priv *wil); /* WMI for P2P */ int wmi_p2p_cfg(struct wil6210_priv *wil, int channel, int bi); Loading Loading
drivers/net/wireless/ath/wil6210/cfg80211.c +9 −12 Original line number Diff line number Diff line Loading @@ -1408,19 +1408,16 @@ static void wil_cfg80211_stop_p2p_device(struct wiphy *wiphy, struct wireless_dev *wdev) { struct wil6210_priv *wil = wiphy_to_wil(wiphy); u8 started; struct wil_p2p_info *p2p = &wil->p2p; if (!p2p->p2p_dev_started) return; wil_dbg_misc(wil, "%s: entered\n", __func__); mutex_lock(&wil->mutex); started = wil_p2p_stop_discovery(wil); if (started && wil->scan_request) { cfg80211_scan_done(wil->scan_request, 1); wil->scan_request = NULL; wil->radio_wdev = wil->wdev; } wil_p2p_stop_radio_operations(wil); p2p->p2p_dev_started = 0; mutex_unlock(&wil->mutex); wil->p2p.p2p_dev_started = 0; } static struct cfg80211_ops wil_cfg80211_ops = { Loading Loading @@ -1539,11 +1536,11 @@ void wil_p2p_wdev_free(struct wil6210_priv *wil) mutex_lock(&wil->p2p_wdev_mutex); p2p_wdev = wil->p2p_wdev; if (p2p_wdev) { wil->p2p_wdev = NULL; wil->radio_wdev = wil_to_wdev(wil); mutex_unlock(&wil->p2p_wdev_mutex); if (p2p_wdev) { cfg80211_unregister_wdev(p2p_wdev); kfree(p2p_wdev); } mutex_unlock(&wil->p2p_wdev_mutex); }
drivers/net/wireless/ath/wil6210/main.c +1 −1 Original line number Diff line number Diff line Loading @@ -1046,7 +1046,7 @@ int __wil_down(struct wil6210_priv *wil) } wil_enable_irq(wil); (void)wil_p2p_stop_discovery(wil); wil_p2p_stop_radio_operations(wil); if (wil->scan_request) { wil_dbg_misc(wil, "Abort scan_request 0x%p\n", Loading
drivers/net/wireless/ath/wil6210/p2p.c +43 −0 Original line number Diff line number Diff line Loading @@ -259,3 +259,46 @@ void wil_p2p_search_expired(struct work_struct *work) mutex_unlock(&wil->p2p_wdev_mutex); } } void wil_p2p_stop_radio_operations(struct wil6210_priv *wil) { struct wil_p2p_info *p2p = &wil->p2p; lockdep_assert_held(&wil->mutex); mutex_lock(&wil->p2p_wdev_mutex); if (wil->radio_wdev != wil->p2p_wdev) goto out; if (!p2p->discovery_started) { /* Regular scan on the p2p device */ if (wil->scan_request && wil->scan_request->wdev == wil->p2p_wdev) { cfg80211_scan_done(wil->scan_request, 1); wil->scan_request = NULL; } goto out; } /* Search or listen on p2p device */ mutex_unlock(&wil->p2p_wdev_mutex); wil_p2p_stop_discovery(wil); mutex_lock(&wil->p2p_wdev_mutex); if (wil->scan_request) { /* search */ cfg80211_scan_done(wil->scan_request, 1); wil->scan_request = NULL; } else { /* listen */ cfg80211_remain_on_channel_expired(wil->radio_wdev, p2p->cookie, &p2p->listen_chan, GFP_KERNEL); } out: wil->radio_wdev = wil->wdev; mutex_unlock(&wil->p2p_wdev_mutex); }
drivers/net/wireless/ath/wil6210/pcie_bus.c +4 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <linux/interrupt.h> #include <linux/suspend.h> #include "wil6210.h" #include <linux/rtnetlink.h> static bool use_msi = true; module_param(use_msi, bool, S_IRUGO); Loading Loading @@ -293,6 +294,9 @@ static void wil_pcie_remove(struct pci_dev *pdev) #endif /* CONFIG_PM */ wil6210_debugfs_remove(wil); rtnl_lock(); wil_p2p_wdev_free(wil); rtnl_unlock(); wil_if_remove(wil); wil_if_pcie_disable(wil); pci_iounmap(pdev, csr); Loading @@ -300,7 +304,6 @@ static void wil_pcie_remove(struct pci_dev *pdev) pci_disable_device(pdev); if (wil->platform_ops.uninit) wil->platform_ops.uninit(wil->platform_handle); wil_p2p_wdev_free(wil); wil_if_free(wil); } Loading
drivers/net/wireless/ath/wil6210/wil6210.h +1 −0 Original line number Diff line number Diff line Loading @@ -837,6 +837,7 @@ u8 wil_p2p_stop_discovery(struct wil6210_priv *wil); int wil_p2p_cancel_listen(struct wil6210_priv *wil, u64 cookie); void wil_p2p_listen_expired(struct work_struct *work); void wil_p2p_search_expired(struct work_struct *work); void wil_p2p_stop_radio_operations(struct wil6210_priv *wil); /* WMI for P2P */ int wmi_p2p_cfg(struct wil6210_priv *wil, int channel, int bi); Loading