ieee80211: Add a missing extended capability flag definition
[carl9170fw.git] / include / linux / ieee80211.h
index e71604bdb53b1e1ffe1a1c863db0e7dd85473684..728826c0b8e4e5228e66844d9451470b61e1d4b2 100644 (file)
@@ -8,7 +8,7 @@
  * Copyright (c) 2006, Michael Wu <flamingice@sourmilk.net>
  * Copyright (c) 2013 - 2014 Intel Mobile Communications GmbH
  * Copyright (c) 2016 - 2017 Intel Deutschland GmbH
- * Copyright (c) 2018        Intel Corporation
+ * Copyright (c) 2018 - 2019 Intel Corporation
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -1576,7 +1576,7 @@ struct ieee80211_vht_operation {
  * struct ieee80211_he_cap_elem - HE capabilities element
  *
  * This structure is the "HE capabilities element" fixed fields as
- * described in P802.11ax_D3.0 section 9.4.2.237.2 and 9.4.2.237.3
+ * described in P802.11ax_D4.0 section 9.4.2.242.2 and 9.4.2.242.3
  */
 struct ieee80211_he_cap_elem {
        u8 mac_cap_info[6];
@@ -1638,12 +1638,12 @@ struct ieee80211_he_mcs_nss_supp {
  * struct ieee80211_he_operation - HE capabilities element
  *
  * This structure is the "HE operation element" fields as
- * described in P802.11ax_D3.0 section 9.4.2.238
+ * described in P802.11ax_D4.0 section 9.4.2.243
  */
 struct ieee80211_he_operation {
        __le32 he_oper_params;
        __le16 he_mcs_nss_set;
-       /* Optional 0,1,3 or 4 bytes: depends on @he_oper_params */
+       /* Optional 0,1,3,4,5,7 or 8 bytes: depends on @he_oper_params */
        u8 optional[0];
 } __packed;
 
@@ -1651,7 +1651,7 @@ struct ieee80211_he_operation {
  * struct ieee80211_he_mu_edca_param_ac_rec - MU AC Parameter Record field
  *
  * This structure is the "MU AC Parameter Record" fields as
- * described in P802.11ax_D2.0 section 9.4.2.240
+ * described in P802.11ax_D4.0 section 9.4.2.245
  */
 struct ieee80211_he_mu_edca_param_ac_rec {
        u8 aifsn;
@@ -1663,7 +1663,7 @@ struct ieee80211_he_mu_edca_param_ac_rec {
  * struct ieee80211_mu_edca_param_set - MU EDCA Parameter Set element
  *
  * This structure is the "MU EDCA Parameter Set element" fields as
- * described in P802.11ax_D2.0 section 9.4.2.240
+ * described in P802.11ax_D4.0 section 9.4.2.245
  */
 struct ieee80211_mu_edca_param_set {
        u8 mu_qos_info;
@@ -1822,6 +1822,9 @@ int ieee80211_get_vht_max_nss(struct ieee80211_vht_cap *cap,
 #define IEEE80211_HE_MAC_CAP5_SUBCHAN_SELECVITE_TRANSMISSION   0x04
 #define IEEE80211_HE_MAC_CAP5_UL_2x996_TONE_RU                 0x08
 #define IEEE80211_HE_MAC_CAP5_OM_CTRL_UL_MU_DATA_DIS_RX                0x10
+#define IEEE80211_HE_MAC_CAP5_HE_DYNAMIC_SM_PS                 0x20
+#define IEEE80211_HE_MAC_CAP5_PUNCTURED_SOUNDING               0x40
+#define IEEE80211_HE_MAC_CAP5_HT_VHT_TRIG_FRAME_RX             0x80
 
 /* 802.11ax HE PHY capabilities */
 #define IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G            0x02
@@ -1945,11 +1948,11 @@ int ieee80211_get_vht_max_nss(struct ieee80211_vht_cap *cap,
 #define IEEE80211_HE_PHY_CAP8_80MHZ_IN_160MHZ_HE_PPDU                  0x08
 #define IEEE80211_HE_PHY_CAP8_HE_ER_SU_1XLTF_AND_08_US_GI              0x10
 #define IEEE80211_HE_PHY_CAP8_MIDAMBLE_RX_TX_2X_AND_1XLTF              0x20
-#define IEEE80211_HE_PHY_CAP8_DCM_MAX_BW_20MHZ                         0x00
-#define IEEE80211_HE_PHY_CAP8_DCM_MAX_BW_40MHZ                         0x40
-#define IEEE80211_HE_PHY_CAP8_DCM_MAX_BW_80MHZ                         0x80
-#define IEEE80211_HE_PHY_CAP8_DCM_MAX_BW_160_OR_80P80_MHZ              0xc0
-#define IEEE80211_HE_PHY_CAP8_DCM_MAX_BW_MASK                          0xc0
+#define IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_242                           0x00
+#define IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_484                           0x40
+#define IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_996                           0x80
+#define IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_2x996                         0xc0
+#define IEEE80211_HE_PHY_CAP8_DCM_MAX_RU_MASK                          0xc0
 
 #define IEEE80211_HE_PHY_CAP9_LONGER_THAN_16_SIGB_OFDM_SYM             0x01
 #define IEEE80211_HE_PHY_CAP9_NON_TRIGGERED_CQI_FEEDBACK               0x02
@@ -1957,6 +1960,11 @@ int ieee80211_get_vht_max_nss(struct ieee80211_vht_cap *cap,
 #define IEEE80211_HE_PHY_CAP9_RX_1024_QAM_LESS_THAN_242_TONE_RU                0x08
 #define IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_COMP_SIGB    0x10
 #define IEEE80211_HE_PHY_CAP9_RX_FULL_BW_SU_USING_MU_WITH_NON_COMP_SIGB        0x20
+#define IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_0US                  0x00
+#define IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_8US                  0x40
+#define IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_16US                 0x80
+#define IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_RESERVED             0xc0
+#define IEEE80211_HE_PHY_CAP9_NOMIMAL_PKT_PADDING_MASK                 0xc0
 
 /* 802.11ax HE TX/RX MCS NSS Support  */
 #define IEEE80211_TX_RX_MCS_NSS_SUPP_HIGHEST_MCS_POS                   (3)
@@ -2035,8 +2043,9 @@ ieee80211_he_ppe_size(u8 ppe_thres_hdr, const u8 *phy_cap_info)
 #define IEEE80211_HE_OPERATION_RTS_THRESHOLD_MASK              0x00003ff0
 #define IEEE80211_HE_OPERATION_RTS_THRESHOLD_OFFSET            4
 #define IEEE80211_HE_OPERATION_VHT_OPER_INFO                   0x00004000
-#define IEEE80211_HE_OPERATION_CO_LOCATED_BSS                  0x00008000
+#define IEEE80211_HE_OPERATION_CO_HOSTED_BSS                   0x00008000
 #define IEEE80211_HE_OPERATION_ER_SU_DISABLE                   0x00010000
+#define IEEE80211_HE_OPERATION_6GHZ_OP_INFO                    0x00020000
 #define IEEE80211_HE_OPERATION_BSS_COLOR_MASK                  0x3f000000
 #define IEEE80211_HE_OPERATION_BSS_COLOR_OFFSET                24
 #define IEEE80211_HE_OPERATION_PARTIAL_BSS_COLOR               0x40000000
@@ -2065,8 +2074,10 @@ ieee80211_he_oper_size(const u8 *he_oper_ie)
        he_oper_params = le32_to_cpu(he_oper->he_oper_params);
        if (he_oper_params & IEEE80211_HE_OPERATION_VHT_OPER_INFO)
                oper_len += 3;
-       if (he_oper_params & IEEE80211_HE_OPERATION_CO_LOCATED_BSS)
+       if (he_oper_params & IEEE80211_HE_OPERATION_CO_HOSTED_BSS)
                oper_len++;
+       if (he_oper_params & IEEE80211_HE_OPERATION_6GHZ_OP_INFO)
+               oper_len += 4;
 
        /* Add the first byte (extension ID) to the total length */
        oper_len++;
@@ -2137,6 +2148,8 @@ ieee80211_he_oper_size(const u8 *he_oper_ie)
 #define IEEE80211_SPCT_MSR_RPRT_TYPE_BASIC     0
 #define IEEE80211_SPCT_MSR_RPRT_TYPE_CCA       1
 #define IEEE80211_SPCT_MSR_RPRT_TYPE_RPI       2
+#define IEEE80211_SPCT_MSR_RPRT_TYPE_LCI       8
+#define IEEE80211_SPCT_MSR_RPRT_TYPE_CIVIC     11
 
 /* 802.11g ERP information element */
 #define WLAN_ERP_NON_ERP_PRESENT (1<<0)
@@ -2494,6 +2507,9 @@ enum ieee80211_eid_ext {
        WLAN_EID_EXT_HE_OPERATION = 36,
        WLAN_EID_EXT_UORA = 37,
        WLAN_EID_EXT_HE_MU_EDCA = 38,
+       WLAN_EID_EXT_MAX_CHANNEL_SWITCH_TIME = 52,
+       WLAN_EID_EXT_MULTIPLE_BSSID_CONFIGURATION = 55,
+       WLAN_EID_EXT_NON_INHERITANCE = 56,
 };
 
 /* Action category code */
@@ -2615,6 +2631,7 @@ enum ieee80211_key_len {
 #define FILS_ERP_MAX_RRK_LEN           64
 
 #define PMK_MAX_LEN                    64
+#define SAE_PASSWORD_MAX_LEN           128
 
 /* Public action codes (IEEE Std 802.11-2016, 9.6.8.1, Table 9-307) */
 enum ieee80211_pub_actioncode {
@@ -2675,6 +2692,11 @@ enum ieee80211_tdls_actioncode {
  */
 #define WLAN_EXT_CAPA1_EXT_CHANNEL_SWITCHING   BIT(2)
 
+/* Multiple BSSID capability is set in the 6th bit of 3rd byte of the
+ * @WLAN_EID_EXT_CAPABILITY information element
+ */
+#define WLAN_EXT_CAPA3_MULTI_BSSID_SUPPORT     BIT(6)
+
 /* TDLS capabilities in the the 4th byte of @WLAN_EID_EXT_CAPABILITY */
 #define WLAN_EXT_CAPA4_TDLS_BUFFER_STA         BIT(4)
 #define WLAN_EXT_CAPA4_TDLS_PEER_PSM           BIT(5)
@@ -2710,6 +2732,16 @@ enum ieee80211_tdls_actioncode {
 #define WLAN_EXT_CAPA10_TWT_REQUESTER_SUPPORT  BIT(5)
 #define WLAN_EXT_CAPA10_TWT_RESPONDER_SUPPORT  BIT(6)
 
+/*
+ * When set, indicates that the AP is able to tolerate 26-tone RU UL
+ * OFDMA transmissions using HE TB PPDU from OBSS (not falsely classify the
+ * 26-tone RU UL OFDMA transmissions as radar pulses).
+ */
+#define WLAN_EXT_CAPA10_OBSS_NARROW_BW_RU_TOLERANCE_SUPPORT BIT(7)
+
+/* Defines support for enhanced multi-bssid advertisement*/
+#define WLAN_EXT_CAPA11_EMA_SUPPORT    BIT(1)
+
 /* TDLS specific payload type in the LLC/SNAP header */
 #define WLAN_TDLS_SNAP_RFTYPE  0x2
 
@@ -2901,6 +2933,35 @@ enum ieee80211_sa_query_action {
        WLAN_ACTION_SA_QUERY_RESPONSE = 1,
 };
 
+/**
+ * struct ieee80211_bssid_index
+ *
+ * This structure refers to "Multiple BSSID-index element"
+ *
+ * @bssid_index: BSSID index
+ * @dtim_period: optional, overrides transmitted BSS dtim period
+ * @dtim_count: optional, overrides transmitted BSS dtim count
+ */
+struct ieee80211_bssid_index {
+       u8 bssid_index;
+       u8 dtim_period;
+       u8 dtim_count;
+};
+
+/**
+ * struct ieee80211_multiple_bssid_configuration
+ *
+ * This structure refers to "Multiple BSSID Configuration element"
+ *
+ * @bssid_count: total number of active BSSIDs in the set
+ * @profile_periodicity: the least number of beacon frames need to be received
+ *     in order to discover all the nontransmitted BSSIDs in the set.
+ */
+struct ieee80211_multiple_bssid_configuration {
+       u8 bssid_count;
+       u8 profile_periodicity;
+};
+
 #define SUITE(oui, id) (((oui) << 8) | (id))
 
 /* cipher suite selectors */
@@ -3176,23 +3237,23 @@ struct element {
        u8 id;
        u8 datalen;
        u8 data[];
-};
+} __packed;
 
 /* element iteration helpers */
-#define for_each_element(element, _data, _datalen)                     \
-       for (element = (void *)(_data);                                 \
-            (u8 *)(_data) + (_datalen) - (u8 *)element >=              \
-               sizeof(*element) &&                                     \
-            (u8 *)(_data) + (_datalen) - (u8 *)element >=              \
-               sizeof(*element) + element->datalen;                    \
-            element = (void *)(element->data + element->datalen))
+#define for_each_element(_elem, _data, _datalen)                       \
+       for (_elem = (const struct element *)(_data);                   \
+            (const u8 *)(_data) + (_datalen) - (const u8 *)_elem >=    \
+               (int)sizeof(*_elem) &&                                  \
+            (const u8 *)(_data) + (_datalen) - (const u8 *)_elem >=    \
+               (int)sizeof(*_elem) + _elem->datalen;                   \
+            _elem = (const struct element *)(_elem->data + _elem->datalen))
 
 #define for_each_element_id(element, _id, data, datalen)               \
        for_each_element(element, data, datalen)                        \
                if (element->id == (_id))
 
-#define for_each_element_extid(element, extid, data, datalen)          \
-       for_each_element(element, data, datalen)                        \
+#define for_each_element_extid(element, extid, _data, _datalen)                \
+       for_each_element(element, _data, _datalen)                      \
                if (element->id == WLAN_EID_EXTENSION &&                \
                    element->datalen > 0 &&                             \
                    element->data[0] == (extid))
@@ -3222,7 +3283,7 @@ struct element {
 static inline bool for_each_element_completed(const struct element *element,
                                              const void *data, size_t datalen)
 {
-       return (u8 *)element == (u8 *)data + datalen;
+       return (const u8 *)element == (const u8 *)data + datalen;
 }
 
 #endif /* __LINUX_IEEE80211_H */