All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3 0/2] rtl8xxxu: Fill up more TX information
@ 2022-03-25  3:57 Chris Chiu
  2022-03-25  3:57 ` [PATCH v3 1/2] rtl8xxxu: feed antenna information for cfg80211 Chris Chiu
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Chris Chiu @ 2022-03-25  3:57 UTC (permalink / raw)
  To: kvalo, Jes.Sorensen, davem, kuba
  Cc: code, linux-wireless, netdev, linux-kernel, Chris Chiu

The antenna information is missing in rtl8xxxu and txrate is NULL
in 8188cu and 8192cu. Fill up the missing information for iw
commands.

Chris Chiu (2):
  rtl8xxxu: feed antenna information for cfg80211
  rtl8xxxu: fill up txrate info for gen1 chips

 .../wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 104 +++++++++++++-----
 1 file changed, 75 insertions(+), 29 deletions(-)

-- 
2.25.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v3 1/2] rtl8xxxu: feed antenna information for cfg80211
  2022-03-25  3:57 [PATCH v3 0/2] rtl8xxxu: Fill up more TX information Chris Chiu
@ 2022-03-25  3:57 ` Chris Chiu
  2022-04-06 12:12   ` Kalle Valo
  2022-03-25  3:57 ` [PATCH v3 2/2] rtl8xxxu: fill up txrate info for gen1 chips Chris Chiu
  2022-04-06  4:41 ` [PATCH v3 0/2] rtl8xxxu: Fill up more TX information Chris Chiu
  2 siblings, 1 reply; 6+ messages in thread
From: Chris Chiu @ 2022-03-25  3:57 UTC (permalink / raw)
  To: kvalo, Jes.Sorensen, davem, kuba
  Cc: code, linux-wireless, netdev, linux-kernel, Chris Chiu

Fill up the available TX/RX antenna so the iw commands can show
correct antenna information for different chips.

Signed-off-by: Chris Chiu <chris.chiu@canonical.com>
---
 .../wireless/realtek/rtl8xxxu/rtl8xxxu_core.c    | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
index 06d59ffb7444..d225a1257530 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
@@ -1607,6 +1607,7 @@ static void rtl8xxxu_print_chipinfo(struct rtl8xxxu_priv *priv)
 static int rtl8xxxu_identify_chip(struct rtl8xxxu_priv *priv)
 {
 	struct device *dev = &priv->udev->dev;
+	struct ieee80211_hw *hw = priv->hw;
 	u32 val32, bonding;
 	u16 val16;
 
@@ -1684,6 +1685,9 @@ static int rtl8xxxu_identify_chip(struct rtl8xxxu_priv *priv)
 		priv->has_wifi = 1;
 	}
 
+	hw->wiphy->available_antennas_tx = BIT(priv->tx_paths) - 1;
+	hw->wiphy->available_antennas_rx = BIT(priv->rx_paths) - 1;
+
 	switch (priv->rtl_chip) {
 	case RTL8188E:
 	case RTL8192E:
@@ -4282,6 +4286,17 @@ static void rtl8xxxu_cam_write(struct rtl8xxxu_priv *priv,
 	rtl8xxxu_debug = tmp_debug;
 }
 
+static
+int rtl8xxxu_get_antenna(struct ieee80211_hw *hw, u32 *tx_ant, u32 *rx_ant)
+{
+	struct rtl8xxxu_priv *priv = hw->priv;
+
+	*tx_ant = BIT(priv->tx_paths) - 1;
+	*rx_ant = BIT(priv->rx_paths) - 1;
+
+	return 0;
+}
+
 static void rtl8xxxu_sw_scan_start(struct ieee80211_hw *hw,
 				   struct ieee80211_vif *vif, const u8 *mac)
 {
@@ -6472,6 +6487,7 @@ static const struct ieee80211_ops rtl8xxxu_ops = {
 	.set_key = rtl8xxxu_set_key,
 	.ampdu_action = rtl8xxxu_ampdu_action,
 	.sta_statistics = rtl8xxxu_sta_statistics,
+	.get_antenna = rtl8xxxu_get_antenna,
 };
 
 static int rtl8xxxu_parse_usb(struct rtl8xxxu_priv *priv,
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v3 2/2] rtl8xxxu: fill up txrate info for gen1 chips
  2022-03-25  3:57 [PATCH v3 0/2] rtl8xxxu: Fill up more TX information Chris Chiu
  2022-03-25  3:57 ` [PATCH v3 1/2] rtl8xxxu: feed antenna information for cfg80211 Chris Chiu
