The branch main has been updated by bz:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=2ab7cbdc346e2a174a7bee4ce44c4f78b1ca093b

commit 2ab7cbdc346e2a174a7bee4ce44c4f78b1ca093b
Author:     Bjoern A. Zeeb <b...@freebsd.org>
AuthorDate: 2025-06-03 12:35:33 +0000
Commit:     Bjoern A. Zeeb <b...@freebsd.org>
CommitDate: 2025-06-09 21:44:26 +0000

    net80211: LinuxKPI: migrate HE defines to net80211, put correct values
    
    Migrate most LinuxKPI 802.11 definitions for HE IEs to net80211.
    During that process also properly define them as most of them only
    had dummy values.  Some of the definitions are sparse;  that is, only
    the bits used by drivers so far were listed and annotated with the
    standards section.
    
    There seems to be little point to mangle the names and have two copies
    of all these bit field definitions.  We can add "_S" (shift/mask)
    variants to those we need in net80211 (if we do).
    
    Sponsored by:   The FreeBSD Foundation
    MFC after:      3 days
    Reviewed by:    adrian
    Differential Revision: https://reviews.freebsd.org/D50677
---
 .../linuxkpi/common/include/linux/ieee80211.h      |   4 -
 sys/compat/linuxkpi/common/include/net/cfg80211.h  | 172 +----------------
 sys/net80211/ieee80211.h                           | 209 ++++++++++++++++++++-
 3 files changed, 209 insertions(+), 176 deletions(-)

diff --git a/sys/compat/linuxkpi/common/include/linux/ieee80211.h 
b/sys/compat/linuxkpi/common/include/linux/ieee80211.h
index fe2055f05969..3644ef80861b 100644
--- a/sys/compat/linuxkpi/common/include/linux/ieee80211.h
+++ b/sys/compat/linuxkpi/common/include/linux/ieee80211.h
@@ -495,10 +495,6 @@ enum ieee80211_category {
        WLAN_CATEGORY_SA_QUERY          = 8,    /* 
net80211::IEEE80211_ACTION_CAT_SA_QUERY */
 };
 
