]> xenbits.xensource.com Git - arm/linux.git/commitdiff
staging: vt6656: correct packet types for CTS protect, mode.
authorMalcolm Priestley <tvboxspy@gmail.com>
Wed, 8 Jan 2020 21:40:58 +0000 (21:40 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Sat, 1 Feb 2020 09:34:33 +0000 (09:34 +0000)
commit d971fdd3412f8342747778fb59b8803720ed82b1 upstream.

It appears that the driver still transmits in CTS protect mode even
though it is not enabled in mac80211.

That is both packet types PK_TYPE_11GA and PK_TYPE_11GB both use CTS protect.
The only difference between them GA does not use B rates.

Find if only B rate in GB or GA in protect mode otherwise transmit packets
as PK_TYPE_11A.

Cc: stable <stable@vger.kernel.org>
Signed-off-by: Malcolm Priestley <tvboxspy@gmail.com>
Link: https://lore.kernel.org/r/9c1323ff-dbb3-0eaa-43e1-9453f7390dc0@gmail.com
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/vt6656/device.h
drivers/staging/vt6656/rxtx.c

index 50e1c89180409cc50f6e96633dedc46bd3b8ae95..e2fabe818b19bfdf25297dcbc7843a88c5a7b677 100644 (file)
@@ -52,6 +52,8 @@
 #define RATE_AUTO      12
 
 #define MAX_RATE                       12
+#define VNT_B_RATES    (BIT(RATE_1M) | BIT(RATE_2M) |\
+                       BIT(RATE_5M) | BIT(RATE_11M))
 
 /*
  * device specific
index 4e9cfacf75f29aef034c7016310535f4f6ebae89..ae5fad101d1edbea01c0917567329994d7bb1a60 100644 (file)
@@ -815,10 +815,14 @@ int vnt_tx_packet(struct vnt_private *priv, struct sk_buff *skb)
                if (info->band == NL80211_BAND_5GHZ) {
                        pkt_type = PK_TYPE_11A;
                } else {
-                       if (tx_rate->flags & IEEE80211_TX_RC_USE_CTS_PROTECT)
-                               pkt_type = PK_TYPE_11GB;
-                       else
-                               pkt_type = PK_TYPE_11GA;
+                       if (tx_rate->flags & IEEE80211_TX_RC_USE_CTS_PROTECT) {
+                               if (priv->basic_rates & VNT_B_RATES)
+                                       pkt_type = PK_TYPE_11GB;
+                               else
+                                       pkt_type = PK_TYPE_11GA;
+                       } else {
+                               pkt_type = PK_TYPE_11A;
+                       }
                }
        } else {
                pkt_type = PK_TYPE_11B;