diff options
| author | Roman Yeryomin <roman@advem.lv> | 2013-08-21 14:46:32 +0300 |
|---|---|---|
| committer | Roman Yeryomin <roman@advem.lv> | 2013-08-21 14:46:32 +0300 |
| commit | 6e8428d78c98c653f625aa0839437359306f99db (patch) | |
| tree | 70c9b5bedc15ff93f4effaf8ce44fc4a130feaa9 /target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_psk.c | |
| parent | dee99ab0143122146ab7713cfe171790bc796dd3 (diff) | |
Use newest realtek rtl8192cd driver from backfire alpha2 release.
Signed-off-by: Roman Yeryomin <roman@advem.lv>
Diffstat (limited to 'target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_psk.c')
| -rw-r--r-- | target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_psk.c | 73 |
1 files changed, 54 insertions, 19 deletions
diff --git a/target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_psk.c b/target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_psk.c index 5ed65bc38..88b120014 100644 --- a/target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_psk.c +++ b/target/linux/realtek/files/drivers/net/wireless/rtl8192cd/8192cd_psk.c @@ -26,7 +26,7 @@ #include "./8192cd_cfg.h" -#if (defined(INCLUDE_WPA_PSK) && !defined(WIFI_HAPD)) || defined(HAPD_DRV_PSK_WPS) +#if (defined(INCLUDE_WPA_PSK) && !defined(WIFI_HAPD) && !defined(RTK_NL80211)) || defined(HAPD_DRV_PSK_WPS) #include "./8192cd.h" #include "./wifi.h" @@ -1616,11 +1616,15 @@ static void reset_sta_info(struct rtl8192cd_priv *priv, struct stat_info *pstat) WPA_STA_INFO *pInfo = pstat->wpa_sta_info; unsigned long flags; + unsigned long flags2=0; SAVE_INT_AND_CLI(flags); - if (timer_pending(&pInfo->resendTimer)) - del_timer_sync(&pInfo->resendTimer); + SMP_LOCK_PSK_RESEND(flags2); + if (timer_pending(&pInfo->resendTimer)){ + del_timer(&pInfo->resendTimer); + } + SMP_UNLOCK_PSK_RESEND(flags2); if (OPMODE & WIFI_AP_STATE) { @@ -1681,6 +1685,7 @@ static void ResendTimeout(void *task_psta) { struct stat_info *pstat = (struct stat_info *)task_psta; struct rtl8192cd_priv *priv = pstat->wpa_sta_info->priv; + unsigned long flags; DEBUG_TRACE; @@ -1690,10 +1695,12 @@ static void ResendTimeout(void *task_psta) if (pstat == NULL) return; + SMP_LOCK_PSK_RESEND(flags); #ifdef CLIENT_MODE if ((OPMODE & WIFI_STATION_STATE) && !pstat->wpa_sta_info->clientHndshkProcessing) { DEBUG_ERR("Wait EAP timeout, disconnect AP!\n"); ToDrv_DisconnectSTA(priv, pstat, expire); + SMP_UNLOCK_PSK_RESEND(flags); return; } #endif @@ -1722,6 +1729,7 @@ static void ResendTimeout(void *task_psta) #ifdef DEBUG_PSK printk("!!!!DO NOT disconnect STA under 1 client case!!!\n"); #endif + SMP_UNLOCK_PSK_RESEND(flags); return; } @@ -1747,6 +1755,8 @@ static void ResendTimeout(void *task_psta) ClientSendEAPOL(priv, pstat, 1); #endif } + + SMP_UNLOCK_PSK_RESEND(flags); } @@ -1758,6 +1768,7 @@ static void GKRekeyTimeout(void *task_priv) { struct rtl8192cd_priv *priv = (struct rtl8192cd_priv *)task_priv; unsigned long flags; + unsigned long flags2; DEBUG_TRACE; @@ -1767,7 +1778,9 @@ static void GKRekeyTimeout(void *task_priv) SAVE_INT_AND_CLI(flags); SMP_LOCK(flags); + SMP_LOCK_PSK_GKREKEY(flags2); priv->wpa_global_info->GTKRekey = TRUE; + SMP_UNLOCK_PSK_GKREKEY(flags2); UpdateGK(priv); RESTORE_INT(flags); @@ -2156,7 +2169,7 @@ static void SendEAPOL(struct rtl8192cd_priv *priv, struct stat_info *pstat, int EncGTK(priv, pstat, pStaInfo->PTK + PTK_LEN_EAPOLMIC, PTK_LEN_EAPOLENC, (unsigned char *)key_data, sizeof(GTK_KDE_TYPE) + ((pGblInfo->MulticastCipher == DOT11_ENC_TKIP) ? 32:16), - KeyData.Octet, &tmpKeyData_Length); + KeyData.Octet, &tmpKeyData_Length); } else #endif // RTL_WPA2 @@ -2239,7 +2252,7 @@ send_packet: rtl_atomic_dec(&priv->rtl_tx_skb_cnt); #endif - pskb->cb[0] = 7; // use highest priority to xmit +// pskb->cb[0] = 7; // use highest priority to xmit if (rtl8192cd_start_xmit(pskb, priv->dev)) rtl_kfree_skb(priv, pskb, _SKB_TX_); @@ -2576,7 +2589,9 @@ static void UpdateGK(struct rtl8192cd_priv *priv) WPA_GLOBAL_INFO *pGblInfo=priv->wpa_global_info; struct stat_info *pstat; int i; + unsigned long flags=0; + SMP_LOCK_PSK_GKREKEY(flags); //------------------------------------------------------------ // Execute Global Group key state machine //------------------------------------------------------------ @@ -2654,6 +2669,8 @@ static void UpdateGK(struct rtl8192cd_priv *priv) } } pGblInfo->GUpdateStationKeys = FALSE; + + SMP_UNLOCK_PSK_GKREKEY(flags); }; static void EAPOLKeyRecvd(struct rtl8192cd_priv *priv, struct stat_info *pstat) @@ -2662,6 +2679,7 @@ static void EAPOLKeyRecvd(struct rtl8192cd_priv *priv, struct stat_info *pstat) WPA_STA_INFO *pStaInfo = pstat->wpa_sta_info; LARGE_INTEGER recievedRC; struct lib1x_eapol *eapol; + unsigned long flags=0; DEBUG_TRACE; @@ -2708,8 +2726,11 @@ static void EAPOLKeyRecvd(struct rtl8192cd_priv *priv, struct stat_info *pstat) check_msg2: // delete resend timer - if (timer_pending(&pStaInfo->resendTimer)) - del_timer_sync(&pStaInfo->resendTimer); + SMP_LOCK_PSK_RESEND(flags); + if (timer_pending(&pStaInfo->resendTimer)){ + del_timer(&pStaInfo->resendTimer); + } + SMP_UNLOCK_PSK_RESEND(flags); pStaInfo->SNonce = Message_KeyNonce(pStaInfo->EapolKeyMsgRecvd); CalcPTK(pStaInfo->EAPOLMsgRecvd.Octet, pStaInfo->EAPOLMsgRecvd.Octet + 6, @@ -2813,8 +2834,11 @@ cont_msg: } // delete resend timer - if (timer_pending(&pStaInfo->resendTimer)) - del_timer_sync(&pStaInfo->resendTimer); + SMP_LOCK_PSK_RESEND(flags); + if (timer_pending(&pStaInfo->resendTimer)){ + del_timer(&pStaInfo->resendTimer); + } + SMP_UNLOCK_PSK_RESEND(flags); if (!CheckMIC(pStaInfo->EAPOLMsgRecvd, pStaInfo->PTK, PTK_LEN_EAPOLMIC)) { // errror DEBUG_ERR("4-4: RSN_MIC_failure\n"); @@ -2947,8 +2971,11 @@ cont_msg: case PSK_STATE_PTKINITDONE: // delete resend timer - if (timer_pending(&pStaInfo->resendTimer)) - del_timer_sync(&pStaInfo->resendTimer); + SMP_LOCK_PSK_RESEND(flags); + if (timer_pending(&pStaInfo->resendTimer)){ + del_timer(&pStaInfo->resendTimer); + } + SMP_UNLOCK_PSK_RESEND(flags); #if 0 //receive message [with request bit set] @@ -3001,8 +3028,11 @@ cont_msg: else if (Message_KeyType(pStaInfo->EapolKeyMsgRecvd) == type_Group) { // delete resend timer - if (timer_pending(&pStaInfo->resendTimer)) - del_timer_sync(&pStaInfo->resendTimer); + SMP_LOCK_PSK_RESEND(flags); + if (timer_pending(&pStaInfo->resendTimer)){ + del_timer(&pStaInfo->resendTimer); + } + SMP_UNLOCK_PSK_RESEND(flags); //---- Receive 2nd message of 2-way handshake ---- DEBUG_INFO("2-2\n"); @@ -3086,6 +3116,7 @@ static void ClientEAPOLKeyRecvd(struct rtl8192cd_priv *priv, struct stat_info *p LARGE_INTEGER recievedRC; struct lib1x_eapol *eapol; int toSetKey = 0; + unsigned long flags=0; eapol = ( struct lib1x_eapol * ) ( pstat->wpa_sta_info->EAPOLMsgRecvd.Octet + ETHER_HDRLEN ); if (eapol->packet_type != LIB1X_EAPOL_KEY) @@ -3109,9 +3140,11 @@ static void ClientEAPOLKeyRecvd(struct rtl8192cd_priv *priv, struct stat_info *p //---- Receive 1st message and send 2nd DEBUG_INFO("client mode 4-1\n"); - if (timer_pending(&pStaInfo->resendTimer)) - del_timer_sync(&pStaInfo->resendTimer); - + SMP_LOCK_PSK_RESEND(flags); + if (timer_pending(&pStaInfo->resendTimer)){ + del_timer(&pStaInfo->resendTimer); + } + SMP_UNLOCK_PSK_RESEND(flags); if(pStaInfo->clientHndshkDone || pStaInfo->clientHndshkProcessing) { @@ -3187,8 +3220,11 @@ static void ClientEAPOLKeyRecvd(struct rtl8192cd_priv *priv, struct stat_info *p } // delete resend timer - if (timer_pending(&pStaInfo->resendTimer)) - del_timer_sync(&pStaInfo->resendTimer); + SMP_LOCK_PSK_RESEND(flags); + if (timer_pending(&pStaInfo->resendTimer)){ + del_timer(&pStaInfo->resendTimer); + } + SMP_UNLOCK_PSK_RESEND(flags); Message_ReplayCounter_OC2LI(pStaInfo->EapolKeyMsgRecvd, &recievedRC); if(!Message_DefaultReplayCounter(pStaInfo->CurrentReplayCounter) && @@ -3372,7 +3408,6 @@ void derivePSK(struct rtl8192cd_priv *priv) { WPA_GLOBAL_INFO *pGblInfo=priv->wpa_global_info; unsigned long x; - SAVE_INT_AND_CLI(x); if (strlen((char *)priv->pmib->dot1180211AuthEntry.dot11PassPhrase) == 64) // hex |
