diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h index ae936cd5567e..3db7777cf16c 100644 --- a/include/net/cfg80211.h +++ b/include/net/cfg80211.h @@ -6398,6 +6398,13 @@ void cfg80211_report_wowlan_wakeup(struct wireless_dev *wdev, */ void cfg80211_crit_proto_stopped(struct wireless_dev *wdev, gfp_t gfp); +/** + * cfg80211_ap_stopped - notify userspace that AP mode stopped + * @netdev: network device + * @gfp: context flags + */ +void cfg80211_ap_stopped(struct net_device *netdev, gfp_t gfp); + /** * ieee80211_get_num_supported_channels - get number of channels device has * @wiphy: the wiphy diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c index dfde06b8d25d..fdcab3ceae2d 100644 --- a/net/wireless/nl80211.c +++ b/net/wireless/nl80211.c @@ -16068,6 +16068,16 @@ void cfg80211_crit_proto_stopped(struct wireless_dev *wdev, gfp_t gfp) } EXPORT_SYMBOL(cfg80211_crit_proto_stopped); +void cfg80211_ap_stopped(struct net_device *netdev, gfp_t gfp) +{ + struct wireless_dev *wdev = netdev->ieee80211_ptr; + struct cfg80211_registered_device *rdev = wiphy_to_rdev(wdev->wiphy); + + nl80211_send_mlme_event(rdev, netdev, NULL, 0, + NL80211_CMD_STOP_AP, gfp, -1); +} +EXPORT_SYMBOL(cfg80211_ap_stopped); + void nl80211_send_ap_stopped(struct wireless_dev *wdev) { struct wiphy *wiphy = wdev->wiphy;