[PATCH] I2C: Make i2c_add_driver automatically set the proper module owner
[safe/jmp/linux-2.6] / net / ieee80211 / ieee80211_wx.c
index 65aa96d..181755f 100644 (file)
@@ -1,6 +1,6 @@
 /******************************************************************************
 
-  Copyright(c) 2004 Intel Corporation. All rights reserved.
+  Copyright(c) 2004-2005 Intel Corporation. All rights reserved.
 
   Portions of this file are based on the WEP enablement code provided by the
   Host AP project hostap-drivers v0.1.3
@@ -152,15 +152,20 @@ static inline char *ipw2100_translate_scan(struct ieee80211_device *ieee,
                iwe.u.qual.level = 0;
        } else {
                iwe.u.qual.level = network->stats.rssi;
-               iwe.u.qual.qual =
-                   (100 *
-                    (ieee->perfect_rssi - ieee->worst_rssi) *
-                    (ieee->perfect_rssi - ieee->worst_rssi) -
-                    (ieee->perfect_rssi - network->stats.rssi) *
-                    (15 * (ieee->perfect_rssi - ieee->worst_rssi) +
-                     62 * (ieee->perfect_rssi - network->stats.rssi))) /
-                   ((ieee->perfect_rssi - ieee->worst_rssi) *
-                    (ieee->perfect_rssi - ieee->worst_rssi));
+               if (ieee->perfect_rssi == ieee->worst_rssi)
+                       iwe.u.qual.qual = 100;
+               else
+                       iwe.u.qual.qual =
+                           (100 *
+                            (ieee->perfect_rssi - ieee->worst_rssi) *
+                            (ieee->perfect_rssi - ieee->worst_rssi) -
+                            (ieee->perfect_rssi - network->stats.rssi) *
+                            (15 * (ieee->perfect_rssi - ieee->worst_rssi) +
+                             62 * (ieee->perfect_rssi -
+                                   network->stats.rssi))) /
+                           ((ieee->perfect_rssi -
+                             ieee->worst_rssi) * (ieee->perfect_rssi -
+                                                  ieee->worst_rssi));
                if (iwe.u.qual.qual > 100)
                        iwe.u.qual.qual = 100;
                else if (iwe.u.qual.qual < 1)
@@ -355,7 +360,7 @@ int ieee80211_wx_set_encode(struct ieee80211_device *ieee,
                }
 
                if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
-                       new_crypt->priv = new_crypt->ops->init(ieee, key);
+                       new_crypt->priv = new_crypt->ops->init(key);
 
                if (!new_crypt->ops || !new_crypt->priv) {
                        kfree(new_crypt);
@@ -488,7 +493,6 @@ int ieee80211_wx_get_encode(struct ieee80211_device *ieee,
        return 0;
 }
 
-#if WIRELESS_EXT > 17
 int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee,
                               struct iw_request_info *info,
                               union iwreq_data *wrqu, char *extra)
@@ -518,7 +522,8 @@ int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee,
                crypt = &ieee->crypt[idx];
                group_key = 1;
        } else {
-               if (idx != 0)
+               /* some Cisco APs use idx>0 for unicast in dynamic WEP */
+               if (idx != 0 && ext->alg != IW_ENCODE_ALG_WEP)
                        return -EINVAL;
                if (ieee->iw_mode == IW_MODE_INFRA)
                        crypt = &ieee->crypt[idx];
@@ -599,7 +604,7 @@ int ieee80211_wx_set_encodeext(struct ieee80211_device *ieee,
                memset(new_crypt, 0, sizeof(struct ieee80211_crypt_data));
                new_crypt->ops = ops;
                if (new_crypt->ops && try_module_get(new_crypt->ops->owner))
-                       new_crypt->priv = new_crypt->ops->init(ieee, idx);
+                       new_crypt->priv = new_crypt->ops->init(idx);
                if (new_crypt->priv == NULL) {
                        kfree(new_crypt);
                        ret = -EINVAL;
@@ -686,7 +691,8 @@ int ieee80211_wx_get_encodeext(struct ieee80211_device *ieee,
        } else
                idx = ieee->tx_keyidx;
 
-       if (!ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY)
+       if (!ext->ext_flags & IW_ENCODE_EXT_GROUP_KEY &&
+           ext->alg != IW_ENCODE_ALG_WEP)
                if (idx != 0 || ieee->iw_mode != IW_MODE_INFRA)
                        return -EINVAL;
 
@@ -722,7 +728,6 @@ int ieee80211_wx_get_encodeext(struct ieee80211_device *ieee,
 
 EXPORT_SYMBOL(ieee80211_wx_set_encodeext);
 EXPORT_SYMBOL(ieee80211_wx_get_encodeext);
-#endif
 
 EXPORT_SYMBOL(ieee80211_wx_get_scan);
 EXPORT_SYMBOL(ieee80211_wx_set_encode);