]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
iwlwifi: mvm: support HE context cmd API change
authorSara Sharon <sara.sharon@intel.com>
Thu, 7 Feb 2019 11:17:37 +0000 (13:17 +0200)
committerLuca Coelho <luciano.coelho@intel.com>
Wed, 3 Apr 2019 08:20:05 +0000 (11:20 +0300)
Support API change to pass all mbssid parameters to the firmware.

Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/api/mac.h
drivers/net/wireless/intel/iwlwifi/fw/file.h
drivers/net/wireless/intel/iwlwifi/mvm/mac80211.c

index 941c50477003830773e285778e690193222395c0..85c5e367cbf1ccf1d7630bed1cfd416d503cd015 100644 (file)
@@ -541,6 +541,66 @@ enum iwl_he_htc_flags {
 #define IWL_HE_HTC_LINK_ADAP_UNSOLICITED       (2 << IWL_HE_HTC_LINK_ADAP_POS)
 #define IWL_HE_HTC_LINK_ADAP_BOTH              (3 << IWL_HE_HTC_LINK_ADAP_POS)
 
+/**
+ * struct iwl_he_sta_context_cmd_v1 - configure FW to work with HE AP
+ * @sta_id: STA id
+ * @tid_limit: max num of TIDs in TX HE-SU multi-TID agg
+ *     0 - bad value, 1 - multi-tid not supported, 2..8 - tid limit
+ * @reserved1: reserved byte for future use
+ * @reserved2: reserved byte for future use
+ * @flags: see %iwl_11ax_sta_ctxt_flags
+ * @ref_bssid_addr: reference BSSID used by the AP
+ * @reserved0: reserved 2 bytes for aligning the ref_bssid_addr field to 8 bytes
+ * @htc_flags: which features are supported in HTC
+ * @frag_flags: frag support in A-MSDU
+ * @frag_level: frag support level
+ * @frag_max_num: max num of "open" MSDUs in the receiver (in power of 2)
+ * @frag_min_size: min frag size (except last frag)
+ * @pkt_ext: optional, exists according to PPE-present bit in the HE-PHY capa
+ * @bss_color: 11ax AP ID that is used in the HE SIG-A to mark inter BSS frame
+ * @htc_trig_based_pkt_ext: default PE in 4us units
+ * @frame_time_rts_th: HE duration RTS threshold, in units of 32us
+ * @rand_alloc_ecwmin: random CWmin = 2**ECWmin-1
+ * @rand_alloc_ecwmax: random CWmax = 2**ECWmax-1
+ * @reserved3: reserved byte for future use
+ * @trig_based_txf: MU EDCA Parameter set for the trigger based traffic queues
+ */
+struct iwl_he_sta_context_cmd_v1 {
+       u8 sta_id;
+       u8 tid_limit;
+       u8 reserved1;
+       u8 reserved2;
+       __le32 flags;
+
+       /* The below fields are set via Multiple BSSID IE */
+       u8 ref_bssid_addr[6];
+       __le16 reserved0;
+
+       /* The below fields are set via HE-capabilities IE */
+       __le32 htc_flags;
+
+       u8 frag_flags;
+       u8 frag_level;
+       u8 frag_max_num;
+       u8 frag_min_size;
+
+       /* The below fields are set via PPE thresholds element */
+       struct iwl_he_pkt_ext pkt_ext;
+
+       /* The below fields are set via HE-Operation IE */
+       u8 bss_color;
+       u8 htc_trig_based_pkt_ext;
+       __le16 frame_time_rts_th;
+
+       /* Random access parameter set (i.e. RAPS) */
+       u8 rand_alloc_ecwmin;
+       u8 rand_alloc_ecwmax;
+       __le16 reserved3;
+
+       /* The below fields are set via MU EDCA parameter set element */
+       struct iwl_he_backoff_conf trig_based_txf[AC_NUM];
+} __packed; /* STA_CONTEXT_DOT11AX_API_S_VER_1 */
+
 /**
  * struct iwl_he_sta_context_cmd - configure FW to work with HE AP
  * @sta_id: STA id
@@ -564,6 +624,14 @@ enum iwl_he_htc_flags {
  * @rand_alloc_ecwmax: random CWmax = 2**ECWmax-1
  * @reserved3: reserved byte for future use
  * @trig_based_txf: MU EDCA Parameter set for the trigger based traffic queues
+ * @max_bssid_indicator: indicator of the max bssid supported on the associated
+ *     bss
+ * @bssid_index: index of the associated VAP
+ * @ema_ap: AP supports enhanced Multi BSSID advertisement
+ * @profile_periodicity: number of Beacon periods that are needed to receive the
+ *     complete VAPs info
+ * @bssid_count: actual number of VAPs in the MultiBSS Set
+ * @reserved4: alignment
  */
 struct iwl_he_sta_context_cmd {
        u8 sta_id;
@@ -599,7 +667,14 @@ struct iwl_he_sta_context_cmd {
 
        /* The below fields are set via MU EDCA parameter set element */
        struct iwl_he_backoff_conf trig_based_txf[AC_NUM];
-} __packed; /* STA_CONTEXT_DOT11AX_API_S */
+
+       u8 max_bssid_indicator;
+       u8 bssid_index;
+       u8 ema_ap;
+       u8 profile_periodicity;
+       u8 bssid_count;
+       u8 reserved4[3];
+} __packed; /* STA_CONTEXT_DOT11AX_API_S_VER_2 */
 
 /**
  * struct iwl_he_monitor_cmd - configure air sniffer for HE
index b7328861c725c2be15c22eb952e1dd74a84ef551..abfdcabdcbf7758b3824a4136717c41f0266d88c 100644 (file)
@@ -279,6 +279,8 @@ typedef unsigned int __bitwise iwl_ucode_tlv_api_t;
  * @IWL_UCODE_TLV_API_SCAN_OFFLOAD_CHANS: This ucode supports v2 of
  *     SCAN_OFFLOAD_PROFILE_MATCH_RESULTS_S and v3 of
  *     SCAN_OFFLOAD_PROFILES_QUERY_RSP_S.
+ * @IWL_UCODE_TLV_API_MBSSID_HE: This ucode supports v2 of
+ *     STA_CONTEXT_DOT11AX_API_S
  *
  * @NUM_IWL_UCODE_TLV_API: number of bits used
  */
@@ -308,6 +310,7 @@ enum iwl_ucode_tlv_api {
        IWL_UCODE_TLV_API_REGULATORY_NVM_INFO   = (__force iwl_ucode_tlv_api_t)48,
        IWL_UCODE_TLV_API_FTM_NEW_RANGE_REQ     = (__force iwl_ucode_tlv_api_t)49,
        IWL_UCODE_TLV_API_SCAN_OFFLOAD_CHANS    = (__force iwl_ucode_tlv_api_t)50,
+       IWL_UCODE_TLV_API_MBSSID_HE             = (__force iwl_ucode_tlv_api_t)52,
 
        NUM_IWL_UCODE_TLV_API
 #ifdef __CHECKER__
index d55c7df813e3bcd6630cfee4bb8b7fc1484cad43..bb2dc0be3621affb6fa3a09f465d94d4abbd7e47 100644 (file)
@@ -2212,6 +2212,10 @@ static void iwl_mvm_cfg_he_sta(struct iwl_mvm *mvm,
                .frame_time_rts_th =
                        cpu_to_le16(vif->bss_conf.frame_time_rts_th),
        };
+       int size = fw_has_api(&mvm->fw->ucode_capa,
+                             IWL_UCODE_TLV_API_MBSSID_HE) ?
+                  sizeof(sta_ctxt_cmd) :
+                  sizeof(struct iwl_he_sta_context_cmd_v1);
        struct ieee80211_sta *sta;
        u32 flags;
        int i;
@@ -2399,13 +2403,19 @@ static void iwl_mvm_cfg_he_sta(struct iwl_mvm *mvm,
                flags |= STA_CTXT_HE_REF_BSSID_VALID;
                ether_addr_copy(sta_ctxt_cmd.ref_bssid_addr,
                                vif->bss_conf.transmitter_bssid);
+               sta_ctxt_cmd.max_bssid_indicator =
+                       vif->bss_conf.bssid_indicator;
+               sta_ctxt_cmd.bssid_index = vif->bss_conf.bssid_index;
+               sta_ctxt_cmd.ema_ap = vif->bss_conf.ema_ap;
+               sta_ctxt_cmd.profile_periodicity =
+                       vif->bss_conf.profile_periodicity;
        }
 
        sta_ctxt_cmd.flags = cpu_to_le32(flags);
 
        if (iwl_mvm_send_cmd_pdu(mvm, iwl_cmd_id(STA_HE_CTXT_CMD,
                                                 DATA_PATH_GROUP, 0),
-                                0, sizeof(sta_ctxt_cmd), &sta_ctxt_cmd))
+                                0, size, &sta_ctxt_cmd))
                IWL_ERR(mvm, "Failed to config FW to work HE!\n");
 }