Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 249266
b: refs/heads/master
c: 9ae6210
h: refs/heads/master
v: v3
  • Loading branch information
Naveen Singh authored and Greg Kroah-Hartman committed May 3, 2011
1 parent 21a2d8a commit 3d6fa62
Show file tree
Hide file tree
Showing 5 changed files with 81 additions and 17 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 60c87f1453e8d53e14941c2d99861a21282942a5
refs/heads/master: 9ae62107fb9010e902e60259c6a461c68885d0c7
5 changes: 5 additions & 0 deletions trunk/drivers/staging/ath6kl/include/common/wmi.h
Original file line number Diff line number Diff line change
Expand Up @@ -521,6 +521,11 @@ typedef enum {
LEAP_AUTH = 0x04, /* different from IEEE_AUTH_MODE definitions */
} DOT11_AUTH_MODE;

enum {
AUTH_IDLE,
AUTH_OPEN_IN_PROGRESS,
};

typedef enum {
NONE_AUTH = 0x01,
WPA_AUTH = 0x02,
Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/staging/ath6kl/os/linux/ar6000_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -1678,6 +1678,7 @@ ar6000_avail_ev(void *context, void *hif_handle)
wdev->netdev = dev;
ar->arNetworkType = INFRA_NETWORK;
ar->smeState = SME_DISCONNECTED;
ar->arAutoAuthStage = AUTH_IDLE;

init_netdev(dev, ifname);

Expand Down
89 changes: 73 additions & 16 deletions trunk/drivers/staging/ath6kl/os/linux/cfg80211.c
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,12 @@ ar6k_set_auth_type(struct ar6_softc *ar, enum nl80211_auth_type auth_type)
case NL80211_AUTHTYPE_NETWORK_EAP:
ar->arDot11AuthMode = LEAP_AUTH;
break;

case NL80211_AUTHTYPE_AUTOMATIC:
ar->arDot11AuthMode = OPEN_AUTH;
ar->arAutoAuthStage = AUTH_OPEN_IN_PROGRESS;
break;

default:
ar->arDot11AuthMode = OPEN_AUTH;
AR_DEBUG_PRINTF(ATH_DEBUG_INFO,
Expand Down Expand Up @@ -460,6 +466,8 @@ ar6k_cfg80211_connect_event(struct ar6_softc *ar, u16 channel,
assocReqLen -= assocReqIeOffset;
assocRespLen -= assocRespIeOffset;

ar->arAutoAuthStage = AUTH_IDLE;

if((ADHOC_NETWORK & networkType)) {
if(NL80211_IFTYPE_ADHOC != ar->wdev->iftype) {
AR_DEBUG_PRINTF(ATH_DEBUG_INFO,
Expand Down Expand Up @@ -633,6 +641,8 @@ ar6k_cfg80211_disconnect_event(struct ar6_softc *ar, u8 reason,
u8 *assocInfo, u16 protocolReasonStatus)
{

u16 status;

AR_DEBUG_PRINTF(ATH_DEBUG_INFO, ("%s: reason=%u\n", __func__, reason));

if (ar->scan_request) {
Expand Down Expand Up @@ -663,23 +673,70 @@ ar6k_cfg80211_disconnect_event(struct ar6_softc *ar, u8 reason,
/* connect cmd failed */
wmi_disconnect_cmd(ar->arWmi);
} else if (reason == DISCONNECT_CMD) {
/* connection loss due to disconnect cmd or low rssi */
ar->arConnectPending = false;
if (ar->smeState == SME_CONNECTING) {
cfg80211_connect_result(ar->arNetDev, bssid,
NULL, 0,
NULL, 0,
WLAN_STATUS_UNSPECIFIED_FAILURE,
GFP_KERNEL);
} else {
cfg80211_disconnected(ar->arNetDev, reason, NULL, 0, GFP_KERNEL);
}
ar->smeState = SME_DISCONNECTED;
}
if (ar->arAutoAuthStage) {
/*
* If the current auth algorithm is open try shared
* and make autoAuthStage idle. We do not make it
* leap for now being.
*/
if (ar->arDot11AuthMode == OPEN_AUTH) {
struct ar_key *key = NULL;
key = &ar->keys[ar->arDefTxKeyIndex];
if (down_interruptible(&ar->arSem)) {
AR_DEBUG_PRINTF(ATH_DEBUG_ERR, ("%s: busy, couldn't get access\n", __func__));
return;
}


ar->arDot11AuthMode = SHARED_AUTH;
ar->arAutoAuthStage = AUTH_IDLE;

wmi_addKey_cmd(ar->arWmi, ar->arDefTxKeyIndex,
ar->arPairwiseCrypto,
GROUP_USAGE | TX_USAGE,
key->key_len,
NULL,
key->key, KEY_OP_INIT_VAL, NULL,
NO_SYNC_WMIFLAG);

status = wmi_connect_cmd(ar->arWmi,
ar->arNetworkType,
ar->arDot11AuthMode,
ar->arAuthMode,
ar->arPairwiseCrypto,
ar->arPairwiseCryptoLen,
ar->arGroupCrypto,
ar->arGroupCryptoLen,
ar->arSsidLen,
ar->arSsid,
ar->arReqBssid,
ar->arChannelHint,
ar->arConnectCtrlFlags);
up(&ar->arSem);

} else if (ar->arDot11AuthMode == SHARED_AUTH) {
/* should not reach here */
}
} else {
ar->arConnectPending = false;
if (ar->smeState == SME_CONNECTING) {
cfg80211_connect_result(ar->arNetDev, bssid,
NULL, 0,
NULL, 0,
WLAN_STATUS_UNSPECIFIED_FAILURE,
GFP_KERNEL);
} else {
cfg80211_disconnected(ar->arNetDev,
reason,
NULL, 0,
GFP_KERNEL);
}
ar->smeState = SME_DISCONNECTED;
}
}
} else {
if (reason != DISCONNECT_CMD) {
wmi_disconnect_cmd(ar->arWmi);
}
if (reason != DISCONNECT_CMD)
wmi_disconnect_cmd(ar->arWmi);
}
}

Expand Down
1 change: 1 addition & 0 deletions trunk/drivers/staging/ath6kl/os/linux/include/ar6000_drv.h
Original file line number Diff line number Diff line change
Expand Up @@ -653,6 +653,7 @@ struct ar6_softc {
#ifdef CONFIG_AP_VIRTUAL_ADAPTER_SUPPORT
void *arApDev;
#endif
u8 arAutoAuthStage;
};

#ifdef CONFIG_AP_VIRTUAL_ADAPTER_SUPPORT
Expand Down

0 comments on commit 3d6fa62

Please sign in to comment.