summaryrefslogtreecommitdiff
path: root/openwrt/target/linux/package/wlcompat/wlcompat.c
diff options
context:
space:
mode:
authornbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2005-06-01 15:12:20 +0000
committernbd <nbd@3c298f89-4303-0410-b956-a3cf2f4a3e73>2005-06-01 15:12:20 +0000
commit260f1a89a0d4f8382c415b33c524f610143d570e (patch)
tree6b397375c32bdaf57390eea4b27de8e0ccfa4b9f /openwrt/target/linux/package/wlcompat/wlcompat.c
parent670c2455c25ae20dfe1b845521b644cef90faedd (diff)
add function for enabling/disabling radio in wlcompat
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@1129 3c298f89-4303-0410-b956-a3cf2f4a3e73
Diffstat (limited to 'openwrt/target/linux/package/wlcompat/wlcompat.c')
-rw-r--r--openwrt/target/linux/package/wlcompat/wlcompat.c34
1 files changed, 24 insertions, 10 deletions
diff --git a/openwrt/target/linux/package/wlcompat/wlcompat.c b/openwrt/target/linux/package/wlcompat/wlcompat.c
index e39fe6889a..e3d42f5cbe 100644
--- a/openwrt/target/linux/package/wlcompat/wlcompat.c
+++ b/openwrt/target/linux/package/wlcompat/wlcompat.c
@@ -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:
{