Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 16 Jan 2019 12:11:30 +0000 (UTC)
From:      Andriy Voskoboinyk <avos@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r343092 - in head/sys/dev/rtwn: rtl8192c rtl8812a
Message-ID:  <201901161211.x0GCBUhP023611@repo.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: avos
Date: Wed Jan 16 12:11:29 2019
New Revision: 343092
URL: https://svnweb.freebsd.org/changeset/base/343092

Log:
  rtwn(4): clear 'basic' rate bit before calculating RTS/CTS rate.
  
  Rate tables have this bit set to indicate minimal set of basic rates;
  however, it overlappes with MCS bit, so rate2ridx() will treat them as
  an 11n rate.
  
  Due to the current rates setup the issue can be reproduced only
  in 5GHz band with 11n / protection enabled.
  
  Tested with RTL8821AU, HOSTAP mode.
  
  MFC after:	5 days

Modified:
  head/sys/dev/rtwn/rtl8192c/r92c_tx.c
  head/sys/dev/rtwn/rtl8812a/r12a_tx.c

Modified: head/sys/dev/rtwn/rtl8192c/r92c_tx.c
==============================================================================
--- head/sys/dev/rtwn/rtl8192c/r92c_tx.c	Wed Jan 16 12:04:29 2019	(r343091)
+++ head/sys/dev/rtwn/rtl8192c/r92c_tx.c	Wed Jan 16 12:11:29 2019	(r343092)
@@ -103,7 +103,7 @@ r92c_tx_protection(struct rtwn_softc *sc, struct r92c_
 			rate = rtwn_ctl_mcsrate(ic->ic_rt, ridx);
 		else
 			rate = ieee80211_ctl_rate(ic->ic_rt, ridx2rate[ridx]);
-		ridx = rate2ridx(rate);
+		ridx = rate2ridx(IEEE80211_RV(rate));
 
 		txd->txdw4 |= htole32(SM(R92C_TXDW4_RTSRATE, ridx));
 		/* RTS rate fallback limit (max). */

Modified: head/sys/dev/rtwn/rtl8812a/r12a_tx.c
==============================================================================
--- head/sys/dev/rtwn/rtl8812a/r12a_tx.c	Wed Jan 16 12:04:29 2019	(r343091)
+++ head/sys/dev/rtwn/rtl8812a/r12a_tx.c	Wed Jan 16 12:11:29 2019	(r343092)
@@ -111,7 +111,7 @@ r12a_tx_protection(struct rtwn_softc *sc, struct r12a_
 			rate = rtwn_ctl_mcsrate(ic->ic_rt, ridx);
 		else
 			rate = ieee80211_ctl_rate(ic->ic_rt, ridx2rate[ridx]);
-		ridx = rate2ridx(rate);
+		ridx = rate2ridx(IEEE80211_RV(rate));
 
 		txd->txdw4 |= htole32(SM(R12A_TXDW4_RTSRATE, ridx));
 		/* RTS rate fallback limit (max). */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201901161211.x0GCBUhP023611>