diff options
author | Dan Williams <dcbw@redhat.com> | 2007-06-18 12:01:12 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2007-06-28 07:48:47 -0400 |
commit | 18c96c3497aa871608d57ca5e08de3558159a6c9 (patch) | |
tree | 4dfcef0cef103a0312c8aa15dbbbed9056a211e0 /drivers/net/wireless/libertas/cmdresp.c | |
parent | f8f551089b0ca571b8f95465b6c3e1dd7bcea28e (diff) |
[PATCH] libertas: fix WPA associations by handling ENABLE_RSN correctly
Don't clobber the firmware's internal state machine by setting
ENABLE_RSN more than once during the 4-way handshake. Check what
the ENABLE_RSN status is and only set if it should be changed.
Signed-off-by: Dan Williams <dcbw@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/libertas/cmdresp.c')
-rw-r--r-- | drivers/net/wireless/libertas/cmdresp.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/drivers/net/wireless/libertas/cmdresp.c b/drivers/net/wireless/libertas/cmdresp.c index 0c3b9a583d8..6ac0d4752fa 100644 --- a/drivers/net/wireless/libertas/cmdresp.c +++ b/drivers/net/wireless/libertas/cmdresp.c | |||
@@ -537,6 +537,24 @@ static int wlan_ret_get_log(wlan_private * priv, | |||
537 | return 0; | 537 | return 0; |
538 | } | 538 | } |
539 | 539 | ||
540 | static int libertas_ret_802_11_enable_rsn(wlan_private * priv, | ||
541 | struct cmd_ds_command *resp) | ||
542 | { | ||
543 | struct cmd_ds_802_11_enable_rsn *enable_rsn = &resp->params.enbrsn; | ||
544 | wlan_adapter *adapter = priv->adapter; | ||
545 | u32 * pdata_buf = adapter->cur_cmd->pdata_buf; | ||
546 | |||
547 | lbs_deb_enter(LBS_DEB_CMD); | ||
548 | |||
549 | if (enable_rsn->action == cpu_to_le16(cmd_act_get)) { | ||
550 | if (pdata_buf) | ||
551 | *pdata_buf = (u32) le16_to_cpu(enable_rsn->enable); | ||
552 | } | ||
553 | |||
554 | lbs_deb_enter(LBS_DEB_CMD); | ||
555 | return 0; | ||
556 | } | ||
557 | |||
540 | static inline int handle_cmd_response(u16 respcmd, | 558 | static inline int handle_cmd_response(u16 respcmd, |
541 | struct cmd_ds_command *resp, | 559 | struct cmd_ds_command *resp, |
542 | wlan_private *priv) | 560 | wlan_private *priv) |
@@ -610,7 +628,10 @@ static inline int handle_cmd_response(u16 respcmd, | |||
610 | case cmd_ret_802_11_authenticate: | 628 | case cmd_ret_802_11_authenticate: |
611 | case cmd_ret_802_11_radio_control: | 629 | case cmd_ret_802_11_radio_control: |
612 | case cmd_ret_802_11_beacon_stop: | 630 | case cmd_ret_802_11_beacon_stop: |
631 | break; | ||
632 | |||
613 | case cmd_ret_802_11_enable_rsn: | 633 | case cmd_ret_802_11_enable_rsn: |
634 | ret = libertas_ret_802_11_enable_rsn(priv, resp); | ||
614 | break; | 635 | break; |
615 | 636 | ||
616 | case cmd_ret_802_11_data_rate: | 637 | case cmd_ret_802_11_data_rate: |