On 1/26/2012 4:38 AM, Victor Goldenshtein wrote:
New ieee80211_ap_process_chanswitch(), to handle a channel switch request for AP/GO. New 'post_switch_block_tx' parameter in 'ieee80211_channel_switch' structure, which indicates whether transmission must be blocked after the scheduled channel switch, it should be set if the target channel is DFS channel. New ieee80211_ap_ch_switch_complete_notify() which notifies upper layers about channel switch complete event.
Shouldn't mac80211 have some non-offload implementation for this?
@@ -841,12 +841,16 @@ struct ieee80211_conf { * the driver passed into mac80211. * @block_tx: Indicates whether transmission must be blocked before the * scheduled channel switch, as indicated by the AP. + * @post_switch_block_tx: Indicates whether transmission must be blocked after + * the scheduled channel switch, this should be set if the target channel + * is DFS channel.
Hmmm. This channel switch stuff here was really intended for client-side channel switching initially ... and it should quite possibly be a different mechanism?
+static int ieee80211_ap_process_chanswitch(struct wiphy *wiphy, + struct net_device *dev, + u32 count, bool block_tx, + bool post_switch_block_tx, + u32 new_freq) +{ + struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev); + struct ieee80211_local *local = sdata->local; + struct ieee80211_channel *new_ch; + struct ieee80211_channel_switch ch_switch; + + new_ch = ieee80211_get_channel(sdata->local->hw.wiphy, new_freq); + if (!new_ch || new_ch->flags& IEEE80211_CHAN_DISABLED) { + wiphy_debug(local->hw.wiphy, + "failed channel switch on freq: %d\n", new_freq); + return -EINVAL; + }
That code should obviously be in cfg80211.
@@ -2793,4 +2826,5 @@ struct cfg80211_ops mac80211_config_ops = { .set_noack_map = ieee80211_set_noack_map, .dfs_start_radar_detection = ieee80211_dfs_start_radar_detection, .dfs_en_tx = ieee80211_dfs_en_tx, + .ap_channel_switch = ieee80211_ap_process_chanswitch,
why deviate from the ieee80211_ + callback_name scheme? johannes -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html