While reviewing the softmac version of r0utine bcm43xx_wx_get_rangeparams, I found the following code snippit:

        switch (bcm->current_core->phy->type) {
        case BCM43xx_PHYTYPE_A:
        case BCM43xx_PHYTYPE_G:
                range->num_bitrates += 4;
                range->bitrate[i++] = IEEE80211_CCK_RATE_1MB;
                range->bitrate[i++] = IEEE80211_CCK_RATE_2MB;
                range->bitrate[i++] = IEEE80211_CCK_RATE_5MB;
                range->bitrate[i++] = IEEE80211_CCK_RATE_11MB;
        case BCM43xx_PHYTYPE_B:
                range->num_bitrates += 8;
                range->bitrate[i++] = IEEE80211_OFDM_RATE_6MB;
                range->bitrate[i++] = IEEE80211_OFDM_RATE_9MB;
                range->bitrate[i++] = IEEE80211_OFDM_RATE_12MB;
                range->bitrate[i++] = IEEE80211_OFDM_RATE_18MB;
                range->bitrate[i++] = IEEE80211_OFDM_RATE_24MB;
                range->bitrate[i++] = IEEE80211_OFDM_RATE_36MB;
                range->bitrate[i++] = IEEE80211_OFDM_RATE_48MB;
                range->bitrate[i++] = IEEE80211_OFDM_RATE_54MB;
        }

The code is correct for a and g PHY's, but is it right for b-type PHY's? For them, I would have expected 1, 2, 5 and 11 MB rates, not 6, ..., 54 MB. I think the attached patch fixes the situation.

Larry
Index: bcm43xx_wx.c
===================================================================
--- bcm43xx_wx.c        (revision 1050)
+++ bcm43xx_wx.c        (working copy)
@@ -286,17 +286,13 @@
 
        spin_lock_irqsave(&bcm->lock, flags);
 
-       range->num_bitrates = 0;
+       range->num_bitrates = 4;
        i = 0;
-       switch (bcm->current_core->phy->type) {
-       case BCM43xx_PHYTYPE_A:
-       case BCM43xx_PHYTYPE_G:
-               range->num_bitrates += 4;
-               range->bitrate[i++] = IEEE80211_CCK_RATE_1MB;
-               range->bitrate[i++] = IEEE80211_CCK_RATE_2MB;
-               range->bitrate[i++] = IEEE80211_CCK_RATE_5MB;
-               range->bitrate[i++] = IEEE80211_CCK_RATE_11MB;
-       case BCM43xx_PHYTYPE_B:
+       range->bitrate[i++] = IEEE80211_CCK_RATE_1MB;
+       range->bitrate[i++] = IEEE80211_CCK_RATE_2MB;
+       range->bitrate[i++] = IEEE80211_CCK_RATE_5MB;
+       range->bitrate[i++] = IEEE80211_CCK_RATE_11MB;
+       if (bcm->current_core->phy->type != BCM43xx_PHYTYPE_B) {
                range->num_bitrates += 8;
                range->bitrate[i++] = IEEE80211_OFDM_RATE_6MB;
                range->bitrate[i++] = IEEE80211_OFDM_RATE_9MB;

Reply via email to