[PATCH] bcm43xx: split the channel helper functions, so that they can be used without...
authorMichael Buesch <mbuesch@freenet.de>
Sun, 19 Feb 2006 21:08:48 +0000 (22:08 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Mon, 27 Mar 2006 16:18:37 +0000 (11:18 -0500)
Signed-off-by: Michael Buesch <mbuesch@freenet.de>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/bcm43xx/bcm43xx_main.c
drivers/net/wireless/bcm43xx/bcm43xx_main.h
drivers/net/wireless/bcm43xx/bcm43xx_wx.c

index b4767e42e8f4833f4505c87d0812287ed1384060..6195c2a1516d689185d16f8471e0a22215d6aa73 100644 (file)
@@ -1169,7 +1169,7 @@ static void bcm43xx_geo_init(struct bcm43xx_private *bcm)
        if (have_a) {
                for (i = 0, channel = 0; channel < 201; channel++) {
                        chan = &geo.a[i++];
-                       chan->freq = bcm43xx_channel_to_freq(bcm, channel);
+                       chan->freq = bcm43xx_channel_to_freq_a(channel);
                        chan->channel = channel;
                }
                geo.a_channels = i;
@@ -1177,7 +1177,7 @@ static void bcm43xx_geo_init(struct bcm43xx_private *bcm)
        if (have_bg) {
                for (i = 0, channel = 1; channel < 15; channel++) {
                        chan = &geo.bg[i++];
-                       chan->freq = bcm43xx_channel_to_freq(bcm, channel);
+                       chan->freq = bcm43xx_channel_to_freq_bg(channel);
                        chan->channel = channel;
                }
                geo.bg_channels = i;
index 0a22e833915d0a8804a2acab92f8f94bf8a3ad50..7d696d257f7aa162926c7bd8f6db278dd22ffb13 100644 (file)
@@ -187,58 +187,78 @@ struct bcm43xx_xmitstatus_queue {
 
 /* Lightweight function to convert a frequency (in Mhz) to a channel number. */
 static inline
-u8 bcm43xx_freq_to_channel(struct bcm43xx_private *bcm,
-                          int freq)
+u8 bcm43xx_freq_to_channel_a(int freq)
+{
+       return ((freq - 5000) / 5);
+}
+static inline
+u8 bcm43xx_freq_to_channel_bg(int freq)
 {
        u8 channel;
 
-       if (bcm->current_core->phy->type == BCM43xx_PHYTYPE_A) {
-               channel = (freq - 5000) / 5;
-       } else {
-               if (freq == 2484)
-                       channel = 14;
-               else
-                       channel = (freq - 2407) / 5;
-       }
+       if (freq == 2484)
+               channel = 14;
+       else
+               channel = (freq - 2407) / 5;
 
        return channel;
 }
+static inline
+u8 bcm43xx_freq_to_channel(struct bcm43xx_private *bcm,
+                          int freq)
+{
+       if (bcm->current_core->phy->type == BCM43xx_PHYTYPE_A)
+               return bcm43xx_freq_to_channel_a(freq);
+       return bcm43xx_freq_to_channel_bg(freq);
+}
 
 /* Lightweight function to convert a channel number to a frequency (in Mhz). */
 static inline
-int bcm43xx_channel_to_freq(struct bcm43xx_private *bcm,
-                           u8 channel)
+int bcm43xx_channel_to_freq_a(u8 channel)
+{
+       return (5000 + (5 * channel));
+}
+static inline
+int bcm43xx_channel_to_freq_bg(u8 channel)
 {
        int freq;
 
-       if (bcm->current_core->phy->type == BCM43xx_PHYTYPE_A) {
-               freq = 5000 + (5 * channel);
-       } else {
-               if (channel == 14)
-                       freq = 2484;
-               else
-                       freq = 2407 + (5 * channel);
-       }
+       if (channel == 14)
+               freq = 2484;
+       else
+               freq = 2407 + (5 * channel);
 
        return freq;
 }
+static inline
+int bcm43xx_channel_to_freq(struct bcm43xx_private *bcm,
+                           u8 channel)
+{
+       if (bcm->current_core->phy->type == BCM43xx_PHYTYPE_A)
+               return bcm43xx_channel_to_freq_a(channel);
+       return bcm43xx_channel_to_freq_bg(channel);
+}
 
 /* Lightweight function to check if a channel number is valid.
  * Note that this does _NOT_ check for geographical restrictions!
  */
 static inline
+int bcm43xx_is_valid_channel_a(u8 channel)
+{
+       return (channel <= 200);
+}
+static inline
+int bcm43xx_is_valid_channel_bg(u8 channel)
+{
+       return (channel >= 1 && channel <= 14);
+}
+static inline
 int bcm43xx_is_valid_channel(struct bcm43xx_private *bcm,
-                           u8 channel)
+                            u8 channel)
 {
-       if (bcm->current_core->phy->type == BCM43xx_PHYTYPE_A) {
-               if (channel <= 200)
-                       return 1;
-       } else {
-               if (channel >= 1 && channel <= 14)
-                       return 1;
-       }
-
-       return 0;
+       if (bcm->current_core->phy->type == BCM43xx_PHYTYPE_A)
+               return bcm43xx_is_valid_channel_a(channel);
+       return bcm43xx_is_valid_channel_bg(channel);
 }
 
 void bcm43xx_tsf_read(struct bcm43xx_private *bcm, u64 *tsf);
index df37d28996c912205bd9035d2183a92c200fe346..aa2d9930c436eb0c322bb640810b05a253ae8ada 100644 (file)
@@ -111,8 +111,9 @@ static int bcm43xx_wx_set_channelfreq(struct net_device *net_dev,
        unsigned long flags;
        u8 channel;
        int freq;
-       int err = 0;
+       int err = -EINVAL;
 
+       spin_lock_irqsave(&bcm->lock, flags);
        if ((data->freq.m >= 0) && (data->freq.m <= 1000)) {
                channel = data->freq.m;
                freq = bcm43xx_channel_to_freq(bcm, channel);
@@ -121,16 +122,17 @@ static int bcm43xx_wx_set_channelfreq(struct net_device *net_dev,
                freq = data->freq.m;
        }
        if (!bcm43xx_is_valid_channel(bcm, channel))
-               return -EINVAL;
-
-       spin_lock_irqsave(&bcm->lock, flags);
+               goto out_unlock;
        if (bcm->initialized) {
                //ieee80211softmac_disassoc(softmac, $REASON);
                bcm43xx_mac_suspend(bcm);
                err = bcm43xx_radio_selectchannel(bcm, channel, 0);
                bcm43xx_mac_enable(bcm);
-       } else
+       } else {
                bcm->current_core->radio->initial_channel = channel;
+               err = 0;
+       }
+out_unlock:
        spin_unlock_irqrestore(&bcm->lock, flags);
 
        return err;