-struct ieee80211_he_6ghz_capa {
-       uint16_t capa;
-};
-
 /* 80211-2020 9.3.3.2 Format of Management frames */
 struct ieee80211_mgmt {
        __le16          frame_control;
diff --git a/sys/compat/linuxkpi/common/include/net/cfg80211.h 
b/sys/compat/linuxkpi/common/include/net/cfg80211.h
index c806afb971e6..18b34f0e90ec 100644
--- a/sys/compat/linuxkpi/common/include/net/cfg80211.h
+++ b/sys/compat/linuxkpi/common/include/net/cfg80211.h
@@ -44,6 +44,8 @@
 #include <linux/workqueue.h>
 #include <net/regulatory.h>
 
+#include <net80211/ieee80211.h>
+
 /* linux_80211.c */
 extern int linuxkpi_debug_80211;
 #ifndef        D80211_TODO
@@ -640,176 +642,6 @@ struct linuxkpi_ieee80211_regdomain {
        struct ieee80211_reg_rule               reg_rules[];
 };
 
-/* XXX-BZ this are insensible values probably ... */
-#define        IEEE80211_HE_MAC_CAP0_HTC_HE                    0x1
-#define        IEEE80211_HE_MAC_CAP0_TWT_REQ                   0x2
-#define        IEEE80211_HE_MAC_CAP0_TWT_RES                   0x4
-
-#define        IEEE80211_HE_MAC_CAP1_LINK_ADAPTATION           0x1
-#define        IEEE80211_HE_MAC_CAP1_MULTI_TID_AGG_RX_QOS_8    0x2
-#define        IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US       0x4
-#define        IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_MASK       0x8
-
-#define        IEEE80211_HE_MAC_CAP2_32BIT_BA_BITMAP           0x1
-#define        IEEE80211_HE_MAC_CAP2_ACK_EN                    0x2
-#define        IEEE80211_HE_MAC_CAP2_BSR                       0x4
-#define        IEEE80211_HE_MAC_CAP2_LINK_ADAPTATION           0x8
-#define        IEEE80211_HE_MAC_CAP2_BCAST_TWT                 0x10
-#define        IEEE80211_HE_MAC_CAP2_ALL_ACK                   0x20
-#define        IEEE80211_HE_MAC_CAP2_MU_CASCADING              0x40
-#define        IEEE80211_HE_MAC_CAP2_TRS                       0x80
-
-#define        IEEE80211_HE_MAC_CAP3_OMI_CONTROL               0x02
-#define        IEEE80211_HE_MAC_CAP3_OFDMA_RA                  0x04
-#define        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_1   0x08
-#define        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_2   0x10
-#define        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3   0x18
-#define        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK    0x18
-#define        IEEE80211_HE_MAC_CAP3_FLEX_TWT_SCHED            0x40
-#define        IEEE80211_HE_MAC_CAP3_RX_CTRL_FRAME_TO_MULTIBSS 0x80
-
-#define        IEEE80211_HE_MAC_CAP4_AMDSU_IN_AMPDU            0x1
-#define        IEEE80211_HE_MAC_CAP4_BQR                       0x2
-#define        IEEE80211_HE_MAC_CAP4_MULTI_TID_AGG_TX_QOS_B39  0x4
-#define        IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU            0x8
-#define        IEEE80211_HE_MAC_CAP4_OPS                       0x10
-#define        IEEE80211_HE_MAC_CAP4_BSRP_BQRP_A_MPDU_AGG      0x20
-
-#define        IEEE80211_HE_MAC_CAP5_HE_DYNAMIC_SM_PS          0x1
-#define        IEEE80211_HE_MAC_CAP5_HT_VHT_TRIG_FRAME_RX      0x2
-#define        IEEE80211_HE_MAC_CAP5_MULTI_TID_AGG_TX_QOS_B40  0x4
-#define        IEEE80211_HE_MAC_CAP5_MULTI_TID_AGG_TX_QOS_B41  0x8
-#define        IEEE80211_HE_MAC_CAP5_UL_2x996_TONE_RU          0x10
-#define        IEEE80211_HE_MAC_CAP5_OM_CTRL_UL_MU_DATA_DIS_RX 0x20
-#define        IEEE80211_HE_MAC_CAP5_PUNCTURED_SOUNDING        0x40
-#define        IEEE80211_HE_MAC_CAP5_SUBCHAN_SELECTIVE_TRANSMISSION    0x80
-
-#define        IEEE80211_HE_MCS_NOT_SUPPORTED                  0x0
-#define        IEEE80211_HE_MCS_SUPPORT_0_7                    0x1
-#define        IEEE80211_HE_MCS_SUPPORT_0_9                    0x2
-#define        IEEE80211_HE_MCS_SUPPORT_0_11                   0x4
-
-#define        IEEE80211_HE_6GHZ_CAP_TX_ANTPAT_CONS            0x01
-#define        IEEE80211_HE_6GHZ_CAP_RX_ANTPAT_CONS            0x02
-#define        IEEE80211_HE_6GHZ_CAP_MIN_MPDU_START            0x04
-#define        IEEE80211_HE_6GHZ_CAP_MAX_MPDU_LEN              0x08
-#define        IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP         0x10
-#define        IEEE80211_HE_6GHZ_CAP_SM_PS                     0x20
-
-#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G            
0x1
-#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G       
0x2
-#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G             
0x4
-#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G      
0x8
-#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_2G        
0x10
-#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_5G        
0x20
-#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_MASK                    
0x40
-#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_MASK_ALL                
0xff
-
-#define        IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A            0x1
-#define        IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD    0x2
-#define        IEEE80211_HE_PHY_CAP1_MIDAMBLE_RX_TX_MAX_NSTS   0x4
-#define        IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK     0x8
-#define        IEEE80211_HE_PHY_CAP1_HE_LTF_AND_GI_FOR_HE_PPDUS_0_8US  0x10
-
-#define        IEEE80211_HE_PHY_CAP2_MIDAMBLE_RX_TX_MAX_NSTS   0x1
-#define        IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US      0x2
-#define        IEEE80211_HE_PHY_CAP2_STBC_TX_UNDER_80MHZ       0x4
-#define        IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ       0x8
-#define        IEEE80211_HE_PHY_CAP2_DOPPLER_TX                0x10
-#define        IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO     0x20
-#define        IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO        0x40
-
-#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_MASK     0x1
-#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_NO_DCM   0x2
-#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_NO_DCM   0x4
-#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_RX_NSS_1          0x8
-#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_TX_NSS_1          0x10
-#define        IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER             0x20
-#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_16_QAM   0x40
-#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_16_QAM   0x80
-#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_TX_NSS_2          0x10
-#define        IEEE80211_HE_PHY_CAP3_RX_PARTIAL_BW_SU_IN_20MHZ_MU      0x20
-#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_BPSK     0x40
-#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_BPSK     0x80
-#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_MASK     0x80
-#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_QPSK     0x80
-#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_QPSK     0x80
-#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_RX_NSS_2          0x80
-
-#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_8  0x1
-#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_8  0x2
-#define        IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE                     0x4
-#define        IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER                     0x8
-#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_4  0x10
-#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_4  0x20
-#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_MASK       
0x40
-#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_MASK       
0x80
-#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_5          
0x80
-#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_5          
0x80
-
-#define        IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_2      
0x1
-#define        IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_2      
0x2
-#define        IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK   
0x4
-#define        IEEE80211_HE_PHY_CAP5_NG16_MU_FEEDBACK                          
0x8
-#define        IEEE80211_HE_PHY_CAP5_NG16_SU_FEEDBACK                          
0x10
-#define        IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK   
0x20
-
-#define        IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT     0x1
-#define        IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMER_FB     0x2
-#define        IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMER_FB     0x4
-#define        IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB    0x8
-#define        IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB 0x20
-#define        IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_42_SU       0x40
-#define        IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU       0x80
-#define        IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE      0x80
-#define        IEEE80211_HE_PHY_CAP6_TRIG_CQI_FB               0x80
-#define        IEEE80211_HE_PHY_CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO       0x80
-
-#define        IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI  0x1
-#define        IEEE80211_HE_PHY_CAP7_MAX_NC_1                          0x2
-#define        IEEE80211_HE_PHY_CAP7_MAX_NC_2                          0x4
-#define        IEEE80211_HE_PHY_CAP7_MAX_NC_MASK                       0x6
-#define        IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_AR             0x8
-#define        IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP           0x10
-#define        IEEE80211_HE_PHY_CAP7_STBC_RX_ABOVE_80MHZ               0x20
-#define        IEEE80211_HE_PHY_CAP7_STBC_TX_ABOVE_80MHZ               0x40
-#define        IEEE80211_HE_PHY_CAP7_PSR_BASED_SR                      0x80
-
-#define        IEEE80211_HE_PHY_CAP8_20MHZ_IN_160MHZ_HE_PPDU           0x1
-#define        IEEE80211_HE_PHY_CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G      0x2
-#define        IEEE80211_HE_PHY_CAP8_80MHZ_IN_160MHZ_HE_PPDU           0x4
-#define        IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_242                    0x8
-#define        IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_484                    0x10
-#define        IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_996                    0x18
-#define        IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_2x996                  0x20
-#define        IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_MASK                   0x28
-#define        IEEE80211_HE_PHY_CAP8_HE_ER_SU_PPDU_4XLTF_AND_08_US_GI  0x40
-#define        IEEE80211_HE_PHY_CAP8_HE_ER_SU_1XLTF_AND_08_US_GI       0x80
-
-#define        IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_0US           0x1
-#define        IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_16US          0x2
-#define        IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_8US           0x4
-#define        IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_MASK          0x8
-#define        IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_RESERVED      0x10
-#define        IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_POS           0x0
-#define        IEEE80211_HE_PHY_CAP9_NON_TRIGGERED_CQI_FEEDBACK        0x20
-#define        IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_COMP_SIGB     
0x4
-#define        IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_NON_COMP_SIGB 
0x8
-#define        IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU 0x10
-#define        IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU 0x20
-#define        IEEE80211_HE_PHY_CAP9_LONGER_THAN_16_SIGB_OFDM_SYM      0x40
-
-#define        IEEE80211_HE_PHY_CAP10_HE_MU_M1RU_MAX_LTF               0x1
-
-#define        IEEE80211_HE_OPERATION_BSS_COLOR_DISABLED               0x1
-#define        IEEE80211_HE_OPERATION_BSS_COLOR_OFFSET                 0x2
-#define        IEEE80211_HE_OPERATION_ER_SU_DISABLE                    0x4
-
-#define        IEEE80211_HE_SPR_HESIGA_SR_VAL15_ALLOWED                0x01
-#define        IEEE80211_HE_SPR_NON_SRG_OBSS_PD_SR_DISALLOWED          0x02
-#define        IEEE80211_HE_SPR_NON_SRG_OFFSET_PRESENT                 0x04
-#define        IEEE80211_HE_SPR_SRG_INFORMATION_PRESENT                0x08
-
 #define        IEEE80211_EHT_MAC_CAP0_EPCS_PRIO_ACCESS                 0x01
 #define        IEEE80211_EHT_MAC_CAP0_MAX_MPDU_LEN_11454               0x02
 #define        IEEE80211_EHT_MAC_CAP0_MAX_MPDU_LEN_MASK                0x03
diff --git a/sys/net80211/ieee80211.h b/sys/net80211/ieee80211.h
index c782e09a522d..cfe545b24c26 100644
--- a/sys/net80211/ieee80211.h
+++ b/sys/net80211/ieee80211.h
@@ -4,6 +4,10 @@
  * Copyright (c) 2001 Atsushi Onoe
  * Copyright (c) 2002-2009 Sam Leffler, Errno Consulting
  * All rights reserved.
+ * Copyright (c) 2020-2025 The FreeBSD Foundation
+ *
+ * Portions of this software were developed by Björn Zeeb
+ * under sponsorship from the FreeBSD Foundation.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -1109,6 +1113,177 @@ struct ieee80211_ie_vht_txpwrenv {
  * HE
  */
 
+/*
+ * 802.11ax-2021, 9.4.2.248.2 HE MAC Capabilities Information field.
+ */
+/* B0..B7 */
+#define        IEEE80211_HE_MAC_CAP0_HTC_HE                    (1<<0)
+#define        IEEE80211_HE_MAC_CAP0_TWT_REQ                   (1<<1)
+#define        IEEE80211_HE_MAC_CAP0_TWT_RES                   (1<<2)
+
+/* B8..B15 */
+#define        IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_16US       (1<<3)
+#define        IEEE80211_HE_MAC_CAP1_TF_MAC_PAD_DUR_MASK       (1<<3 | 1<<2)
+#define        IEEE80211_HE_MAC_CAP1_MULTI_TID_AGG_RX_QOS_8    (1<<6 | 1<<5 | 
1<<4)
+#define        IEEE80211_HE_MAC_CAP1_LINK_ADAPTATION           (1<<7)
+/* Note: B15|B16 are split between octets %!$@??? */
+
+/* B16..B23 */
+#define        IEEE80211_HE_MAC_CAP2_LINK_ADAPTATION           (1<<0)
+#define        IEEE80211_HE_MAC_CAP2_ALL_ACK                   (1<<1)
+#define        IEEE80211_HE_MAC_CAP2_TRS                       (1<<2)
+#define        IEEE80211_HE_MAC_CAP2_BSR                       (1<<3)
+#define        IEEE80211_HE_MAC_CAP2_BCAST_TWT                 (1<<4)
+#define        IEEE80211_HE_MAC_CAP2_32BIT_BA_BITMAP           (1<<5)
+#define        IEEE80211_HE_MAC_CAP2_MU_CASCADING              (1<<6)
+#define        IEEE80211_HE_MAC_CAP2_ACK_EN                    (1<<7)
+
+/* B24..B31 */
+#define        IEEE80211_HE_MAC_CAP3_OMI_CONTROL               (1<<1)
+#define        IEEE80211_HE_MAC_CAP3_OFDMA_RA                  (1<<2)
+#define        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_1   (1<<3)
+#define        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_2   (1<<4)
+#define        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_EXT_3   (1<<4 | 1<<3)
+#define        IEEE80211_HE_MAC_CAP3_MAX_AMPDU_LEN_EXP_MASK    (1<<4 | 1<<3)
+#define        IEEE80211_HE_MAC_CAP3_FLEX_TWT_SCHED            (1<<6)
+#define        IEEE80211_HE_MAC_CAP3_RX_CTRL_FRAME_TO_MULTIBSS (1<<7)
+
+/* B32..B39 */
+#define        IEEE80211_HE_MAC_CAP4_BSRP_BQRP_A_MPDU_AGG      (1<<0)
+#define        IEEE80211_HE_MAC_CAP4_BQR                       (1<<2)
+#define        IEEE80211_HE_MAC_CAP4_OPS                       (1<<5)
+#define        IEEE80211_HE_MAC_CAP4_AMSDU_IN_AMPDU            (1<<6)
+#define        IEEE80211_HE_MAC_CAP4_MULTI_TID_AGG_TX_QOS_B39  (1<<7)
+/* Note: B39|B40|B41 are split between octets %!$@??? */
+
+/* B40..B47 */
+#define        IEEE80211_HE_MAC_CAP5_MULTI_TID_AGG_TX_QOS_B40  (1<<0)
+#define        IEEE80211_HE_MAC_CAP5_MULTI_TID_AGG_TX_QOS_B41  (1<<1)
+#define        IEEE80211_HE_MAC_CAP5_SUBCHAN_SELECTIVE_TRANSMISSION    (1<<2)
+#define        IEEE80211_HE_MAC_CAP5_UL_2x996_TONE_RU          (1<<3)
+#define        IEEE80211_HE_MAC_CAP5_OM_CTRL_UL_MU_DATA_DIS_RX (1<<4)
+#define        IEEE80211_HE_MAC_CAP5_HE_DYNAMIC_SM_PS          (1<<5)
+#define        IEEE80211_HE_MAC_CAP5_PUNCTURED_SOUNDING        (1<<6)
+#define        IEEE80211_HE_MAC_CAP5_HT_VHT_TRIG_FRAME_RX      (1<<7)
+
+/*
+ * 802.11ax-2021, 9.4.2.248.3 HE PHY Capabilities Information field.
+ */
+/* B0..B7 */
+#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G             
(1<<1)
+#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_80MHZ_IN_5G       
(1<<2)
+#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_160MHZ_IN_5G            
(1<<3)
+#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_80PLUS80_MHZ_IN_5G      
(1<<4)
+#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_MASK_ALL                
(1<<4 | 1<<3 | 1<<2 | 1<<1)
+#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_2G        
(1<<5)
+#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_RU_MAPPING_IN_5G        
(1<<6)
+#define        IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_MASK                    
(1<<6 | 1<<5 | 1<<4 | 1<<3 | 1<<2 | 1<<1)
+
+/* B8..B15 */
+#define        IEEE80211_HE_PHY_CAP1_PREAMBLE_PUNC_RX_MASK     (1<<3 | 1<<2 | 
1<<1 | 1<<0)
+#define        IEEE80211_HE_PHY_CAP1_DEVICE_CLASS_A            (1<<4)
+#define        IEEE80211_HE_PHY_CAP1_LDPC_CODING_IN_PAYLOAD    (1<<5)
+#define        IEEE80211_HE_PHY_CAP1_HE_LTF_AND_GI_FOR_HE_PPDUS_0_8US  (1<<6)
+#define        IEEE80211_HE_PHY_CAP1_MIDAMBLE_RX_TX_MAX_NSTS   (1<<7)
+/* Note: B15|B16 are split between octets %!$@??? */
+
+/* B16..B23 */
+#define        IEEE80211_HE_PHY_CAP2_MIDAMBLE_RX_TX_MAX_NSTS   (1<<0)
+#define        IEEE80211_HE_PHY_CAP2_NDP_4x_LTF_AND_3_2US      (1<<1)
+#define        IEEE80211_HE_PHY_CAP2_STBC_TX_UNDER_80MHZ       (1<<2)
+#define        IEEE80211_HE_PHY_CAP2_STBC_RX_UNDER_80MHZ       (1<<3)
+#define        IEEE80211_HE_PHY_CAP2_DOPPLER_TX                (1<<4)
+#define        IEEE80211_HE_PHY_CAP2_DOPPLER_RX                (1<<5)
+#define        IEEE80211_HE_PHY_CAP2_UL_MU_FULL_MU_MIMO        (1<<6)
+#define        IEEE80211_HE_PHY_CAP2_UL_MU_PARTIAL_MU_MIMO     (1<<7)
+
+/* B24..B31 */
+#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_NO_DCM   0x00
+#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_BPSK     (1<<0)
+#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_QPSK     (1<<1)
+#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_16_QAM   (1<<1 | 1<<0)
+#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_TX_MASK     (1<<1 | 1<<0)
+#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_TX_NSS_1          0x00
+#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_TX_NSS_2          (1<<2)
+#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_NO_DCM   0x00
+#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_BPSK     (1<<3)
+#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_QPSK     (1<<4)
+#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_16_QAM   (1<<4 | 1<<3)
+#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_CONST_RX_MASK     (1<<4 | 1<<3)
+#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_RX_NSS_1          0x00
+#define        IEEE80211_HE_PHY_CAP3_DCM_MAX_RX_NSS_2          (1<<5)
+#define        IEEE80211_HE_PHY_CAP3_RX_PARTIAL_BW_SU_IN_20MHZ_MU      (1<<6)
+#define        IEEE80211_HE_PHY_CAP3_SU_BEAMFORMER             (1<<7)
+
+/* B32..B39 */
+#define        IEEE80211_HE_PHY_CAP4_SU_BEAMFORMEE                     (1<<0)
+#define        IEEE80211_HE_PHY_CAP4_MU_BEAMFORMER                     (1<<1)
+#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_4  (1<<3 | 
1<<2)
+#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_5  (1<<4)
+#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_8  (1<<4 | 
1<<3 | 1<<2)
+#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_UNDER_80MHZ_MASK       
(1<<4 | 1<<3 | 1<<2)
+#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_4  (1<<6 | 
1<<5)
+#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_5  (1<<7)
+#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_8  (1<<7 | 
1<<6 | 1<<5)
+#define        IEEE80211_HE_PHY_CAP4_BEAMFORMEE_MAX_STS_ABOVE_80MHZ_MASK       
(1<<7 | 1<<6 | 1<<5)
+
+/* B40..B47 */
+#define        IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_2      
(1<<0)
+#define        IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_UNDER_80MHZ_MASK   
(1<<2 | 1<<1 | 1<<0)
+#define        IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_2      
(1<<3)
+#define        IEEE80211_HE_PHY_CAP5_BEAMFORMEE_NUM_SND_DIM_ABOVE_80MHZ_MASK   
(1<<5 | 1<<4 | 1<<3)
+#define        IEEE80211_HE_PHY_CAP5_NG16_SU_FEEDBACK                  (1<<6)
+#define        IEEE80211_HE_PHY_CAP5_NG16_MU_FEEDBACK                  (1<<7)
+
+/* B48..B55 */
+#define        IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_42_SU       (1<<0)
+#define        IEEE80211_HE_PHY_CAP6_CODEBOOK_SIZE_75_MU       (1<<1)
+#define        IEEE80211_HE_PHY_CAP6_TRIG_SU_BEAMFORMING_FB    (1<<2)
+#define        IEEE80211_HE_PHY_CAP6_TRIG_MU_BEAMFORMING_PARTIAL_BW_FB (1<<3)
+#define        IEEE80211_HE_PHY_CAP6_TRIG_CQI_FB               (1<<4)
+#define        IEEE80211_HE_PHY_CAP6_PARTIAL_BW_EXT_RANGE      (1<<5)
+#define        IEEE80211_HE_PHY_CAP6_PARTIAL_BANDWIDTH_DL_MUMIMO       (1<<6)
+#define        IEEE80211_HE_PHY_CAP6_PPE_THRESHOLD_PRESENT     (1<<7)
+
+/* B56..B63 */
+#define        IEEE80211_HE_PHY_CAP7_PSR_BASED_SR                      (1<<0)
+#define        IEEE80211_HE_PHY_CAP7_POWER_BOOST_FACTOR_SUPP           (1<<1)
+#define        IEEE80211_HE_PHY_CAP7_HE_SU_MU_PPDU_4XLTF_AND_08_US_GI  (1<<2)
+#define        IEEE80211_HE_PHY_CAP7_MAX_NC_1                          (1<<3)
+#define        IEEE80211_HE_PHY_CAP7_MAX_NC_2                          (1<<4)
+#define        IEEE80211_HE_PHY_CAP7_MAX_NC_MASK                       (1<<5 | 
1<<4 | 1<<3)
+#define        IEEE80211_HE_PHY_CAP7_STBC_TX_ABOVE_80MHZ               (1<<6)
+#define        IEEE80211_HE_PHY_CAP7_STBC_RX_ABOVE_80MHZ               (1<<7)
+
+/* B64..B71 */
+#define        IEEE80211_HE_PHY_CAP8_HE_ER_SU_PPDU_4XLTF_AND_08_US_GI  (1<<0)
+#define        IEEE80211_HE_PHY_CAP8_20MHZ_IN_40MHZ_HE_PPDU_IN_2G      (1<<1)
+#define        IEEE80211_HE_PHY_CAP8_20MHZ_IN_160MHZ_HE_PPDU           (1<<2)
+#define        IEEE80211_HE_PHY_CAP8_80MHZ_IN_160MHZ_HE_PPDU           (1<<3)
+#define        IEEE80211_HE_PHY_CAP8_HE_ER_SU_1XLTF_AND_08_US_GI       (1<<4)
+#define        IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_242                    0x00
+#define        IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_484                    (1<<6)
+#define        IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_996                    (1<<7)
+#define        IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_2x996                  (1<<7 | 
1<<6)
+#define        IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_MASK                   (1<<7 | 
1<<6)
+
+/* B72..B79 */
+#define        IEEE80211_HE_PHY_CAP9_LONGER_THAN_16_SIGB_OFDM_SYM      (1<<0)
+#define        IEEE80211_HE_PHY_CAP9_NON_TRIGGERED_CQI_FEEDBACK        (1<<1)
+#define        IEEE80211_HE_PHY_CAP9_TX_1024_QAM_LESS_THAN_242_TONE_RU (1<<2)
+#define        IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU (1<<3)
+#define        IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_COMP_SIGB     
(1<<4)
+#define        IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_NON_COMP_SIGB 
(1<<5)
+#define        IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_0US           0x00
+#define        IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_8US           1
+#define        IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_16US          2
+#define        IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_RESERVED      3
+#define        IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_POS           6
+#define        IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_MASK          (1<<7 | 
1<<6)
+
+/* B80..B87 */
+#define        IEEE80211_HE_PHY_CAP10_HE_MU_M1RU_MAX_LTF               (1<<0)
+
 /*
  * 802.11ax-2021,
  * 9.4.2.248.2 HE MAC Capabilities Information field.
@@ -1120,6 +1295,13 @@ struct ieee80211_he_cap_elem {
 } __packed;
 
 /* 802.11ax-2021, 9.4.2.248.4 Supported HE-MCS And NSS Set field. */
