From: Mike McCormack <[email protected]>

Signed-off-by: Mike McCormack <[email protected]>
Signed-off-by: Greg Kroah-Hartman <[email protected]>
---
 drivers/staging/rtl8192e/r8192E_core.c |  136 ++++++++++++++++----------------
 1 files changed, 68 insertions(+), 68 deletions(-)

diff --git a/drivers/staging/rtl8192e/r8192E_core.c 
b/drivers/staging/rtl8192e/r8192E_core.c
index f7fee51..e4ffa24 100644
--- a/drivers/staging/rtl8192e/r8192E_core.c
+++ b/drivers/staging/rtl8192e/r8192E_core.c
@@ -3706,15 +3706,75 @@ static int r8192_set_mac_adr(struct net_device *dev, 
void *mac)
        return 0;
 }
 
+static void r8192e_set_hw_key(struct r8192_priv *priv, struct ieee_param *ipw)
+{
+       struct ieee80211_device *ieee = priv->ieee80211;
+       struct net_device *dev = priv->ieee80211->dev;
+       u8 broadcast_addr[6] = {0xff,0xff,0xff,0xff,0xff,0xff};
+       u32 key[4];
+
+       if (ipw->u.crypt.set_tx) {
+               if (strcmp(ipw->u.crypt.alg, "CCMP") == 0)
+                       ieee->pairwise_key_type = KEY_TYPE_CCMP;
+               else if (strcmp(ipw->u.crypt.alg, "TKIP") == 0)
+                       ieee->pairwise_key_type = KEY_TYPE_TKIP;
+               else if (strcmp(ipw->u.crypt.alg, "WEP") == 0) {
+                       if (ipw->u.crypt.key_len == 13)
+                               ieee->pairwise_key_type = KEY_TYPE_WEP104;
+                       else if (ipw->u.crypt.key_len == 5)
+                               ieee->pairwise_key_type = KEY_TYPE_WEP40;
+               } else
+                       ieee->pairwise_key_type = KEY_TYPE_NA;
+
+               if (ieee->pairwise_key_type) {
+                       memcpy(key, ipw->u.crypt.key, 16);
+                       EnableHWSecurityConfig8192(dev);
+                       /*
+                        * We fill both index entry and 4th entry for pairwise
+                        * key as in IPW interface, adhoc will only get here,
+                        * so we need index entry for its default key serching!
+                        */
+                       setKey(dev, 4, ipw->u.crypt.idx,
+                              ieee->pairwise_key_type,
+                              (u8*)ieee->ap_mac_addr, 0, key);
+
+                       /* LEAP WEP will never set this. */
+                       if (ieee->auth_mode != 2)
+                               setKey(dev, ipw->u.crypt.idx, ipw->u.crypt.idx,
+                                      ieee->pairwise_key_type,
+                                      (u8*)ieee->ap_mac_addr, 0, key);
+               }
+               if ((ieee->pairwise_key_type == KEY_TYPE_CCMP) &&
+                   ieee->pHTInfo->bCurrentHTSupport) {
+                       write_nic_byte(priv, 0x173, 1); /* fix aes bug */
+               }
+       } else {
+               memcpy(key, ipw->u.crypt.key, 16);
+               if (strcmp(ipw->u.crypt.alg, "CCMP") == 0)
+                       ieee->group_key_type= KEY_TYPE_CCMP;
+               else if (strcmp(ipw->u.crypt.alg, "TKIP") == 0)
+                       ieee->group_key_type = KEY_TYPE_TKIP;
+               else if (strcmp(ipw->u.crypt.alg, "WEP") == 0) {
+                       if (ipw->u.crypt.key_len == 13)
+                               ieee->group_key_type = KEY_TYPE_WEP104;
+                       else if (ipw->u.crypt.key_len == 5)
+                               ieee->group_key_type = KEY_TYPE_WEP40;
+               } else
+                       ieee->group_key_type = KEY_TYPE_NA;
+
+               if (ieee->group_key_type) {
+                       setKey(dev, ipw->u.crypt.idx, ipw->u.crypt.idx,
+                              ieee->group_key_type, broadcast_addr, 0, key);
+               }
+       }
+}
+
 /* based on ipw2200 driver */
 static int rtl8192_ioctl(struct net_device *dev, struct ifreq *rq, int cmd)
 {
        struct r8192_priv *priv = (struct r8192_priv *)ieee80211_priv(dev);
        struct iwreq *wrq = (struct iwreq *)rq;
        int ret=-1;
-       struct ieee80211_device *ieee = priv->ieee80211;
-       u32 key[4];
-       u8 broadcast_addr[6] = {0xff,0xff,0xff,0xff,0xff,0xff};
        struct iw_point *p = &wrq->u.data;
        struct ieee_param *ipw = NULL;//(struct ieee_param 
*)wrq->u.data.pointer;
 
