// SPDX-License-Identifier: GPL-2.0-only /* * NXP Wireless LAN device driver: station event handling * * Copyright 2011-2020 NXP */ #include "decl.h" #include "ioctl.h" #include "util.h" #include "fw.h" #include "main.h" #include "wmm.h" #include "11n.h" #define MWIFIEX_IBSS_CONNECT_EVT_FIX_SIZE … static int mwifiex_check_ibss_peer_capabilities(struct mwifiex_private *priv, struct mwifiex_sta_node *sta_ptr, struct sk_buff *event) { … } /* * This function resets the connection state. * * The function is invoked after receiving a disconnect event from firmware, * and performs the following actions - * - Set media status to disconnected * - Clean up Tx and Rx packets * - Resets SNR/NF/RSSI value in driver * - Resets security configurations in driver * - Enables auto data rate * - Saves the previous SSID and BSSID so that they can * be used for re-association, if required * - Erases current SSID and BSSID information * - Sends a disconnect event to upper layers/applications. */ void mwifiex_reset_connect_state(struct mwifiex_private *priv, u16 reason_code, bool from_ap) { … } static int mwifiex_parse_tdls_event(struct mwifiex_private *priv, struct sk_buff *event_skb) { … } static void mwifiex_process_uap_tx_pause(struct mwifiex_private *priv, struct mwifiex_ie_types_header *tlv) { … } static void mwifiex_process_sta_tx_pause(struct mwifiex_private *priv, struct mwifiex_ie_types_header *tlv) { … } void mwifiex_process_multi_chan_event(struct mwifiex_private *priv, struct sk_buff *event_skb) { … } void mwifiex_process_tx_pause_event(struct mwifiex_private *priv, struct sk_buff *event_skb) { … } /* * This function handles coex events generated by firmware */ void mwifiex_bt_coex_wlan_param_update_event(struct mwifiex_private *priv, struct sk_buff *event_skb) { … } static void mwifiex_fw_dump_info_event(struct mwifiex_private *priv, struct sk_buff *event_skb) { … } /* * This function handles events generated by firmware. * * This is a generic function and handles all events. * * Event specific routines are called by this function based * upon the generated event cause. * * For the following events, the function just forwards them to upper * layers, optionally recording the change - * - EVENT_LINK_SENSED * - EVENT_MIC_ERR_UNICAST * - EVENT_MIC_ERR_MULTICAST * - EVENT_PORT_RELEASE * - EVENT_RSSI_LOW * - EVENT_SNR_LOW * - EVENT_MAX_FAIL * - EVENT_RSSI_HIGH * - EVENT_SNR_HIGH * - EVENT_DATA_RSSI_LOW * - EVENT_DATA_SNR_LOW * - EVENT_DATA_RSSI_HIGH * - EVENT_DATA_SNR_HIGH * - EVENT_LINK_QUALITY * - EVENT_PRE_BEACON_LOST * - EVENT_IBSS_COALESCED * - EVENT_IBSS_STA_CONNECT * - EVENT_IBSS_STA_DISCONNECT * - EVENT_WEP_ICV_ERR * - EVENT_BW_CHANGE * - EVENT_HOSTWAKE_STAIE * * For the following events, no action is taken - * - EVENT_MIB_CHANGED * - EVENT_INIT_DONE * - EVENT_DUMMY_HOST_WAKEUP_SIGNAL * * Rest of the supported events requires driver handling - * - EVENT_DEAUTHENTICATED * - EVENT_DISASSOCIATED * - EVENT_LINK_LOST * - EVENT_PS_SLEEP * - EVENT_PS_AWAKE * - EVENT_DEEP_SLEEP_AWAKE * - EVENT_HS_ACT_REQ * - EVENT_ADHOC_BCN_LOST * - EVENT_BG_SCAN_REPORT * - EVENT_WMM_STATUS_CHANGE * - EVENT_ADDBA * - EVENT_DELBA * - EVENT_BA_STREAM_TIEMOUT * - EVENT_AMSDU_AGGR_CTRL * - EVENT_FW_DUMP_INFO */ int mwifiex_process_sta_event(struct mwifiex_private *priv) { … }