+enum ieee80211_he_mcs_support {
+       IEEE80211_HE_MCS_SUPPORT_0_7    = 0,    /* HE-MCS 0-7 for n NSS */
+       IEEE80211_HE_MCS_SUPPORT_0_9    = 1,    /* HE-MCS 0-9 for n NSS */
+       IEEE80211_HE_MCS_SUPPORT_0_11   = 2,    /* HE-MCS 0-11 for n NSS */
+       IEEE80211_HE_MCS_NOT_SUPPORTED  = 3     /* n NSS not supported. */
+};
+
 struct ieee80211_he_mcs_nss_supp {
        uint16_t                                rx_mcs_80;
        uint16_t                                tx_mcs_80;
@@ -1140,8 +1322,12 @@ struct net80211_he_cap {
 };
 
 /* 802.11ax-2021, 9.4.2.249 HE Operation element. */
+#define        IEEE80211_HE_OPERATION_ER_SU_DISABLE            (1<<16)
+#define        IEEE80211_HE_OPERATION_BSS_COLOR_OFFSET         24
+#define        IEEE80211_HE_OPERATION_BSS_COLOR_DISABLED       (1<<31)
+
 struct ieee80211_he_operation {
-       uint32_t                                he_oper_params;
+       uint32_t                                he_oper_params; /* (3) params | 
(1) bss color info */
        uint16_t                                he_mcs_nss_set;
        uint8_t                                 optional[0];
 } __packed;
@@ -1165,8 +1351,27 @@ struct ieee80211_mu_edca_param_set {
                struct ieee80211_he_mu_edca_param_ac_rec param_ac_recs[4];
        };
 } __packed;
