diff mbox

orinoco: enable cfg80211 "set_channel" operation

Message ID 200907290916.31603.hs4233@mail.mn-solutions.de (mailing list archive)
State Not Applicable, archived
Headers show

Commit Message

Holger Schurig July 29, 2009, 7:16 a.m. UTC
On Tuesday 28 July 2009 18:27:54 Dave wrote:
> You can also eliminate orinoco_ioctl_setfreq from wext.c with
> this change.

You mean this ?!?


I tried, but with then an "iwconfig eth1 channel 1" gave me an 
error. I did not investigate this further.

Comments

Dave July 30, 2009, 6:47 p.m. UTC | #1
Holger Schurig wrote:
> On Tuesday 28 July 2009 18:27:54 Dave wrote:
>> You can also eliminate orinoco_ioctl_setfreq from wext.c with
>> this change.
> 
> You mean this ?!?

Yes, except:

> @@ -1481,7 +1432,6 @@
>  static const iw_handler	orinoco_handler[] = {
>  	STD_IW_HANDLER(SIOCSIWCOMMIT,	orinoco_ioctl_commit),
>  	STD_IW_HANDLER(SIOCGIWNAME,	cfg80211_wext_giwname),
> -	STD_IW_HANDLER(SIOCSIWFREQ,	orinoco_ioctl_setfreq),
+	STD_IW_HANDLER(SIOCSIWFREQ,	cfg80211_wext_setfreq ish),

>  	STD_IW_HANDLER(SIOCGIWFREQ,	orinoco_ioctl_getfreq),
>  	STD_IW_HANDLER(SIOCSIWMODE,	cfg80211_wext_siwmode),
>  	STD_IW_HANDLER(SIOCGIWMODE,	cfg80211_wext_giwmode),
> 
> I tried, but with then an "iwconfig eth1 channel 1" gave me an 
> error. I did not investigate this further.

And as Johannes pointed out, we need to have the non-cfg80211 version so
adhoc connections can still be made via wext.

So the original patch is fine as is. Ack from me.


Dave.
--
To unsubscribe from this list: send the line "unsubscribe linux-wireless" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

--- linux-wl.orig/drivers/net/wireless/orinoco/wext.c
+++ linux-wl/drivers/net/wireless/orinoco/wext.c
@@ -372,55 +372,6 @@ 
 	return 0;
 }
 
-static int orinoco_ioctl_setfreq(struct net_device *dev,
-				 struct iw_request_info *info,
-				 struct iw_freq *frq,
-				 char *extra)
-{
-	struct orinoco_private *priv = ndev_priv(dev);
-	int chan = -1;
-	unsigned long flags;
-	int err = -EINPROGRESS;		/* Call commit handler */
-
-	/* In infrastructure mode the AP sets the channel */
-	if (priv->iw_mode == NL80211_IFTYPE_STATION)
-		return -EBUSY;
-
-	if ((frq->e == 0) && (frq->m <= 1000)) {
-		/* Setting by channel number */
-		chan = frq->m;
-	} else {
-		/* Setting by frequency */
-		int denom = 1;
-		int i;
-
-		/* Calculate denominator to rescale to MHz */
-		for (i = 0; i < (6 - frq->e); i++)
-			denom *= 10;
-
-		chan = ieee80211_freq_to_dsss_chan(frq->m / denom);
-	}
-
-	if ((chan < 1) || (chan > NUM_CHANNELS) ||
-	     !(priv->channel_mask & (1 << (chan-1))))
-		return -EINVAL;
-
-	if (orinoco_lock(priv, &flags) != 0)
-		return -EBUSY;
-
-	priv->channel = chan;
-	if (priv->iw_mode == NL80211_IFTYPE_MONITOR) {
-		/* Fast channel change - no commit if successful */
-		hermes_t *hw = &priv->hw;
-		err = hermes_docmd_wait(hw, HERMES_CMD_TEST |
-					    HERMES_TEST_SET_CHANNEL,
-					chan, NULL);
-	}
-	orinoco_unlock(priv, &flags);
-
-	return err;
-}
-
 static int orinoco_ioctl_getfreq(struct net_device *dev,
 				 struct iw_request_info *info,
 				 struct iw_freq *frq,
@@ -1481,7 +1432,6 @@ 
 static const iw_handler	orinoco_handler[] = {
 	STD_IW_HANDLER(SIOCSIWCOMMIT,	orinoco_ioctl_commit),
 	STD_IW_HANDLER(SIOCGIWNAME,	cfg80211_wext_giwname),
-	STD_IW_HANDLER(SIOCSIWFREQ,	orinoco_ioctl_setfreq),
 	STD_IW_HANDLER(SIOCGIWFREQ,	orinoco_ioctl_getfreq),
 	STD_IW_HANDLER(SIOCSIWMODE,	cfg80211_wext_siwmode),
 	STD_IW_HANDLER(SIOCGIWMODE,	cfg80211_wext_giwmode),