diff options
author | Eliad Peller <eliad@wizery.com> | 2012-11-22 11:06:18 -0500 |
---|---|---|
committer | Luciano Coelho <coelho@ti.com> | 2012-11-27 03:49:28 -0500 |
commit | fcab189027cdd68df7f97474d1419aaa4a82130c (patch) | |
tree | e50bde25bca8593bcdbf48a1f42fd20ed9d46cd6 /drivers/net/wireless/ti/wl12xx/cmd.c | |
parent | b6acb4e00e187cb5ae8dd479958a02fe0ea97bf0 (diff) |
wlcore: update channel_switch/stop_channel_switch commands
Some fields were added to the channel_switch and
stop_channel_switch commands. Unfortunately,
the new 18xx channel_switch struct is not backward
compatible with the 12xx channel switch struct.
Add a new channel_switch op to wlcore, and update
the driver accordingly.
Signed-off-by: Eliad Peller <eliad@wizery.com>
Signed-off-by: Luciano Coelho <coelho@ti.com>
Diffstat (limited to 'drivers/net/wireless/ti/wl12xx/cmd.c')
-rw-r--r-- | drivers/net/wireless/ti/wl12xx/cmd.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/drivers/net/wireless/ti/wl12xx/cmd.c b/drivers/net/wireless/ti/wl12xx/cmd.c index 622206241e83..7dc9f965037d 100644 --- a/drivers/net/wireless/ti/wl12xx/cmd.c +++ b/drivers/net/wireless/ti/wl12xx/cmd.c | |||
@@ -284,3 +284,40 @@ int wl128x_cmd_radio_parms(struct wl1271 *wl) | |||
284 | kfree(radio_parms); | 284 | kfree(radio_parms); |
285 | return ret; | 285 | return ret; |
286 | } | 286 | } |
287 | |||
288 | int wl12xx_cmd_channel_switch(struct wl1271 *wl, | ||
289 | struct wl12xx_vif *wlvif, | ||
290 | struct ieee80211_channel_switch *ch_switch) | ||
291 | { | ||
292 | struct wl12xx_cmd_channel_switch *cmd; | ||
293 | int ret; | ||
294 | |||
295 | wl1271_debug(DEBUG_ACX, "cmd channel switch"); | ||
296 | |||
297 | cmd = kzalloc(sizeof(*cmd), GFP_KERNEL); | ||
298 | if (!cmd) { | ||
299 | ret = -ENOMEM; | ||
300 | goto out; | ||
301 | } | ||
302 | |||
303 | cmd->role_id = wlvif->role_id; | ||
304 | cmd->channel = ch_switch->channel->hw_value; | ||
305 | cmd->switch_time = ch_switch->count; | ||
306 | cmd->stop_tx = ch_switch->block_tx; | ||
307 | |||
308 | /* FIXME: control from mac80211 in the future */ | ||
309 | /* Enable TX on the target channel */ | ||
310 | cmd->post_switch_tx_disable = 0; | ||
311 | |||
312 | ret = wl1271_cmd_send(wl, CMD_CHANNEL_SWITCH, cmd, sizeof(*cmd), 0); | ||
313 | if (ret < 0) { | ||
314 | wl1271_error("failed to send channel switch command"); | ||
315 | goto out_free; | ||
316 | } | ||
317 | |||
318 | out_free: | ||
319 | kfree(cmd); | ||
320 | |||
321 | out: | ||
322 | return ret; | ||
323 | } | ||