* [PATCH V3] mac80211: Implementation of SIOCSIWRATE
@ 2007-06-22 17:13 Larry Finger
2007-07-03 13:11 ` Larry Finger
0 siblings, 1 reply; 2+ messages in thread
From: Larry Finger @ 2007-06-22 17:13 UTC (permalink / raw)
To: Jiri Benc; +Cc: linux-wireless
From: Mohamed Abbas <mabbas@linux.intel.com>
The WEXT ioctl SIOCSIWRATE is not implemented in mac80211. This patch
adds the missing routine. It supports the 'auto' keyword, fixed rates,
and the combination of 'auto' and a fixed rate to select an upper bound.
Signed-off-by: Mohamed Abbas <mabbas@linux.intel.com>
Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
---
ieee80211_ioctl.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 50 insertions(+), 1 deletion(-)
Index: wireless-dev/net/mac80211/ieee80211_ioctl.c
===================================================================
--- wireless-dev.orig/net/mac80211/ieee80211_ioctl.c
+++ wireless-dev/net/mac80211/ieee80211_ioctl.c
@@ -1880,6 +1880,44 @@ static int ieee80211_ioctl_giwscan(struc
}
+static int ieee80211_ioctl_siwrate(struct net_device *dev,
+ struct iw_request_info *info,
+ struct iw_param *rate, char *extra)
+{
+ struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
+ struct ieee80211_hw_mode *mode;
+ int i;
+ u32 target_rate = rate->value / 100000;
+ struct ieee80211_sub_if_data *sdata;
+
+ sdata = IEEE80211_DEV_TO_SUB_IF(dev);
+ if (!sdata->bss)
+ return -ENODEV;
+ mode = local->oper_hw_mode;
+ /* target_rate = -1, rate->fixed = 0 means auto only, so use all rates
+ * target_rate = X, rate->fixed = 1 means only rate X
+ * target_rate = X, rate->fixed = 0 means all rates <= X */
+ sdata->bss->max_ratectrl_rateidx = -1;
+ sdata->bss->force_unicast_rateidx = -1;
+ if (rate->value < 0)
+ return 0;
+ for (i=0; i< mode->num_rates; i++) {
+ struct ieee80211_rate *rates = &mode->rates[i];
+ int this_rate = rates->rate;
+
+ if (mode->mode == MODE_ATHEROS_TURBO ||
+ mode->mode == MODE_ATHEROS_TURBOG)
+ this_rate *= 2;
+ if (target_rate == this_rate) {
+ sdata->bss->max_ratectrl_rateidx = i;
+ if (rate->fixed)
+ sdata->bss->force_unicast_rateidx = i;
+ break;
+ }
+ }
+ return 0;
+}
+
static int ieee80211_ioctl_giwrate(struct net_device *dev,
struct iw_request_info *info,
struct iw_param *rate, char *extra)
@@ -3026,7 +3064,7 @@ static const iw_handler ieee80211_handle
(iw_handler) NULL, /* SIOCGIWNICKN */
(iw_handler) NULL, /* -- hole -- */
(iw_handler) NULL, /* -- hole -- */
- (iw_handler) NULL, /* SIOCSIWRATE */
+ (iw_handler) ieee80211_ioctl_siwrate, /* SIOCSIWRATE */
(iw_handler) ieee80211_ioctl_giwrate, /* SIOCGIWRATE */
(iw_handler) ieee80211_ioctl_siwrts, /* SIOCSIWRTS */
(iw_handler) ieee80211_ioctl_giwrts, /* SIOCGIWRTS */
^ permalink raw reply [flat|nested] 2+ messages in thread* Re: [PATCH V3] mac80211: Implementation of SIOCSIWRATE
2007-06-22 17:13 [PATCH V3] mac80211: Implementation of SIOCSIWRATE Larry Finger
@ 2007-07-03 13:11 ` Larry Finger
0 siblings, 0 replies; 2+ messages in thread
From: Larry Finger @ 2007-07-03 13:11 UTC (permalink / raw)
To: Jiri Benc; +Cc: wireless
Larry Finger wrote:
> From: Mohamed Abbas <mabbas@linux.intel.com>
>
> The WEXT ioctl SIOCSIWRATE is not implemented in mac80211. This patch
> adds the missing routine. It supports the 'auto' keyword, fixed rates,
> and the combination of 'auto' and a fixed rate to select an upper bound.
>
> Signed-off-by: Mohamed Abbas <mabbas@linux.intel.com>
> Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net>
> ---
>
> ieee80211_ioctl.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 50 insertions(+), 1 deletion(-)
>
> Index: wireless-dev/net/mac80211/ieee80211_ioctl.c
> ===================================================================
> --- wireless-dev.orig/net/mac80211/ieee80211_ioctl.c
> +++ wireless-dev/net/mac80211/ieee80211_ioctl.c
> @@ -1880,6 +1880,44 @@ static int ieee80211_ioctl_giwscan(struc
> }
>
>
> +static int ieee80211_ioctl_siwrate(struct net_device *dev,
> + struct iw_request_info *info,
> + struct iw_param *rate, char *extra)
> +{
> + struct ieee80211_local *local = wdev_priv(dev->ieee80211_ptr);
> + struct ieee80211_hw_mode *mode;
> + int i;
> + u32 target_rate = rate->value / 100000;
> + struct ieee80211_sub_if_data *sdata;
> +
> + sdata = IEEE80211_DEV_TO_SUB_IF(dev);
> + if (!sdata->bss)
> + return -ENODEV;
> + mode = local->oper_hw_mode;
> + /* target_rate = -1, rate->fixed = 0 means auto only, so use all rates
> + * target_rate = X, rate->fixed = 1 means only rate X
> + * target_rate = X, rate->fixed = 0 means all rates <= X */
> + sdata->bss->max_ratectrl_rateidx = -1;
> + sdata->bss->force_unicast_rateidx = -1;
> + if (rate->value < 0)
> + return 0;
> + for (i=0; i< mode->num_rates; i++) {
> + struct ieee80211_rate *rates = &mode->rates[i];
> + int this_rate = rates->rate;
> +
> + if (mode->mode == MODE_ATHEROS_TURBO ||
> + mode->mode == MODE_ATHEROS_TURBOG)
> + this_rate *= 2;
> + if (target_rate == this_rate) {
> + sdata->bss->max_ratectrl_rateidx = i;
> + if (rate->fixed)
> + sdata->bss->force_unicast_rateidx = i;
> + break;
> + }
> + }
> + return 0;
> +}
> +
> static int ieee80211_ioctl_giwrate(struct net_device *dev,
> struct iw_request_info *info,
> struct iw_param *rate, char *extra)
> @@ -3026,7 +3064,7 @@ static const iw_handler ieee80211_handle
> (iw_handler) NULL, /* SIOCGIWNICKN */
> (iw_handler) NULL, /* -- hole -- */
> (iw_handler) NULL, /* -- hole -- */
> - (iw_handler) NULL, /* SIOCSIWRATE */
> + (iw_handler) ieee80211_ioctl_siwrate, /* SIOCSIWRATE */
> (iw_handler) ieee80211_ioctl_giwrate, /* SIOCGIWRATE */
> (iw_handler) ieee80211_ioctl_siwrts, /* SIOCSIWRTS */
> (iw_handler) ieee80211_ioctl_giwrts, /* SIOCGIWRTS */
>
Was this revision OK, or did I miss something?
Larry
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2007-07-03 13:11 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-06-22 17:13 [PATCH V3] mac80211: Implementation of SIOCSIWRATE Larry Finger
2007-07-03 13:11 ` Larry Finger
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).