Search Linux Wireless

Re: [PATCH 09/12] nl80211: support advertising S1G rate information

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 7/10/2022 6:08 PM, Kieran Frewen wrote:
Add S1G rate information to netlink STA rate message.

Signed-off-by: Kieran Frewen <kieran.frewen@xxxxxxxxxxxxxx>
Signed-off-by: Bassem Dawood <bassem@xxxxxxxxxxxxxx>
---
  include/uapi/linux/nl80211.h | 14 ++++++++++++++
  net/wireless/nl80211.c       | 23 +++++++++++++++++++++++
  2 files changed, 37 insertions(+)

diff --git a/include/uapi/linux/nl80211.h b/include/uapi/linux/nl80211.h
index 71074332ccc5..19cf030004e9 100644
--- a/include/uapi/linux/nl80211.h
+++ b/include/uapi/linux/nl80211.h
@@ -3539,6 +3539,13 @@ enum nl80211_eht_ru_alloc {
   *	(u8, see &enum nl80211_eht_gi)
   * @NL80211_RATE_INFO_EHT_RU_ALLOC: EHT RU allocation, if not present then
   *	non-OFDMA was used (u8, see &enum nl80211_eht_ru_alloc)
+ * @NL80211_RATE_INFO_S1G_MCS: S1G MCS index (u8, 0-10)
+ * @NL80211_RATE_INFO_S1G_nss: S1G NSS value (u8, 1-4)

nit: s/nss/NSS/

+ * @NL80211_RATE_INFO_1_MHZ_WIDTH: 1 MHz S1G rate
+ * @NL80211_RATE_INFO_2_MHZ_WIDTH: 2 MHz S1G rate
+ * @NL80211_RATE_INFO_4_MHZ_WIDTH: 4 MHz S1G rate
+ * @NL80211_RATE_INFO_8_MHZ_WIDTH: 8 MHz S1G rate
+ * @NL80211_RATE_INFO_16_MHZ_WIDTH: 16 MHz S1G rate
   * @__NL80211_RATE_INFO_AFTER_LAST: internal use
   */
  enum nl80211_rate_info {
@@ -3565,6 +3572,13 @@ enum nl80211_rate_info {
  	NL80211_RATE_INFO_EHT_NSS,
  	NL80211_RATE_INFO_EHT_GI,
  	NL80211_RATE_INFO_EHT_RU_ALLOC,
+	NL80211_RATE_INFO_S1G_MCS,
+	NL80211_RATE_INFO_S1G_NSS,
+	NL80211_RATE_INFO_1_MHZ_WIDTH,
+	NL80211_RATE_INFO_2_MHZ_WIDTH,
+	NL80211_RATE_INFO_4_MHZ_WIDTH,
+	NL80211_RATE_INFO_8_MHZ_WIDTH,
+	NL80211_RATE_INFO_16_MHZ_WIDTH,
/* keep last */
  	__NL80211_RATE_INFO_AFTER_LAST,
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index 077dc2938551..70efed2b5899 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -6073,6 +6073,21 @@ bool nl80211_put_sta_rate(struct sk_buff *msg, struct rate_info *info, int attr)
  		return false;
switch (info->bw) {
+	case RATE_INFO_BW_1:
+		rate_flg = NL80211_RATE_INFO_1_MHZ_WIDTH;
+		break;
+	case RATE_INFO_BW_2:
+		rate_flg = NL80211_RATE_INFO_2_MHZ_WIDTH;
+		break;
+	case RATE_INFO_BW_4:
+		rate_flg = NL80211_RATE_INFO_4_MHZ_WIDTH;
+		break;
+	case RATE_INFO_BW_8:
+		rate_flg = NL80211_RATE_INFO_8_MHZ_WIDTH;
+		break;
+	case RATE_INFO_BW_16:
+		rate_flg = NL80211_RATE_INFO_16_MHZ_WIDTH;
+		break;

does it make sense to order these 1 2 4 5 8 10 16 20...

  	case RATE_INFO_BW_5:
  		rate_flg = NL80211_RATE_INFO_5_MHZ_WIDTH;
  		break;
@@ -6137,6 +6152,14 @@ bool nl80211_put_sta_rate(struct sk_buff *msg, struct rate_info *info, int attr)
  		    nla_put_u8(msg, NL80211_RATE_INFO_HE_RU_ALLOC,
  			       info->he_ru_alloc))
  			return false;
+	} else if (info->flags & RATE_INFO_FLAGS_S1G_MCS) {
+		if (nla_put_u8(msg, NL80211_RATE_INFO_S1G_MCS, info->mcs))
+			return false;
+		if (nla_put_u8(msg, NL80211_RATE_INFO_S1G_NSS, info->nss))
+			return false;
+		if (info->flags & RATE_INFO_FLAGS_SHORT_GI &&
+		    nla_put_flag(msg, NL80211_RATE_INFO_SHORT_GI))
+			return false;
  	} else if (info->flags & RATE_INFO_FLAGS_EHT_MCS) {
  		if (nla_put_u8(msg, NL80211_RATE_INFO_EHT_MCS, info->mcs))
  			return false;




[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Wireless Personal Area Network]     [Linux Bluetooth]     [Wireless Regulations]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite Hiking]     [MIPS Linux]     [ARM Linux]     [Linux RAID]

  Powered by Linux