Loading include/uapi/linux/nl80211.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -5201,6 +5201,8 @@ enum nl80211_smps_mode { * non-operating channel is expired and no longer valid. New CAC must * non-operating channel is expired and no longer valid. New CAC must * be done on this channel before starting the operation. This is not * be done on this channel before starting the operation. This is not * applicable for ETSI dfs domain where pre-CAC is valid for ever. * applicable for ETSI dfs domain where pre-CAC is valid for ever. * @NL80211_RADAR_CAC_STARTED: Channel Availability Check has been started, * should be generated by HW if NL80211_EXT_FEATURE_DFS_OFFLOAD is enabled. */ */ enum nl80211_radar_event { enum nl80211_radar_event { NL80211_RADAR_DETECTED, NL80211_RADAR_DETECTED, Loading @@ -5208,6 +5210,7 @@ enum nl80211_radar_event { NL80211_RADAR_CAC_ABORTED, NL80211_RADAR_CAC_ABORTED, NL80211_RADAR_NOP_FINISHED, NL80211_RADAR_NOP_FINISHED, NL80211_RADAR_PRE_CAC_EXPIRED, NL80211_RADAR_PRE_CAC_EXPIRED, NL80211_RADAR_CAC_STARTED, }; }; /** /** Loading net/wireless/mlme.c +6 −3 Original line number Original line Diff line number Diff line Loading @@ -872,7 +872,7 @@ void cfg80211_cac_event(struct net_device *netdev, trace_cfg80211_cac_event(netdev, event); trace_cfg80211_cac_event(netdev, event); if (WARN_ON(!wdev->cac_started)) if (WARN_ON(!wdev->cac_started && event != NL80211_RADAR_CAC_STARTED)) return; return; if (WARN_ON(!wdev->chandef.chan)) if (WARN_ON(!wdev->chandef.chan)) Loading @@ -888,14 +888,17 @@ void cfg80211_cac_event(struct net_device *netdev, sizeof(struct cfg80211_chan_def)); sizeof(struct cfg80211_chan_def)); queue_work(cfg80211_wq, &rdev->propagate_cac_done_wk); queue_work(cfg80211_wq, &rdev->propagate_cac_done_wk); cfg80211_sched_dfs_chan_update(rdev); cfg80211_sched_dfs_chan_update(rdev); break; /* fall through */ case NL80211_RADAR_CAC_ABORTED: case NL80211_RADAR_CAC_ABORTED: wdev->cac_started = false; break; case NL80211_RADAR_CAC_STARTED: wdev->cac_started = true; break; break; default: default: WARN_ON(1); WARN_ON(1); return; return; } } wdev->cac_started = false; nl80211_radar_notify(rdev, chandef, event, netdev, gfp); nl80211_radar_notify(rdev, chandef, event, netdev, gfp); } } Loading Loading
include/uapi/linux/nl80211.h +3 −0 Original line number Original line Diff line number Diff line Loading @@ -5201,6 +5201,8 @@ enum nl80211_smps_mode { * non-operating channel is expired and no longer valid. New CAC must * non-operating channel is expired and no longer valid. New CAC must * be done on this channel before starting the operation. This is not * be done on this channel before starting the operation. This is not * applicable for ETSI dfs domain where pre-CAC is valid for ever. * applicable for ETSI dfs domain where pre-CAC is valid for ever. * @NL80211_RADAR_CAC_STARTED: Channel Availability Check has been started, * should be generated by HW if NL80211_EXT_FEATURE_DFS_OFFLOAD is enabled. */ */ enum nl80211_radar_event { enum nl80211_radar_event { NL80211_RADAR_DETECTED, NL80211_RADAR_DETECTED, Loading @@ -5208,6 +5210,7 @@ enum nl80211_radar_event { NL80211_RADAR_CAC_ABORTED, NL80211_RADAR_CAC_ABORTED, NL80211_RADAR_NOP_FINISHED, NL80211_RADAR_NOP_FINISHED, NL80211_RADAR_PRE_CAC_EXPIRED, NL80211_RADAR_PRE_CAC_EXPIRED, NL80211_RADAR_CAC_STARTED, }; }; /** /** Loading
net/wireless/mlme.c +6 −3 Original line number Original line Diff line number Diff line Loading @@ -872,7 +872,7 @@ void cfg80211_cac_event(struct net_device *netdev, trace_cfg80211_cac_event(netdev, event); trace_cfg80211_cac_event(netdev, event); if (WARN_ON(!wdev->cac_started)) if (WARN_ON(!wdev->cac_started && event != NL80211_RADAR_CAC_STARTED)) return; return; if (WARN_ON(!wdev->chandef.chan)) if (WARN_ON(!wdev->chandef.chan)) Loading @@ -888,14 +888,17 @@ void cfg80211_cac_event(struct net_device *netdev, sizeof(struct cfg80211_chan_def)); sizeof(struct cfg80211_chan_def)); queue_work(cfg80211_wq, &rdev->propagate_cac_done_wk); queue_work(cfg80211_wq, &rdev->propagate_cac_done_wk); cfg80211_sched_dfs_chan_update(rdev); cfg80211_sched_dfs_chan_update(rdev); break; /* fall through */ case NL80211_RADAR_CAC_ABORTED: case NL80211_RADAR_CAC_ABORTED: wdev->cac_started = false; break; case NL80211_RADAR_CAC_STARTED: wdev->cac_started = true; break; break; default: default: WARN_ON(1); WARN_ON(1); return; return; } } wdev->cac_started = false; nl80211_radar_notify(rdev, chandef, event, netdev, gfp); nl80211_radar_notify(rdev, chandef, event, netdev, gfp); } } Loading