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