@ 2022-03-25  3:57 ` Chris Chiu
  2022-04-06 11:28   ` [v3,2/2] " Kalle Valo
  2022-04-06  4:41 ` [PATCH v3 0/2] rtl8xxxu: Fill up more TX information Chris Chiu
  2 siblings, 1 reply; 6+ messages in thread
From: Chris Chiu @ 2022-03-25  3:57 UTC (permalink / raw)
  To: kvalo, Jes.Sorensen, davem, kuba
  Cc: code, linux-wireless, netdev, linux-kernel, Chris Chiu

RTL8188CUS/RTL8192CU(gen1) don't support rate adatptive report hence
no real txrate info can be retrieved. The vendor driver reports the
highest rate in HT capabilities from the IEs to avoid empty txrate.
This commit initiates the txrate information with the highest supported
rate negotiated with AP. The gen2 chip keeps update the txrate from
the rate adaptive reports, and gen1 chips at least have non-NULL txrate
after associated.

Signed-off-by: Chris Chiu <chris.chiu@canonical.com>
---

Changelog:
  v3:
   - Move the rtl8xxxu_legacy_ratetable[] and rtl8xxxu_desc_to_mcsrate()
     to the proper place instead of adding them
     
  v2:
   - Use the 'static const' for rtl8xxxu_legacy_ratetable[]


 .../wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 88 +++++++++++++------
 1 file changed, 59 insertions(+), 29 deletions(-)

diff --git a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
index d225a1257530..6d9b5cf01b11 100644
--- a/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
+++ b/drivers/net/wireless/realtek/rtl8xxxu/rtl8xxxu_core.c
@@ -4473,6 +4473,35 @@ void rtl8xxxu_gen1_init_aggregation(struct rtl8xxxu_priv *priv)
 	priv->rx_buf_aggregation = 1;
 }
 
+static const struct ieee80211_rate rtl8xxxu_legacy_ratetable[] = {
+	{.bitrate = 10, .hw_value = 0x00,},
+	{.bitrate = 20, .hw_value = 0x01,},
+	{.bitrate = 55, .hw_value = 0x02,},
+	{.bitrate = 110, .hw_value = 0x03,},
+	{.bitrate = 60, .hw_value = 0x04,},
+	{.bitrate = 90, .hw_value = 0x05,},
+	{.bitrate = 120, .hw_value = 0x06,},
+	{.bitrate = 180, .hw_value = 0x07,},
+	{.bitrate = 240, .hw_value = 0x08,},
+	{.bitrate = 360, .hw_value = 0x09,},
+	{.bitrate = 480, .hw_value = 0x0a,},
+	{.bitrate = 540, .hw_value = 0x0b,},
+};
+
+static void rtl8xxxu_desc_to_mcsrate(u16 rate, u8 *mcs, u8 *nss)
+{
+	if (rate <= DESC_RATE_54M)
+		return;
+
+	if (rate >= DESC_RATE_MCS0 && rate <= DESC_RATE_MCS15) {
+		if (rate < DESC_RATE_MCS8)
+			*nss = 1;
+		else
+			*nss = 2;
+		*mcs = rate - DESC_RATE_MCS0;
+	}
+}
+
 static void rtl8xxxu_set_basic_rates(struct rtl8xxxu_priv *priv, u32 rate_cfg)
 {
 	struct ieee80211_hw *hw = priv->hw;
@@ -4534,9 +4563,12 @@ rtl8xxxu_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 	struct rtl8xxxu_priv *priv = hw->priv;
 	struct device *dev = &priv->udev->dev;
 	struct ieee80211_sta *sta;
+	struct rtl8xxxu_ra_report *rarpt;
 	u32 val32;
 	u8 val8;
 
+	rarpt = &priv->ra_report;
+
 	if (changed & BSS_CHANGED_ASSOC) {
 		dev_dbg(dev, "Changed ASSOC: %i!\n", bss_conf->assoc);
 
@@ -4545,6 +4577,10 @@ rtl8xxxu_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 		if (bss_conf->assoc) {
 			u32 ramask;
 			int sgi = 0;
+			u8 highest_rate;
+			u8 mcs = 0, nss = 0;
+			u32 bit_rate;
+
 
 			rcu_read_lock();
 			sta = ieee80211_find_sta(vif, bss_conf->bssid);
@@ -4569,6 +4605,29 @@ rtl8xxxu_bss_info_changed(struct ieee80211_hw *hw, struct ieee80211_vif *vif,
 				sgi = 1;
 			rcu_read_unlock();
 
+			highest_rate = fls(ramask) - 1;
+			if (highest_rate < DESC_RATE_MCS0) {
+				rarpt->txrate.legacy =
+				rtl8xxxu_legacy_ratetable[highest_rate].bitrate;
+			} else {
+				rtl8xxxu_desc_to_mcsrate(highest_rate,
+							 &mcs, &nss);
+				rarpt->txrate.flags |= RATE_INFO_FLAGS_MCS;
+
+				rarpt->txrate.mcs = mcs;
+				rarpt->txrate.nss = nss;
+
+				if (sgi) {
+					rarpt->txrate.flags |=
+						RATE_INFO_FLAGS_SHORT_GI;
+				}
+
+				rarpt->txrate.bw |= RATE_INFO_BW_20;
+			}
+			bit_rate = cfg80211_calculate_bitrate(&rarpt->txrate);
+			rarpt->bit_rate = bit_rate;
+			rarpt->desc_rate = highest_rate;
+
 			priv->vif = vif;
 			priv->rssi_level = RTL8XXXU_RATR_STA_INIT;
 
@@ -5419,35 +5478,6 @@ void rtl8723bu_handle_bt_info(struct rtl8xxxu_priv *priv)
 	}
 }
 
-static struct ieee80211_rate rtl8xxxu_legacy_ratetable[] = {
-	{.bitrate = 10, .hw_value = 0x00,},
-	{.bitrate = 20, .hw_value = 0x01,},
-	{.bitrate = 55, .hw_value = 0x02,},
-	{.bitrate = 110, .hw_value = 0x03,},
-	{.bitrate = 60, .hw_value = 0x04,},
-	{.bitrate = 90, .hw_value = 0x05,},
-	{.bitrate = 120, .hw_value = 0x06,},
-	{.bitrate = 180, .hw_value = 0x07,},
-	{.bitrate = 240, .hw_value = 0x08,},
-	{.bitrate = 360, .hw_value = 0x09,},
-	{.bitrate = 480, .hw_value = 0x0a,},
-	{.bitrate = 540, .hw_value = 0x0b,},
-};
-
-static void rtl8xxxu_desc_to_mcsrate(u16 rate, u8 *mcs, u8 *nss)
-{
-	if (rate <= DESC_RATE_54M)
-		return;
-
-	if (rate >= DESC_RATE_MCS0 && rate <= DESC_RATE_MCS15) {
-		if (rate < DESC_RATE_MCS8)
-			*nss = 1;
-		else
-			*nss = 2;
-		*mcs = rate - DESC_RATE_MCS0;
-	}
-}
-
 static void rtl8xxxu_c2hcmd_callback(struct work_struct *work)
 {
 	struct rtl8xxxu_priv *priv;
-- 
2.25.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH v3 0/2] rtl8xxxu: Fill up more TX information
  2022-03-25  3:57 [PATCH v3 0/2] rtl8xxxu: Fill up more TX information Chris Chiu
  2022-03-25  3:57 ` [PATCH v3 1/2] rtl8xxxu: feed antenna information for cfg80211 Chris Chiu
  2022-03-25  3:57 ` [PATCH v3 2/2] rtl8xxxu: fill up txrate info for gen1 chips Chris Chiu
@ 2022-04-06  4:41 ` Chris Chiu
  2 siblings, 0 replies; 6+ messages in thread