-#endif /* _KERNEL || WANT_NET80211 */
 
+/* 802.11ax-2021, 9.4.2.252 Spatial Reuse Parameter Set element */
+/* Figure 9-788r-SR Control field format */
+#define        IEEE80211_HE_SPR_NON_SRG_OBSS_PD_SR_DISALLOWED  (1<<1)
+#define        IEEE80211_HE_SPR_NON_SRG_OFFSET_PRESENT         (1<<2)
+#define        IEEE80211_HE_SPR_SRG_INFORMATION_PRESENT        (1<<3)
+#define        IEEE80211_HE_SPR_HESIGA_SR_VAL15_ALLOWED        (1<<4)
+
+/* 802.11ax-2021, 9.4.2.263 HE 6 GHz Band Capabilities element */
+/* Figure 9-788aj-Capabilities Information field format */
+#define        IEEE80211_HE_6GHZ_CAP_MIN_MPDU_START            (1<<2 | 1<<1 | 
1<<0)
+#define        IEEE80211_HE_6GHZ_CAP_MAX_AMPDU_LEN_EXP         (1<<5 | 1<<4 | 
1<<3)
+#define        IEEE80211_HE_6GHZ_CAP_MAX_MPDU_LEN              (1<<7 | 1<<6)
+#define        IEEE80211_HE_6GHZ_CAP_SM_PS                     (1<<10 | 1<<9)
+#define        IEEE80211_HE_6GHZ_CAP_RX_ANTPAT_CONS            (1<<12)
+#define        IEEE80211_HE_6GHZ_CAP_TX_ANTPAT_CONS            (1<<13)
+
+struct ieee80211_he_6ghz_capa {
+       uint16_t capa;
+};
+#endif /* _KERNEL || WANT_NET80211 */
 
 /*
  * Management information element payloads.

Reply via email to