On Sun, 15 May 2016 07:23:25 -0700 Adrian Chadd <adrian@xxxxxxxxxxx> wrote: > Author: Adrian Chadd <adrian@xxxxxxxxxxx> > Date: Sun May 15 07:15:54 2016 -0700 > > [b43] don't unconditionally fall back to CCK if the rate is 6MB OFDM. > > Check the current PHY operating mode (gmode) to see if we should > fall back from 6MB OFDM to 11MB CCK. For 5GHz operation this isn't > allowed. > > Note, the fallback lookup is only done for RTS rates; normal fallback > rates are done via mac80211 and aren't affected by this change. > > Signed-off-by: Adrian Chadd <adrian@xxxxxxxxxxx> This makes sense. I guess you tested this on actual hardware? In the final submission please send this to Kalle Valo and add [PATCH] to the subject, so tools can pick this up. > diff --git a/drivers/net/wireless/broadcom/b43/xmit.c > b/drivers/net/wireless/broadcom/b43/xmit.c > index f620126..fbf0e92 100644 > --- a/drivers/net/wireless/broadcom/b43/xmit.c > +++ b/drivers/net/wireless/broadcom/b43/xmit.c > @@ -205,7 +205,7 @@ static u16 b43_generate_tx_phy_ctl1(struct > b43_wldev *dev, u8 bitrate) > return control; > } > > -static u8 b43_calc_fallback_rate(u8 bitrate) > +static u8 b43_calc_fallback_rate(u8 bitrate, int gmode) > { > switch (bitrate) { > case B43_CCK_RATE_1MB: > @@ -216,8 +216,16 @@ static u8 b43_calc_fallback_rate(u8 bitrate) > return B43_CCK_RATE_2MB; > case B43_CCK_RATE_11MB: > return B43_CCK_RATE_5MB; > + > + /* > + * Don't just fallback to CCK; it may be in 5GHz operation > + * and falling back to CCK won't work out very well. > + */ > case B43_OFDM_RATE_6MB: > - return B43_CCK_RATE_5MB; > + if (gmode) > + return B43_CCK_RATE_5MB; > + else > + return B43_OFDM_RATE_6MB; > case B43_OFDM_RATE_9MB: > return B43_OFDM_RATE_6MB; > case B43_OFDM_RATE_12MB: > @@ -438,7 +446,7 @@ int b43_generate_txhdr(struct b43_wldev *dev, > > rts_rate = rts_cts_rate ? rts_cts_rate->hw_value : > B43_CCK_RATE_1MB; > rts_rate_ofdm = b43_is_ofdm_rate(rts_rate); > - rts_rate_fb = b43_calc_fallback_rate(rts_rate); > + rts_rate_fb = b43_calc_fallback_rate(rts_rate, phy->gmode); > rts_rate_fb_ofdm = b43_is_ofdm_rate(rts_rate_fb); > > if (rates[0].flags & IEEE80211_TX_RC_USE_CTS_PROTECT) {
Attachment:
pgpKgvVFN5FY4.pgp
Description: OpenPGP digital signature