From: Chris Chiu @ 2022-04-06  4:41 UTC (permalink / raw)
  To: kvalo, Jes.Sorensen, davem, kuba
  Cc: code, linux-wireless, netdev, linux-kernel

On Fri, Mar 25, 2022 at 11:57 AM Chris Chiu <chris.chiu@canonical.com> wrote:
>
> The antenna information is missing in rtl8xxxu and txrate is NULL
> in 8188cu and 8192cu. Fill up the missing information for iw
> commands.
>
> Chris Chiu (2):
>   rtl8xxxu: feed antenna information for cfg80211
>   rtl8xxxu: fill up txrate info for gen1 chips
>
>  .../wireless/realtek/rtl8xxxu/rtl8xxxu_core.c | 104 +++++++++++++-----
>  1 file changed, 75 insertions(+), 29 deletions(-)
>
> --
> 2.25.1
>

Gentle ping. Any comment or suggestion is appreciated. Thanks

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [v3,2/2] rtl8xxxu: fill up txrate info for gen1 chips
  2022-03-25  3:57 ` [PATCH v3 2/2] rtl8xxxu: fill up txrate info for gen1 chips Chris Chiu
@ 2022-04-06 11:28   ` Kalle Valo
  0 siblings, 0 replies; 6+ messages in thread
