iwlwifi: mvm: add notification for missed VAP
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>
This commit is contained in:
parent
7f2ea52123
commit
449a29d0fe
@ -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
|
||||
*
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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 */
|
||||
|
Loading…
Reference in New Issue
Block a user