|
@@ -1002,58 +1002,9 @@ static inline void drv_unassign_vif_chanctx(struct ieee80211_local *local,
|
|
trace_drv_return_void(local);
|
|
trace_drv_return_void(local);
|
|
}
|
|
}
|
|
|
|
|
|
-static inline int
|
|
|
|
-drv_switch_vif_chanctx(struct ieee80211_local *local,
|
|
|
|
- struct ieee80211_vif_chanctx_switch *vifs,
|
|
|
|
- int n_vifs,
|
|
|
|
- enum ieee80211_chanctx_switch_mode mode)
|
|
|
|
-{
|
|
|
|
- int ret = 0;
|
|
|
|
- int i;
|
|
|
|
-
|
|
|
|
- if (!local->ops->switch_vif_chanctx)
|
|
|
|
- return -EOPNOTSUPP;
|
|
|
|
-
|
|
|
|
- for (i = 0; i < n_vifs; i++) {
|
|
|
|
- struct ieee80211_chanctx *new_ctx =
|
|
|
|
- container_of(vifs[i].new_ctx,
|
|
|
|
- struct ieee80211_chanctx,
|
|
|
|
- conf);
|
|
|
|
- struct ieee80211_chanctx *old_ctx =
|
|
|
|
- container_of(vifs[i].old_ctx,
|
|
|
|
- struct ieee80211_chanctx,
|
|
|
|
- conf);
|
|
|
|
-
|
|
|
|
- WARN_ON_ONCE(!old_ctx->driver_present);
|
|
|
|
- WARN_ON_ONCE((mode == CHANCTX_SWMODE_SWAP_CONTEXTS &&
|
|
|
|
- new_ctx->driver_present) ||
|
|
|
|
- (mode == CHANCTX_SWMODE_REASSIGN_VIF &&
|
|
|
|
- !new_ctx->driver_present));
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- trace_drv_switch_vif_chanctx(local, vifs, n_vifs, mode);
|
|
|
|
- ret = local->ops->switch_vif_chanctx(&local->hw,
|
|
|
|
- vifs, n_vifs, mode);
|
|
|
|
- trace_drv_return_int(local, ret);
|
|
|
|
-
|
|
|
|
- if (!ret && mode == CHANCTX_SWMODE_SWAP_CONTEXTS) {
|
|
|
|
- for (i = 0; i < n_vifs; i++) {
|
|
|
|
- struct ieee80211_chanctx *new_ctx =
|
|
|
|
- container_of(vifs[i].new_ctx,
|
|
|
|
- struct ieee80211_chanctx,
|
|
|
|
- conf);
|
|
|
|
- struct ieee80211_chanctx *old_ctx =
|
|
|
|
- container_of(vifs[i].old_ctx,
|
|
|
|
- struct ieee80211_chanctx,
|
|
|
|
- conf);
|
|
|
|
-
|
|
|
|
- new_ctx->driver_present = true;
|
|
|
|
- old_ctx->driver_present = false;
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- return ret;
|
|
|
|
-}
|
|
|
|
|
|
+int drv_switch_vif_chanctx(struct ieee80211_local *local,
|
|
|
|
+ struct ieee80211_vif_chanctx_switch *vifs,
|
|
|
|
+ int n_vifs, enum ieee80211_chanctx_switch_mode mode);
|
|
|
|
|
|
static inline int drv_start_ap(struct ieee80211_local *local,
|
|
static inline int drv_start_ap(struct ieee80211_local *local,
|
|
struct ieee80211_sub_if_data *sdata)
|
|
struct ieee80211_sub_if_data *sdata)
|