forked from Minki/linux
wl1271: implement cmd_disconnect
This patch implements the CMD_DISCONNECT command, which should be sent to the firmware when we are disassociated. Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com> Reviewed-by: Juuso Oikarinen <juuso.oikarinen@nokia.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
parent
e57f14895b
commit
25a7dc6d22
@ -191,7 +191,6 @@ int wl1271_cmd_join(struct wl1271 *wl)
|
|||||||
do_cal = false;
|
do_cal = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
join = kzalloc(sizeof(*join), GFP_KERNEL);
|
join = kzalloc(sizeof(*join), GFP_KERNEL);
|
||||||
if (!join) {
|
if (!join) {
|
||||||
ret = -ENOMEM;
|
ret = -ENOMEM;
|
||||||
@ -825,3 +824,34 @@ out:
|
|||||||
|
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int wl1271_cmd_disconnect(struct wl1271 *wl)
|
||||||
|
{
|
||||||
|
struct wl1271_cmd_disconnect *cmd;
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
wl1271_debug(DEBUG_CMD, "cmd disconnect");
|
||||||
|
|
||||||
|
cmd = kzalloc(sizeof(*cmd), GFP_KERNEL);
|
||||||
|
if (!cmd) {
|
||||||
|
ret = -ENOMEM;
|
||||||
|
goto out;
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd->rx_config_options = wl->rx_config;
|
||||||
|
cmd->rx_filter_options = wl->rx_filter;
|
||||||
|
/* disconnect reason is not used in immediate disconnections */
|
||||||
|
cmd->type = DISCONNECT_IMMEDIATE;
|
||||||
|
|
||||||
|
ret = wl1271_cmd_send(wl, CMD_DISCONNECT, cmd, sizeof(*cmd));
|
||||||
|
if (ret < 0) {
|
||||||
|
wl1271_error("failed to send disconnect command");
|
||||||
|
goto out_free;
|
||||||
|
}
|
||||||
|
|
||||||
|
out_free:
|
||||||
|
kfree(cmd);
|
||||||
|
|
||||||
|
out:
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
@ -50,6 +50,7 @@ int wl1271_cmd_set_default_wep_key(struct wl1271 *wl, u8 id);
|
|||||||
int wl1271_cmd_set_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type,
|
int wl1271_cmd_set_key(struct wl1271 *wl, u16 action, u8 id, u8 key_type,
|
||||||
u8 key_size, const u8 *key, const u8 *addr,
|
u8 key_size, const u8 *key, const u8 *addr,
|
||||||
u32 tx_seq_32, u16 tx_seq_16);
|
u32 tx_seq_32, u16 tx_seq_16);
|
||||||
|
int wl1271_cmd_disconnect(struct wl1271 *wl);
|
||||||
|
|
||||||
enum wl1271_commands {
|
enum wl1271_commands {
|
||||||
CMD_INTERROGATE = 1, /*use this to read information elements*/
|
CMD_INTERROGATE = 1, /*use this to read information elements*/
|
||||||
@ -461,4 +462,30 @@ struct wl1271_cmd_cal_p2g {
|
|||||||
u8 padding2;
|
u8 padding2;
|
||||||
} __attribute__ ((packed));
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
|
* There are three types of disconnections:
|
||||||
|
*
|
||||||
|
* DISCONNECT_IMMEDIATE: the fw doesn't send any frames
|
||||||
|
* DISCONNECT_DEAUTH: the fw generates a DEAUTH request with the reason
|
||||||
|
* we have passed
|
||||||
|
* DISCONNECT_DISASSOC: the fw generates a DESASSOC request with the reason
|
||||||
|
* we have passed
|
||||||
|
*/
|
||||||
|
enum wl1271_disconnect_type {
|
||||||
|
DISCONNECT_IMMEDIATE,
|
||||||
|
DISCONNECT_DEAUTH,
|
||||||
|
DISCONNECT_DISASSOC
|
||||||
|
};
|
||||||
|
|
||||||
|
struct wl1271_cmd_disconnect {
|
||||||
|
u32 rx_config_options;
|
||||||
|
u32 rx_filter_options;
|
||||||
|
|
||||||
|
u16 reason;
|
||||||
|
u8 type;
|
||||||
|
|
||||||
|
u8 padding;
|
||||||
|
} __attribute__ ((packed));
|
||||||
|
|
||||||
#endif /* __WL1271_CMD_H__ */
|
#endif /* __WL1271_CMD_H__ */
|
||||||
|
Loading…
Reference in New Issue
Block a user