Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9483f03150cbfa1f706355b7f9d218d6086c6fce
Commit:     9483f03150cbfa1f706355b7f9d218d6086c6fce
Parent:     d21b31fd53626f9c1d14fc676793dbe86b44d1c6
Author:     Jean Tourrilhes <[EMAIL PROTECTED]>
AuthorDate: Thu Aug 2 13:16:30 2007 -0400
Committer:  David S. Miller <[EMAIL PROTECTED]>
CommitDate: Wed Oct 10 16:50:12 2007 -0700

    [PATCH] libertas: fix a few wext abuses...
    
    o SIOCGIWNAME is not designed to return the version number of the driver.
    On the other hand, you are free to abuse SIOCGIWNICKN for that purpose.
    
    o Don't attempt to fix the WE19/WE20 transition in the driver, because
    your fixes are bogus, and redundant with the code in the kernel (you may
    endup with +2, you can't read 32 char ESSID...).
    
    o In SIOCSIWTXPOW, if you specified in iwrange that you want dBm, you
    should only get dBm, which allow to reduce code bloat.
    
    Signed-off-by: Jean Tourrilhes <[EMAIL PROTECTED]>
    Signed-off-by: John W. Linville <[EMAIL PROTECTED]>
---
 drivers/net/wireless/libertas/wext.c |  120 ++++++++--------------------------
 1 files changed, 27 insertions(+), 93 deletions(-)

diff --git a/drivers/net/wireless/libertas/wext.c 
b/drivers/net/wireless/libertas/wext.c
index 1fb0f91..15395bf 100644
--- a/drivers/net/wireless/libertas/wext.c
+++ b/drivers/net/wireless/libertas/wext.c
@@ -22,52 +22,6 @@
 
 
 /**
- *  @brief Convert mw value to dbm value
- *
- *  @param mw     the value of mw
- *  @return       the value of dbm
- */
-static int mw_to_dbm(int mw)
-{
-       if (mw < 2)
-               return 0;
-       else if (mw < 3)
-               return 3;
-       else if (mw < 4)
-               return 5;
-       else if (mw < 6)
-               return 7;
-       else if (mw < 7)
-               return 8;
-       else if (mw < 8)
-               return 9;
-       else if (mw < 10)
-               return 10;
-       else if (mw < 13)
-               return 11;
-       else if (mw < 16)
-               return 12;
-       else if (mw < 20)
-               return 13;
-       else if (mw < 25)
-               return 14;
-       else if (mw < 32)
-               return 15;
-       else if (mw < 40)
-               return 16;
-       else if (mw < 50)
-               return 17;
-       else if (mw < 63)
-               return 18;
-       else if (mw < 79)
-               return 19;
-       else if (mw < 100)
-               return 20;
-       else
-               return 21;
-}
-
-/**
  *  @brief Find the channel frequency power info with specific channel
  *
  *  @param adapter     A pointer to wlan_adapter structure
@@ -199,28 +153,11 @@ static void copy_active_data_rates(wlan_adapter * 
adapter, u8 * rates)
 static int wlan_get_name(struct net_device *dev, struct iw_request_info *info,
                         char *cwrq, char *extra)
 {
-       const char *cp;
-       char comm[6] = { "COMM-" };
-       char mrvl[6] = { "MRVL-" };
-       int cnt;
 
        lbs_deb_enter(LBS_DEB_WEXT);
 
-       strcpy(cwrq, mrvl);
-
-       cp = strstr(libertas_driver_version, comm);
-       if (cp == libertas_driver_version)      //skip leading "COMM-"
-               cp = libertas_driver_version + strlen(comm);
-       else
-               cp = libertas_driver_version;
-
-       cnt = strlen(mrvl);
-       cwrq += cnt;
-       while (cnt < 16 && (*cp != '-')) {
-               *cwrq++ = toupper(*cp++);
-               cnt++;
-       }
-       *cwrq = '\0';
+       /* We could add support for 802.11n here as needed. Jean II */
+       snprintf(cwrq, IFNAMSIZ, "IEEE 802.11b/g");
 
        lbs_deb_leave(LBS_DEB_WEXT);
        return 0;
@@ -300,29 +237,37 @@ static int wlan_set_nick(struct net_device *dev, struct 
iw_request_info *info,
 static int wlan_get_nick(struct net_device *dev, struct iw_request_info *info,
                         struct iw_point *dwrq, char *extra)
 {
-       wlan_private *priv = dev->priv;
-       wlan_adapter *adapter = priv->adapter;
+       const char *cp;
+       char comm[6] = { "COMM-" };
+       char mrvl[6] = { "MRVL-" };
+       int cnt;
 
        lbs_deb_enter(LBS_DEB_WEXT);
 
        /*
-        * Get the Nick Name saved
+        * Nick Name is not used internally in this mode,
+        * therefore return something useful instead. Jean II
         */
 
-       mutex_lock(&adapter->lock);
-       strncpy(extra, adapter->nodename, 16);
-       mutex_unlock(&adapter->lock);
+       strcpy(extra, mrvl);
 
-       extra[16] = '\0';
+       cp = strstr(libertas_driver_version, comm);
+       if (cp == libertas_driver_version)      //skip leading "COMM-"
+               cp = libertas_driver_version + strlen(comm);
+       else
+               cp = libertas_driver_version;
 
-       /*
-        * If none, we may want to get the one that was set
-        */
+       cnt = strlen(mrvl);
+       extra += cnt;
+       while (cnt < 16 && (*cp != '-')) {
+               *extra++ = toupper(*cp++);
+               cnt++;
+       }
 
        /*
         * Push it out !
         */
-       dwrq->length = strlen(extra) + 1;
+       dwrq->length = cnt;
 
        lbs_deb_leave(LBS_DEB_WEXT);
        return 0;
@@ -341,12 +286,12 @@ static int mesh_get_nick(struct net_device *dev, struct 
iw_request_info *info,
        if (adapter->connect_status == LIBERTAS_CONNECTED) {
                strncpy(extra, "Mesh", 12);
                extra[12] = '\0';
-               dwrq->length = strlen(extra) + 1;
+               dwrq->length = strlen(extra);
        }
 
        else {
                extra[0] = '\0';
-               dwrq->length = 1 ;
+               dwrq->length = 0;
        }
 
        lbs_deb_leave(LBS_DEB_WEXT);
@@ -1897,8 +1842,10 @@ static int wlan_set_txpow(struct net_device *dev, struct 
iw_request_info *info,
 
        wlan_radio_ioctl(priv, RADIO_ON);
 
+       /* Userspace check in iwrange if it should use dBm or mW,
+        * therefore this should never happen... Jean II */
        if ((vwrq->flags & IW_TXPOW_TYPE) == IW_TXPOW_MWATT) {
-               dbm = (u16) mw_to_dbm(vwrq->value);
+               return -EOPNOTSUPP;
        } else
                dbm = (u16) vwrq->value;
 
@@ -1946,12 +1893,7 @@ static int wlan_get_essid(struct net_device *dev, struct 
iw_request_info *info,
         * If none, we may want to get the one that was set
         */
 
-       /* To make the driver backward compatible with WPA supplicant v0.2.4 */
-       if (dwrq->length == 32) /* check with WPA supplicant buffer size */
-               dwrq->length = min_t(size_t, adapter->curbssparams.ssid_len,
-                                  IW_ESSID_MAX_SIZE);
-       else
-               dwrq->length = adapter->curbssparams.ssid_len + 1;
+       dwrq->length = adapter->curbssparams.ssid_len;
 
        dwrq->flags = 1;        /* active */
 
@@ -1972,14 +1914,6 @@ static int wlan_set_essid(struct net_device *dev, struct 
iw_request_info *info,
 
        lbs_deb_enter(LBS_DEB_WEXT);
 
-       /*
-        * WE-20 and earlier NULL pad the end of the SSID and increment
-        * SSID length so it can be used like a string.  WE-21 and later don't,
-        * but some userspace tools aren't able to cope with the change.
-        */
-       if ((in_ssid_len > 0) && (extra[in_ssid_len - 1] == '\0'))
-               in_ssid_len--;
-
        /* Check the size of the string */
        if (in_ssid_len > IW_ESSID_MAX_SIZE) {
                ret = -E2BIG;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to