add function for enabling/disabling radio in wlcompat
authorFelix Fietkau <nbd@openwrt.org>
Wed, 1 Jun 2005 15:12:20 +0000 (15:12 +0000)
committerFelix Fietkau <nbd@openwrt.org>
Wed, 1 Jun 2005 15:12:20 +0000 (15:12 +0000)
SVN-Revision: 1129

openwrt/target/linux/package/wlcompat/wlcompat.c

index e39fe6889a19f1a80514ca6ffec015b751bc0f3e..e3d42f5cbee129f965fea1ca2a487477e75bf2bb 100644 (file)
@@ -384,30 +384,44 @@ static int wlcompat_ioctl(struct net_device *dev,
                }
                case SIOCGIWTXPOW:
                {
+                       int radio;
+
+                       if (wl_ioctl(dev, WLC_GET_RADIO, &radio, sizeof(int)) < 0)
+                               return -EINVAL;
+                       
                        if (wl_get_val(dev, "qtxpower", &(wrqu->txpower.value), sizeof(int)) < 0)
                                return -EINVAL;
                        
                        wrqu->txpower.value &= ~WL_TXPWR_OVERRIDE;
                                
                        wrqu->txpower.fixed = 0;
-                       wrqu->txpower.disabled = 0;
+                       wrqu->txpower.disabled = radio;
                        wrqu->txpower.flags = IW_TXPOW_MWATT;
                        break;
                }
                case SIOCSIWTXPOW:
                {
-                       int override;
-                       
-                       if (wl_get_val(dev, "qtxpower", &override, sizeof(int)) < 0)
+                       /* This is weird: WLC_SET_RADIO with 1 as argument disables the radio */
+                       int radio = wrqu->txpower.disabled;
+
+                       if (wl_ioctl(dev, WLC_SET_RADIO, &radio, sizeof(int)) < 0)
                                return -EINVAL;
                        
-                       wrqu->txpower.value |= override & WL_TXPWR_OVERRIDE;
-                       
-                       if (wrqu->txpower.flags != IW_TXPOW_MWATT)
-                               return -EINVAL;
+                       if (!wrqu->txpower.disabled) {
+                               int override;
 
-                       if (wl_set_val(dev, "qtxpower", &wrqu->txpower.value, sizeof(int)) < 0)
-                               return -EINVAL;
+                               if (wl_get_val(dev, "qtxpower", &override, sizeof(int)) < 0)
+                                       return -EINVAL;
+                               
+                               wrqu->txpower.value |= override & WL_TXPWR_OVERRIDE;
+                               
+                               if (wrqu->txpower.flags != IW_TXPOW_MWATT)
+                                       return -EINVAL;
+
+                               if (wl_set_val(dev, "qtxpower", &wrqu->txpower.value, sizeof(int)) < 0)
+                                       return -EINVAL;
+
+                       }
                }
                case SIOCGIWENCODE:
                {