]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
iwlwifi: mvm: add notification for missed VAP
authorLior Cohen <lior2.cohen@intel.com>
Thu, 18 Jul 2019 08:37:48 +0000 (11:37 +0300)
committerLuca Coelho <luciano.coelho@intel.com>
Fri, 25 Oct 2019 07:10:14 +0000 (10:10 +0300)
A missed VAP notification will be sent from umac when
the station is out of sync with its associated non-transmitted
BSSID. The notification will be sent only if the transmitted
BSSID is an EMA-AP one.

The driver will consider this notification as connection loss.

Signed-off-by: Lior Cohen <lior2.cohen@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
drivers/net/wireless/intel/iwlwifi/fw/api/mac-cfg.h
drivers/net/wireless/intel/iwlwifi/mvm/mac-ctxt.c
drivers/net/wireless/intel/iwlwifi/mvm/mvm.h

index 69786343aff42cd471080d582e3d43754de8d508..e7a1acedbcf1e29568099239819bea75ee325ffe 100644 (file)
@@ -77,6 +77,10 @@ enum iwl_mac_conf_subcmd_ids {
         * @CHANNEL_SWITCH_TIME_EVENT_CMD: &struct iwl_chan_switch_te_cmd
         */
        CHANNEL_SWITCH_TIME_EVENT_CMD = 0x4,
+       /**
+        * @MISSED_VAP_NOTIF: &struct iwl_missed_vap_notif
+        */
+       MISSED_VAP_NOTIF = 0xFA,
        /**
         * @SESSION_PROTECTION_CMD: &struct iwl_mvm_session_prot_cmd
         */
@@ -140,6 +144,21 @@ struct iwl_probe_resp_data_notif {
        u8 reserved[3];
 } __packed; /* PROBE_RESPONSE_DATA_NTFY_API_S_VER_1 */
 
+/**
+ * struct iwl_missed_vap_notif - notification of missing vap detection
+ *
+ * @mac_id: the mac for which the ucode sends the notification for
+ * @num_beacon_intervals_elapsed: beacons elpased with no vap profile inside
+ * @profile_periodicity: beacons period to have our profile inside
+ * @reserved: reserved for alignment purposes
+ */
+struct iwl_missed_vap_notif {
+       __le32 mac_id;
+       u8 num_beacon_intervals_elapsed;
+       u8 profile_periodicity;
+       u8 reserved[2];
+} __packed; /* MISSED_VAP_NTFY_API_S_VER_1 */
+
 /**
  * struct iwl_channel_switch_noa_notif - Channel switch NOA notification
  *
index 70bb150ee0ca4a9362934779a6c38cd4a5e392e4..d9c23cd9633675937ca6c59ea0c80924c4dc30e0 100644 (file)
@@ -1610,3 +1610,26 @@ void iwl_mvm_channel_switch_noa_notif(struct iwl_mvm *mvm,
 out_unlock:
        rcu_read_unlock();
 }
+
+void iwl_mvm_rx_missed_vap_notif(struct iwl_mvm *mvm,
+                                struct iwl_rx_cmd_buffer *rxb)
+{
+       struct iwl_rx_packet *pkt = rxb_addr(rxb);
+       struct iwl_missed_vap_notif *mb = (void *)pkt->data;
+       struct ieee80211_vif *vif;
+       u32 id = le32_to_cpu(mb->mac_id);
+
+       IWL_DEBUG_INFO(mvm,
+                      "missed_vap notify mac_id=%u, num_beacon_intervals_elapsed=%u, profile_periodicity=%u\n",
+                      le32_to_cpu(mb->mac_id),
+                      mb->num_beacon_intervals_elapsed,
+                      mb->profile_periodicity);
+
+       rcu_read_lock();
+
+       vif = iwl_mvm_rcu_dereference_vif_id(mvm, id, true);
+       if (vif)
+               iwl_mvm_connection_loss(mvm, vif, "missed vap beacon");
+
+       rcu_read_unlock();
+}
index 43257579ab4807ea7a766a365a1879b955c2ddfc..f0246969dca094b2e05efe01ebd99a453eb5aead 100644 (file)
@@ -1680,6 +1680,8 @@ void iwl_mvm_mac_ctxt_recalc_tsf_id(struct iwl_mvm *mvm,
                                    struct ieee80211_vif *vif);
 void iwl_mvm_probe_resp_data_notif(struct iwl_mvm *mvm,
                                   struct iwl_rx_cmd_buffer *rxb);
+void iwl_mvm_rx_missed_vap_notif(struct iwl_mvm *mvm,
+                                struct iwl_rx_cmd_buffer *rxb);
 void iwl_mvm_channel_switch_noa_notif(struct iwl_mvm *mvm,
                                      struct iwl_rx_cmd_buffer *rxb);
 /* Bindings */