From: Kalle Valo @ 2022-04-06 11:28 UTC (permalink / raw)
  To: Chris Chiu
  Cc: Jes.Sorensen, davem, kuba, code, linux-wireless, netdev,
	linux-kernel, Chris Chiu

Chris Chiu <chris.chiu@canonical.com> wrote:

> RTL8188CUS/RTL8192CU(gen1) don't support rate adaptive report hence
> no real txrate info can be retrieved. The vendor driver reports the
> highest rate in HT capabilities from the IEs to avoid empty txrate.
> This commit initiates the txrate information with the highest supported
> rate negotiated with AP. The gen2 chip keeps update the txrate from
> the rate adaptive reports, and gen1 chips at least have non-NULL txrate
> after associated.
> 
> Signed-off-by: Chris Chiu <chris.chiu@canonical.com>

You ignored Reto's comment in v2 about misspelling of adaptive, but I'll fix
that during commit.

-- 
https://patchwork.kernel.org/project/linux-wireless/patch/20220325035735.4745-3-chris.chiu@canonical.com/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH v3 1/2] rtl8xxxu: feed antenna information for cfg80211
  2022-03-25  3:57 ` [PATCH v3 1/2] rtl8xxxu: feed antenna information for cfg80211 Chris Chiu
@ 2022-04-06 12:12   ` Kalle Valo
  0 siblings, 0 replies; 6+ messages in thread
From: Kalle Valo @ 2022-04-06 12:12 UTC (permalink / raw)
  To: Chris Chiu
  Cc: Jes.Sorensen, davem, kuba, code, linux-wireless, netdev,
	linux-kernel, Chris Chiu

Chris Chiu <chris.chiu@canonical.com> wrote:

> Fill up the available TX/RX antenna so the iw commands can show
> correct antenna information for different chips.
> 
> Signed-off-by: Chris Chiu <chris.chiu@canonical.com>

2 patches applied to wireless-next.git, thanks.

21338c5bdeb9 rtl8xxxu: feed antenna information for cfg80211
bd917b3d28c9 rtl8xxxu: fill up txrate info for gen1 chips

-- 
https://patchwork.kernel.org/project/linux-wireless/patch/20220325035735.4745-2-chris.chiu@canonical.com/

https://wireless.wiki.kernel.org/en/developers/documentation/submittingpatches


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-04-06 15:11 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-03-25  3:57 [PATCH v3 0/2] rtl8xxxu: Fill up more TX information Chris Chiu
2022-03-25  3:57 ` [PATCH v3 1/2] rtl8xxxu: feed antenna information for cfg80211 Chris Chiu
2022-04-06 12:12   ` Kalle Valo
2022-03-25  3:57 ` [PATCH v3 2/2] rtl8xxxu: fill up txrate info for gen1 chips Chris Chiu
2022-04-06 11:28   ` [v3,2/2] " Kalle Valo
2022-04-06  4:41 ` [PATCH v3 0/2] rtl8xxxu: Fill up more TX information Chris Chiu

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.