wifi: ieee80211: add structs for TBTT information access
[carl9170fw.git] / include / linux / ieee80211.h
index f6c9e2b46b11e896b3d0a5859edefa50f555f490..b68fbaeac23594c6bc58cdbe532312dd1c212a73 100644 (file)
@@ -4414,6 +4414,7 @@ static inline bool for_each_element_completed(const struct element *element,
 #define IEEE80211_TBTT_INFO_TYPE_MLD                           1
 #define IEEE80211_TBTT_INFO_OFFSET_BSSID_BSS_PARAM             9
 #define IEEE80211_TBTT_INFO_OFFSET_BSSID_SSSID_BSS_PARAM       13
+#define IEEE80211_TBTT_INFO_OFFSET_BSSID_SSSID_BSS_PARAM_MLD_PARAM     16
 
 #define IEEE80211_RNR_TBTT_PARAMS_OCT_RECOMMENDED              0x01
 #define IEEE80211_RNR_TBTT_PARAMS_SAME_SSID                    0x02
@@ -4437,6 +4438,42 @@ enum ieee80211_range_params_max_total_ltf {
        IEEE80211_RANGE_PARAMS_MAX_TOTAL_LTF_UNSPECIFIED,
 };
 
+/*
+ * reduced neighbor report, based on Draft P802.11be_D3.0,
+ * section 9.4.2.170.2.
+ */
+struct ieee80211_rnr_mld_params {
+       u8 mld_id;
+       __le16 params;
+} __packed;
+
+#define IEEE80211_RNR_MLD_PARAMS_LINK_ID                       0x000F
+#define IEEE80211_RNR_MLD_PARAMS_BSS_CHANGE_COUNT              0x0FF0
+#define IEEE80211_RNR_MLD_PARAMS_UPDATES_INCLUDED              0x1000
+#define IEEE80211_RNR_MLD_PARAMS_DISABLED_LINK                 0x2000
+
+/* Format of the TBTT information element if it has 7, 8 or 9 bytes */
+struct ieee80211_tbtt_info_7_8_9 {
+       u8 tbtt_offset;
+       u8 bssid[6];
+
+       /* The following element is optional, structure may not grow */
+       u8 bss_params;
+       u8 psd_20;
+} __packed;
+
+/* Format of the TBTT information element if it has >= 11 bytes */
+struct ieee80211_tbtt_info_ge_11 {
+       u8 tbtt_offset;
+       u8 bssid[6];
+       __le32 short_ssid;
+
+       /* The following elements are optional, structure may grow */
+       u8 bss_params;
+       u8 psd_20;
+       struct ieee80211_rnr_mld_params mld_params;
+} __packed;
+
 /* multi-link device */
 #define IEEE80211_MLD_MAX_NUM_LINKS    15
 
@@ -4464,6 +4501,14 @@ struct ieee80211_multi_link_elem {
 #define IEEE80211_MED_SYNC_DELAY_SYNC_OFDM_ED_THRESH   0x0f00
 #define IEEE80211_MED_SYNC_DELAY_SYNC_MAX_NUM_TXOPS    0xf000
 
+/*
+ * Described in P802.11be_D3.0
+ * dot11MSDTimerDuration should default to 5484 (i.e. 171.375)
+ * dot11MSDOFDMEDthreshold defaults to -72 (i.e. 0)
+ * dot11MSDTXOPMAX defaults to 1
+ */
+#define IEEE80211_MED_SYNC_DELAY_DEFAULT               0x10ac
+
 #define IEEE80211_EML_CAP_EMLSR_SUPP                   0x0001
 #define IEEE80211_EML_CAP_EMLSR_PADDING_DELAY          0x000e
 #define  IEEE80211_EML_CAP_EMLSR_PADDING_DELAY_0US             0
@@ -4570,7 +4615,8 @@ static inline u8 ieee80211_mle_common_size(const u8 *data)
  * The element is assumed to be of the correct type (BASIC) and big enough,
  * this must be checked using ieee80211_mle_type_ok().
  *
- * If the medium synchronization is not present, then 0 is returned.
+ * If the medium synchronization is not present, then the default value is
+ * returned.
  */
 static inline u16 ieee80211_mle_get_eml_med_sync_delay(const u8 *data)
 {
@@ -4582,7 +4628,7 @@ static inline u16 ieee80211_mle_get_eml_med_sync_delay(const u8 *data)
        common += sizeof(struct ieee80211_mle_basic_common_info);
 
        if (!(control & IEEE80211_MLC_BASIC_PRES_MED_SYNC_DELAY))
-               return 0;
+               return IEEE80211_MED_SYNC_DELAY_DEFAULT;
 
        if (control & IEEE80211_MLC_BASIC_PRES_LINK_ID)
                common += 1;