forked from Minki/linux
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
|
* just "paused" for scanning/ROC, which is indicated by the beacon being
|
||||||
* disabled/enabled via @bss_info_changed.
|
* disabled/enabled via @bss_info_changed.
|
||||||
* @stop_ap: Stop operation on the AP interface.
|
* @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 {
|
struct ieee80211_ops {
|
||||||
void (*tx)(struct ieee80211_hw *hw,
|
void (*tx)(struct ieee80211_hw *hw,
|
||||||
@ -2561,6 +2565,8 @@ struct ieee80211_ops {
|
|||||||
void (*unassign_vif_chanctx)(struct ieee80211_hw *hw,
|
void (*unassign_vif_chanctx)(struct ieee80211_hw *hw,
|
||||||
struct ieee80211_vif *vif,
|
struct ieee80211_vif *vif,
|
||||||
struct ieee80211_chanctx_conf *ctx);
|
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);
|
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 */
|
#endif /* __MAC80211_DRIVER_OPS */
|
||||||
|
@ -1411,6 +1411,11 @@ DEFINE_EVENT(local_sdata_evt, drv_stop_ap,
|
|||||||
TP_ARGS(local, sdata)
|
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.
|
* 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.
|
* If this is for hw restart things are still running.
|
||||||
* We may want to change that later, however.
|
* We may want to change that later, however.
|
||||||
*/
|
*/
|
||||||
if (!local->suspended)
|
if (!local->suspended) {
|
||||||
|
drv_restart_complete(local);
|
||||||
return 0;
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_PM
|
#ifdef CONFIG_PM
|
||||||
/* first set suspended false, then resuming */
|
/* first set suspended false, then resuming */
|
||||||
|
Loading…
Reference in New Issue
Block a user