mac80211: call driver method when restart completes
When the driver requests a restart (reconfiguration) it gets all the normal method calls, but can't really tell why they're happening. Call a new restart_complete op in the driver when the restart completes, so it could keep its own state about the restart and clear it there. Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
60762cbfeb
commit
9214ad7f9a
|
@ -2400,6 +2400,10 @@ enum ieee80211_rate_control_changed {
|
|||
* just "paused" for scanning/ROC, which is indicated by the beacon being
|
||||
* disabled/enabled via @bss_info_changed.
|
||||
* @stop_ap: Stop operation on the AP interface.
|
||||
*
|
||||
* @restart_complete: Called after a call to ieee80211_restart_hw(), when the
|
||||
* reconfiguration has completed. This can help the driver implement the
|
||||
* reconfiguration step. This callback may sleep.
|
||||
*/
|
||||
struct ieee80211_ops {
|
||||
void (*tx)(struct ieee80211_hw *hw,
|
||||
|
@ -2561,6 +2565,8 @@ struct ieee80211_ops {
|
|||
void (*unassign_vif_chanctx)(struct ieee80211_hw *hw,
|
||||
struct ieee80211_vif *vif,
|
||||
struct ieee80211_chanctx_conf *ctx);
|
||||
|
||||
void (*restart_complete)(struct ieee80211_hw *hw);
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
@ -961,4 +961,14 @@ static inline void drv_stop_ap(struct ieee80211_local *local,
|
|||
trace_drv_return_void(local);
|
||||
}
|
||||
|
||||
static inline void drv_restart_complete(struct ieee80211_local *local)
|
||||
{
|
||||
might_sleep();
|
||||
|
||||
trace_drv_restart_complete(local);
|
||||
if (local->ops->restart_complete)
|
||||
local->ops->restart_complete(&local->hw);
|
||||
trace_drv_return_void(local);
|
||||
}
|
||||
|
||||
#endif /* __MAC80211_DRIVER_OPS */
|
||||
|
|
|
@ -1411,6 +1411,11 @@ DEFINE_EVENT(local_sdata_evt, drv_stop_ap,
|
|||
TP_ARGS(local, sdata)
|
||||
);
|
||||
|
||||
DEFINE_EVENT(local_only_evt, drv_restart_complete,
|
||||
TP_PROTO(struct ieee80211_local *local),
|
||||
TP_ARGS(local)
|
||||
);
|
||||
|
||||
/*
|
||||
* Tracing for API calls that drivers call.
|
||||
*/
|
||||
|
|
|
@ -1599,8 +1599,10 @@ int ieee80211_reconfig(struct ieee80211_local *local)
|
|||
* If this is for hw restart things are still running.
|
||||
* We may want to change that later, however.
|
||||
*/
|
||||
if (!local->suspended)
|
||||
if (!local->suspended) {
|
||||
drv_restart_complete(local);
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
/* first set suspended false, then resuming */
|
||||
|
|
Loading…
Reference in a new issue