[b43] don't unconditionally fall back to CCK if the rate is 6MB OFDM.

Michael Büsch m at bues.ch
Sun May 15 07:32:17 PDT 2016


On Sun, 15 May 2016 07:23:25 -0700
Adrian Chadd <adrian at freebsd.org> wrote:

> Author: Adrian Chadd <adrian at freebsd.org>
> 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 at freebsd.org>


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) {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 819 bytes
Desc: OpenPGP digital signature
URL: <http://lists.infradead.org/pipermail/b43-dev/attachments/20160515/c119f07f/attachment.sig>


More information about the b43-dev mailing list