|
@@ -8608,6 +8608,52 @@ static int ipw_wx_get_nick(struct net_device *dev,
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static int ipw_wx_set_sens(struct net_device *dev,
|
|
|
|
+ struct iw_request_info *info,
|
|
|
|
+ union iwreq_data *wrqu, char *extra)
|
|
|
|
+{
|
|
|
|
+ struct ipw_priv *priv = ieee80211_priv(dev);
|
|
|
|
+ int err = 0;
|
|
|
|
+
|
|
|
|
+ IPW_DEBUG_WX("Setting roaming threshold to %d\n", wrqu->sens.value);
|
|
|
|
+ IPW_DEBUG_WX("Setting disassociate threshold to %d\n", 3*wrqu->sens.value);
|
|
|
|
+ mutex_lock(&priv->mutex);
|
|
|
|
+
|
|
|
|
+ if (wrqu->sens.fixed == 0)
|
|
|
|
+ {
|
|
|
|
+ priv->roaming_threshold = IPW_MB_ROAMING_THRESHOLD_DEFAULT;
|
|
|
|
+ priv->disassociate_threshold = IPW_MB_DISASSOCIATE_THRESHOLD_DEFAULT;
|
|
|
|
+ goto out;
|
|
|
|
+ }
|
|
|
|
+ if ((wrqu->sens.value > IPW_MB_ROAMING_THRESHOLD_MAX) ||
|
|
|
|
+ (wrqu->sens.value < IPW_MB_ROAMING_THRESHOLD_MIN)) {
|
|
|
|
+ err = -EINVAL;
|
|
|
|
+ goto out;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ priv->roaming_threshold = wrqu->sens.value;
|
|
|
|
+ priv->disassociate_threshold = 3*wrqu->sens.value;
|
|
|
|
+ out:
|
|
|
|
+ mutex_unlock(&priv->mutex);
|
|
|
|
+ return err;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static int ipw_wx_get_sens(struct net_device *dev,
|
|
|
|
+ struct iw_request_info *info,
|
|
|
|
+ union iwreq_data *wrqu, char *extra)
|
|
|
|
+{
|
|
|
|
+ struct ipw_priv *priv = ieee80211_priv(dev);
|
|
|
|
+ mutex_lock(&priv->mutex);
|
|
|
|
+ wrqu->sens.fixed = 1;
|
|
|
|
+ wrqu->sens.value = priv->roaming_threshold;
|
|
|
|
+ mutex_unlock(&priv->mutex);
|
|
|
|
+
|
|
|
|
+ IPW_DEBUG_WX("GET roaming threshold -> %s %d \n",
|
|
|
|
+ wrqu->power.disabled ? "OFF" : "ON", wrqu->power.value);
|
|
|
|
+
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
static int ipw_wx_set_rate(struct net_device *dev,
|
|
static int ipw_wx_set_rate(struct net_device *dev,
|
|
struct iw_request_info *info,
|
|
struct iw_request_info *info,
|
|
union iwreq_data *wrqu, char *extra)
|
|
union iwreq_data *wrqu, char *extra)
|
|
@@ -9429,6 +9475,8 @@ static iw_handler ipw_wx_handlers[] = {
|
|
IW_IOCTL(SIOCGIWFREQ) = ipw_wx_get_freq,
|
|
IW_IOCTL(SIOCGIWFREQ) = ipw_wx_get_freq,
|
|
IW_IOCTL(SIOCSIWMODE) = ipw_wx_set_mode,
|
|
IW_IOCTL(SIOCSIWMODE) = ipw_wx_set_mode,
|
|
IW_IOCTL(SIOCGIWMODE) = ipw_wx_get_mode,
|
|
IW_IOCTL(SIOCGIWMODE) = ipw_wx_get_mode,
|
|
|
|
+ IW_IOCTL(SIOCSIWSENS) = ipw_wx_set_sens,
|
|
|
|
+ IW_IOCTL(SIOCGIWSENS) = ipw_wx_get_sens,
|
|
IW_IOCTL(SIOCGIWRANGE) = ipw_wx_get_range,
|
|
IW_IOCTL(SIOCGIWRANGE) = ipw_wx_get_range,
|
|
IW_IOCTL(SIOCSIWAP) = ipw_wx_set_wap,
|
|
IW_IOCTL(SIOCSIWAP) = ipw_wx_set_wap,
|
|
IW_IOCTL(SIOCGIWAP) = ipw_wx_get_wap,
|
|
IW_IOCTL(SIOCGIWAP) = ipw_wx_get_wap,
|