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;