@@ -3738,74 +3798,14 @@ static int rtl8192_ioctl(struct net_device *dev, struct 
ifreq *rq, int cmd)
      }
 
        switch (cmd) {
-           case RTL_IOCTL_WPA_SUPPLICANT:
-               //parse here for HW security
-                       if (ipw->cmd == IEEE_CMD_SET_ENCRYPTION)
-                       {
-                               if (ipw->u.crypt.set_tx)
-                               {
-                                       if (strcmp(ipw->u.crypt.alg, "CCMP") == 
0)
-                                               ieee->pairwise_key_type = 
KEY_TYPE_CCMP;
-                                       else if (strcmp(ipw->u.crypt.alg, 
"TKIP") == 0)
-                                               ieee->pairwise_key_type = 
KEY_TYPE_TKIP;
-                                       else if (strcmp(ipw->u.crypt.alg, 
"WEP") == 0)
-                                       {
-                                               if (ipw->u.crypt.key_len == 13)
-                                                       ieee->pairwise_key_type 
= KEY_TYPE_WEP104;
-                                               else if (ipw->u.crypt.key_len 
== 5)
-                                                       ieee->pairwise_key_type 
= KEY_TYPE_WEP40;
-                                       }
-                                       else
-                                               ieee->pairwise_key_type = 
KEY_TYPE_NA;
-
-                                       if (ieee->pairwise_key_type)
-                                       {
-                                               memcpy((u8*)key, 
ipw->u.crypt.key, 16);
-                                               EnableHWSecurityConfig8192(dev);
-                                       //we fill both index entry and 4th 
entry for pairwise key as in IPW interface, adhoc will only get here, so we 
need index entry for its default key serching!
-                                       //added by WB.
-                                               setKey(dev, 4, 
ipw->u.crypt.idx, ieee->pairwise_key_type, (u8*)ieee->ap_mac_addr, 0, key);
-                                               if (ieee->auth_mode != 2)  
//LEAP WEP will never set this.
-                                               setKey(dev, ipw->u.crypt.idx, 
ipw->u.crypt.idx, ieee->pairwise_key_type, (u8*)ieee->ap_mac_addr, 0, key);
-                                       }
-                                       if ((ieee->pairwise_key_type == 
KEY_TYPE_CCMP) && ieee->pHTInfo->bCurrentHTSupport){
-                                                       write_nic_byte(priv, 
0x173, 1); //fix aes bug
-                                               }
-
-                               }
-                               else //if (ipw->u.crypt.idx) //group key use 
idx > 0
-                               {
-                                       memcpy((u8*)key, ipw->u.crypt.key, 16);
-                                       if (strcmp(ipw->u.crypt.alg, "CCMP") == 
0)
-                                               ieee->group_key_type= 
KEY_TYPE_CCMP;
-                                       else if (strcmp(ipw->u.crypt.alg, 
"TKIP") == 0)
-                                               ieee->group_key_type = 
KEY_TYPE_TKIP;
-                                       else if (strcmp(ipw->u.crypt.alg, 
"WEP") == 0)
-                                       {
-                                               if (ipw->u.crypt.key_len == 13)
-                                                       ieee->group_key_type = 
KEY_TYPE_WEP104;
-                                               else if (ipw->u.crypt.key_len 
== 5)
-                                                       ieee->group_key_type = 
KEY_TYPE_WEP40;
-                                       }
-                                       else
-                                               ieee->group_key_type = 
KEY_TYPE_NA;
-
-                                       if (ieee->group_key_type)
-                                       {
-                                                       setKey( dev,
-                                                               
ipw->u.crypt.idx,
-                                                               
ipw->u.crypt.idx,               //KeyIndex
-                                                               
ieee->group_key_type,   //KeyType
-                                                               broadcast_addr, 
//MacAddr
-                                                               0,              
//DefaultKey
-                                                               key);           
//KeyContent
-                                       }
-                               }
-                       }
+       case RTL_IOCTL_WPA_SUPPLICANT:
+               /* parse here for HW security */
+               if (ipw->cmd == IEEE_CMD_SET_ENCRYPTION)
+                       r8192e_set_hw_key(priv, ipw);
                ret = ieee80211_wpa_supplicant_ioctl(priv->ieee80211, 
&wrq->u.data);
                break;
 
-           default:
+       default:
                ret = -EOPNOTSUPP;
                break;
        }
-- 
1.7.4.1

_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/devel

Reply via email to