/* * Copyright (c) 2020, The Linux Foundation. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are * met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above * copyright notice, this list of conditions and the following * disclaimer in the documentation and/or other materials provided * with the distribution. * * Neither the name of The Linux Foundation nor the names of its * contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #ifndef WPA_DRIVER_COMMON_LIB #define WPA_DRIVER_COMMON_LIB #include "android_drv.h" #define OUI_LEN 3 #define MAX_CMD_LEN 32 #define MAC_ADDR_LEN 6 #define COUNTRY_LEN 4 #define IEEE80211_HE_OPERATION_VHT_OPER_MASK 0x00004000 #define IEEE80211_HE_OPERATION_CO_LOC_BSS_MASK 0x00008000 #define IEEE80211_HE_OPERATION_6G_OPER_MASK 0x00020000 #define HE_OPER_VHT_CH_WIDTH_OFFSET 0 #define HE_OPER_VHT_CENTER_FRQ_SEG0_OFFSET 1 #define HE_OPER_VHT_CENTER_FRQ_SEG1_OFFSET 2 #define HE_OPER_VHT_MAX_OFFSET 2 #define HE_OPER_CO_LOCATED_MAX_OFFSET 0 #define HE_OPER_6G_PARAMS_OFFSET 1 #define HE_OPER_6G_PARAMS_SUB_CH_BW_MASK 0X03 #define CHANNEL_BW_INVALID 255 /* Define short names */ #define GET_STATION_INFO_AKM \ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_AKM #define GET_STATION_INFO_HT_OPERATION \ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_HT_OPERATION #define GET_STATION_INFO_VHT_OPERATION \ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_VHT_OPERATION #define GET_STATION_INFO_REMOTE_LAST_RX_RATE \ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_LAST_RX_RATE #define GET_STATION_INFO_REMOTE_SUPPORTED_MODE \ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_SUPPORTED_MODE #define GET_STATION_INFO_REMOTE_CH_WIDTH \ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_CH_WIDTH #define GET_STATION_INFO_REMOTE_RX_RETRY_COUNT \ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_RETRY_COUNT #define GET_STATION_INFO_REMOTE_RX_BC_MC_COUNT \ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_BC_MC_COUNT #define GET_STATION_INFO_BEACON_IES \ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_BEACON_IES #define GET_STATION_INFO_DRIVER_DISCONNECT_REASON \ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_DRIVER_DISCONNECT_REASON #define GET_STATION_INFO_ASSOC_REQ_IES \ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_ASSOC_REQ_IES #define GET_STATION_INFO_HE_OPERATION \ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_HE_OPERATION #define GET_STATION_INFO_MAX \ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_MAX #define GET_STA_INFO_MAC \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_MAC #define GET_STA_INFO_RX_RETRY_COUNT \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_RX_RETRY_COUNT #define GET_STA_INFO_RX_BC_MC_COUNT \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_RX_BC_MC_COUNT #define GET_STA_INFO_TX_RETRY_SUCCEED \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TX_RETRY_SUCCEED #define GET_STA_INFO_TX_RETRY_EXHAUSTED \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TX_RETRY_EXHAUSTED #define GET_STA_INFO_TARGET_TX_TOTAL \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_TX_TOTAL #define GET_STA_INFO_TARGET_TX_RETRY \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_TX_RETRY #define GET_STA_INFO_TARGET_TX_RETRY_EXHAUSTED \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_TX_RETRY_EXHAUSTED #define GET_STA_INFO_ANI_LEVEL \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ANI_LEVEL #define GET_STA_INFO_LATEST_TX_RATE \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_LATEST_TX_RATE #define GET_STA_INFO_LATEST_RIX \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_LATEST_RIX #define GET_STA_INFO_TSF_OUT_OF_SYNC_COUNT \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TSF_OUT_OF_SYNC_COUNT #define GET_STA_INFO_LATEST_TX_POWER \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_LATEST_TX_POWER #define GET_STA_INFO_ROAM_TRIGGER_REASON \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ROAM_TRIGGER_REASON #define GET_STA_INFO_TARGET_POWER_24G_1MBPS \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_POWER_24G_1MBPS #define GET_STA_INFO_TARGET_POWER_24G_6MBPS \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_POWER_24G_6MBPS #define GET_STA_INFO_TARGET_POWER_5G_6MBPS \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_POWER_5G_6MBPS #define GET_STA_INFO_ROAM_FAIL_REASON \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ROAM_FAIL_REASON #define GET_STA_INFO_ROAM_INVOKE_FAIL_REASON \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ROAM_INVOKE_FAIL_REASON #define GET_STA_INFO_MAX \ QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_MAX struct bss_info { uint8_t oui[OUI_LEN]; char ssid[MAX_SSID_LEN + 1]; int channel; int bw; int rssi; int data_rate; /* 0 : 11b, 1 : 11g, 2 : 11n, 3 : 11a, 4 : 11ac */ int mode_80211; /* 0 : SISO, 1 : MIMO (2X2), 2 : MIMO (3X3), 3 : MIMO (4X4) */ int snr; int noise; int akm; int roaming_count; /* 0: None, 1: 11k, 2: 11v, 3: 11kv */ int mode_11kv; /* Bit mask value of 11kv support */ int mask_11kv; u32 disc_reasn_code; u32 ani_level; u32 roam_trigger_reason; u32 roam_fail_reason; u32 roam_invoke_fail_reason; u32 tsf_out_of_sync_count; u32 latest_tx_power; u32 latest_tx_rate; u32 target_power_24g_1mbps; u32 target_power_24g_6mbps; u32 target_power_5g_6mbps; }; enum get_info_cmd { GETSTATSBSSINFO = 1, SETCELLSWITCHMODE = 2, GET_DRIVER_SUPPORTED_FEATURES = 3, }; struct resp_info { u32 subcmd; char *reply_buf; int reply_buf_len; enum get_info_cmd cmd_type; uint8_t mac_addr[MAC_ADDR_LEN]; u32 freq; uint8_t country[COUNTRY_LEN]; }; #define QCA_NL80211_VENDOR_SUBCMD_GET_STATION 121 #ifndef CHANWIDTH_USE_HT #define CHANWIDTH_USE_HT VHT_CHANWIDTH_USE_HT #endif /* CHANWIDTH_USE_HT */ #ifndef CHANWIDTH_80MHZ #define CHANWIDTH_80MHZ VHT_CHANWIDTH_80MHZ #endif /* CHANWIDTH_80MHZ */ #ifndef CHANWIDTH_160MHZ #define CHANWIDTH_160MHZ VHT_CHANWIDTH_160MHZ #endif /* CHANWIDTH_160MHZ */ #ifndef CHANWIDTH_80P80MHZ #define CHANWIDTH_80P80MHZ VHT_CHANWIDTH_80P80MHZ #endif /* CHANWIDTH_80P80MHZ */ /* HE channel widths */ #define HE_CHANWIDTH_20MHZ 0 #define HE_CHANWIDTH_40MHZ 1 #define HE_CHANWIDTH_80MHZ 2 #define HE_CHANWIDTH_160MHZ 3 /** * enum qca_wlan_vendor_attr_get_station - Sub commands used by * QCA_NL80211_VENDOR_SUBCMD_GET_STATION to get the corresponding * station information. The information obtained through these * commands signify the current info in connected state and * latest cached information during the connected state , if queried * when in disconnected state. */ enum qca_wlan_vendor_attr_get_station { QCA_WLAN_VENDOR_ATTR_GET_STATION_INVALID = 0, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO, QCA_WLAN_VENDOR_ATTR_GET_STATION_ASSOC_FAIL_REASON, QCA_WLAN_VENDOR_ATTR_GET_STATION_REMOTE, /* keep last */ QCA_WLAN_VENDOR_ATTR_GET_STATION_AFTER_LAST, QCA_WLAN_VENDOR_ATTR_GET_STATION_MAX = QCA_WLAN_VENDOR_ATTR_GET_STATION_AFTER_LAST - 1, }; /** * enum qca_wlan_vendor_attr_get_station_info - Station Info queried * through QCA_NL80211_VENDOR_SUBCMD_GET_STATION. */ enum qca_wlan_vendor_attr_get_station_info { QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_INVALID = 0, /* * Get the standard NL attributes Nested with this attribute. * Ex : Query BW , BITRATE32 , NSS , Signal , Noise of the Link - * NL80211_ATTR_SSID / NL80211_ATTR_SURVEY_INFO (Connected Channel) / * NL80211_ATTR_STA_INFO */ QCA_WLAN_VENDOR_ATTR_GET_STATION_LINK_INFO_ATTR, /* * Get the standard NL attributes Nested with this attribute. * Ex : Query HT/VHT Capability advertized by the AP. * NL80211_ATTR_VHT_CAPABILITY / NL80211_ATTR_HT_CAPABILITY */ QCA_WLAN_VENDOR_ATTR_GET_STATION_AP_INFO_ATTR, /* Number of successful Roam attempts before a disconnect, * Unsigned 32 bit value */ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_ROAM_COUNT, /* Authentication Key Management Type used for the connected session. * Signified by enum qca_wlan_auth_type */ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_AKM, /* 802.11 Mode of the connected Session, * signified by enum qca_wlan_802_11_mode */ QCA_WLAN_VENDOR_ATTR_802_11_MODE, /* HS20 Indication Element */ QCA_WLAN_VENDOR_ATTR_GET_STATION_AP_INFO_HS20_INDICATION, /* HT/VHT operation elements */ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_HT_OPERATION, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_VHT_OPERATION, /* Status Code Corresponding to the Association Failure. * Unsigned 32 bit value */ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_ASSSOC_FAIL_REASON, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_MAX_PHY_RATE, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_PACKETS, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_BYTES, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_PACKETS, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_BYTES, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_LAST_TX_RATE, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_LAST_RX_RATE, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_WMM, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_SUPPORTED_MODE, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_AMPDU, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_STBC, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_STBC, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_CH_WIDTH, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_SGI_ENABLE, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_PAD, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_RETRY_COUNT, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_BC_MC_COUNT, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_FAILURE, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_AVG_RSSI_PER_CHAIN, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_RETRY_SUCCEED, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_LAST_PKT_RSSI, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_RETRY, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_RETRY_EXHAUST, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_TOTAL_FW, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_RETRY_FW, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_RETRY_EXHAUST_FW, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_BEACON_IES, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_DRIVER_DISCONNECT_REASON, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_ASSOC_REQ_IES, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_HE_OPERATION, /* keep last */ QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_AFTER_LAST, QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_MAX = QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_AFTER_LAST - 1, }; #define NOISE_FLOOR_DBM (96) #define WMI_MAX_CHAINS (3) enum qca_vendor_wlan_chan_width { QCA_VENDOR_WLAN_CHAN_WIDTH_20 = 0, QCA_VENDOR_WLAN_CHAN_WIDTH_40 = 1, QCA_VENDOR_WLAN_CHAN_WIDTH_80 = 2, QCA_VENDOR_WLAN_CHAN_WIDTH_80_80 = 3, QCA_VENDOR_WLAN_CHAN_WIDTH_160 = 4, }; enum qca_vendor_wlan_802_11_mode { QCA_VENDOR_WLAN_802_11_MODE_B = 0, QCA_VENDOR_WLAN_802_11_MODE_G = 1, QCA_VENDOR_WLAN_802_11_MODE_N = 2, QCA_VENDOR_WLAN_802_11_MODE_A = 3, QCA_VENDOR_WLAN_802_11_MODE_AC = 4, QCA_VENDOR_WLAN_802_11_MODE_AX = 5, }; enum qca_vendor_wlan_phy_mode { QCA_VENDOR_WLAN_PHY_MODE_LEGACY = 0, QCA_VENDOR_WLAN_PHY_MODE_HT = 1, QCA_VENDOR_WLAN_PHY_MODE_VHT = 2, QCA_VENDOR_WLAN_PHY_MODE_HE = 3, }; struct assoc_req_ie_flags { u8 ht_supported:1; u8 vht_supported:1; u8 he_supported:1; }; struct remote_sta_info { u8 num_sta; u8 num_request_vendor_sta_info; u8 num_received_vendor_sta_info; u8 num_request_nl80211_sta_info; u8 num_received_nl80211_sta_info; u8 mac_addr[MAC_ADDR_LEN]; u32 rx_retry_pkts; u32 rx_bcmc_pkts; u16 cap; u32 freq; u8 bandwidth; s8 rssi; u32 data_rate; u32 dot11_mode; u32 reason; u8 supported_mode; u32 tx_pckts; u32 tx_failures; u32 tx_rate; s32 avg_rssi_per_chain[WMI_MAX_CHAINS]; u32 tx_pkts_retried; u32 tx_pkts_retry_exhausted; s32 rx_lastpkt_rssi; u32 tx_pkts_total; u32 tx_pkts_retries; u32 tx_pkts_fw_total; u32 tx_pkts_fw_retries; u32 tx_pkts_fw_retry_exhausted; u32 ani_level; u32 roam_trigger_reason; u32 roam_fail_reason; u32 roam_invoke_fail_reason; u32 tsf_out_of_sync_count; u32 latest_tx_power; u32 latest_tx_rate; u32 latest_rix; u32 target_power_24g_1mbps; u32 target_power_24g_6mbps; u32 target_power_5g_6mbps; u8 *supp_op_classes; /* Supported Operating Classes element, if * received, starting from the Length field */ u8 *supp_channels; u32 supported_band; bool show_band; struct assoc_req_ie_flags flags; uint8_t country[COUNTRY_LEN]; }; #endif