1 /* 2 * Copyright (c) 2020, The Linux Foundation. All rights reserved. 3 * 4 * Redistribution and use in source and binary forms, with or without 5 * modification, are permitted provided that the following conditions are 6 * met: 7 * * Redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer. 9 * * Redistributions in binary form must reproduce the above 10 * copyright notice, this list of conditions and the following 11 * disclaimer in the documentation and/or other materials provided 12 * with the distribution. 13 * * Neither the name of The Linux Foundation nor the names of its 14 * contributors may be used to endorse or promote products derived 15 * from this software without specific prior written permission. 16 * 17 * THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED 18 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 19 * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT 20 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS 21 * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 22 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 23 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR 24 * BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, 25 * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE 26 * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 */ 29 30 #ifndef WPA_DRIVER_COMMON_LIB 31 #define WPA_DRIVER_COMMON_LIB 32 33 #include "android_drv.h" 34 #define OUI_LEN 3 35 #define MAX_CMD_LEN 32 36 #define MAC_ADDR_LEN 6 37 #define COUNTRY_LEN 4 38 39 #define IEEE80211_HE_OPERATION_VHT_OPER_MASK 0x00004000 40 #define IEEE80211_HE_OPERATION_CO_LOC_BSS_MASK 0x00008000 41 #define IEEE80211_HE_OPERATION_6G_OPER_MASK 0x00020000 42 43 #define HE_OPER_VHT_CH_WIDTH_OFFSET 0 44 #define HE_OPER_VHT_CENTER_FRQ_SEG0_OFFSET 1 45 #define HE_OPER_VHT_CENTER_FRQ_SEG1_OFFSET 2 46 #define HE_OPER_VHT_MAX_OFFSET 2 47 48 #define HE_OPER_CO_LOCATED_MAX_OFFSET 0 49 50 #define HE_OPER_6G_PARAMS_OFFSET 1 51 52 #define HE_OPER_6G_PARAMS_SUB_CH_BW_MASK 0X03 53 54 #define CHANNEL_BW_INVALID 255 55 56 /* Define short names */ 57 #define GET_STATION_INFO_AKM \ 58 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_AKM 59 #define GET_STATION_INFO_HT_OPERATION \ 60 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_HT_OPERATION 61 #define GET_STATION_INFO_VHT_OPERATION \ 62 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_VHT_OPERATION 63 #define GET_STATION_INFO_REMOTE_LAST_RX_RATE \ 64 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_LAST_RX_RATE 65 #define GET_STATION_INFO_REMOTE_SUPPORTED_MODE \ 66 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_SUPPORTED_MODE 67 #define GET_STATION_INFO_REMOTE_CH_WIDTH \ 68 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_CH_WIDTH 69 #define GET_STATION_INFO_REMOTE_RX_RETRY_COUNT \ 70 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_RETRY_COUNT 71 #define GET_STATION_INFO_REMOTE_RX_BC_MC_COUNT \ 72 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_BC_MC_COUNT 73 #define GET_STATION_INFO_BEACON_IES \ 74 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_BEACON_IES 75 #define GET_STATION_INFO_DRIVER_DISCONNECT_REASON \ 76 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_DRIVER_DISCONNECT_REASON 77 #define GET_STATION_INFO_ASSOC_REQ_IES \ 78 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_ASSOC_REQ_IES 79 #define GET_STATION_INFO_HE_OPERATION \ 80 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_HE_OPERATION 81 #define GET_STATION_INFO_MAX \ 82 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_MAX 83 84 #define GET_STA_INFO_MAC \ 85 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_MAC 86 #define GET_STA_INFO_RX_RETRY_COUNT \ 87 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_RX_RETRY_COUNT 88 #define GET_STA_INFO_RX_BC_MC_COUNT \ 89 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_RX_BC_MC_COUNT 90 #define GET_STA_INFO_TX_RETRY_SUCCEED \ 91 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TX_RETRY_SUCCEED 92 #define GET_STA_INFO_TX_RETRY_EXHAUSTED \ 93 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TX_RETRY_EXHAUSTED 94 #define GET_STA_INFO_TARGET_TX_TOTAL \ 95 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_TX_TOTAL 96 #define GET_STA_INFO_TARGET_TX_RETRY \ 97 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_TX_RETRY 98 #define GET_STA_INFO_TARGET_TX_RETRY_EXHAUSTED \ 99 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_TX_RETRY_EXHAUSTED 100 #define GET_STA_INFO_ANI_LEVEL \ 101 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ANI_LEVEL 102 #define GET_STA_INFO_LATEST_TX_RATE \ 103 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_LATEST_TX_RATE 104 #define GET_STA_INFO_LATEST_RIX \ 105 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_LATEST_RIX 106 #define GET_STA_INFO_TSF_OUT_OF_SYNC_COUNT \ 107 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TSF_OUT_OF_SYNC_COUNT 108 #define GET_STA_INFO_LATEST_TX_POWER \ 109 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_LATEST_TX_POWER 110 #define GET_STA_INFO_ROAM_TRIGGER_REASON \ 111 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ROAM_TRIGGER_REASON 112 #define GET_STA_INFO_TARGET_POWER_24G_1MBPS \ 113 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_POWER_24G_1MBPS 114 #define GET_STA_INFO_TARGET_POWER_24G_6MBPS \ 115 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_POWER_24G_6MBPS 116 #define GET_STA_INFO_TARGET_POWER_5G_6MBPS \ 117 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_TARGET_POWER_5G_6MBPS 118 #define GET_STA_INFO_ROAM_FAIL_REASON \ 119 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ROAM_FAIL_REASON 120 #define GET_STA_INFO_ROAM_INVOKE_FAIL_REASON \ 121 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_ROAM_INVOKE_FAIL_REASON 122 #define GET_STA_INFO_MAX \ 123 QCA_WLAN_VENDOR_ATTR_GET_STA_INFO_MAX 124 125 struct bss_info { 126 uint8_t oui[OUI_LEN]; 127 char ssid[MAX_SSID_LEN + 1]; 128 int channel; 129 int bw; 130 int rssi; 131 int data_rate; 132 /* 0 : 11b, 1 : 11g, 2 : 11n, 3 : 11a, 4 : 11ac */ 133 int mode_80211; 134 /* 0 : SISO, 1 : MIMO (2X2), 2 : MIMO (3X3), 3 : MIMO (4X4) */ 135 int snr; 136 int noise; 137 int akm; 138 int roaming_count; 139 /* 0: None, 1: 11k, 2: 11v, 3: 11kv */ 140 int mode_11kv; 141 /* Bit mask value of 11kv support */ 142 int mask_11kv; 143 u32 disc_reasn_code; 144 u32 ani_level; 145 u32 roam_trigger_reason; 146 u32 roam_fail_reason; 147 u32 roam_invoke_fail_reason; 148 u32 tsf_out_of_sync_count; 149 u32 latest_tx_power; 150 u32 latest_tx_rate; 151 u32 target_power_24g_1mbps; 152 u32 target_power_24g_6mbps; 153 u32 target_power_5g_6mbps; 154 }; 155 156 enum get_info_cmd { 157 GETSTATSBSSINFO = 1, 158 SETCELLSWITCHMODE = 2, 159 GET_DRIVER_SUPPORTED_FEATURES = 3, 160 }; 161 162 struct resp_info { 163 u32 subcmd; 164 char *reply_buf; 165 int reply_buf_len; 166 enum get_info_cmd cmd_type; 167 uint8_t mac_addr[MAC_ADDR_LEN]; 168 u32 freq; 169 uint8_t country[COUNTRY_LEN]; 170 }; 171 172 #define QCA_NL80211_VENDOR_SUBCMD_GET_STATION 121 173 174 #ifndef CHANWIDTH_USE_HT 175 #define CHANWIDTH_USE_HT VHT_CHANWIDTH_USE_HT 176 #endif /* CHANWIDTH_USE_HT */ 177 #ifndef CHANWIDTH_80MHZ 178 #define CHANWIDTH_80MHZ VHT_CHANWIDTH_80MHZ 179 #endif /* CHANWIDTH_80MHZ */ 180 #ifndef CHANWIDTH_160MHZ 181 #define CHANWIDTH_160MHZ VHT_CHANWIDTH_160MHZ 182 #endif /* CHANWIDTH_160MHZ */ 183 #ifndef CHANWIDTH_80P80MHZ 184 #define CHANWIDTH_80P80MHZ VHT_CHANWIDTH_80P80MHZ 185 #endif /* CHANWIDTH_80P80MHZ */ 186 187 /* HE channel widths */ 188 189 #define HE_CHANWIDTH_20MHZ 0 190 #define HE_CHANWIDTH_40MHZ 1 191 #define HE_CHANWIDTH_80MHZ 2 192 #define HE_CHANWIDTH_160MHZ 3 193 194 /** 195 * enum qca_wlan_vendor_attr_get_station - Sub commands used by 196 * QCA_NL80211_VENDOR_SUBCMD_GET_STATION to get the corresponding 197 * station information. The information obtained through these 198 * commands signify the current info in connected state and 199 * latest cached information during the connected state , if queried 200 * when in disconnected state. 201 */ 202 enum qca_wlan_vendor_attr_get_station { 203 QCA_WLAN_VENDOR_ATTR_GET_STATION_INVALID = 0, 204 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO, 205 QCA_WLAN_VENDOR_ATTR_GET_STATION_ASSOC_FAIL_REASON, 206 QCA_WLAN_VENDOR_ATTR_GET_STATION_REMOTE, 207 208 /* keep last */ 209 QCA_WLAN_VENDOR_ATTR_GET_STATION_AFTER_LAST, 210 QCA_WLAN_VENDOR_ATTR_GET_STATION_MAX = 211 QCA_WLAN_VENDOR_ATTR_GET_STATION_AFTER_LAST - 1, 212 }; 213 214 /** 215 * enum qca_wlan_vendor_attr_get_station_info - Station Info queried 216 * through QCA_NL80211_VENDOR_SUBCMD_GET_STATION. 217 */ 218 enum qca_wlan_vendor_attr_get_station_info { 219 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_INVALID = 0, 220 /* 221 * Get the standard NL attributes Nested with this attribute. 222 * Ex : Query BW , BITRATE32 , NSS , Signal , Noise of the Link - 223 * NL80211_ATTR_SSID / NL80211_ATTR_SURVEY_INFO (Connected Channel) / 224 * NL80211_ATTR_STA_INFO 225 */ 226 QCA_WLAN_VENDOR_ATTR_GET_STATION_LINK_INFO_ATTR, 227 /* 228 * Get the standard NL attributes Nested with this attribute. 229 * Ex : Query HT/VHT Capability advertized by the AP. 230 * NL80211_ATTR_VHT_CAPABILITY / NL80211_ATTR_HT_CAPABILITY 231 */ 232 QCA_WLAN_VENDOR_ATTR_GET_STATION_AP_INFO_ATTR, 233 234 /* Number of successful Roam attempts before a disconnect, 235 * Unsigned 32 bit value 236 */ 237 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_ROAM_COUNT, 238 239 /* Authentication Key Management Type used for the connected session. 240 * Signified by enum qca_wlan_auth_type 241 */ 242 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_AKM, 243 244 /* 802.11 Mode of the connected Session, 245 * signified by enum qca_wlan_802_11_mode 246 */ 247 QCA_WLAN_VENDOR_ATTR_802_11_MODE, 248 249 /* HS20 Indication Element */ 250 QCA_WLAN_VENDOR_ATTR_GET_STATION_AP_INFO_HS20_INDICATION, 251 252 /* HT/VHT operation elements */ 253 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_HT_OPERATION, 254 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_VHT_OPERATION, 255 256 /* Status Code Corresponding to the Association Failure. 257 * Unsigned 32 bit value 258 */ 259 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_ASSSOC_FAIL_REASON, 260 261 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_MAX_PHY_RATE, 262 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_PACKETS, 263 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_BYTES, 264 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_PACKETS, 265 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_BYTES, 266 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_LAST_TX_RATE, 267 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_LAST_RX_RATE, 268 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_WMM, 269 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_SUPPORTED_MODE, 270 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_AMPDU, 271 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_STBC, 272 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_STBC, 273 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_CH_WIDTH, 274 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_SGI_ENABLE, 275 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_PAD, 276 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_RETRY_COUNT, 277 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_BC_MC_COUNT, 278 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_FAILURE, 279 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_AVG_RSSI_PER_CHAIN, 280 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_RETRY_SUCCEED, 281 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_RX_LAST_PKT_RSSI, 282 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_RETRY, 283 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_RETRY_EXHAUST, 284 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_TOTAL_FW, 285 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_RETRY_FW, 286 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_REMOTE_TX_RETRY_EXHAUST_FW, 287 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_BEACON_IES, 288 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_DRIVER_DISCONNECT_REASON, 289 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_ASSOC_REQ_IES, 290 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_HE_OPERATION, 291 292 /* keep last */ 293 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_AFTER_LAST, 294 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_MAX = 295 QCA_WLAN_VENDOR_ATTR_GET_STATION_INFO_AFTER_LAST - 1, 296 }; 297 298 #define NOISE_FLOOR_DBM (96) 299 300 #define WMI_MAX_CHAINS (3) 301 302 enum qca_vendor_wlan_chan_width { 303 QCA_VENDOR_WLAN_CHAN_WIDTH_20 = 0, 304 QCA_VENDOR_WLAN_CHAN_WIDTH_40 = 1, 305 QCA_VENDOR_WLAN_CHAN_WIDTH_80 = 2, 306 QCA_VENDOR_WLAN_CHAN_WIDTH_80_80 = 3, 307 QCA_VENDOR_WLAN_CHAN_WIDTH_160 = 4, 308 }; 309 310 enum qca_vendor_wlan_802_11_mode { 311 QCA_VENDOR_WLAN_802_11_MODE_B = 0, 312 QCA_VENDOR_WLAN_802_11_MODE_G = 1, 313 QCA_VENDOR_WLAN_802_11_MODE_N = 2, 314 QCA_VENDOR_WLAN_802_11_MODE_A = 3, 315 QCA_VENDOR_WLAN_802_11_MODE_AC = 4, 316 QCA_VENDOR_WLAN_802_11_MODE_AX = 5, 317 }; 318 319 enum qca_vendor_wlan_phy_mode { 320 QCA_VENDOR_WLAN_PHY_MODE_LEGACY = 0, 321 QCA_VENDOR_WLAN_PHY_MODE_HT = 1, 322 QCA_VENDOR_WLAN_PHY_MODE_VHT = 2, 323 QCA_VENDOR_WLAN_PHY_MODE_HE = 3, 324 }; 325 326 struct assoc_req_ie_flags { 327 u8 ht_supported:1; 328 u8 vht_supported:1; 329 u8 he_supported:1; 330 }; 331 332 struct remote_sta_info { 333 u8 num_sta; 334 u8 num_request_vendor_sta_info; 335 u8 num_received_vendor_sta_info; 336 u8 num_request_nl80211_sta_info; 337 u8 num_received_nl80211_sta_info; 338 u8 mac_addr[MAC_ADDR_LEN]; 339 u32 rx_retry_pkts; 340 u32 rx_bcmc_pkts; 341 u16 cap; 342 u32 freq; 343 u8 bandwidth; 344 s8 rssi; 345 u32 data_rate; 346 u32 dot11_mode; 347 u32 reason; 348 u8 supported_mode; 349 u32 tx_pckts; 350 u32 tx_failures; 351 u32 tx_rate; 352 s32 avg_rssi_per_chain[WMI_MAX_CHAINS]; 353 u32 tx_pkts_retried; 354 u32 tx_pkts_retry_exhausted; 355 s32 rx_lastpkt_rssi; 356 u32 tx_pkts_total; 357 u32 tx_pkts_retries; 358 u32 tx_pkts_fw_total; 359 u32 tx_pkts_fw_retries; 360 u32 tx_pkts_fw_retry_exhausted; 361 u32 ani_level; 362 u32 roam_trigger_reason; 363 u32 roam_fail_reason; 364 u32 roam_invoke_fail_reason; 365 u32 tsf_out_of_sync_count; 366 u32 latest_tx_power; 367 u32 latest_tx_rate; 368 u32 latest_rix; 369 u32 target_power_24g_1mbps; 370 u32 target_power_24g_6mbps; 371 u32 target_power_5g_6mbps; 372 u8 *supp_op_classes; /* Supported Operating Classes element, if 373 * received, starting from the Length field */ 374 u8 *supp_channels; 375 u32 supported_band; 376 bool show_band; 377 struct assoc_req_ie_flags flags; 378 uint8_t country[COUNTRY_LEN]; 379 }; 380 381 #endif 382