diff mbox series

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

Message ID 20220711010816.45927-10-kieran.frewen@morsemicro.com (mailing list archive)
State Changes Requested
Delegated to: Johannes Berg
Headers show
Series Additional support for 802.11ah (S1G) | expand

Commit Message

Kieran Frewen July 11, 2022, 1:08 a.m. UTC
Add S1G rate information to netlink STA rate message.

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

Comments

Jeff Johnson July 13, 2022, 12:48 a.m. UTC | #1
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@morsemicro.com>
> Signed-off-by: Bassem Dawood <bassem@morsemicro.com>
> ---
>   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;
diff mbox series

Patch

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)
+ * @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;
 	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;