// SPDX-License-Identifier: GPL-2.0-only /* * NXP Wireless LAN device driver: station command response 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" #include "11ac.h" /* * This function handles the command response error case. * * For scan response error, the function cancels all the pending * scan commands and generates an event to inform the applications * of the scan completion. * * For Power Save command failure, we do not retry enter PS * command in case of Ad-hoc mode. * * For all other response errors, the current command buffer is freed * and returned to the free command queue. */ static void mwifiex_process_cmdresp_error(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response of get RSSI info. * * Handling includes changing the header fields into CPU format * and saving the following parameters in driver - * - Last data and beacon RSSI value * - Average data and beacon RSSI value * - Last data and beacon NF value * - Average data and beacon NF value * * The parameters are send to the application as well, along with * calculated SNR values. */ static int mwifiex_ret_802_11_rssi_info(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response of set/get SNMP * MIB parameters. * * Handling includes changing the header fields into CPU format * and saving the parameter in driver. * * The following parameters are supported - * - Fragmentation threshold * - RTS threshold * - Short retry limit */ static int mwifiex_ret_802_11_snmp_mib(struct mwifiex_private *priv, struct host_cmd_ds_command *resp, u32 *data_buf) { … } /* * This function handles the command response of get log request * * Handling includes changing the header fields into CPU format * and sending the received parameters to application. */ static int mwifiex_ret_get_log(struct mwifiex_private *priv, struct host_cmd_ds_command *resp, struct mwifiex_ds_get_stats *stats) { … } /* * This function handles the command response of set/get Tx rate * configurations. * * Handling includes changing the header fields into CPU format * and saving the following parameters in driver - * - DSSS rate bitmap * - OFDM rate bitmap * - HT MCS rate bitmaps * * Based on the new rate bitmaps, the function re-evaluates if * auto data rate has been activated. If not, it sends another * query to the firmware to get the current Tx data rate. */ static int mwifiex_ret_tx_rate_cfg(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response of get Tx power level. * * Handling includes saving the maximum and minimum Tx power levels * in driver, as well as sending the values to user. */ static int mwifiex_get_power_level(struct mwifiex_private *priv, void *data_buf) { … } /* * This function handles the command response of set/get Tx power * configurations. * * Handling includes changing the header fields into CPU format * and saving the current Tx power level in driver. */ static int mwifiex_ret_tx_power_cfg(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response of get RF Tx power. */ static int mwifiex_ret_rf_tx_power(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response of set rf antenna */ static int mwifiex_ret_rf_antenna(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response of set/get MAC address. * * Handling includes saving the MAC address in driver. */ static int mwifiex_ret_802_11_mac_address(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response of set/get MAC multicast * address. */ static int mwifiex_ret_mac_multicast_adr(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response of get Tx rate query. * * Handling includes changing the header fields into CPU format * and saving the Tx rate and HT information parameters in driver. * * Both rate configuration and current data rate can be retrieved * with this request. */ static int mwifiex_ret_802_11_tx_rate_query(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response of a deauthenticate * command. * * If the deauthenticated MAC matches the current BSS MAC, the connection * state is reset. */ static int mwifiex_ret_802_11_deauthenticate(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response of ad-hoc stop. * * The function resets the connection state in driver. */ static int mwifiex_ret_802_11_ad_hoc_stop(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response of set/get v1 key material. * * Handling includes updating the driver parameters to reflect the * changes. */ static int mwifiex_ret_802_11_key_material_v1(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response of set/get v2 key material. * * Handling includes updating the driver parameters to reflect the * changes. */ static int mwifiex_ret_802_11_key_material_v2(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* Wrapper function for processing response of key material command */ static int mwifiex_ret_802_11_key_material(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response of get 11d domain information. */ static int mwifiex_ret_802_11d_domain_info(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response of get extended version. * * Handling includes forming the extended version string and sending it * to application. */ static int mwifiex_ret_ver_ext(struct mwifiex_private *priv, struct host_cmd_ds_command *resp, struct host_cmd_ds_version_ext *version_ext) { … } /* * This function handles the command response of remain on channel. */ static int mwifiex_ret_remain_on_chan(struct mwifiex_private *priv, struct host_cmd_ds_command *resp, struct host_cmd_ds_remain_on_chan *roc_cfg) { … } /* * This function handles the command response of P2P mode cfg. */ static int mwifiex_ret_p2p_mode_cfg(struct mwifiex_private *priv, struct host_cmd_ds_command *resp, void *data_buf) { … } /* This function handles the command response of mem_access command */ static int mwifiex_ret_mem_access(struct mwifiex_private *priv, struct host_cmd_ds_command *resp, void *pioctl_buf) { … } /* * This function handles the command response of register access. * * The register value and offset are returned to the user. For EEPROM * access, the byte count is also returned. */ static int mwifiex_ret_reg_access(u16 type, struct host_cmd_ds_command *resp, void *data_buf) { … } /* * This function handles the command response of get IBSS coalescing status. * * If the received BSSID is different than the current one, the current BSSID, * beacon interval, ATIM window and ERP information are updated, along with * changing the ad-hoc state accordingly. */ static int mwifiex_ret_ibss_coalescing_status(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } static int mwifiex_ret_tdls_oper(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* * This function handles the command response for subscribe event command. */ static int mwifiex_ret_subsc_evt(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } static int mwifiex_ret_uap_sta_list(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /* This function handles the command response of set_cfg_data */ static int mwifiex_ret_cfg_data(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } /** This Function handles the command response of sdio rx aggr */ static int mwifiex_ret_sdio_rx_aggr_cfg(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } static int mwifiex_ret_robust_coex(struct mwifiex_private *priv, struct host_cmd_ds_command *resp, bool *is_timeshare) { … } static struct ieee80211_regdomain * mwifiex_create_custom_regdomain(struct mwifiex_private *priv, u8 *buf, u16 buf_len) { … } static int mwifiex_ret_chan_region_cfg(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } static int mwifiex_ret_pkt_aggr_ctrl(struct mwifiex_private *priv, struct host_cmd_ds_command *resp) { … } static int mwifiex_ret_get_chan_info(struct mwifiex_private *priv, struct host_cmd_ds_command *resp, struct mwifiex_channel_band *channel_band) { … } /* * This function handles the command responses. * * This is a generic function, which calls command specific * response handlers based on the command ID. */ int mwifiex_process_sta_cmdresp(struct mwifiex_private *priv, u16 cmdresp_no, struct host_cmd_ds_command *resp) { … }