ieee80211: use tab to indent struct ieee80211_neighbor_ap_info
[carl9170fw.git] / include / linux / ieee80211.h
index 08a9eabe9fa338968602152b2f5f7b2f0d7d39d5..60b16bd0e255b128b3b3ca1e1816b3867e7705bb 100644 (file)
@@ -1145,7 +1145,7 @@ struct ieee80211_mgmt {
                        __le16 auth_transaction;
                        __le16 status_code;
                        /* possibly followed by Challenge text */
-                       u8 variable[0];
+                       u8 variable[];
                } __packed __aligned(4) auth;
                struct {
                        __le16 reason_code;
@@ -1154,26 +1154,26 @@ struct ieee80211_mgmt {
                        __le16 capab_info;
                        __le16 listen_interval;
                        /* followed by SSID and Supported rates */
-                       u8 variable[0];
+                       u8 variable[];
                } __packed __aligned(4) assoc_req;
                struct {
                        __le16 capab_info;
                        __le16 status_code;
                        __le16 aid;
                        /* followed by Supported rates */
-                       u8 variable[0];
+                       u8 variable[];
                } __packed __aligned(4) assoc_resp, reassoc_resp;
                struct {
                        __le16 capab_info;
                        __le16 status_code;
-                       u8 variable[0];
+                       u8 variable[];
                } __packed __aligned(4) s1g_assoc_resp, s1g_reassoc_resp;
                struct {
                        __le16 capab_info;
                        __le16 listen_interval;
                        u8 current_ap[6];
                        /* followed by SSID and Supported rates */
-                       u8 variable[0];
+                       u8 variable[];
                } __packed __aligned(4) reassoc_req;
                struct {
                        __le16 reason_code;
@@ -1184,11 +1184,11 @@ struct ieee80211_mgmt {
                        __le16 capab_info;
                        /* followed by some of SSID, Supported rates,
                         * FH Params, DS Params, CF Params, IBSS Params, TIM */
-                       u8 variable[0];
+                       u8 variable[];
                } __packed __aligned(4) beacon;
                struct {
                        /* only variable items: SSID, Supported rates */
-                       u8 variable[0];
+                       DECLARE_FLEX_ARRAY(u8, variable);
                } __packed __aligned(4) probe_req;
                struct {
                        __le64 timestamp;
@@ -1196,7 +1196,7 @@ struct ieee80211_mgmt {
                        __le16 capab_info;
                        /* followed by some of SSID, Supported rates,
                         * FH Params, DS Params, CF Params, IBSS Params */
-                       u8 variable[0];
+                       u8 variable[];
                } __packed __aligned(4) probe_resp;
                struct {
                        u8 category;
@@ -1205,16 +1205,16 @@ struct ieee80211_mgmt {
                                        u8 action_code;
                                        u8 dialog_token;
                                        u8 status_code;
-                                       u8 variable[0];
+                                       u8 variable[];
                                } __packed wme_action;
                                struct{
                                        u8 action_code;
-                                       u8 variable[0];
+                                       u8 variable[];
                                } __packed chan_switch;
                                struct{
                                        u8 action_code;
                                        struct ieee80211_ext_chansw_ie data;
-                                       u8 variable[0];
+                                       u8 variable[];
                                } __packed ext_chan_switch;
                                struct{
                                        u8 action_code;
@@ -1230,7 +1230,7 @@ struct ieee80211_mgmt {
                                        __le16 timeout;
                                        __le16 start_seq_num;
                                        /* followed by BA Extension */
-                                       u8 variable[0];
+                                       u8 variable[];
                                } __packed addba_req;
                                struct{
                                        u8 action_code;
@@ -1246,11 +1246,11 @@ struct ieee80211_mgmt {
                                } __packed delba;
                                struct {
                                        u8 action_code;
-                                       u8 variable[0];
+                                       u8 variable[];
                                } __packed self_prot;
                                struct{
                                        u8 action_code;
-                                       u8 variable[0];
+                                       u8 variable[];
                                } __packed mesh_action;
                                struct {
                                        u8 action;
@@ -1294,7 +1294,7 @@ struct ieee80211_mgmt {
                                        u8 toa[6];
                                        __le16 tod_error;
                                        __le16 toa_error;
-                                       u8 variable[0];
+                                       u8 variable[];
                                } __packed ftm;
                                struct {
                                        u8 action_code;
@@ -2007,6 +2007,44 @@ int ieee80211_get_vht_max_nss(struct ieee80211_vht_cap *cap,
                              int mcs, bool ext_nss_bw_capable,
                              unsigned int max_vht_nss);
 
+/**
+ * enum ieee80211_ap_reg_power - regulatory power for a Access Point
+ *
+ * @IEEE80211_REG_UNSET_AP: Access Point has no regulatory power mode
+ * @IEEE80211_REG_LPI: Indoor Access Point
+ * @IEEE80211_REG_SP: Standard power Access Point
+ * @IEEE80211_REG_VLP: Very low power Access Point
+ * @IEEE80211_REG_AP_POWER_AFTER_LAST: internal
+ * @IEEE80211_REG_AP_POWER_MAX: maximum value
+ */
+enum ieee80211_ap_reg_power {
+       IEEE80211_REG_UNSET_AP,
+       IEEE80211_REG_LPI_AP,
+       IEEE80211_REG_SP_AP,
+       IEEE80211_REG_VLP_AP,
+       IEEE80211_REG_AP_POWER_AFTER_LAST,
+       IEEE80211_REG_AP_POWER_MAX =
+               IEEE80211_REG_AP_POWER_AFTER_LAST - 1,
+};
+
+/**
+ * enum ieee80211_client_reg_power - regulatory power for a client
+ *
+ * @IEEE80211_REG_UNSET_CLIENT: Client has no regulatory power mode
+ * @IEEE80211_REG_DEFAULT_CLIENT: Default Client
+ * @IEEE80211_REG_SUBORDINATE_CLIENT: Subordinate Client
+ * @IEEE80211_REG_CLIENT_POWER_AFTER_LAST: internal
+ * @IEEE80211_REG_CLIENT_POWER_MAX: maximum value
+ */
+enum ieee80211_client_reg_power {
+       IEEE80211_REG_UNSET_CLIENT,
+       IEEE80211_REG_DEFAULT_CLIENT,
+       IEEE80211_REG_SUBORDINATE_CLIENT,
+       IEEE80211_REG_CLIENT_POWER_AFTER_LAST,
+       IEEE80211_REG_CLIENT_POWER_MAX =
+               IEEE80211_REG_CLIENT_POWER_AFTER_LAST - 1,
+};
+
 /* 802.11ax HE MAC capabilities */
 #define IEEE80211_HE_MAC_CAP0_HTC_HE                           0x01
 #define IEEE80211_HE_MAC_CAP0_TWT_REQ                          0x02
@@ -2103,6 +2141,7 @@ int ieee80211_get_vht_max_nss(struct ieee80211_vht_cap *cap,
 
 #define IEEE80211_HE_VHT_MAX_AMPDU_FACTOR      20
 #define IEEE80211_HE_HT_MAX_AMPDU_FACTOR       16
+#define IEEE80211_HE_6GHZ_MAX_AMPDU_FACTOR     13
 
 /* 802.11ax HE PHY capabilities */
 #define IEEE80211_HE_PHY_CAP0_CHANNEL_WIDTH_SET_40MHZ_IN_2G            0x02
@@ -2238,11 +2277,12 @@ 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
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_0US                  0x0
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_8US                  0x1
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_16US                 0x2
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_RESERVED             0x3
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_POS                  6
+#define IEEE80211_HE_PHY_CAP9_NOMINAL_PKT_PADDING_MASK                 0xc0
 
 #define IEEE80211_HE_PHY_CAP10_HE_MU_M1RU_MAX_LTF                      0x01
 
@@ -2331,6 +2371,9 @@ ieee80211_he_ppe_size(u8 ppe_thres_hdr, const u8 *phy_cap_info)
 #define IEEE80211_HE_OPERATION_PARTIAL_BSS_COLOR               0x40000000
 #define IEEE80211_HE_OPERATION_BSS_COLOR_DISABLED              0x80000000
 
+#define IEEE80211_6GHZ_CTRL_REG_LPI_AP 0
+#define IEEE80211_6GHZ_CTRL_REG_SP_AP  1
+
 /**
  * ieee80211_he_6ghz_oper - HE 6 GHz operation Information field
  * @primary: primary channel
@@ -2347,12 +2390,51 @@ struct ieee80211_he_6ghz_oper {
 #define                IEEE80211_HE_6GHZ_OPER_CTRL_CHANWIDTH_80MHZ     2
 #define                IEEE80211_HE_6GHZ_OPER_CTRL_CHANWIDTH_160MHZ    3
 #define IEEE80211_HE_6GHZ_OPER_CTRL_DUP_BEACON 0x4
+#define IEEE80211_HE_6GHZ_OPER_CTRL_REG_INFO   0x38
        u8 control;
        u8 ccfs0;
        u8 ccfs1;
        u8 minrate;
 } __packed;
 
+/*
+ * In "9.4.2.161 Transmit Power Envelope element" of "IEEE Std 802.11ax-2021",
+ * it show four types in "Table 9-275a-Maximum Transmit Power Interpretation
+ * subfield encoding", and two category for each type in "Table E-12-Regulatory
+ * Info subfield encoding in the United States".
+ * So it it totally max 8 Transmit Power Envelope element.
+ */
+#define IEEE80211_TPE_MAX_IE_COUNT     8
+/*
+ * In "Table 9-277—Meaning of Maximum Transmit Power Count subfield"
+ * of "IEEE Std 802.11ax™‐2021", the max power level is 8.
+ */
+#define IEEE80211_MAX_NUM_PWR_LEVEL    8
+
+#define IEEE80211_TPE_MAX_POWER_COUNT  8
+
+/* transmit power interpretation type of transmit power envelope element */
+enum ieee80211_tx_power_intrpt_type {
+       IEEE80211_TPE_LOCAL_EIRP,
+       IEEE80211_TPE_LOCAL_EIRP_PSD,
+       IEEE80211_TPE_REG_CLIENT_EIRP,
+       IEEE80211_TPE_REG_CLIENT_EIRP_PSD,
+};
+
+/**
+ * struct ieee80211_tx_pwr_env
+ *
+ * This structure represents the "Transmit Power Envelope element"
+ */
+struct ieee80211_tx_pwr_env {
+       u8 tx_power_info;
+       s8 tx_power[IEEE80211_TPE_MAX_POWER_COUNT];
+} __packed;
+
+#define IEEE80211_TX_PWR_ENV_INFO_COUNT 0x7
+#define IEEE80211_TX_PWR_ENV_INFO_INTERPRET 0x38
+#define IEEE80211_TX_PWR_ENV_INFO_CATEGORY 0xC0
+
 /*
  * ieee80211_he_oper_size - calculate 802.11ax HE Operations IE size
  * @he_oper_ie: byte data of the He Operations IE, stating from the byte
@@ -2364,7 +2446,7 @@ struct ieee80211_he_6ghz_oper {
 static inline u8
 ieee80211_he_oper_size(const u8 *he_oper_ie)
 {
-       struct ieee80211_he_operation *he_oper = (void *)he_oper_ie;
+       const struct ieee80211_he_operation *he_oper = (const void *)he_oper_ie;
        u8 oper_len = sizeof(struct ieee80211_he_operation);
        u32 he_oper_params;
 
@@ -2397,7 +2479,7 @@ ieee80211_he_oper_size(const u8 *he_oper_ie)
 static inline const struct ieee80211_he_6ghz_oper *
 ieee80211_he_6ghz_oper(const struct ieee80211_he_operation *he_oper)
 {
-       const u8 *ret = (void *)&he_oper->optional;
+       const u8 *ret = (const void *)&he_oper->optional;
        u32 he_oper_params;
 
        if (!he_oper)
@@ -2412,7 +2494,7 @@ ieee80211_he_6ghz_oper(const struct ieee80211_he_operation *he_oper)
        if (he_oper_params & IEEE80211_HE_OPERATION_CO_HOSTED_BSS)
                ret++;
 
-       return (void *)ret;
+       return (const void *)ret;
 }
 
 /* HE Spatial Reuse defines */
@@ -2433,7 +2515,7 @@ ieee80211_he_6ghz_oper(const struct ieee80211_he_operation *he_oper)
 static inline u8
 ieee80211_he_spr_size(const u8 *he_spr_ie)
 {
-       struct ieee80211_he_spr *he_spr = (void *)he_spr_ie;
+       const struct ieee80211_he_spr *he_spr = (const void *)he_spr_ie;
        u8 spr_len = sizeof(struct ieee80211_he_spr);
        u8 he_spr_params;
 
@@ -2934,7 +3016,7 @@ enum ieee80211_eid {
        WLAN_EID_VHT_OPERATION = 192,
        WLAN_EID_EXTENDED_BSS_LOAD = 193,
        WLAN_EID_WIDE_BW_CHANNEL_SWITCH = 194,
-       WLAN_EID_VHT_TX_POWER_ENVELOPE = 195,
+       WLAN_EID_TX_POWER_ENVELOPE = 195,
        WLAN_EID_CHANNEL_SWITCH_WRAPPER = 196,
        WLAN_EID_AID = 197,
        WLAN_EID_QUIET_CHANNEL = 198,
@@ -3853,10 +3935,10 @@ static inline bool for_each_element_completed(const struct element *element,
 #define IEEE80211_RNR_TBTT_PARAMS_COLOC_AP                     0x40
 
 struct ieee80211_neighbor_ap_info {
-       u8 tbtt_info_hdr;
-       u8 tbtt_info_len;
-       u8 op_class;
-       u8 channel;
+       u8 tbtt_info_hdr;
+       u8 tbtt_info_len;
+       u8 op_class;
+       u8 channel;
 } __packed;
 
 enum ieee80211_range_params_max_total_ltf {