1 /* 2 * Copyright (c) 2005-2011 Atheros Communications Inc. 3 * Copyright (c) 2011-2013 Qualcomm Atheros, Inc. 4 * 5 * Permission to use, copy, modify, and/or distribute this software for any 6 * purpose with or without fee is hereby granted, provided that the above 7 * copyright notice and this permission notice appear in all copies. 8 * 9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES 10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF 11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR 12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES 13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN 14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF 15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 16 */ 17 18 #ifndef _WMI_H_ 19 #define _WMI_H_ 20 21 #include <linux/types.h> 22 #include <net/mac80211.h> 23 24 /* 25 * This file specifies the WMI interface for the Unified Software 26 * Architecture. 27 * 28 * It includes definitions of all the commands and events. Commands are 29 * messages from the host to the target. Events and Replies are messages 30 * from the target to the host. 31 * 32 * Ownership of correctness in regards to WMI commands belongs to the host 33 * driver and the target is not required to validate parameters for value, 34 * proper range, or any other checking. 35 * 36 * Guidelines for extending this interface are below. 37 * 38 * 1. Add new WMI commands ONLY within the specified range - 0x9000 - 0x9fff 39 * 40 * 2. Use ONLY u32 type for defining member variables within WMI 41 * command/event structures. Do not use u8, u16, bool or 42 * enum types within these structures. 43 * 44 * 3. DO NOT define bit fields within structures. Implement bit fields 45 * using masks if necessary. Do not use the programming language's bit 46 * field definition. 47 * 48 * 4. Define macros for encode/decode of u8, u16 fields within 49 * the u32 variables. Use these macros for set/get of these fields. 50 * Try to use this to optimize the structure without bloating it with 51 * u32 variables for every lower sized field. 52 * 53 * 5. Do not use PACK/UNPACK attributes for the structures as each member 54 * variable is already 4-byte aligned by virtue of being a u32 55 * type. 56 * 57 * 6. Comment each parameter part of the WMI command/event structure by 58 * using the 2 stars at the begining of C comment instead of one star to 59 * enable HTML document generation using Doxygen. 60 * 61 */ 62 63 /* Control Path */ 64 struct wmi_cmd_hdr { 65 __le32 cmd_id; 66 } __packed; 67 68 #define WMI_CMD_HDR_CMD_ID_MASK 0x00FFFFFF 69 #define WMI_CMD_HDR_CMD_ID_LSB 0 70 #define WMI_CMD_HDR_PLT_PRIV_MASK 0xFF000000 71 #define WMI_CMD_HDR_PLT_PRIV_LSB 24 72 73 #define HTC_PROTOCOL_VERSION 0x0002 74 #define WMI_PROTOCOL_VERSION 0x0002 75 76 enum wmi_service { 77 WMI_SERVICE_BEACON_OFFLOAD = 0, 78 WMI_SERVICE_SCAN_OFFLOAD, 79 WMI_SERVICE_ROAM_OFFLOAD, 80 WMI_SERVICE_BCN_MISS_OFFLOAD, 81 WMI_SERVICE_STA_PWRSAVE, 82 WMI_SERVICE_STA_ADVANCED_PWRSAVE, 83 WMI_SERVICE_AP_UAPSD, 84 WMI_SERVICE_AP_DFS, 85 WMI_SERVICE_11AC, 86 WMI_SERVICE_BLOCKACK, 87 WMI_SERVICE_PHYERR, 88 WMI_SERVICE_BCN_FILTER, 89 WMI_SERVICE_RTT, 90 WMI_SERVICE_RATECTRL, 91 WMI_SERVICE_WOW, 92 WMI_SERVICE_RATECTRL_CACHE, 93 WMI_SERVICE_IRAM_TIDS, 94 WMI_SERVICE_ARPNS_OFFLOAD, 95 WMI_SERVICE_NLO, 96 WMI_SERVICE_GTK_OFFLOAD, 97 WMI_SERVICE_SCAN_SCH, 98 WMI_SERVICE_CSA_OFFLOAD, 99 WMI_SERVICE_CHATTER, 100 WMI_SERVICE_COEX_FREQAVOID, 101 WMI_SERVICE_PACKET_POWER_SAVE, 102 WMI_SERVICE_FORCE_FW_HANG, 103 WMI_SERVICE_GPIO, 104 WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM, 105 WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, 106 WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, 107 WMI_SERVICE_STA_KEEP_ALIVE, 108 WMI_SERVICE_TX_ENCAP, 109 WMI_SERVICE_BURST, 110 WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT, 111 WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT, 112 113 /* keep last */ 114 WMI_SERVICE_MAX, 115 }; 116 117 enum wmi_10x_service { 118 WMI_10X_SERVICE_BEACON_OFFLOAD = 0, 119 WMI_10X_SERVICE_SCAN_OFFLOAD, 120 WMI_10X_SERVICE_ROAM_OFFLOAD, 121 WMI_10X_SERVICE_BCN_MISS_OFFLOAD, 122 WMI_10X_SERVICE_STA_PWRSAVE, 123 WMI_10X_SERVICE_STA_ADVANCED_PWRSAVE, 124 WMI_10X_SERVICE_AP_UAPSD, 125 WMI_10X_SERVICE_AP_DFS, 126 WMI_10X_SERVICE_11AC, 127 WMI_10X_SERVICE_BLOCKACK, 128 WMI_10X_SERVICE_PHYERR, 129 WMI_10X_SERVICE_BCN_FILTER, 130 WMI_10X_SERVICE_RTT, 131 WMI_10X_SERVICE_RATECTRL, 132 WMI_10X_SERVICE_WOW, 133 WMI_10X_SERVICE_RATECTRL_CACHE, 134 WMI_10X_SERVICE_IRAM_TIDS, 135 WMI_10X_SERVICE_BURST, 136 137 /* introduced in 10.2 */ 138 WMI_10X_SERVICE_SMART_ANTENNA_SW_SUPPORT, 139 WMI_10X_SERVICE_FORCE_FW_HANG, 140 WMI_10X_SERVICE_SMART_ANTENNA_HW_SUPPORT, 141 }; 142 143 enum wmi_main_service { 144 WMI_MAIN_SERVICE_BEACON_OFFLOAD = 0, 145 WMI_MAIN_SERVICE_SCAN_OFFLOAD, 146 WMI_MAIN_SERVICE_ROAM_OFFLOAD, 147 WMI_MAIN_SERVICE_BCN_MISS_OFFLOAD, 148 WMI_MAIN_SERVICE_STA_PWRSAVE, 149 WMI_MAIN_SERVICE_STA_ADVANCED_PWRSAVE, 150 WMI_MAIN_SERVICE_AP_UAPSD, 151 WMI_MAIN_SERVICE_AP_DFS, 152 WMI_MAIN_SERVICE_11AC, 153 WMI_MAIN_SERVICE_BLOCKACK, 154 WMI_MAIN_SERVICE_PHYERR, 155 WMI_MAIN_SERVICE_BCN_FILTER, 156 WMI_MAIN_SERVICE_RTT, 157 WMI_MAIN_SERVICE_RATECTRL, 158 WMI_MAIN_SERVICE_WOW, 159 WMI_MAIN_SERVICE_RATECTRL_CACHE, 160 WMI_MAIN_SERVICE_IRAM_TIDS, 161 WMI_MAIN_SERVICE_ARPNS_OFFLOAD, 162 WMI_MAIN_SERVICE_NLO, 163 WMI_MAIN_SERVICE_GTK_OFFLOAD, 164 WMI_MAIN_SERVICE_SCAN_SCH, 165 WMI_MAIN_SERVICE_CSA_OFFLOAD, 166 WMI_MAIN_SERVICE_CHATTER, 167 WMI_MAIN_SERVICE_COEX_FREQAVOID, 168 WMI_MAIN_SERVICE_PACKET_POWER_SAVE, 169 WMI_MAIN_SERVICE_FORCE_FW_HANG, 170 WMI_MAIN_SERVICE_GPIO, 171 WMI_MAIN_SERVICE_STA_DTIM_PS_MODULATED_DTIM, 172 WMI_MAIN_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, 173 WMI_MAIN_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, 174 WMI_MAIN_SERVICE_STA_KEEP_ALIVE, 175 WMI_MAIN_SERVICE_TX_ENCAP, 176 }; 177 178 static inline char *wmi_service_name(int service_id) 179 { 180 #define SVCSTR(x) case x: return #x 181 182 switch (service_id) { 183 SVCSTR(WMI_SERVICE_BEACON_OFFLOAD); 184 SVCSTR(WMI_SERVICE_SCAN_OFFLOAD); 185 SVCSTR(WMI_SERVICE_ROAM_OFFLOAD); 186 SVCSTR(WMI_SERVICE_BCN_MISS_OFFLOAD); 187 SVCSTR(WMI_SERVICE_STA_PWRSAVE); 188 SVCSTR(WMI_SERVICE_STA_ADVANCED_PWRSAVE); 189 SVCSTR(WMI_SERVICE_AP_UAPSD); 190 SVCSTR(WMI_SERVICE_AP_DFS); 191 SVCSTR(WMI_SERVICE_11AC); 192 SVCSTR(WMI_SERVICE_BLOCKACK); 193 SVCSTR(WMI_SERVICE_PHYERR); 194 SVCSTR(WMI_SERVICE_BCN_FILTER); 195 SVCSTR(WMI_SERVICE_RTT); 196 SVCSTR(WMI_SERVICE_RATECTRL); 197 SVCSTR(WMI_SERVICE_WOW); 198 SVCSTR(WMI_SERVICE_RATECTRL_CACHE); 199 SVCSTR(WMI_SERVICE_IRAM_TIDS); 200 SVCSTR(WMI_SERVICE_ARPNS_OFFLOAD); 201 SVCSTR(WMI_SERVICE_NLO); 202 SVCSTR(WMI_SERVICE_GTK_OFFLOAD); 203 SVCSTR(WMI_SERVICE_SCAN_SCH); 204 SVCSTR(WMI_SERVICE_CSA_OFFLOAD); 205 SVCSTR(WMI_SERVICE_CHATTER); 206 SVCSTR(WMI_SERVICE_COEX_FREQAVOID); 207 SVCSTR(WMI_SERVICE_PACKET_POWER_SAVE); 208 SVCSTR(WMI_SERVICE_FORCE_FW_HANG); 209 SVCSTR(WMI_SERVICE_GPIO); 210 SVCSTR(WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM); 211 SVCSTR(WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG); 212 SVCSTR(WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG); 213 SVCSTR(WMI_SERVICE_STA_KEEP_ALIVE); 214 SVCSTR(WMI_SERVICE_TX_ENCAP); 215 SVCSTR(WMI_SERVICE_BURST); 216 SVCSTR(WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT); 217 SVCSTR(WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT); 218 default: 219 return NULL; 220 } 221 222 #undef SVCSTR 223 } 224 225 #define WMI_SERVICE_IS_ENABLED(wmi_svc_bmap, svc_id) \ 226 (__le32_to_cpu((wmi_svc_bmap)[(svc_id)/(sizeof(u32))]) & \ 227 BIT((svc_id)%(sizeof(u32)))) 228 229 #define SVCMAP(x, y) \ 230 do { \ 231 if (WMI_SERVICE_IS_ENABLED((in), (x))) \ 232 __set_bit(y, out); \ 233 } while (0) 234 235 static inline void wmi_10x_svc_map(const __le32 *in, unsigned long *out) 236 { 237 SVCMAP(WMI_10X_SERVICE_BEACON_OFFLOAD, 238 WMI_SERVICE_BEACON_OFFLOAD); 239 SVCMAP(WMI_10X_SERVICE_SCAN_OFFLOAD, 240 WMI_SERVICE_SCAN_OFFLOAD); 241 SVCMAP(WMI_10X_SERVICE_ROAM_OFFLOAD, 242 WMI_SERVICE_ROAM_OFFLOAD); 243 SVCMAP(WMI_10X_SERVICE_BCN_MISS_OFFLOAD, 244 WMI_SERVICE_BCN_MISS_OFFLOAD); 245 SVCMAP(WMI_10X_SERVICE_STA_PWRSAVE, 246 WMI_SERVICE_STA_PWRSAVE); 247 SVCMAP(WMI_10X_SERVICE_STA_ADVANCED_PWRSAVE, 248 WMI_SERVICE_STA_ADVANCED_PWRSAVE); 249 SVCMAP(WMI_10X_SERVICE_AP_UAPSD, 250 WMI_SERVICE_AP_UAPSD); 251 SVCMAP(WMI_10X_SERVICE_AP_DFS, 252 WMI_SERVICE_AP_DFS); 253 SVCMAP(WMI_10X_SERVICE_11AC, 254 WMI_SERVICE_11AC); 255 SVCMAP(WMI_10X_SERVICE_BLOCKACK, 256 WMI_SERVICE_BLOCKACK); 257 SVCMAP(WMI_10X_SERVICE_PHYERR, 258 WMI_SERVICE_PHYERR); 259 SVCMAP(WMI_10X_SERVICE_BCN_FILTER, 260 WMI_SERVICE_BCN_FILTER); 261 SVCMAP(WMI_10X_SERVICE_RTT, 262 WMI_SERVICE_RTT); 263 SVCMAP(WMI_10X_SERVICE_RATECTRL, 264 WMI_SERVICE_RATECTRL); 265 SVCMAP(WMI_10X_SERVICE_WOW, 266 WMI_SERVICE_WOW); 267 SVCMAP(WMI_10X_SERVICE_RATECTRL_CACHE, 268 WMI_SERVICE_RATECTRL_CACHE); 269 SVCMAP(WMI_10X_SERVICE_IRAM_TIDS, 270 WMI_SERVICE_IRAM_TIDS); 271 SVCMAP(WMI_10X_SERVICE_BURST, 272 WMI_SERVICE_BURST); 273 SVCMAP(WMI_10X_SERVICE_SMART_ANTENNA_SW_SUPPORT, 274 WMI_SERVICE_SMART_ANTENNA_SW_SUPPORT); 275 SVCMAP(WMI_10X_SERVICE_FORCE_FW_HANG, 276 WMI_SERVICE_FORCE_FW_HANG); 277 SVCMAP(WMI_10X_SERVICE_SMART_ANTENNA_HW_SUPPORT, 278 WMI_SERVICE_SMART_ANTENNA_HW_SUPPORT); 279 } 280 281 static inline void wmi_main_svc_map(const __le32 *in, unsigned long *out) 282 { 283 SVCMAP(WMI_MAIN_SERVICE_BEACON_OFFLOAD, 284 WMI_SERVICE_BEACON_OFFLOAD); 285 SVCMAP(WMI_MAIN_SERVICE_SCAN_OFFLOAD, 286 WMI_SERVICE_SCAN_OFFLOAD); 287 SVCMAP(WMI_MAIN_SERVICE_ROAM_OFFLOAD, 288 WMI_SERVICE_ROAM_OFFLOAD); 289 SVCMAP(WMI_MAIN_SERVICE_BCN_MISS_OFFLOAD, 290 WMI_SERVICE_BCN_MISS_OFFLOAD); 291 SVCMAP(WMI_MAIN_SERVICE_STA_PWRSAVE, 292 WMI_SERVICE_STA_PWRSAVE); 293 SVCMAP(WMI_MAIN_SERVICE_STA_ADVANCED_PWRSAVE, 294 WMI_SERVICE_STA_ADVANCED_PWRSAVE); 295 SVCMAP(WMI_MAIN_SERVICE_AP_UAPSD, 296 WMI_SERVICE_AP_UAPSD); 297 SVCMAP(WMI_MAIN_SERVICE_AP_DFS, 298 WMI_SERVICE_AP_DFS); 299 SVCMAP(WMI_MAIN_SERVICE_11AC, 300 WMI_SERVICE_11AC); 301 SVCMAP(WMI_MAIN_SERVICE_BLOCKACK, 302 WMI_SERVICE_BLOCKACK); 303 SVCMAP(WMI_MAIN_SERVICE_PHYERR, 304 WMI_SERVICE_PHYERR); 305 SVCMAP(WMI_MAIN_SERVICE_BCN_FILTER, 306 WMI_SERVICE_BCN_FILTER); 307 SVCMAP(WMI_MAIN_SERVICE_RTT, 308 WMI_SERVICE_RTT); 309 SVCMAP(WMI_MAIN_SERVICE_RATECTRL, 310 WMI_SERVICE_RATECTRL); 311 SVCMAP(WMI_MAIN_SERVICE_WOW, 312 WMI_SERVICE_WOW); 313 SVCMAP(WMI_MAIN_SERVICE_RATECTRL_CACHE, 314 WMI_SERVICE_RATECTRL_CACHE); 315 SVCMAP(WMI_MAIN_SERVICE_IRAM_TIDS, 316 WMI_SERVICE_IRAM_TIDS); 317 SVCMAP(WMI_MAIN_SERVICE_ARPNS_OFFLOAD, 318 WMI_SERVICE_ARPNS_OFFLOAD); 319 SVCMAP(WMI_MAIN_SERVICE_NLO, 320 WMI_SERVICE_NLO); 321 SVCMAP(WMI_MAIN_SERVICE_GTK_OFFLOAD, 322 WMI_SERVICE_GTK_OFFLOAD); 323 SVCMAP(WMI_MAIN_SERVICE_SCAN_SCH, 324 WMI_SERVICE_SCAN_SCH); 325 SVCMAP(WMI_MAIN_SERVICE_CSA_OFFLOAD, 326 WMI_SERVICE_CSA_OFFLOAD); 327 SVCMAP(WMI_MAIN_SERVICE_CHATTER, 328 WMI_SERVICE_CHATTER); 329 SVCMAP(WMI_MAIN_SERVICE_COEX_FREQAVOID, 330 WMI_SERVICE_COEX_FREQAVOID); 331 SVCMAP(WMI_MAIN_SERVICE_PACKET_POWER_SAVE, 332 WMI_SERVICE_PACKET_POWER_SAVE); 333 SVCMAP(WMI_MAIN_SERVICE_FORCE_FW_HANG, 334 WMI_SERVICE_FORCE_FW_HANG); 335 SVCMAP(WMI_MAIN_SERVICE_GPIO, 336 WMI_SERVICE_GPIO); 337 SVCMAP(WMI_MAIN_SERVICE_STA_DTIM_PS_MODULATED_DTIM, 338 WMI_SERVICE_STA_DTIM_PS_MODULATED_DTIM); 339 SVCMAP(WMI_MAIN_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG, 340 WMI_SERVICE_STA_UAPSD_BASIC_AUTO_TRIG); 341 SVCMAP(WMI_MAIN_SERVICE_STA_UAPSD_VAR_AUTO_TRIG, 342 WMI_SERVICE_STA_UAPSD_VAR_AUTO_TRIG); 343 SVCMAP(WMI_MAIN_SERVICE_STA_KEEP_ALIVE, 344 WMI_SERVICE_STA_KEEP_ALIVE); 345 SVCMAP(WMI_MAIN_SERVICE_TX_ENCAP, 346 WMI_SERVICE_TX_ENCAP); 347 } 348 349 #undef SVCMAP 350 351 /* 2 word representation of MAC addr */ 352 struct wmi_mac_addr { 353 union { 354 u8 addr[6]; 355 struct { 356 u32 word0; 357 u32 word1; 358 } __packed; 359 } __packed; 360 } __packed; 361 362 struct wmi_cmd_map { 363 u32 init_cmdid; 364 u32 start_scan_cmdid; 365 u32 stop_scan_cmdid; 366 u32 scan_chan_list_cmdid; 367 u32 scan_sch_prio_tbl_cmdid; 368 u32 pdev_set_regdomain_cmdid; 369 u32 pdev_set_channel_cmdid; 370 u32 pdev_set_param_cmdid; 371 u32 pdev_pktlog_enable_cmdid; 372 u32 pdev_pktlog_disable_cmdid; 373 u32 pdev_set_wmm_params_cmdid; 374 u32 pdev_set_ht_cap_ie_cmdid; 375 u32 pdev_set_vht_cap_ie_cmdid; 376 u32 pdev_set_dscp_tid_map_cmdid; 377 u32 pdev_set_quiet_mode_cmdid; 378 u32 pdev_green_ap_ps_enable_cmdid; 379 u32 pdev_get_tpc_config_cmdid; 380 u32 pdev_set_base_macaddr_cmdid; 381 u32 vdev_create_cmdid; 382 u32 vdev_delete_cmdid; 383 u32 vdev_start_request_cmdid; 384 u32 vdev_restart_request_cmdid; 385 u32 vdev_up_cmdid; 386 u32 vdev_stop_cmdid; 387 u32 vdev_down_cmdid; 388 u32 vdev_set_param_cmdid; 389 u32 vdev_install_key_cmdid; 390 u32 peer_create_cmdid; 391 u32 peer_delete_cmdid; 392 u32 peer_flush_tids_cmdid; 393 u32 peer_set_param_cmdid; 394 u32 peer_assoc_cmdid; 395 u32 peer_add_wds_entry_cmdid; 396 u32 peer_remove_wds_entry_cmdid; 397 u32 peer_mcast_group_cmdid; 398 u32 bcn_tx_cmdid; 399 u32 pdev_send_bcn_cmdid; 400 u32 bcn_tmpl_cmdid; 401 u32 bcn_filter_rx_cmdid; 402 u32 prb_req_filter_rx_cmdid; 403 u32 mgmt_tx_cmdid; 404 u32 prb_tmpl_cmdid; 405 u32 addba_clear_resp_cmdid; 406 u32 addba_send_cmdid; 407 u32 addba_status_cmdid; 408 u32 delba_send_cmdid; 409 u32 addba_set_resp_cmdid; 410 u32 send_singleamsdu_cmdid; 411 u32 sta_powersave_mode_cmdid; 412 u32 sta_powersave_param_cmdid; 413 u32 sta_mimo_ps_mode_cmdid; 414 u32 pdev_dfs_enable_cmdid; 415 u32 pdev_dfs_disable_cmdid; 416 u32 roam_scan_mode; 417 u32 roam_scan_rssi_threshold; 418 u32 roam_scan_period; 419 u32 roam_scan_rssi_change_threshold; 420 u32 roam_ap_profile; 421 u32 ofl_scan_add_ap_profile; 422 u32 ofl_scan_remove_ap_profile; 423 u32 ofl_scan_period; 424 u32 p2p_dev_set_device_info; 425 u32 p2p_dev_set_discoverability; 426 u32 p2p_go_set_beacon_ie; 427 u32 p2p_go_set_probe_resp_ie; 428 u32 p2p_set_vendor_ie_data_cmdid; 429 u32 ap_ps_peer_param_cmdid; 430 u32 ap_ps_peer_uapsd_coex_cmdid; 431 u32 peer_rate_retry_sched_cmdid; 432 u32 wlan_profile_trigger_cmdid; 433 u32 wlan_profile_set_hist_intvl_cmdid; 434 u32 wlan_profile_get_profile_data_cmdid; 435 u32 wlan_profile_enable_profile_id_cmdid; 436 u32 wlan_profile_list_profile_id_cmdid; 437 u32 pdev_suspend_cmdid; 438 u32 pdev_resume_cmdid; 439 u32 add_bcn_filter_cmdid; 440 u32 rmv_bcn_filter_cmdid; 441 u32 wow_add_wake_pattern_cmdid; 442 u32 wow_del_wake_pattern_cmdid; 443 u32 wow_enable_disable_wake_event_cmdid; 444 u32 wow_enable_cmdid; 445 u32 wow_hostwakeup_from_sleep_cmdid; 446 u32 rtt_measreq_cmdid; 447 u32 rtt_tsf_cmdid; 448 u32 vdev_spectral_scan_configure_cmdid; 449 u32 vdev_spectral_scan_enable_cmdid; 450 u32 request_stats_cmdid; 451 u32 set_arp_ns_offload_cmdid; 452 u32 network_list_offload_config_cmdid; 453 u32 gtk_offload_cmdid; 454 u32 csa_offload_enable_cmdid; 455 u32 csa_offload_chanswitch_cmdid; 456 u32 chatter_set_mode_cmdid; 457 u32 peer_tid_addba_cmdid; 458 u32 peer_tid_delba_cmdid; 459 u32 sta_dtim_ps_method_cmdid; 460 u32 sta_uapsd_auto_trig_cmdid; 461 u32 sta_keepalive_cmd; 462 u32 echo_cmdid; 463 u32 pdev_utf_cmdid; 464 u32 dbglog_cfg_cmdid; 465 u32 pdev_qvit_cmdid; 466 u32 pdev_ftm_intg_cmdid; 467 u32 vdev_set_keepalive_cmdid; 468 u32 vdev_get_keepalive_cmdid; 469 u32 force_fw_hang_cmdid; 470 u32 gpio_config_cmdid; 471 u32 gpio_output_cmdid; 472 }; 473 474 /* 475 * wmi command groups. 476 */ 477 enum wmi_cmd_group { 478 /* 0 to 2 are reserved */ 479 WMI_GRP_START = 0x3, 480 WMI_GRP_SCAN = WMI_GRP_START, 481 WMI_GRP_PDEV, 482 WMI_GRP_VDEV, 483 WMI_GRP_PEER, 484 WMI_GRP_MGMT, 485 WMI_GRP_BA_NEG, 486 WMI_GRP_STA_PS, 487 WMI_GRP_DFS, 488 WMI_GRP_ROAM, 489 WMI_GRP_OFL_SCAN, 490 WMI_GRP_P2P, 491 WMI_GRP_AP_PS, 492 WMI_GRP_RATE_CTRL, 493 WMI_GRP_PROFILE, 494 WMI_GRP_SUSPEND, 495 WMI_GRP_BCN_FILTER, 496 WMI_GRP_WOW, 497 WMI_GRP_RTT, 498 WMI_GRP_SPECTRAL, 499 WMI_GRP_STATS, 500 WMI_GRP_ARP_NS_OFL, 501 WMI_GRP_NLO_OFL, 502 WMI_GRP_GTK_OFL, 503 WMI_GRP_CSA_OFL, 504 WMI_GRP_CHATTER, 505 WMI_GRP_TID_ADDBA, 506 WMI_GRP_MISC, 507 WMI_GRP_GPIO, 508 }; 509 510 #define WMI_CMD_GRP(grp_id) (((grp_id) << 12) | 0x1) 511 #define WMI_EVT_GRP_START_ID(grp_id) (((grp_id) << 12) | 0x1) 512 513 #define WMI_CMD_UNSUPPORTED 0 514 515 /* Command IDs and command events for MAIN FW. */ 516 enum wmi_cmd_id { 517 WMI_INIT_CMDID = 0x1, 518 519 /* Scan specific commands */ 520 WMI_START_SCAN_CMDID = WMI_CMD_GRP(WMI_GRP_SCAN), 521 WMI_STOP_SCAN_CMDID, 522 WMI_SCAN_CHAN_LIST_CMDID, 523 WMI_SCAN_SCH_PRIO_TBL_CMDID, 524 525 /* PDEV (physical device) specific commands */ 526 WMI_PDEV_SET_REGDOMAIN_CMDID = WMI_CMD_GRP(WMI_GRP_PDEV), 527 WMI_PDEV_SET_CHANNEL_CMDID, 528 WMI_PDEV_SET_PARAM_CMDID, 529 WMI_PDEV_PKTLOG_ENABLE_CMDID, 530 WMI_PDEV_PKTLOG_DISABLE_CMDID, 531 WMI_PDEV_SET_WMM_PARAMS_CMDID, 532 WMI_PDEV_SET_HT_CAP_IE_CMDID, 533 WMI_PDEV_SET_VHT_CAP_IE_CMDID, 534 WMI_PDEV_SET_DSCP_TID_MAP_CMDID, 535 WMI_PDEV_SET_QUIET_MODE_CMDID, 536 WMI_PDEV_GREEN_AP_PS_ENABLE_CMDID, 537 WMI_PDEV_GET_TPC_CONFIG_CMDID, 538 WMI_PDEV_SET_BASE_MACADDR_CMDID, 539 540 /* VDEV (virtual device) specific commands */ 541 WMI_VDEV_CREATE_CMDID = WMI_CMD_GRP(WMI_GRP_VDEV), 542 WMI_VDEV_DELETE_CMDID, 543 WMI_VDEV_START_REQUEST_CMDID, 544 WMI_VDEV_RESTART_REQUEST_CMDID, 545 WMI_VDEV_UP_CMDID, 546 WMI_VDEV_STOP_CMDID, 547 WMI_VDEV_DOWN_CMDID, 548 WMI_VDEV_SET_PARAM_CMDID, 549 WMI_VDEV_INSTALL_KEY_CMDID, 550 551 /* peer specific commands */ 552 WMI_PEER_CREATE_CMDID = WMI_CMD_GRP(WMI_GRP_PEER), 553 WMI_PEER_DELETE_CMDID, 554 WMI_PEER_FLUSH_TIDS_CMDID, 555 WMI_PEER_SET_PARAM_CMDID, 556 WMI_PEER_ASSOC_CMDID, 557 WMI_PEER_ADD_WDS_ENTRY_CMDID, 558 WMI_PEER_REMOVE_WDS_ENTRY_CMDID, 559 WMI_PEER_MCAST_GROUP_CMDID, 560 561 /* beacon/management specific commands */ 562 WMI_BCN_TX_CMDID = WMI_CMD_GRP(WMI_GRP_MGMT), 563 WMI_PDEV_SEND_BCN_CMDID, 564 WMI_BCN_TMPL_CMDID, 565 WMI_BCN_FILTER_RX_CMDID, 566 WMI_PRB_REQ_FILTER_RX_CMDID, 567 WMI_MGMT_TX_CMDID, 568 WMI_PRB_TMPL_CMDID, 569 570 /* commands to directly control BA negotiation directly from host. */ 571 WMI_ADDBA_CLEAR_RESP_CMDID = WMI_CMD_GRP(WMI_GRP_BA_NEG), 572 WMI_ADDBA_SEND_CMDID, 573 WMI_ADDBA_STATUS_CMDID, 574 WMI_DELBA_SEND_CMDID, 575 WMI_ADDBA_SET_RESP_CMDID, 576 WMI_SEND_SINGLEAMSDU_CMDID, 577 578 /* Station power save specific config */ 579 WMI_STA_POWERSAVE_MODE_CMDID = WMI_CMD_GRP(WMI_GRP_STA_PS), 580 WMI_STA_POWERSAVE_PARAM_CMDID, 581 WMI_STA_MIMO_PS_MODE_CMDID, 582 583 /** DFS-specific commands */ 584 WMI_PDEV_DFS_ENABLE_CMDID = WMI_CMD_GRP(WMI_GRP_DFS), 585 WMI_PDEV_DFS_DISABLE_CMDID, 586 587 /* Roaming specific commands */ 588 WMI_ROAM_SCAN_MODE = WMI_CMD_GRP(WMI_GRP_ROAM), 589 WMI_ROAM_SCAN_RSSI_THRESHOLD, 590 WMI_ROAM_SCAN_PERIOD, 591 WMI_ROAM_SCAN_RSSI_CHANGE_THRESHOLD, 592 WMI_ROAM_AP_PROFILE, 593 594 /* offload scan specific commands */ 595 WMI_OFL_SCAN_ADD_AP_PROFILE = WMI_CMD_GRP(WMI_GRP_OFL_SCAN), 596 WMI_OFL_SCAN_REMOVE_AP_PROFILE, 597 WMI_OFL_SCAN_PERIOD, 598 599 /* P2P specific commands */ 600 WMI_P2P_DEV_SET_DEVICE_INFO = WMI_CMD_GRP(WMI_GRP_P2P), 601 WMI_P2P_DEV_SET_DISCOVERABILITY, 602 WMI_P2P_GO_SET_BEACON_IE, 603 WMI_P2P_GO_SET_PROBE_RESP_IE, 604 WMI_P2P_SET_VENDOR_IE_DATA_CMDID, 605 606 /* AP power save specific config */ 607 WMI_AP_PS_PEER_PARAM_CMDID = WMI_CMD_GRP(WMI_GRP_AP_PS), 608 WMI_AP_PS_PEER_UAPSD_COEX_CMDID, 609 610 /* Rate-control specific commands */ 611 WMI_PEER_RATE_RETRY_SCHED_CMDID = 612 WMI_CMD_GRP(WMI_GRP_RATE_CTRL), 613 614 /* WLAN Profiling commands. */ 615 WMI_WLAN_PROFILE_TRIGGER_CMDID = WMI_CMD_GRP(WMI_GRP_PROFILE), 616 WMI_WLAN_PROFILE_SET_HIST_INTVL_CMDID, 617 WMI_WLAN_PROFILE_GET_PROFILE_DATA_CMDID, 618 WMI_WLAN_PROFILE_ENABLE_PROFILE_ID_CMDID, 619 WMI_WLAN_PROFILE_LIST_PROFILE_ID_CMDID, 620 621 /* Suspend resume command Ids */ 622 WMI_PDEV_SUSPEND_CMDID = WMI_CMD_GRP(WMI_GRP_SUSPEND), 623 WMI_PDEV_RESUME_CMDID, 624 625 /* Beacon filter commands */ 626 WMI_ADD_BCN_FILTER_CMDID = WMI_CMD_GRP(WMI_GRP_BCN_FILTER), 627 WMI_RMV_BCN_FILTER_CMDID, 628 629 /* WOW Specific WMI commands*/ 630 WMI_WOW_ADD_WAKE_PATTERN_CMDID = WMI_CMD_GRP(WMI_GRP_WOW), 631 WMI_WOW_DEL_WAKE_PATTERN_CMDID, 632 WMI_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID, 633 WMI_WOW_ENABLE_CMDID, 634 WMI_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID, 635 636 /* RTT measurement related cmd */ 637 WMI_RTT_MEASREQ_CMDID = WMI_CMD_GRP(WMI_GRP_RTT), 638 WMI_RTT_TSF_CMDID, 639 640 /* spectral scan commands */ 641 WMI_VDEV_SPECTRAL_SCAN_CONFIGURE_CMDID = WMI_CMD_GRP(WMI_GRP_SPECTRAL), 642 WMI_VDEV_SPECTRAL_SCAN_ENABLE_CMDID, 643 644 /* F/W stats */ 645 WMI_REQUEST_STATS_CMDID = WMI_CMD_GRP(WMI_GRP_STATS), 646 647 /* ARP OFFLOAD REQUEST*/ 648 WMI_SET_ARP_NS_OFFLOAD_CMDID = WMI_CMD_GRP(WMI_GRP_ARP_NS_OFL), 649 650 /* NS offload confid*/ 651 WMI_NETWORK_LIST_OFFLOAD_CONFIG_CMDID = WMI_CMD_GRP(WMI_GRP_NLO_OFL), 652 653 /* GTK offload Specific WMI commands*/ 654 WMI_GTK_OFFLOAD_CMDID = WMI_CMD_GRP(WMI_GRP_GTK_OFL), 655 656 /* CSA offload Specific WMI commands*/ 657 WMI_CSA_OFFLOAD_ENABLE_CMDID = WMI_CMD_GRP(WMI_GRP_CSA_OFL), 658 WMI_CSA_OFFLOAD_CHANSWITCH_CMDID, 659 660 /* Chatter commands*/ 661 WMI_CHATTER_SET_MODE_CMDID = WMI_CMD_GRP(WMI_GRP_CHATTER), 662 663 /* addba specific commands */ 664 WMI_PEER_TID_ADDBA_CMDID = WMI_CMD_GRP(WMI_GRP_TID_ADDBA), 665 WMI_PEER_TID_DELBA_CMDID, 666 667 /* set station mimo powersave method */ 668 WMI_STA_DTIM_PS_METHOD_CMDID, 669 /* Configure the Station UAPSD AC Auto Trigger Parameters */ 670 WMI_STA_UAPSD_AUTO_TRIG_CMDID, 671 672 /* STA Keep alive parameter configuration, 673 Requires WMI_SERVICE_STA_KEEP_ALIVE */ 674 WMI_STA_KEEPALIVE_CMD, 675 676 /* misc command group */ 677 WMI_ECHO_CMDID = WMI_CMD_GRP(WMI_GRP_MISC), 678 WMI_PDEV_UTF_CMDID, 679 WMI_DBGLOG_CFG_CMDID, 680 WMI_PDEV_QVIT_CMDID, 681 WMI_PDEV_FTM_INTG_CMDID, 682 WMI_VDEV_SET_KEEPALIVE_CMDID, 683 WMI_VDEV_GET_KEEPALIVE_CMDID, 684 WMI_FORCE_FW_HANG_CMDID, 685 686 /* GPIO Configuration */ 687 WMI_GPIO_CONFIG_CMDID = WMI_CMD_GRP(WMI_GRP_GPIO), 688 WMI_GPIO_OUTPUT_CMDID, 689 }; 690 691 enum wmi_event_id { 692 WMI_SERVICE_READY_EVENTID = 0x1, 693 WMI_READY_EVENTID, 694 695 /* Scan specific events */ 696 WMI_SCAN_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_SCAN), 697 698 /* PDEV specific events */ 699 WMI_PDEV_TPC_CONFIG_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_PDEV), 700 WMI_CHAN_INFO_EVENTID, 701 WMI_PHYERR_EVENTID, 702 703 /* VDEV specific events */ 704 WMI_VDEV_START_RESP_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_VDEV), 705 WMI_VDEV_STOPPED_EVENTID, 706 WMI_VDEV_INSTALL_KEY_COMPLETE_EVENTID, 707 708 /* peer specific events */ 709 WMI_PEER_STA_KICKOUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_PEER), 710 711 /* beacon/mgmt specific events */ 712 WMI_MGMT_RX_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_MGMT), 713 WMI_HOST_SWBA_EVENTID, 714 WMI_TBTTOFFSET_UPDATE_EVENTID, 715 716 /* ADDBA Related WMI Events*/ 717 WMI_TX_DELBA_COMPLETE_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_BA_NEG), 718 WMI_TX_ADDBA_COMPLETE_EVENTID, 719 720 /* Roam event to trigger roaming on host */ 721 WMI_ROAM_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_ROAM), 722 WMI_PROFILE_MATCH, 723 724 /* WoW */ 725 WMI_WOW_WAKEUP_HOST_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_WOW), 726 727 /* RTT */ 728 WMI_RTT_MEASUREMENT_REPORT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_RTT), 729 WMI_TSF_MEASUREMENT_REPORT_EVENTID, 730 WMI_RTT_ERROR_REPORT_EVENTID, 731 732 /* GTK offload */ 733 WMI_GTK_OFFLOAD_STATUS_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_GTK_OFL), 734 WMI_GTK_REKEY_FAIL_EVENTID, 735 736 /* CSA IE received event */ 737 WMI_CSA_HANDLING_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_CSA_OFL), 738 739 /* Misc events */ 740 WMI_ECHO_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_MISC), 741 WMI_PDEV_UTF_EVENTID, 742 WMI_DEBUG_MESG_EVENTID, 743 WMI_UPDATE_STATS_EVENTID, 744 WMI_DEBUG_PRINT_EVENTID, 745 WMI_DCS_INTERFERENCE_EVENTID, 746 WMI_PDEV_QVIT_EVENTID, 747 WMI_WLAN_PROFILE_DATA_EVENTID, 748 WMI_PDEV_FTM_INTG_EVENTID, 749 WMI_WLAN_FREQ_AVOID_EVENTID, 750 WMI_VDEV_GET_KEEPALIVE_EVENTID, 751 752 /* GPIO Event */ 753 WMI_GPIO_INPUT_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_GPIO), 754 }; 755 756 /* Command IDs and command events for 10.X firmware */ 757 enum wmi_10x_cmd_id { 758 WMI_10X_START_CMDID = 0x9000, 759 WMI_10X_END_CMDID = 0x9FFF, 760 761 /* initialize the wlan sub system */ 762 WMI_10X_INIT_CMDID, 763 764 /* Scan specific commands */ 765 766 WMI_10X_START_SCAN_CMDID = WMI_10X_START_CMDID, 767 WMI_10X_STOP_SCAN_CMDID, 768 WMI_10X_SCAN_CHAN_LIST_CMDID, 769 WMI_10X_ECHO_CMDID, 770 771 /* PDEV(physical device) specific commands */ 772 WMI_10X_PDEV_SET_REGDOMAIN_CMDID, 773 WMI_10X_PDEV_SET_CHANNEL_CMDID, 774 WMI_10X_PDEV_SET_PARAM_CMDID, 775 WMI_10X_PDEV_PKTLOG_ENABLE_CMDID, 776 WMI_10X_PDEV_PKTLOG_DISABLE_CMDID, 777 WMI_10X_PDEV_SET_WMM_PARAMS_CMDID, 778 WMI_10X_PDEV_SET_HT_CAP_IE_CMDID, 779 WMI_10X_PDEV_SET_VHT_CAP_IE_CMDID, 780 WMI_10X_PDEV_SET_BASE_MACADDR_CMDID, 781 WMI_10X_PDEV_SET_DSCP_TID_MAP_CMDID, 782 WMI_10X_PDEV_SET_QUIET_MODE_CMDID, 783 WMI_10X_PDEV_GREEN_AP_PS_ENABLE_CMDID, 784 WMI_10X_PDEV_GET_TPC_CONFIG_CMDID, 785 786 /* VDEV(virtual device) specific commands */ 787 WMI_10X_VDEV_CREATE_CMDID, 788 WMI_10X_VDEV_DELETE_CMDID, 789 WMI_10X_VDEV_START_REQUEST_CMDID, 790 WMI_10X_VDEV_RESTART_REQUEST_CMDID, 791 WMI_10X_VDEV_UP_CMDID, 792 WMI_10X_VDEV_STOP_CMDID, 793 WMI_10X_VDEV_DOWN_CMDID, 794 WMI_10X_VDEV_STANDBY_RESPONSE_CMDID, 795 WMI_10X_VDEV_RESUME_RESPONSE_CMDID, 796 WMI_10X_VDEV_SET_PARAM_CMDID, 797 WMI_10X_VDEV_INSTALL_KEY_CMDID, 798 799 /* peer specific commands */ 800 WMI_10X_PEER_CREATE_CMDID, 801 WMI_10X_PEER_DELETE_CMDID, 802 WMI_10X_PEER_FLUSH_TIDS_CMDID, 803 WMI_10X_PEER_SET_PARAM_CMDID, 804 WMI_10X_PEER_ASSOC_CMDID, 805 WMI_10X_PEER_ADD_WDS_ENTRY_CMDID, 806 WMI_10X_PEER_REMOVE_WDS_ENTRY_CMDID, 807 WMI_10X_PEER_MCAST_GROUP_CMDID, 808 809 /* beacon/management specific commands */ 810 811 WMI_10X_BCN_TX_CMDID, 812 WMI_10X_BCN_PRB_TMPL_CMDID, 813 WMI_10X_BCN_FILTER_RX_CMDID, 814 WMI_10X_PRB_REQ_FILTER_RX_CMDID, 815 WMI_10X_MGMT_TX_CMDID, 816 817 /* commands to directly control ba negotiation directly from host. */ 818 WMI_10X_ADDBA_CLEAR_RESP_CMDID, 819 WMI_10X_ADDBA_SEND_CMDID, 820 WMI_10X_ADDBA_STATUS_CMDID, 821 WMI_10X_DELBA_SEND_CMDID, 822 WMI_10X_ADDBA_SET_RESP_CMDID, 823 WMI_10X_SEND_SINGLEAMSDU_CMDID, 824 825 /* Station power save specific config */ 826 WMI_10X_STA_POWERSAVE_MODE_CMDID, 827 WMI_10X_STA_POWERSAVE_PARAM_CMDID, 828 WMI_10X_STA_MIMO_PS_MODE_CMDID, 829 830 /* set debug log config */ 831 WMI_10X_DBGLOG_CFG_CMDID, 832 833 /* DFS-specific commands */ 834 WMI_10X_PDEV_DFS_ENABLE_CMDID, 835 WMI_10X_PDEV_DFS_DISABLE_CMDID, 836 837 /* QVIT specific command id */ 838 WMI_10X_PDEV_QVIT_CMDID, 839 840 /* Offload Scan and Roaming related commands */ 841 WMI_10X_ROAM_SCAN_MODE, 842 WMI_10X_ROAM_SCAN_RSSI_THRESHOLD, 843 WMI_10X_ROAM_SCAN_PERIOD, 844 WMI_10X_ROAM_SCAN_RSSI_CHANGE_THRESHOLD, 845 WMI_10X_ROAM_AP_PROFILE, 846 WMI_10X_OFL_SCAN_ADD_AP_PROFILE, 847 WMI_10X_OFL_SCAN_REMOVE_AP_PROFILE, 848 WMI_10X_OFL_SCAN_PERIOD, 849 850 /* P2P specific commands */ 851 WMI_10X_P2P_DEV_SET_DEVICE_INFO, 852 WMI_10X_P2P_DEV_SET_DISCOVERABILITY, 853 WMI_10X_P2P_GO_SET_BEACON_IE, 854 WMI_10X_P2P_GO_SET_PROBE_RESP_IE, 855 856 /* AP power save specific config */ 857 WMI_10X_AP_PS_PEER_PARAM_CMDID, 858 WMI_10X_AP_PS_PEER_UAPSD_COEX_CMDID, 859 860 /* Rate-control specific commands */ 861 WMI_10X_PEER_RATE_RETRY_SCHED_CMDID, 862 863 /* WLAN Profiling commands. */ 864 WMI_10X_WLAN_PROFILE_TRIGGER_CMDID, 865 WMI_10X_WLAN_PROFILE_SET_HIST_INTVL_CMDID, 866 WMI_10X_WLAN_PROFILE_GET_PROFILE_DATA_CMDID, 867 WMI_10X_WLAN_PROFILE_ENABLE_PROFILE_ID_CMDID, 868 WMI_10X_WLAN_PROFILE_LIST_PROFILE_ID_CMDID, 869 870 /* Suspend resume command Ids */ 871 WMI_10X_PDEV_SUSPEND_CMDID, 872 WMI_10X_PDEV_RESUME_CMDID, 873 874 /* Beacon filter commands */ 875 WMI_10X_ADD_BCN_FILTER_CMDID, 876 WMI_10X_RMV_BCN_FILTER_CMDID, 877 878 /* WOW Specific WMI commands*/ 879 WMI_10X_WOW_ADD_WAKE_PATTERN_CMDID, 880 WMI_10X_WOW_DEL_WAKE_PATTERN_CMDID, 881 WMI_10X_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID, 882 WMI_10X_WOW_ENABLE_CMDID, 883 WMI_10X_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID, 884 885 /* RTT measurement related cmd */ 886 WMI_10X_RTT_MEASREQ_CMDID, 887 WMI_10X_RTT_TSF_CMDID, 888 889 /* transmit beacon by value */ 890 WMI_10X_PDEV_SEND_BCN_CMDID, 891 892 /* F/W stats */ 893 WMI_10X_VDEV_SPECTRAL_SCAN_CONFIGURE_CMDID, 894 WMI_10X_VDEV_SPECTRAL_SCAN_ENABLE_CMDID, 895 WMI_10X_REQUEST_STATS_CMDID, 896 897 /* GPIO Configuration */ 898 WMI_10X_GPIO_CONFIG_CMDID, 899 WMI_10X_GPIO_OUTPUT_CMDID, 900 901 WMI_10X_PDEV_UTF_CMDID = WMI_10X_END_CMDID - 1, 902 }; 903 904 enum wmi_10x_event_id { 905 WMI_10X_SERVICE_READY_EVENTID = 0x8000, 906 WMI_10X_READY_EVENTID, 907 WMI_10X_START_EVENTID = 0x9000, 908 WMI_10X_END_EVENTID = 0x9FFF, 909 910 /* Scan specific events */ 911 WMI_10X_SCAN_EVENTID = WMI_10X_START_EVENTID, 912 WMI_10X_ECHO_EVENTID, 913 WMI_10X_DEBUG_MESG_EVENTID, 914 WMI_10X_UPDATE_STATS_EVENTID, 915 916 /* Instantaneous RSSI event */ 917 WMI_10X_INST_RSSI_STATS_EVENTID, 918 919 /* VDEV specific events */ 920 WMI_10X_VDEV_START_RESP_EVENTID, 921 WMI_10X_VDEV_STANDBY_REQ_EVENTID, 922 WMI_10X_VDEV_RESUME_REQ_EVENTID, 923 WMI_10X_VDEV_STOPPED_EVENTID, 924 925 /* peer specific events */ 926 WMI_10X_PEER_STA_KICKOUT_EVENTID, 927 928 /* beacon/mgmt specific events */ 929 WMI_10X_HOST_SWBA_EVENTID, 930 WMI_10X_TBTTOFFSET_UPDATE_EVENTID, 931 WMI_10X_MGMT_RX_EVENTID, 932 933 /* Channel stats event */ 934 WMI_10X_CHAN_INFO_EVENTID, 935 936 /* PHY Error specific WMI event */ 937 WMI_10X_PHYERR_EVENTID, 938 939 /* Roam event to trigger roaming on host */ 940 WMI_10X_ROAM_EVENTID, 941 942 /* matching AP found from list of profiles */ 943 WMI_10X_PROFILE_MATCH, 944 945 /* debug print message used for tracing FW code while debugging */ 946 WMI_10X_DEBUG_PRINT_EVENTID, 947 /* VI spoecific event */ 948 WMI_10X_PDEV_QVIT_EVENTID, 949 /* FW code profile data in response to profile request */ 950 WMI_10X_WLAN_PROFILE_DATA_EVENTID, 951 952 /*RTT related event ID*/ 953 WMI_10X_RTT_MEASUREMENT_REPORT_EVENTID, 954 WMI_10X_TSF_MEASUREMENT_REPORT_EVENTID, 955 WMI_10X_RTT_ERROR_REPORT_EVENTID, 956 957 WMI_10X_WOW_WAKEUP_HOST_EVENTID, 958 WMI_10X_DCS_INTERFERENCE_EVENTID, 959 960 /* TPC config for the current operating channel */ 961 WMI_10X_PDEV_TPC_CONFIG_EVENTID, 962 963 WMI_10X_GPIO_INPUT_EVENTID, 964 WMI_10X_PDEV_UTF_EVENTID = WMI_10X_END_EVENTID-1, 965 }; 966 967 enum wmi_10_2_cmd_id { 968 WMI_10_2_START_CMDID = 0x9000, 969 WMI_10_2_END_CMDID = 0x9FFF, 970 WMI_10_2_INIT_CMDID, 971 WMI_10_2_START_SCAN_CMDID = WMI_10_2_START_CMDID, 972 WMI_10_2_STOP_SCAN_CMDID, 973 WMI_10_2_SCAN_CHAN_LIST_CMDID, 974 WMI_10_2_ECHO_CMDID, 975 WMI_10_2_PDEV_SET_REGDOMAIN_CMDID, 976 WMI_10_2_PDEV_SET_CHANNEL_CMDID, 977 WMI_10_2_PDEV_SET_PARAM_CMDID, 978 WMI_10_2_PDEV_PKTLOG_ENABLE_CMDID, 979 WMI_10_2_PDEV_PKTLOG_DISABLE_CMDID, 980 WMI_10_2_PDEV_SET_WMM_PARAMS_CMDID, 981 WMI_10_2_PDEV_SET_HT_CAP_IE_CMDID, 982 WMI_10_2_PDEV_SET_VHT_CAP_IE_CMDID, 983 WMI_10_2_PDEV_SET_BASE_MACADDR_CMDID, 984 WMI_10_2_PDEV_SET_QUIET_MODE_CMDID, 985 WMI_10_2_PDEV_GREEN_AP_PS_ENABLE_CMDID, 986 WMI_10_2_PDEV_GET_TPC_CONFIG_CMDID, 987 WMI_10_2_VDEV_CREATE_CMDID, 988 WMI_10_2_VDEV_DELETE_CMDID, 989 WMI_10_2_VDEV_START_REQUEST_CMDID, 990 WMI_10_2_VDEV_RESTART_REQUEST_CMDID, 991 WMI_10_2_VDEV_UP_CMDID, 992 WMI_10_2_VDEV_STOP_CMDID, 993 WMI_10_2_VDEV_DOWN_CMDID, 994 WMI_10_2_VDEV_STANDBY_RESPONSE_CMDID, 995 WMI_10_2_VDEV_RESUME_RESPONSE_CMDID, 996 WMI_10_2_VDEV_SET_PARAM_CMDID, 997 WMI_10_2_VDEV_INSTALL_KEY_CMDID, 998 WMI_10_2_VDEV_SET_DSCP_TID_MAP_CMDID, 999 WMI_10_2_PEER_CREATE_CMDID, 1000 WMI_10_2_PEER_DELETE_CMDID, 1001 WMI_10_2_PEER_FLUSH_TIDS_CMDID, 1002 WMI_10_2_PEER_SET_PARAM_CMDID, 1003 WMI_10_2_PEER_ASSOC_CMDID, 1004 WMI_10_2_PEER_ADD_WDS_ENTRY_CMDID, 1005 WMI_10_2_PEER_UPDATE_WDS_ENTRY_CMDID, 1006 WMI_10_2_PEER_REMOVE_WDS_ENTRY_CMDID, 1007 WMI_10_2_PEER_MCAST_GROUP_CMDID, 1008 WMI_10_2_BCN_TX_CMDID, 1009 WMI_10_2_BCN_PRB_TMPL_CMDID, 1010 WMI_10_2_BCN_FILTER_RX_CMDID, 1011 WMI_10_2_PRB_REQ_FILTER_RX_CMDID, 1012 WMI_10_2_MGMT_TX_CMDID, 1013 WMI_10_2_ADDBA_CLEAR_RESP_CMDID, 1014 WMI_10_2_ADDBA_SEND_CMDID, 1015 WMI_10_2_ADDBA_STATUS_CMDID, 1016 WMI_10_2_DELBA_SEND_CMDID, 1017 WMI_10_2_ADDBA_SET_RESP_CMDID, 1018 WMI_10_2_SEND_SINGLEAMSDU_CMDID, 1019 WMI_10_2_STA_POWERSAVE_MODE_CMDID, 1020 WMI_10_2_STA_POWERSAVE_PARAM_CMDID, 1021 WMI_10_2_STA_MIMO_PS_MODE_CMDID, 1022 WMI_10_2_DBGLOG_CFG_CMDID, 1023 WMI_10_2_PDEV_DFS_ENABLE_CMDID, 1024 WMI_10_2_PDEV_DFS_DISABLE_CMDID, 1025 WMI_10_2_PDEV_QVIT_CMDID, 1026 WMI_10_2_ROAM_SCAN_MODE, 1027 WMI_10_2_ROAM_SCAN_RSSI_THRESHOLD, 1028 WMI_10_2_ROAM_SCAN_PERIOD, 1029 WMI_10_2_ROAM_SCAN_RSSI_CHANGE_THRESHOLD, 1030 WMI_10_2_ROAM_AP_PROFILE, 1031 WMI_10_2_OFL_SCAN_ADD_AP_PROFILE, 1032 WMI_10_2_OFL_SCAN_REMOVE_AP_PROFILE, 1033 WMI_10_2_OFL_SCAN_PERIOD, 1034 WMI_10_2_P2P_DEV_SET_DEVICE_INFO, 1035 WMI_10_2_P2P_DEV_SET_DISCOVERABILITY, 1036 WMI_10_2_P2P_GO_SET_BEACON_IE, 1037 WMI_10_2_P2P_GO_SET_PROBE_RESP_IE, 1038 WMI_10_2_AP_PS_PEER_PARAM_CMDID, 1039 WMI_10_2_AP_PS_PEER_UAPSD_COEX_CMDID, 1040 WMI_10_2_PEER_RATE_RETRY_SCHED_CMDID, 1041 WMI_10_2_WLAN_PROFILE_TRIGGER_CMDID, 1042 WMI_10_2_WLAN_PROFILE_SET_HIST_INTVL_CMDID, 1043 WMI_10_2_WLAN_PROFILE_GET_PROFILE_DATA_CMDID, 1044 WMI_10_2_WLAN_PROFILE_ENABLE_PROFILE_ID_CMDID, 1045 WMI_10_2_WLAN_PROFILE_LIST_PROFILE_ID_CMDID, 1046 WMI_10_2_PDEV_SUSPEND_CMDID, 1047 WMI_10_2_PDEV_RESUME_CMDID, 1048 WMI_10_2_ADD_BCN_FILTER_CMDID, 1049 WMI_10_2_RMV_BCN_FILTER_CMDID, 1050 WMI_10_2_WOW_ADD_WAKE_PATTERN_CMDID, 1051 WMI_10_2_WOW_DEL_WAKE_PATTERN_CMDID, 1052 WMI_10_2_WOW_ENABLE_DISABLE_WAKE_EVENT_CMDID, 1053 WMI_10_2_WOW_ENABLE_CMDID, 1054 WMI_10_2_WOW_HOSTWAKEUP_FROM_SLEEP_CMDID, 1055 WMI_10_2_RTT_MEASREQ_CMDID, 1056 WMI_10_2_RTT_TSF_CMDID, 1057 WMI_10_2_RTT_KEEPALIVE_CMDID, 1058 WMI_10_2_PDEV_SEND_BCN_CMDID, 1059 WMI_10_2_VDEV_SPECTRAL_SCAN_CONFIGURE_CMDID, 1060 WMI_10_2_VDEV_SPECTRAL_SCAN_ENABLE_CMDID, 1061 WMI_10_2_REQUEST_STATS_CMDID, 1062 WMI_10_2_GPIO_CONFIG_CMDID, 1063 WMI_10_2_GPIO_OUTPUT_CMDID, 1064 WMI_10_2_VDEV_RATEMASK_CMDID, 1065 WMI_10_2_PDEV_SMART_ANT_ENABLE_CMDID, 1066 WMI_10_2_PDEV_SMART_ANT_SET_RX_ANTENNA_CMDID, 1067 WMI_10_2_PEER_SMART_ANT_SET_TX_ANTENNA_CMDID, 1068 WMI_10_2_PEER_SMART_ANT_SET_TRAIN_INFO_CMDID, 1069 WMI_10_2_PEER_SMART_ANT_SET_NODE_CONFIG_OPS_CMDID, 1070 WMI_10_2_FORCE_FW_HANG_CMDID, 1071 WMI_10_2_PDEV_SET_ANTENNA_SWITCH_TABLE_CMDID, 1072 WMI_10_2_PDEV_SET_CTL_TABLE_CMDID, 1073 WMI_10_2_PDEV_SET_MIMOGAIN_TABLE_CMDID, 1074 WMI_10_2_PDEV_RATEPWR_TABLE_CMDID, 1075 WMI_10_2_PDEV_RATEPWR_CHAINMSK_TABLE_CMDID, 1076 WMI_10_2_PDEV_UTF_CMDID = WMI_10_2_END_CMDID - 1, 1077 }; 1078 1079 enum wmi_10_2_event_id { 1080 WMI_10_2_SERVICE_READY_EVENTID = 0x8000, 1081 WMI_10_2_READY_EVENTID, 1082 WMI_10_2_DEBUG_MESG_EVENTID, 1083 WMI_10_2_START_EVENTID = 0x9000, 1084 WMI_10_2_END_EVENTID = 0x9FFF, 1085 WMI_10_2_SCAN_EVENTID = WMI_10_2_START_EVENTID, 1086 WMI_10_2_ECHO_EVENTID, 1087 WMI_10_2_UPDATE_STATS_EVENTID, 1088 WMI_10_2_INST_RSSI_STATS_EVENTID, 1089 WMI_10_2_VDEV_START_RESP_EVENTID, 1090 WMI_10_2_VDEV_STANDBY_REQ_EVENTID, 1091 WMI_10_2_VDEV_RESUME_REQ_EVENTID, 1092 WMI_10_2_VDEV_STOPPED_EVENTID, 1093 WMI_10_2_PEER_STA_KICKOUT_EVENTID, 1094 WMI_10_2_HOST_SWBA_EVENTID, 1095 WMI_10_2_TBTTOFFSET_UPDATE_EVENTID, 1096 WMI_10_2_MGMT_RX_EVENTID, 1097 WMI_10_2_CHAN_INFO_EVENTID, 1098 WMI_10_2_PHYERR_EVENTID, 1099 WMI_10_2_ROAM_EVENTID, 1100 WMI_10_2_PROFILE_MATCH, 1101 WMI_10_2_DEBUG_PRINT_EVENTID, 1102 WMI_10_2_PDEV_QVIT_EVENTID, 1103 WMI_10_2_WLAN_PROFILE_DATA_EVENTID, 1104 WMI_10_2_RTT_MEASUREMENT_REPORT_EVENTID, 1105 WMI_10_2_TSF_MEASUREMENT_REPORT_EVENTID, 1106 WMI_10_2_RTT_ERROR_REPORT_EVENTID, 1107 WMI_10_2_RTT_KEEPALIVE_EVENTID, 1108 WMI_10_2_WOW_WAKEUP_HOST_EVENTID, 1109 WMI_10_2_DCS_INTERFERENCE_EVENTID, 1110 WMI_10_2_PDEV_TPC_CONFIG_EVENTID, 1111 WMI_10_2_GPIO_INPUT_EVENTID, 1112 WMI_10_2_PEER_RATECODE_LIST_EVENTID, 1113 WMI_10_2_GENERIC_BUFFER_EVENTID, 1114 WMI_10_2_MCAST_BUF_RELEASE_EVENTID, 1115 WMI_10_2_MCAST_LIST_AGEOUT_EVENTID, 1116 WMI_10_2_WDS_PEER_EVENTID, 1117 WMI_10_2_PDEV_UTF_EVENTID = WMI_10_2_END_EVENTID - 1, 1118 }; 1119 1120 enum wmi_phy_mode { 1121 MODE_11A = 0, /* 11a Mode */ 1122 MODE_11G = 1, /* 11b/g Mode */ 1123 MODE_11B = 2, /* 11b Mode */ 1124 MODE_11GONLY = 3, /* 11g only Mode */ 1125 MODE_11NA_HT20 = 4, /* 11a HT20 mode */ 1126 MODE_11NG_HT20 = 5, /* 11g HT20 mode */ 1127 MODE_11NA_HT40 = 6, /* 11a HT40 mode */ 1128 MODE_11NG_HT40 = 7, /* 11g HT40 mode */ 1129 MODE_11AC_VHT20 = 8, 1130 MODE_11AC_VHT40 = 9, 1131 MODE_11AC_VHT80 = 10, 1132 /* MODE_11AC_VHT160 = 11, */ 1133 MODE_11AC_VHT20_2G = 11, 1134 MODE_11AC_VHT40_2G = 12, 1135 MODE_11AC_VHT80_2G = 13, 1136 MODE_UNKNOWN = 14, 1137 MODE_MAX = 14 1138 }; 1139 1140 static inline const char *ath10k_wmi_phymode_str(enum wmi_phy_mode mode) 1141 { 1142 switch (mode) { 1143 case MODE_11A: 1144 return "11a"; 1145 case MODE_11G: 1146 return "11g"; 1147 case MODE_11B: 1148 return "11b"; 1149 case MODE_11GONLY: 1150 return "11gonly"; 1151 case MODE_11NA_HT20: 1152 return "11na-ht20"; 1153 case MODE_11NG_HT20: 1154 return "11ng-ht20"; 1155 case MODE_11NA_HT40: 1156 return "11na-ht40"; 1157 case MODE_11NG_HT40: 1158 return "11ng-ht40"; 1159 case MODE_11AC_VHT20: 1160 return "11ac-vht20"; 1161 case MODE_11AC_VHT40: 1162 return "11ac-vht40"; 1163 case MODE_11AC_VHT80: 1164 return "11ac-vht80"; 1165 case MODE_11AC_VHT20_2G: 1166 return "11ac-vht20-2g"; 1167 case MODE_11AC_VHT40_2G: 1168 return "11ac-vht40-2g"; 1169 case MODE_11AC_VHT80_2G: 1170 return "11ac-vht80-2g"; 1171 case MODE_UNKNOWN: 1172 /* skip */ 1173 break; 1174 1175 /* no default handler to allow compiler to check that the 1176 * enum is fully handled */ 1177 }; 1178 1179 return "<unknown>"; 1180 } 1181 1182 #define WMI_CHAN_LIST_TAG 0x1 1183 #define WMI_SSID_LIST_TAG 0x2 1184 #define WMI_BSSID_LIST_TAG 0x3 1185 #define WMI_IE_TAG 0x4 1186 1187 struct wmi_channel { 1188 __le32 mhz; 1189 __le32 band_center_freq1; 1190 __le32 band_center_freq2; /* valid for 11ac, 80plus80 */ 1191 union { 1192 __le32 flags; /* WMI_CHAN_FLAG_ */ 1193 struct { 1194 u8 mode; /* only 6 LSBs */ 1195 } __packed; 1196 } __packed; 1197 union { 1198 __le32 reginfo0; 1199 struct { 1200 /* note: power unit is 0.5 dBm */ 1201 u8 min_power; 1202 u8 max_power; 1203 u8 reg_power; 1204 u8 reg_classid; 1205 } __packed; 1206 } __packed; 1207 union { 1208 __le32 reginfo1; 1209 struct { 1210 u8 antenna_max; 1211 } __packed; 1212 } __packed; 1213 } __packed; 1214 1215 struct wmi_channel_arg { 1216 u32 freq; 1217 u32 band_center_freq1; 1218 bool passive; 1219 bool allow_ibss; 1220 bool allow_ht; 1221 bool allow_vht; 1222 bool ht40plus; 1223 bool chan_radar; 1224 /* note: power unit is 0.5 dBm */ 1225 u32 min_power; 1226 u32 max_power; 1227 u32 max_reg_power; 1228 u32 max_antenna_gain; 1229 u32 reg_class_id; 1230 enum wmi_phy_mode mode; 1231 }; 1232 1233 enum wmi_channel_change_cause { 1234 WMI_CHANNEL_CHANGE_CAUSE_NONE = 0, 1235 WMI_CHANNEL_CHANGE_CAUSE_CSA, 1236 }; 1237 1238 #define WMI_CHAN_FLAG_HT40_PLUS (1 << 6) 1239 #define WMI_CHAN_FLAG_PASSIVE (1 << 7) 1240 #define WMI_CHAN_FLAG_ADHOC_ALLOWED (1 << 8) 1241 #define WMI_CHAN_FLAG_AP_DISABLED (1 << 9) 1242 #define WMI_CHAN_FLAG_DFS (1 << 10) 1243 #define WMI_CHAN_FLAG_ALLOW_HT (1 << 11) 1244 #define WMI_CHAN_FLAG_ALLOW_VHT (1 << 12) 1245 1246 /* Indicate reason for channel switch */ 1247 #define WMI_CHANNEL_CHANGE_CAUSE_CSA (1 << 13) 1248 1249 #define WMI_MAX_SPATIAL_STREAM 3 1250 1251 /* HT Capabilities*/ 1252 #define WMI_HT_CAP_ENABLED 0x0001 /* HT Enabled/ disabled */ 1253 #define WMI_HT_CAP_HT20_SGI 0x0002 /* Short Guard Interval with HT20 */ 1254 #define WMI_HT_CAP_DYNAMIC_SMPS 0x0004 /* Dynamic MIMO powersave */ 1255 #define WMI_HT_CAP_TX_STBC 0x0008 /* B3 TX STBC */ 1256 #define WMI_HT_CAP_TX_STBC_MASK_SHIFT 3 1257 #define WMI_HT_CAP_RX_STBC 0x0030 /* B4-B5 RX STBC */ 1258 #define WMI_HT_CAP_RX_STBC_MASK_SHIFT 4 1259 #define WMI_HT_CAP_LDPC 0x0040 /* LDPC supported */ 1260 #define WMI_HT_CAP_L_SIG_TXOP_PROT 0x0080 /* L-SIG TXOP Protection */ 1261 #define WMI_HT_CAP_MPDU_DENSITY 0x0700 /* MPDU Density */ 1262 #define WMI_HT_CAP_MPDU_DENSITY_MASK_SHIFT 8 1263 #define WMI_HT_CAP_HT40_SGI 0x0800 1264 1265 #define WMI_HT_CAP_DEFAULT_ALL (WMI_HT_CAP_ENABLED | \ 1266 WMI_HT_CAP_HT20_SGI | \ 1267 WMI_HT_CAP_HT40_SGI | \ 1268 WMI_HT_CAP_TX_STBC | \ 1269 WMI_HT_CAP_RX_STBC | \ 1270 WMI_HT_CAP_LDPC) 1271 1272 /* 1273 * WMI_VHT_CAP_* these maps to ieee 802.11ac vht capability information 1274 * field. The fields not defined here are not supported, or reserved. 1275 * Do not change these masks and if you have to add new one follow the 1276 * bitmask as specified by 802.11ac draft. 1277 */ 1278 1279 #define WMI_VHT_CAP_MAX_MPDU_LEN_MASK 0x00000003 1280 #define WMI_VHT_CAP_RX_LDPC 0x00000010 1281 #define WMI_VHT_CAP_SGI_80MHZ 0x00000020 1282 #define WMI_VHT_CAP_TX_STBC 0x00000080 1283 #define WMI_VHT_CAP_RX_STBC_MASK 0x00000300 1284 #define WMI_VHT_CAP_RX_STBC_MASK_SHIFT 8 1285 #define WMI_VHT_CAP_MAX_AMPDU_LEN_EXP 0x03800000 1286 #define WMI_VHT_CAP_MAX_AMPDU_LEN_EXP_SHIFT 23 1287 #define WMI_VHT_CAP_RX_FIXED_ANT 0x10000000 1288 #define WMI_VHT_CAP_TX_FIXED_ANT 0x20000000 1289 1290 /* The following also refer for max HT AMSDU */ 1291 #define WMI_VHT_CAP_MAX_MPDU_LEN_3839 0x00000000 1292 #define WMI_VHT_CAP_MAX_MPDU_LEN_7935 0x00000001 1293 #define WMI_VHT_CAP_MAX_MPDU_LEN_11454 0x00000002 1294 1295 #define WMI_VHT_CAP_DEFAULT_ALL (WMI_VHT_CAP_MAX_MPDU_LEN_11454 | \ 1296 WMI_VHT_CAP_RX_LDPC | \ 1297 WMI_VHT_CAP_SGI_80MHZ | \ 1298 WMI_VHT_CAP_TX_STBC | \ 1299 WMI_VHT_CAP_RX_STBC_MASK | \ 1300 WMI_VHT_CAP_MAX_AMPDU_LEN_EXP | \ 1301 WMI_VHT_CAP_RX_FIXED_ANT | \ 1302 WMI_VHT_CAP_TX_FIXED_ANT) 1303 1304 /* 1305 * Interested readers refer to Rx/Tx MCS Map definition as defined in 1306 * 802.11ac 1307 */ 1308 #define WMI_VHT_MAX_MCS_4_SS_MASK(r, ss) ((3 & (r)) << (((ss) - 1) << 1)) 1309 #define WMI_VHT_MAX_SUPP_RATE_MASK 0x1fff0000 1310 #define WMI_VHT_MAX_SUPP_RATE_MASK_SHIFT 16 1311 1312 enum { 1313 REGDMN_MODE_11A = 0x00001, /* 11a channels */ 1314 REGDMN_MODE_TURBO = 0x00002, /* 11a turbo-only channels */ 1315 REGDMN_MODE_11B = 0x00004, /* 11b channels */ 1316 REGDMN_MODE_PUREG = 0x00008, /* 11g channels (OFDM only) */ 1317 REGDMN_MODE_11G = 0x00008, /* XXX historical */ 1318 REGDMN_MODE_108G = 0x00020, /* 11a+Turbo channels */ 1319 REGDMN_MODE_108A = 0x00040, /* 11g+Turbo channels */ 1320 REGDMN_MODE_XR = 0x00100, /* XR channels */ 1321 REGDMN_MODE_11A_HALF_RATE = 0x00200, /* 11A half rate channels */ 1322 REGDMN_MODE_11A_QUARTER_RATE = 0x00400, /* 11A quarter rate channels */ 1323 REGDMN_MODE_11NG_HT20 = 0x00800, /* 11N-G HT20 channels */ 1324 REGDMN_MODE_11NA_HT20 = 0x01000, /* 11N-A HT20 channels */ 1325 REGDMN_MODE_11NG_HT40PLUS = 0x02000, /* 11N-G HT40 + channels */ 1326 REGDMN_MODE_11NG_HT40MINUS = 0x04000, /* 11N-G HT40 - channels */ 1327 REGDMN_MODE_11NA_HT40PLUS = 0x08000, /* 11N-A HT40 + channels */ 1328 REGDMN_MODE_11NA_HT40MINUS = 0x10000, /* 11N-A HT40 - channels */ 1329 REGDMN_MODE_11AC_VHT20 = 0x20000, /* 5Ghz, VHT20 */ 1330 REGDMN_MODE_11AC_VHT40PLUS = 0x40000, /* 5Ghz, VHT40 + channels */ 1331 REGDMN_MODE_11AC_VHT40MINUS = 0x80000, /* 5Ghz VHT40 - channels */ 1332 REGDMN_MODE_11AC_VHT80 = 0x100000, /* 5Ghz, VHT80 channels */ 1333 REGDMN_MODE_ALL = 0xffffffff 1334 }; 1335 1336 #define REGDMN_CAP1_CHAN_HALF_RATE 0x00000001 1337 #define REGDMN_CAP1_CHAN_QUARTER_RATE 0x00000002 1338 #define REGDMN_CAP1_CHAN_HAL49GHZ 0x00000004 1339 1340 /* regulatory capabilities */ 1341 #define REGDMN_EEPROM_EEREGCAP_EN_FCC_MIDBAND 0x0040 1342 #define REGDMN_EEPROM_EEREGCAP_EN_KK_U1_EVEN 0x0080 1343 #define REGDMN_EEPROM_EEREGCAP_EN_KK_U2 0x0100 1344 #define REGDMN_EEPROM_EEREGCAP_EN_KK_MIDBAND 0x0200 1345 #define REGDMN_EEPROM_EEREGCAP_EN_KK_U1_ODD 0x0400 1346 #define REGDMN_EEPROM_EEREGCAP_EN_KK_NEW_11A 0x0800 1347 1348 struct hal_reg_capabilities { 1349 /* regdomain value specified in EEPROM */ 1350 __le32 eeprom_rd; 1351 /*regdomain */ 1352 __le32 eeprom_rd_ext; 1353 /* CAP1 capabilities bit map. */ 1354 __le32 regcap1; 1355 /* REGDMN EEPROM CAP. */ 1356 __le32 regcap2; 1357 /* REGDMN MODE */ 1358 __le32 wireless_modes; 1359 __le32 low_2ghz_chan; 1360 __le32 high_2ghz_chan; 1361 __le32 low_5ghz_chan; 1362 __le32 high_5ghz_chan; 1363 } __packed; 1364 1365 enum wlan_mode_capability { 1366 WHAL_WLAN_11A_CAPABILITY = 0x1, 1367 WHAL_WLAN_11G_CAPABILITY = 0x2, 1368 WHAL_WLAN_11AG_CAPABILITY = 0x3, 1369 }; 1370 1371 /* structure used by FW for requesting host memory */ 1372 struct wlan_host_mem_req { 1373 /* ID of the request */ 1374 __le32 req_id; 1375 /* size of the of each unit */ 1376 __le32 unit_size; 1377 /* flags to indicate that 1378 * the number units is dependent 1379 * on number of resources(num vdevs num peers .. etc) 1380 */ 1381 __le32 num_unit_info; 1382 /* 1383 * actual number of units to allocate . if flags in the num_unit_info 1384 * indicate that number of units is tied to number of a particular 1385 * resource to allocate then num_units filed is set to 0 and host 1386 * will derive the number units from number of the resources it is 1387 * requesting. 1388 */ 1389 __le32 num_units; 1390 } __packed; 1391 1392 /* 1393 * The following struct holds optional payload for 1394 * wmi_service_ready_event,e.g., 11ac pass some of the 1395 * device capability to the host. 1396 */ 1397 struct wmi_service_ready_event { 1398 __le32 sw_version; 1399 __le32 sw_version_1; 1400 __le32 abi_version; 1401 /* WMI_PHY_CAPABILITY */ 1402 __le32 phy_capability; 1403 /* Maximum number of frag table entries that SW will populate less 1 */ 1404 __le32 max_frag_entry; 1405 __le32 wmi_service_bitmap[16]; 1406 __le32 num_rf_chains; 1407 /* 1408 * The following field is only valid for service type 1409 * WMI_SERVICE_11AC 1410 */ 1411 __le32 ht_cap_info; /* WMI HT Capability */ 1412 __le32 vht_cap_info; /* VHT capability info field of 802.11ac */ 1413 __le32 vht_supp_mcs; /* VHT Supported MCS Set field Rx/Tx same */ 1414 __le32 hw_min_tx_power; 1415 __le32 hw_max_tx_power; 1416 struct hal_reg_capabilities hal_reg_capabilities; 1417 __le32 sys_cap_info; 1418 __le32 min_pkt_size_enable; /* Enterprise mode short pkt enable */ 1419 /* 1420 * Max beacon and Probe Response IE offload size 1421 * (includes optional P2P IEs) 1422 */ 1423 __le32 max_bcn_ie_size; 1424 /* 1425 * request to host to allocate a chuck of memory and pss it down to FW 1426 * via WM_INIT. FW uses this as FW extesnsion memory for saving its 1427 * data structures. Only valid for low latency interfaces like PCIE 1428 * where FW can access this memory directly (or) by DMA. 1429 */ 1430 __le32 num_mem_reqs; 1431 struct wlan_host_mem_req mem_reqs[1]; 1432 } __packed; 1433 1434 /* This is the definition from 10.X firmware branch */ 1435 struct wmi_service_ready_event_10x { 1436 __le32 sw_version; 1437 __le32 abi_version; 1438 1439 /* WMI_PHY_CAPABILITY */ 1440 __le32 phy_capability; 1441 1442 /* Maximum number of frag table entries that SW will populate less 1 */ 1443 __le32 max_frag_entry; 1444 __le32 wmi_service_bitmap[16]; 1445 __le32 num_rf_chains; 1446 1447 /* 1448 * The following field is only valid for service type 1449 * WMI_SERVICE_11AC 1450 */ 1451 __le32 ht_cap_info; /* WMI HT Capability */ 1452 __le32 vht_cap_info; /* VHT capability info field of 802.11ac */ 1453 __le32 vht_supp_mcs; /* VHT Supported MCS Set field Rx/Tx same */ 1454 __le32 hw_min_tx_power; 1455 __le32 hw_max_tx_power; 1456 1457 struct hal_reg_capabilities hal_reg_capabilities; 1458 1459 __le32 sys_cap_info; 1460 __le32 min_pkt_size_enable; /* Enterprise mode short pkt enable */ 1461 1462 /* 1463 * request to host to allocate a chuck of memory and pss it down to FW 1464 * via WM_INIT. FW uses this as FW extesnsion memory for saving its 1465 * data structures. Only valid for low latency interfaces like PCIE 1466 * where FW can access this memory directly (or) by DMA. 1467 */ 1468 __le32 num_mem_reqs; 1469 1470 struct wlan_host_mem_req mem_reqs[1]; 1471 } __packed; 1472 1473 #define WMI_SERVICE_READY_TIMEOUT_HZ (5*HZ) 1474 #define WMI_UNIFIED_READY_TIMEOUT_HZ (5*HZ) 1475 1476 struct wmi_ready_event { 1477 __le32 sw_version; 1478 __le32 abi_version; 1479 struct wmi_mac_addr mac_addr; 1480 __le32 status; 1481 } __packed; 1482 1483 struct wmi_resource_config { 1484 /* number of virtual devices (VAPs) to support */ 1485 __le32 num_vdevs; 1486 1487 /* number of peer nodes to support */ 1488 __le32 num_peers; 1489 1490 /* 1491 * In offload mode target supports features like WOW, chatter and 1492 * other protocol offloads. In order to support them some 1493 * functionalities like reorder buffering, PN checking need to be 1494 * done in target. This determines maximum number of peers suported 1495 * by target in offload mode 1496 */ 1497 __le32 num_offload_peers; 1498 1499 /* For target-based RX reordering */ 1500 __le32 num_offload_reorder_bufs; 1501 1502 /* number of keys per peer */ 1503 __le32 num_peer_keys; 1504 1505 /* total number of TX/RX data TIDs */ 1506 __le32 num_tids; 1507 1508 /* 1509 * max skid for resolving hash collisions 1510 * 1511 * The address search table is sparse, so that if two MAC addresses 1512 * result in the same hash value, the second of these conflicting 1513 * entries can slide to the next index in the address search table, 1514 * and use it, if it is unoccupied. This ast_skid_limit parameter 1515 * specifies the upper bound on how many subsequent indices to search 1516 * over to find an unoccupied space. 1517 */ 1518 __le32 ast_skid_limit; 1519 1520 /* 1521 * the nominal chain mask for transmit 1522 * 1523 * The chain mask may be modified dynamically, e.g. to operate AP 1524 * tx with a reduced number of chains if no clients are associated. 1525 * This configuration parameter specifies the nominal chain-mask that 1526 * should be used when not operating with a reduced set of tx chains. 1527 */ 1528 __le32 tx_chain_mask; 1529 1530 /* 1531 * the nominal chain mask for receive 1532 * 1533 * The chain mask may be modified dynamically, e.g. for a client 1534 * to use a reduced number of chains for receive if the traffic to 1535 * the client is low enough that it doesn't require downlink MIMO 1536 * or antenna diversity. 1537 * This configuration parameter specifies the nominal chain-mask that 1538 * should be used when not operating with a reduced set of rx chains. 1539 */ 1540 __le32 rx_chain_mask; 1541 1542 /* 1543 * what rx reorder timeout (ms) to use for the AC 1544 * 1545 * Each WMM access class (voice, video, best-effort, background) will 1546 * have its own timeout value to dictate how long to wait for missing 1547 * rx MPDUs to arrive before flushing subsequent MPDUs that have 1548 * already been received. 1549 * This parameter specifies the timeout in milliseconds for each 1550 * class. 1551 */ 1552 __le32 rx_timeout_pri_vi; 1553 __le32 rx_timeout_pri_vo; 1554 __le32 rx_timeout_pri_be; 1555 __le32 rx_timeout_pri_bk; 1556 1557 /* 1558 * what mode the rx should decap packets to 1559 * 1560 * MAC can decap to RAW (no decap), native wifi or Ethernet types 1561 * THis setting also determines the default TX behavior, however TX 1562 * behavior can be modified on a per VAP basis during VAP init 1563 */ 1564 __le32 rx_decap_mode; 1565 1566 /* what is the maximum number of scan requests that can be queued */ 1567 __le32 scan_max_pending_reqs; 1568 1569 /* maximum VDEV that could use BMISS offload */ 1570 __le32 bmiss_offload_max_vdev; 1571 1572 /* maximum VDEV that could use offload roaming */ 1573 __le32 roam_offload_max_vdev; 1574 1575 /* maximum AP profiles that would push to offload roaming */ 1576 __le32 roam_offload_max_ap_profiles; 1577 1578 /* 1579 * how many groups to use for mcast->ucast conversion 1580 * 1581 * The target's WAL maintains a table to hold information regarding 1582 * which peers belong to a given multicast group, so that if 1583 * multicast->unicast conversion is enabled, the target can convert 1584 * multicast tx frames to a series of unicast tx frames, to each 1585 * peer within the multicast group. 1586 This num_mcast_groups configuration parameter tells the target how 1587 * many multicast groups to provide storage for within its multicast 1588 * group membership table. 1589 */ 1590 __le32 num_mcast_groups; 1591 1592 /* 1593 * size to alloc for the mcast membership table 1594 * 1595 * This num_mcast_table_elems configuration parameter tells the 1596 * target how many peer elements it needs to provide storage for in 1597 * its multicast group membership table. 1598 * These multicast group membership table elements are shared by the 1599 * multicast groups stored within the table. 1600 */ 1601 __le32 num_mcast_table_elems; 1602 1603 /* 1604 * whether/how to do multicast->unicast conversion 1605 * 1606 * This configuration parameter specifies whether the target should 1607 * perform multicast --> unicast conversion on transmit, and if so, 1608 * what to do if it finds no entries in its multicast group 1609 * membership table for the multicast IP address in the tx frame. 1610 * Configuration value: 1611 * 0 -> Do not perform multicast to unicast conversion. 1612 * 1 -> Convert multicast frames to unicast, if the IP multicast 1613 * address from the tx frame is found in the multicast group 1614 * membership table. If the IP multicast address is not found, 1615 * drop the frame. 1616 * 2 -> Convert multicast frames to unicast, if the IP multicast 1617 * address from the tx frame is found in the multicast group 1618 * membership table. If the IP multicast address is not found, 1619 * transmit the frame as multicast. 1620 */ 1621 __le32 mcast2ucast_mode; 1622 1623 /* 1624 * how much memory to allocate for a tx PPDU dbg log 1625 * 1626 * This parameter controls how much memory the target will allocate 1627 * to store a log of tx PPDU meta-information (how large the PPDU 1628 * was, when it was sent, whether it was successful, etc.) 1629 */ 1630 __le32 tx_dbg_log_size; 1631 1632 /* how many AST entries to be allocated for WDS */ 1633 __le32 num_wds_entries; 1634 1635 /* 1636 * MAC DMA burst size, e.g., For target PCI limit can be 1637 * 0 -default, 1 256B 1638 */ 1639 __le32 dma_burst_size; 1640 1641 /* 1642 * Fixed delimiters to be inserted after every MPDU to 1643 * account for interface latency to avoid underrun. 1644 */ 1645 __le32 mac_aggr_delim; 1646 1647 /* 1648 * determine whether target is responsible for detecting duplicate 1649 * non-aggregate MPDU and timing out stale fragments. 1650 * 1651 * A-MPDU reordering is always performed on the target. 1652 * 1653 * 0: target responsible for frag timeout and dup checking 1654 * 1: host responsible for frag timeout and dup checking 1655 */ 1656 __le32 rx_skip_defrag_timeout_dup_detection_check; 1657 1658 /* 1659 * Configuration for VoW : 1660 * No of Video Nodes to be supported 1661 * and Max no of descriptors for each Video link (node). 1662 */ 1663 __le32 vow_config; 1664 1665 /* maximum VDEV that could use GTK offload */ 1666 __le32 gtk_offload_max_vdev; 1667 1668 /* Number of msdu descriptors target should use */ 1669 __le32 num_msdu_desc; 1670 1671 /* 1672 * Max. number of Tx fragments per MSDU 1673 * This parameter controls the max number of Tx fragments per MSDU. 1674 * This is sent by the target as part of the WMI_SERVICE_READY event 1675 * and is overriden by the OS shim as required. 1676 */ 1677 __le32 max_frag_entries; 1678 } __packed; 1679 1680 struct wmi_resource_config_10x { 1681 /* number of virtual devices (VAPs) to support */ 1682 __le32 num_vdevs; 1683 1684 /* number of peer nodes to support */ 1685 __le32 num_peers; 1686 1687 /* number of keys per peer */ 1688 __le32 num_peer_keys; 1689 1690 /* total number of TX/RX data TIDs */ 1691 __le32 num_tids; 1692 1693 /* 1694 * max skid for resolving hash collisions 1695 * 1696 * The address search table is sparse, so that if two MAC addresses 1697 * result in the same hash value, the second of these conflicting 1698 * entries can slide to the next index in the address search table, 1699 * and use it, if it is unoccupied. This ast_skid_limit parameter 1700 * specifies the upper bound on how many subsequent indices to search 1701 * over to find an unoccupied space. 1702 */ 1703 __le32 ast_skid_limit; 1704 1705 /* 1706 * the nominal chain mask for transmit 1707 * 1708 * The chain mask may be modified dynamically, e.g. to operate AP 1709 * tx with a reduced number of chains if no clients are associated. 1710 * This configuration parameter specifies the nominal chain-mask that 1711 * should be used when not operating with a reduced set of tx chains. 1712 */ 1713 __le32 tx_chain_mask; 1714 1715 /* 1716 * the nominal chain mask for receive 1717 * 1718 * The chain mask may be modified dynamically, e.g. for a client 1719 * to use a reduced number of chains for receive if the traffic to 1720 * the client is low enough that it doesn't require downlink MIMO 1721 * or antenna diversity. 1722 * This configuration parameter specifies the nominal chain-mask that 1723 * should be used when not operating with a reduced set of rx chains. 1724 */ 1725 __le32 rx_chain_mask; 1726 1727 /* 1728 * what rx reorder timeout (ms) to use for the AC 1729 * 1730 * Each WMM access class (voice, video, best-effort, background) will 1731 * have its own timeout value to dictate how long to wait for missing 1732 * rx MPDUs to arrive before flushing subsequent MPDUs that have 1733 * already been received. 1734 * This parameter specifies the timeout in milliseconds for each 1735 * class. 1736 */ 1737 __le32 rx_timeout_pri_vi; 1738 __le32 rx_timeout_pri_vo; 1739 __le32 rx_timeout_pri_be; 1740 __le32 rx_timeout_pri_bk; 1741 1742 /* 1743 * what mode the rx should decap packets to 1744 * 1745 * MAC can decap to RAW (no decap), native wifi or Ethernet types 1746 * THis setting also determines the default TX behavior, however TX 1747 * behavior can be modified on a per VAP basis during VAP init 1748 */ 1749 __le32 rx_decap_mode; 1750 1751 /* what is the maximum number of scan requests that can be queued */ 1752 __le32 scan_max_pending_reqs; 1753 1754 /* maximum VDEV that could use BMISS offload */ 1755 __le32 bmiss_offload_max_vdev; 1756 1757 /* maximum VDEV that could use offload roaming */ 1758 __le32 roam_offload_max_vdev; 1759 1760 /* maximum AP profiles that would push to offload roaming */ 1761 __le32 roam_offload_max_ap_profiles; 1762 1763 /* 1764 * how many groups to use for mcast->ucast conversion 1765 * 1766 * The target's WAL maintains a table to hold information regarding 1767 * which peers belong to a given multicast group, so that if 1768 * multicast->unicast conversion is enabled, the target can convert 1769 * multicast tx frames to a series of unicast tx frames, to each 1770 * peer within the multicast group. 1771 This num_mcast_groups configuration parameter tells the target how 1772 * many multicast groups to provide storage for within its multicast 1773 * group membership table. 1774 */ 1775 __le32 num_mcast_groups; 1776 1777 /* 1778 * size to alloc for the mcast membership table 1779 * 1780 * This num_mcast_table_elems configuration parameter tells the 1781 * target how many peer elements it needs to provide storage for in 1782 * its multicast group membership table. 1783 * These multicast group membership table elements are shared by the 1784 * multicast groups stored within the table. 1785 */ 1786 __le32 num_mcast_table_elems; 1787 1788 /* 1789 * whether/how to do multicast->unicast conversion 1790 * 1791 * This configuration parameter specifies whether the target should 1792 * perform multicast --> unicast conversion on transmit, and if so, 1793 * what to do if it finds no entries in its multicast group 1794 * membership table for the multicast IP address in the tx frame. 1795 * Configuration value: 1796 * 0 -> Do not perform multicast to unicast conversion. 1797 * 1 -> Convert multicast frames to unicast, if the IP multicast 1798 * address from the tx frame is found in the multicast group 1799 * membership table. If the IP multicast address is not found, 1800 * drop the frame. 1801 * 2 -> Convert multicast frames to unicast, if the IP multicast 1802 * address from the tx frame is found in the multicast group 1803 * membership table. If the IP multicast address is not found, 1804 * transmit the frame as multicast. 1805 */ 1806 __le32 mcast2ucast_mode; 1807 1808 /* 1809 * how much memory to allocate for a tx PPDU dbg log 1810 * 1811 * This parameter controls how much memory the target will allocate 1812 * to store a log of tx PPDU meta-information (how large the PPDU 1813 * was, when it was sent, whether it was successful, etc.) 1814 */ 1815 __le32 tx_dbg_log_size; 1816 1817 /* how many AST entries to be allocated for WDS */ 1818 __le32 num_wds_entries; 1819 1820 /* 1821 * MAC DMA burst size, e.g., For target PCI limit can be 1822 * 0 -default, 1 256B 1823 */ 1824 __le32 dma_burst_size; 1825 1826 /* 1827 * Fixed delimiters to be inserted after every MPDU to 1828 * account for interface latency to avoid underrun. 1829 */ 1830 __le32 mac_aggr_delim; 1831 1832 /* 1833 * determine whether target is responsible for detecting duplicate 1834 * non-aggregate MPDU and timing out stale fragments. 1835 * 1836 * A-MPDU reordering is always performed on the target. 1837 * 1838 * 0: target responsible for frag timeout and dup checking 1839 * 1: host responsible for frag timeout and dup checking 1840 */ 1841 __le32 rx_skip_defrag_timeout_dup_detection_check; 1842 1843 /* 1844 * Configuration for VoW : 1845 * No of Video Nodes to be supported 1846 * and Max no of descriptors for each Video link (node). 1847 */ 1848 __le32 vow_config; 1849 1850 /* Number of msdu descriptors target should use */ 1851 __le32 num_msdu_desc; 1852 1853 /* 1854 * Max. number of Tx fragments per MSDU 1855 * This parameter controls the max number of Tx fragments per MSDU. 1856 * This is sent by the target as part of the WMI_SERVICE_READY event 1857 * and is overriden by the OS shim as required. 1858 */ 1859 __le32 max_frag_entries; 1860 } __packed; 1861 1862 struct wmi_resource_config_10_2 { 1863 struct wmi_resource_config_10x common; 1864 __le32 max_peer_ext_stats; 1865 __le32 smart_ant_cap; /* 0-disable, 1-enable */ 1866 __le32 bk_min_free; 1867 __le32 be_min_free; 1868 __le32 vi_min_free; 1869 __le32 vo_min_free; 1870 __le32 rx_batchmode; /* 0-disable, 1-enable */ 1871 } __packed; 1872 1873 #define NUM_UNITS_IS_NUM_VDEVS 0x1 1874 #define NUM_UNITS_IS_NUM_PEERS 0x2 1875 1876 /* strucutre describing host memory chunk. */ 1877 struct host_memory_chunk { 1878 /* id of the request that is passed up in service ready */ 1879 __le32 req_id; 1880 /* the physical address the memory chunk */ 1881 __le32 ptr; 1882 /* size of the chunk */ 1883 __le32 size; 1884 } __packed; 1885 1886 struct wmi_init_cmd { 1887 struct wmi_resource_config resource_config; 1888 __le32 num_host_mem_chunks; 1889 1890 /* 1891 * variable number of host memory chunks. 1892 * This should be the last element in the structure 1893 */ 1894 struct host_memory_chunk host_mem_chunks[1]; 1895 } __packed; 1896 1897 /* _10x stucture is from 10.X FW API */ 1898 struct wmi_init_cmd_10x { 1899 struct wmi_resource_config_10x resource_config; 1900 __le32 num_host_mem_chunks; 1901 1902 /* 1903 * variable number of host memory chunks. 1904 * This should be the last element in the structure 1905 */ 1906 struct host_memory_chunk host_mem_chunks[1]; 1907 } __packed; 1908 1909 struct wmi_init_cmd_10_2 { 1910 struct wmi_resource_config_10_2 resource_config; 1911 __le32 num_host_mem_chunks; 1912 1913 /* 1914 * variable number of host memory chunks. 1915 * This should be the last element in the structure 1916 */ 1917 struct host_memory_chunk host_mem_chunks[1]; 1918 } __packed; 1919 1920 struct wmi_chan_list_entry { 1921 __le16 freq; 1922 u8 phy_mode; /* valid for 10.2 only */ 1923 u8 reserved; 1924 } __packed; 1925 1926 /* TLV for channel list */ 1927 struct wmi_chan_list { 1928 __le32 tag; /* WMI_CHAN_LIST_TAG */ 1929 __le32 num_chan; 1930 struct wmi_chan_list_entry channel_list[0]; 1931 } __packed; 1932 1933 struct wmi_bssid_list { 1934 __le32 tag; /* WMI_BSSID_LIST_TAG */ 1935 __le32 num_bssid; 1936 struct wmi_mac_addr bssid_list[0]; 1937 } __packed; 1938 1939 struct wmi_ie_data { 1940 __le32 tag; /* WMI_IE_TAG */ 1941 __le32 ie_len; 1942 u8 ie_data[0]; 1943 } __packed; 1944 1945 struct wmi_ssid { 1946 __le32 ssid_len; 1947 u8 ssid[32]; 1948 } __packed; 1949 1950 struct wmi_ssid_list { 1951 __le32 tag; /* WMI_SSID_LIST_TAG */ 1952 __le32 num_ssids; 1953 struct wmi_ssid ssids[0]; 1954 } __packed; 1955 1956 /* prefix used by scan requestor ids on the host */ 1957 #define WMI_HOST_SCAN_REQUESTOR_ID_PREFIX 0xA000 1958 1959 /* prefix used by scan request ids generated on the host */ 1960 /* host cycles through the lower 12 bits to generate ids */ 1961 #define WMI_HOST_SCAN_REQ_ID_PREFIX 0xA000 1962 1963 #define WLAN_SCAN_PARAMS_MAX_SSID 16 1964 #define WLAN_SCAN_PARAMS_MAX_BSSID 4 1965 #define WLAN_SCAN_PARAMS_MAX_IE_LEN 256 1966 1967 /* Scan priority numbers must be sequential, starting with 0 */ 1968 enum wmi_scan_priority { 1969 WMI_SCAN_PRIORITY_VERY_LOW = 0, 1970 WMI_SCAN_PRIORITY_LOW, 1971 WMI_SCAN_PRIORITY_MEDIUM, 1972 WMI_SCAN_PRIORITY_HIGH, 1973 WMI_SCAN_PRIORITY_VERY_HIGH, 1974 WMI_SCAN_PRIORITY_COUNT /* number of priorities supported */ 1975 }; 1976 1977 struct wmi_start_scan_cmd { 1978 /* Scan ID */ 1979 __le32 scan_id; 1980 /* Scan requestor ID */ 1981 __le32 scan_req_id; 1982 /* VDEV id(interface) that is requesting scan */ 1983 __le32 vdev_id; 1984 /* Scan Priority, input to scan scheduler */ 1985 __le32 scan_priority; 1986 /* Scan events subscription */ 1987 __le32 notify_scan_events; 1988 /* dwell time in msec on active channels */ 1989 __le32 dwell_time_active; 1990 /* dwell time in msec on passive channels */ 1991 __le32 dwell_time_passive; 1992 /* 1993 * min time in msec on the BSS channel,only valid if atleast one 1994 * VDEV is active 1995 */ 1996 __le32 min_rest_time; 1997 /* 1998 * max rest time in msec on the BSS channel,only valid if at least 1999 * one VDEV is active 2000 */ 2001 /* 2002 * the scanner will rest on the bss channel at least min_rest_time 2003 * after min_rest_time the scanner will start checking for tx/rx 2004 * activity on all VDEVs. if there is no activity the scanner will 2005 * switch to off channel. if there is activity the scanner will let 2006 * the radio on the bss channel until max_rest_time expires.at 2007 * max_rest_time scanner will switch to off channel irrespective of 2008 * activity. activity is determined by the idle_time parameter. 2009 */ 2010 __le32 max_rest_time; 2011 /* 2012 * time before sending next set of probe requests. 2013 * The scanner keeps repeating probe requests transmission with 2014 * period specified by repeat_probe_time. 2015 * The number of probe requests specified depends on the ssid_list 2016 * and bssid_list 2017 */ 2018 __le32 repeat_probe_time; 2019 /* time in msec between 2 consequetive probe requests with in a set. */ 2020 __le32 probe_spacing_time; 2021 /* 2022 * data inactivity time in msec on bss channel that will be used by 2023 * scanner for measuring the inactivity. 2024 */ 2025 __le32 idle_time; 2026 /* maximum time in msec allowed for scan */ 2027 __le32 max_scan_time; 2028 /* 2029 * delay in msec before sending first probe request after switching 2030 * to a channel 2031 */ 2032 __le32 probe_delay; 2033 /* Scan control flags */ 2034 __le32 scan_ctrl_flags; 2035 2036 /* Burst duration time in msecs */ 2037 __le32 burst_duration; 2038 /* 2039 * TLV (tag length value ) paramerters follow the scan_cmd structure. 2040 * TLV can contain channel list, bssid list, ssid list and 2041 * ie. the TLV tags are defined above; 2042 */ 2043 } __packed; 2044 2045 /* This is the definition from 10.X firmware branch */ 2046 struct wmi_start_scan_cmd_10x { 2047 /* Scan ID */ 2048 __le32 scan_id; 2049 2050 /* Scan requestor ID */ 2051 __le32 scan_req_id; 2052 2053 /* VDEV id(interface) that is requesting scan */ 2054 __le32 vdev_id; 2055 2056 /* Scan Priority, input to scan scheduler */ 2057 __le32 scan_priority; 2058 2059 /* Scan events subscription */ 2060 __le32 notify_scan_events; 2061 2062 /* dwell time in msec on active channels */ 2063 __le32 dwell_time_active; 2064 2065 /* dwell time in msec on passive channels */ 2066 __le32 dwell_time_passive; 2067 2068 /* 2069 * min time in msec on the BSS channel,only valid if atleast one 2070 * VDEV is active 2071 */ 2072 __le32 min_rest_time; 2073 2074 /* 2075 * max rest time in msec on the BSS channel,only valid if at least 2076 * one VDEV is active 2077 */ 2078 /* 2079 * the scanner will rest on the bss channel at least min_rest_time 2080 * after min_rest_time the scanner will start checking for tx/rx 2081 * activity on all VDEVs. if there is no activity the scanner will 2082 * switch to off channel. if there is activity the scanner will let 2083 * the radio on the bss channel until max_rest_time expires.at 2084 * max_rest_time scanner will switch to off channel irrespective of 2085 * activity. activity is determined by the idle_time parameter. 2086 */ 2087 __le32 max_rest_time; 2088 2089 /* 2090 * time before sending next set of probe requests. 2091 * The scanner keeps repeating probe requests transmission with 2092 * period specified by repeat_probe_time. 2093 * The number of probe requests specified depends on the ssid_list 2094 * and bssid_list 2095 */ 2096 __le32 repeat_probe_time; 2097 2098 /* time in msec between 2 consequetive probe requests with in a set. */ 2099 __le32 probe_spacing_time; 2100 2101 /* 2102 * data inactivity time in msec on bss channel that will be used by 2103 * scanner for measuring the inactivity. 2104 */ 2105 __le32 idle_time; 2106 2107 /* maximum time in msec allowed for scan */ 2108 __le32 max_scan_time; 2109 2110 /* 2111 * delay in msec before sending first probe request after switching 2112 * to a channel 2113 */ 2114 __le32 probe_delay; 2115 2116 /* Scan control flags */ 2117 __le32 scan_ctrl_flags; 2118 2119 /* 2120 * TLV (tag length value ) paramerters follow the scan_cmd structure. 2121 * TLV can contain channel list, bssid list, ssid list and 2122 * ie. the TLV tags are defined above; 2123 */ 2124 } __packed; 2125 2126 struct wmi_ssid_arg { 2127 int len; 2128 const u8 *ssid; 2129 }; 2130 2131 struct wmi_bssid_arg { 2132 const u8 *bssid; 2133 }; 2134 2135 struct wmi_start_scan_arg { 2136 u32 scan_id; 2137 u32 scan_req_id; 2138 u32 vdev_id; 2139 u32 scan_priority; 2140 u32 notify_scan_events; 2141 u32 dwell_time_active; 2142 u32 dwell_time_passive; 2143 u32 min_rest_time; 2144 u32 max_rest_time; 2145 u32 repeat_probe_time; 2146 u32 probe_spacing_time; 2147 u32 idle_time; 2148 u32 max_scan_time; 2149 u32 probe_delay; 2150 u32 scan_ctrl_flags; 2151 2152 u32 ie_len; 2153 u32 n_channels; 2154 u32 n_ssids; 2155 u32 n_bssids; 2156 2157 u8 ie[WLAN_SCAN_PARAMS_MAX_IE_LEN]; 2158 u16 channels[64]; 2159 struct wmi_ssid_arg ssids[WLAN_SCAN_PARAMS_MAX_SSID]; 2160 struct wmi_bssid_arg bssids[WLAN_SCAN_PARAMS_MAX_BSSID]; 2161 }; 2162 2163 /* scan control flags */ 2164 2165 /* passively scan all channels including active channels */ 2166 #define WMI_SCAN_FLAG_PASSIVE 0x1 2167 /* add wild card ssid probe request even though ssid_list is specified. */ 2168 #define WMI_SCAN_ADD_BCAST_PROBE_REQ 0x2 2169 /* add cck rates to rates/xrate ie for the generated probe request */ 2170 #define WMI_SCAN_ADD_CCK_RATES 0x4 2171 /* add ofdm rates to rates/xrate ie for the generated probe request */ 2172 #define WMI_SCAN_ADD_OFDM_RATES 0x8 2173 /* To enable indication of Chan load and Noise floor to host */ 2174 #define WMI_SCAN_CHAN_STAT_EVENT 0x10 2175 /* Filter Probe request frames */ 2176 #define WMI_SCAN_FILTER_PROBE_REQ 0x20 2177 /* When set, DFS channels will not be scanned */ 2178 #define WMI_SCAN_BYPASS_DFS_CHN 0x40 2179 /* Different FW scan engine may choose to bail out on errors. 2180 * Allow the driver to have influence over that. */ 2181 #define WMI_SCAN_CONTINUE_ON_ERROR 0x80 2182 2183 /* WMI_SCAN_CLASS_MASK must be the same value as IEEE80211_SCAN_CLASS_MASK */ 2184 #define WMI_SCAN_CLASS_MASK 0xFF000000 2185 2186 enum wmi_stop_scan_type { 2187 WMI_SCAN_STOP_ONE = 0x00000000, /* stop by scan_id */ 2188 WMI_SCAN_STOP_VDEV_ALL = 0x01000000, /* stop by vdev_id */ 2189 WMI_SCAN_STOP_ALL = 0x04000000, /* stop all scans */ 2190 }; 2191 2192 struct wmi_stop_scan_cmd { 2193 __le32 scan_req_id; 2194 __le32 scan_id; 2195 __le32 req_type; 2196 __le32 vdev_id; 2197 } __packed; 2198 2199 struct wmi_stop_scan_arg { 2200 u32 req_id; 2201 enum wmi_stop_scan_type req_type; 2202 union { 2203 u32 scan_id; 2204 u32 vdev_id; 2205 } u; 2206 }; 2207 2208 struct wmi_scan_chan_list_cmd { 2209 __le32 num_scan_chans; 2210 struct wmi_channel chan_info[0]; 2211 } __packed; 2212 2213 struct wmi_scan_chan_list_arg { 2214 u32 n_channels; 2215 struct wmi_channel_arg *channels; 2216 }; 2217 2218 enum wmi_bss_filter { 2219 WMI_BSS_FILTER_NONE = 0, /* no beacons forwarded */ 2220 WMI_BSS_FILTER_ALL, /* all beacons forwarded */ 2221 WMI_BSS_FILTER_PROFILE, /* only beacons matching profile */ 2222 WMI_BSS_FILTER_ALL_BUT_PROFILE, /* all but beacons matching profile */ 2223 WMI_BSS_FILTER_CURRENT_BSS, /* only beacons matching current BSS */ 2224 WMI_BSS_FILTER_ALL_BUT_BSS, /* all but beacons matching BSS */ 2225 WMI_BSS_FILTER_PROBED_SSID, /* beacons matching probed ssid */ 2226 WMI_BSS_FILTER_LAST_BSS, /* marker only */ 2227 }; 2228 2229 enum wmi_scan_event_type { 2230 WMI_SCAN_EVENT_STARTED = 0x1, 2231 WMI_SCAN_EVENT_COMPLETED = 0x2, 2232 WMI_SCAN_EVENT_BSS_CHANNEL = 0x4, 2233 WMI_SCAN_EVENT_FOREIGN_CHANNEL = 0x8, 2234 WMI_SCAN_EVENT_DEQUEUED = 0x10, 2235 WMI_SCAN_EVENT_PREEMPTED = 0x20, /* possibly by high-prio scan */ 2236 WMI_SCAN_EVENT_START_FAILED = 0x40, 2237 WMI_SCAN_EVENT_RESTARTED = 0x80, 2238 WMI_SCAN_EVENT_MAX = 0x8000 2239 }; 2240 2241 enum wmi_scan_completion_reason { 2242 WMI_SCAN_REASON_COMPLETED, 2243 WMI_SCAN_REASON_CANCELLED, 2244 WMI_SCAN_REASON_PREEMPTED, 2245 WMI_SCAN_REASON_TIMEDOUT, 2246 WMI_SCAN_REASON_MAX, 2247 }; 2248 2249 struct wmi_scan_event { 2250 __le32 event_type; /* %WMI_SCAN_EVENT_ */ 2251 __le32 reason; /* %WMI_SCAN_REASON_ */ 2252 __le32 channel_freq; /* only valid for WMI_SCAN_EVENT_FOREIGN_CHANNEL */ 2253 __le32 scan_req_id; 2254 __le32 scan_id; 2255 __le32 vdev_id; 2256 } __packed; 2257 2258 /* 2259 * This defines how much headroom is kept in the 2260 * receive frame between the descriptor and the 2261 * payload, in order for the WMI PHY error and 2262 * management handler to insert header contents. 2263 * 2264 * This is in bytes. 2265 */ 2266 #define WMI_MGMT_RX_HDR_HEADROOM 52 2267 2268 /* 2269 * This event will be used for sending scan results 2270 * as well as rx mgmt frames to the host. The rx buffer 2271 * will be sent as part of this WMI event. It would be a 2272 * good idea to pass all the fields in the RX status 2273 * descriptor up to the host. 2274 */ 2275 struct wmi_mgmt_rx_hdr_v1 { 2276 __le32 channel; 2277 __le32 snr; 2278 __le32 rate; 2279 __le32 phy_mode; 2280 __le32 buf_len; 2281 __le32 status; /* %WMI_RX_STATUS_ */ 2282 } __packed; 2283 2284 struct wmi_mgmt_rx_hdr_v2 { 2285 struct wmi_mgmt_rx_hdr_v1 v1; 2286 __le32 rssi_ctl[4]; 2287 } __packed; 2288 2289 struct wmi_mgmt_rx_event_v1 { 2290 struct wmi_mgmt_rx_hdr_v1 hdr; 2291 u8 buf[0]; 2292 } __packed; 2293 2294 struct wmi_mgmt_rx_event_v2 { 2295 struct wmi_mgmt_rx_hdr_v2 hdr; 2296 u8 buf[0]; 2297 } __packed; 2298 2299 #define WMI_RX_STATUS_OK 0x00 2300 #define WMI_RX_STATUS_ERR_CRC 0x01 2301 #define WMI_RX_STATUS_ERR_DECRYPT 0x08 2302 #define WMI_RX_STATUS_ERR_MIC 0x10 2303 #define WMI_RX_STATUS_ERR_KEY_CACHE_MISS 0x20 2304 2305 #define PHY_ERROR_SPECTRAL_SCAN 0x26 2306 #define PHY_ERROR_FALSE_RADAR_EXT 0x24 2307 #define PHY_ERROR_RADAR 0x05 2308 2309 struct wmi_single_phyerr_rx_hdr { 2310 /* TSF timestamp */ 2311 __le32 tsf_timestamp; 2312 2313 /* 2314 * Current freq1, freq2 2315 * 2316 * [7:0]: freq1[lo] 2317 * [15:8] : freq1[hi] 2318 * [23:16]: freq2[lo] 2319 * [31:24]: freq2[hi] 2320 */ 2321 __le16 freq1; 2322 __le16 freq2; 2323 2324 /* 2325 * Combined RSSI over all chains and channel width for this PHY error 2326 * 2327 * [7:0]: RSSI combined 2328 * [15:8]: Channel width (MHz) 2329 * [23:16]: PHY error code 2330 * [24:16]: reserved (future use) 2331 */ 2332 u8 rssi_combined; 2333 u8 chan_width_mhz; 2334 u8 phy_err_code; 2335 u8 rsvd0; 2336 2337 /* 2338 * RSSI on chain 0 through 3 2339 * 2340 * This is formatted the same as the PPDU_START RX descriptor 2341 * field: 2342 * 2343 * [7:0]: pri20 2344 * [15:8]: sec20 2345 * [23:16]: sec40 2346 * [31:24]: sec80 2347 */ 2348 2349 __le32 rssi_chain0; 2350 __le32 rssi_chain1; 2351 __le32 rssi_chain2; 2352 __le32 rssi_chain3; 2353 2354 /* 2355 * Last calibrated NF value for chain 0 through 3 2356 * 2357 * nf_list_1: 2358 * 2359 * + [15:0] - chain 0 2360 * + [31:16] - chain 1 2361 * 2362 * nf_list_2: 2363 * 2364 * + [15:0] - chain 2 2365 * + [31:16] - chain 3 2366 */ 2367 __le32 nf_list_1; 2368 __le32 nf_list_2; 2369 2370 /* Length of the frame */ 2371 __le32 buf_len; 2372 } __packed; 2373 2374 struct wmi_single_phyerr_rx_event { 2375 /* Phy error event header */ 2376 struct wmi_single_phyerr_rx_hdr hdr; 2377 /* frame buffer */ 2378 u8 bufp[0]; 2379 } __packed; 2380 2381 struct wmi_comb_phyerr_rx_hdr { 2382 /* Phy error phy error count */ 2383 __le32 num_phyerr_events; 2384 __le32 tsf_l32; 2385 __le32 tsf_u32; 2386 } __packed; 2387 2388 struct wmi_comb_phyerr_rx_event { 2389 /* Phy error phy error count */ 2390 struct wmi_comb_phyerr_rx_hdr hdr; 2391 /* 2392 * frame buffer - contains multiple payloads in the order: 2393 * header - payload, header - payload... 2394 * (The header is of type: wmi_single_phyerr_rx_hdr) 2395 */ 2396 u8 bufp[0]; 2397 } __packed; 2398 2399 #define PHYERR_TLV_SIG 0xBB 2400 #define PHYERR_TLV_TAG_SEARCH_FFT_REPORT 0xFB 2401 #define PHYERR_TLV_TAG_RADAR_PULSE_SUMMARY 0xF8 2402 #define PHYERR_TLV_TAG_SPECTRAL_SUMMARY_REPORT 0xF9 2403 2404 struct phyerr_radar_report { 2405 __le32 reg0; /* RADAR_REPORT_REG0_* */ 2406 __le32 reg1; /* REDAR_REPORT_REG1_* */ 2407 } __packed; 2408 2409 #define RADAR_REPORT_REG0_PULSE_IS_CHIRP_MASK 0x80000000 2410 #define RADAR_REPORT_REG0_PULSE_IS_CHIRP_LSB 31 2411 2412 #define RADAR_REPORT_REG0_PULSE_IS_MAX_WIDTH_MASK 0x40000000 2413 #define RADAR_REPORT_REG0_PULSE_IS_MAX_WIDTH_LSB 30 2414 2415 #define RADAR_REPORT_REG0_AGC_TOTAL_GAIN_MASK 0x3FF00000 2416 #define RADAR_REPORT_REG0_AGC_TOTAL_GAIN_LSB 20 2417 2418 #define RADAR_REPORT_REG0_PULSE_DELTA_DIFF_MASK 0x000F0000 2419 #define RADAR_REPORT_REG0_PULSE_DELTA_DIFF_LSB 16 2420 2421 #define RADAR_REPORT_REG0_PULSE_DELTA_PEAK_MASK 0x0000FC00 2422 #define RADAR_REPORT_REG0_PULSE_DELTA_PEAK_LSB 10 2423 2424 #define RADAR_REPORT_REG0_PULSE_SIDX_MASK 0x000003FF 2425 #define RADAR_REPORT_REG0_PULSE_SIDX_LSB 0 2426 2427 #define RADAR_REPORT_REG1_PULSE_SRCH_FFT_VALID_MASK 0x80000000 2428 #define RADAR_REPORT_REG1_PULSE_SRCH_FFT_VALID_LSB 31 2429 2430 #define RADAR_REPORT_REG1_PULSE_AGC_MB_GAIN_MASK 0x7F000000 2431 #define RADAR_REPORT_REG1_PULSE_AGC_MB_GAIN_LSB 24 2432 2433 #define RADAR_REPORT_REG1_PULSE_SUBCHAN_MASK_MASK 0x00FF0000 2434 #define RADAR_REPORT_REG1_PULSE_SUBCHAN_MASK_LSB 16 2435 2436 #define RADAR_REPORT_REG1_PULSE_TSF_OFFSET_MASK 0x0000FF00 2437 #define RADAR_REPORT_REG1_PULSE_TSF_OFFSET_LSB 8 2438 2439 #define RADAR_REPORT_REG1_PULSE_DUR_MASK 0x000000FF 2440 #define RADAR_REPORT_REG1_PULSE_DUR_LSB 0 2441 2442 struct phyerr_fft_report { 2443 __le32 reg0; /* SEARCH_FFT_REPORT_REG0_ * */ 2444 __le32 reg1; /* SEARCH_FFT_REPORT_REG1_ * */ 2445 } __packed; 2446 2447 #define SEARCH_FFT_REPORT_REG0_TOTAL_GAIN_DB_MASK 0xFF800000 2448 #define SEARCH_FFT_REPORT_REG0_TOTAL_GAIN_DB_LSB 23 2449 2450 #define SEARCH_FFT_REPORT_REG0_BASE_PWR_DB_MASK 0x007FC000 2451 #define SEARCH_FFT_REPORT_REG0_BASE_PWR_DB_LSB 14 2452 2453 #define SEARCH_FFT_REPORT_REG0_FFT_CHN_IDX_MASK 0x00003000 2454 #define SEARCH_FFT_REPORT_REG0_FFT_CHN_IDX_LSB 12 2455 2456 #define SEARCH_FFT_REPORT_REG0_PEAK_SIDX_MASK 0x00000FFF 2457 #define SEARCH_FFT_REPORT_REG0_PEAK_SIDX_LSB 0 2458 2459 #define SEARCH_FFT_REPORT_REG1_RELPWR_DB_MASK 0xFC000000 2460 #define SEARCH_FFT_REPORT_REG1_RELPWR_DB_LSB 26 2461 2462 #define SEARCH_FFT_REPORT_REG1_AVGPWR_DB_MASK 0x03FC0000 2463 #define SEARCH_FFT_REPORT_REG1_AVGPWR_DB_LSB 18 2464 2465 #define SEARCH_FFT_REPORT_REG1_PEAK_MAG_MASK 0x0003FF00 2466 #define SEARCH_FFT_REPORT_REG1_PEAK_MAG_LSB 8 2467 2468 #define SEARCH_FFT_REPORT_REG1_NUM_STR_BINS_IB_MASK 0x000000FF 2469 #define SEARCH_FFT_REPORT_REG1_NUM_STR_BINS_IB_LSB 0 2470 2471 struct phyerr_tlv { 2472 __le16 len; 2473 u8 tag; 2474 u8 sig; 2475 } __packed; 2476 2477 #define DFS_RSSI_POSSIBLY_FALSE 50 2478 #define DFS_PEAK_MAG_THOLD_POSSIBLY_FALSE 40 2479 2480 struct wmi_mgmt_tx_hdr { 2481 __le32 vdev_id; 2482 struct wmi_mac_addr peer_macaddr; 2483 __le32 tx_rate; 2484 __le32 tx_power; 2485 __le32 buf_len; 2486 } __packed; 2487 2488 struct wmi_mgmt_tx_cmd { 2489 struct wmi_mgmt_tx_hdr hdr; 2490 u8 buf[0]; 2491 } __packed; 2492 2493 struct wmi_echo_event { 2494 __le32 value; 2495 } __packed; 2496 2497 struct wmi_echo_cmd { 2498 __le32 value; 2499 } __packed; 2500 2501 struct wmi_pdev_set_regdomain_cmd { 2502 __le32 reg_domain; 2503 __le32 reg_domain_2G; 2504 __le32 reg_domain_5G; 2505 __le32 conformance_test_limit_2G; 2506 __le32 conformance_test_limit_5G; 2507 } __packed; 2508 2509 enum wmi_dfs_region { 2510 /* Uninitialized dfs domain */ 2511 WMI_UNINIT_DFS_DOMAIN = 0, 2512 2513 /* FCC3 dfs domain */ 2514 WMI_FCC_DFS_DOMAIN = 1, 2515 2516 /* ETSI dfs domain */ 2517 WMI_ETSI_DFS_DOMAIN = 2, 2518 2519 /*Japan dfs domain */ 2520 WMI_MKK4_DFS_DOMAIN = 3, 2521 }; 2522 2523 struct wmi_pdev_set_regdomain_cmd_10x { 2524 __le32 reg_domain; 2525 __le32 reg_domain_2G; 2526 __le32 reg_domain_5G; 2527 __le32 conformance_test_limit_2G; 2528 __le32 conformance_test_limit_5G; 2529 2530 /* dfs domain from wmi_dfs_region */ 2531 __le32 dfs_domain; 2532 } __packed; 2533 2534 /* Command to set/unset chip in quiet mode */ 2535 struct wmi_pdev_set_quiet_cmd { 2536 /* period in TUs */ 2537 __le32 period; 2538 2539 /* duration in TUs */ 2540 __le32 duration; 2541 2542 /* offset in TUs */ 2543 __le32 next_start; 2544 2545 /* enable/disable */ 2546 __le32 enabled; 2547 } __packed; 2548 2549 /* 2550 * 802.11g protection mode. 2551 */ 2552 enum ath10k_protmode { 2553 ATH10K_PROT_NONE = 0, /* no protection */ 2554 ATH10K_PROT_CTSONLY = 1, /* CTS to self */ 2555 ATH10K_PROT_RTSCTS = 2, /* RTS-CTS */ 2556 }; 2557 2558 enum wmi_rtscts_profile { 2559 WMI_RTSCTS_FOR_NO_RATESERIES = 0, 2560 WMI_RTSCTS_FOR_SECOND_RATESERIES, 2561 WMI_RTSCTS_ACROSS_SW_RETRIES 2562 }; 2563 2564 #define WMI_RTSCTS_ENABLED 1 2565 #define WMI_RTSCTS_SET_MASK 0x0f 2566 #define WMI_RTSCTS_SET_LSB 0 2567 2568 #define WMI_RTSCTS_PROFILE_MASK 0xf0 2569 #define WMI_RTSCTS_PROFILE_LSB 4 2570 2571 enum wmi_beacon_gen_mode { 2572 WMI_BEACON_STAGGERED_MODE = 0, 2573 WMI_BEACON_BURST_MODE = 1 2574 }; 2575 2576 enum wmi_csa_event_ies_present_flag { 2577 WMI_CSA_IE_PRESENT = 0x00000001, 2578 WMI_XCSA_IE_PRESENT = 0x00000002, 2579 WMI_WBW_IE_PRESENT = 0x00000004, 2580 WMI_CSWARP_IE_PRESENT = 0x00000008, 2581 }; 2582 2583 /* wmi CSA receive event from beacon frame */ 2584 struct wmi_csa_event { 2585 __le32 i_fc_dur; 2586 /* Bit 0-15: FC */ 2587 /* Bit 16-31: DUR */ 2588 struct wmi_mac_addr i_addr1; 2589 struct wmi_mac_addr i_addr2; 2590 __le32 csa_ie[2]; 2591 __le32 xcsa_ie[2]; 2592 __le32 wb_ie[2]; 2593 __le32 cswarp_ie; 2594 __le32 ies_present_flag; /* wmi_csa_event_ies_present_flag */ 2595 } __packed; 2596 2597 /* the definition of different PDEV parameters */ 2598 #define PDEV_DEFAULT_STATS_UPDATE_PERIOD 500 2599 #define VDEV_DEFAULT_STATS_UPDATE_PERIOD 500 2600 #define PEER_DEFAULT_STATS_UPDATE_PERIOD 500 2601 2602 struct wmi_pdev_param_map { 2603 u32 tx_chain_mask; 2604 u32 rx_chain_mask; 2605 u32 txpower_limit2g; 2606 u32 txpower_limit5g; 2607 u32 txpower_scale; 2608 u32 beacon_gen_mode; 2609 u32 beacon_tx_mode; 2610 u32 resmgr_offchan_mode; 2611 u32 protection_mode; 2612 u32 dynamic_bw; 2613 u32 non_agg_sw_retry_th; 2614 u32 agg_sw_retry_th; 2615 u32 sta_kickout_th; 2616 u32 ac_aggrsize_scaling; 2617 u32 ltr_enable; 2618 u32 ltr_ac_latency_be; 2619 u32 ltr_ac_latency_bk; 2620 u32 ltr_ac_latency_vi; 2621 u32 ltr_ac_latency_vo; 2622 u32 ltr_ac_latency_timeout; 2623 u32 ltr_sleep_override; 2624 u32 ltr_rx_override; 2625 u32 ltr_tx_activity_timeout; 2626 u32 l1ss_enable; 2627 u32 dsleep_enable; 2628 u32 pcielp_txbuf_flush; 2629 u32 pcielp_txbuf_watermark; 2630 u32 pcielp_txbuf_tmo_en; 2631 u32 pcielp_txbuf_tmo_value; 2632 u32 pdev_stats_update_period; 2633 u32 vdev_stats_update_period; 2634 u32 peer_stats_update_period; 2635 u32 bcnflt_stats_update_period; 2636 u32 pmf_qos; 2637 u32 arp_ac_override; 2638 u32 dcs; 2639 u32 ani_enable; 2640 u32 ani_poll_period; 2641 u32 ani_listen_period; 2642 u32 ani_ofdm_level; 2643 u32 ani_cck_level; 2644 u32 dyntxchain; 2645 u32 proxy_sta; 2646 u32 idle_ps_config; 2647 u32 power_gating_sleep; 2648 u32 fast_channel_reset; 2649 u32 burst_dur; 2650 u32 burst_enable; 2651 }; 2652 2653 #define WMI_PDEV_PARAM_UNSUPPORTED 0 2654 2655 enum wmi_pdev_param { 2656 /* TX chain mask */ 2657 WMI_PDEV_PARAM_TX_CHAIN_MASK = 0x1, 2658 /* RX chain mask */ 2659 WMI_PDEV_PARAM_RX_CHAIN_MASK, 2660 /* TX power limit for 2G Radio */ 2661 WMI_PDEV_PARAM_TXPOWER_LIMIT2G, 2662 /* TX power limit for 5G Radio */ 2663 WMI_PDEV_PARAM_TXPOWER_LIMIT5G, 2664 /* TX power scale */ 2665 WMI_PDEV_PARAM_TXPOWER_SCALE, 2666 /* Beacon generation mode . 0: host, 1: target */ 2667 WMI_PDEV_PARAM_BEACON_GEN_MODE, 2668 /* Beacon generation mode . 0: staggered 1: bursted */ 2669 WMI_PDEV_PARAM_BEACON_TX_MODE, 2670 /* 2671 * Resource manager off chan mode . 2672 * 0: turn off off chan mode. 1: turn on offchan mode 2673 */ 2674 WMI_PDEV_PARAM_RESMGR_OFFCHAN_MODE, 2675 /* 2676 * Protection mode: 2677 * 0: no protection 1:use CTS-to-self 2: use RTS/CTS 2678 */ 2679 WMI_PDEV_PARAM_PROTECTION_MODE, 2680 /* 2681 * Dynamic bandwidth - 0: disable, 1: enable 2682 * 2683 * When enabled HW rate control tries different bandwidths when 2684 * retransmitting frames. 2685 */ 2686 WMI_PDEV_PARAM_DYNAMIC_BW, 2687 /* Non aggregrate/ 11g sw retry threshold.0-disable */ 2688 WMI_PDEV_PARAM_NON_AGG_SW_RETRY_TH, 2689 /* aggregrate sw retry threshold. 0-disable*/ 2690 WMI_PDEV_PARAM_AGG_SW_RETRY_TH, 2691 /* Station kickout threshold (non of consecutive failures).0-disable */ 2692 WMI_PDEV_PARAM_STA_KICKOUT_TH, 2693 /* Aggerate size scaling configuration per AC */ 2694 WMI_PDEV_PARAM_AC_AGGRSIZE_SCALING, 2695 /* LTR enable */ 2696 WMI_PDEV_PARAM_LTR_ENABLE, 2697 /* LTR latency for BE, in us */ 2698 WMI_PDEV_PARAM_LTR_AC_LATENCY_BE, 2699 /* LTR latency for BK, in us */ 2700 WMI_PDEV_PARAM_LTR_AC_LATENCY_BK, 2701 /* LTR latency for VI, in us */ 2702 WMI_PDEV_PARAM_LTR_AC_LATENCY_VI, 2703 /* LTR latency for VO, in us */ 2704 WMI_PDEV_PARAM_LTR_AC_LATENCY_VO, 2705 /* LTR AC latency timeout, in ms */ 2706 WMI_PDEV_PARAM_LTR_AC_LATENCY_TIMEOUT, 2707 /* LTR platform latency override, in us */ 2708 WMI_PDEV_PARAM_LTR_SLEEP_OVERRIDE, 2709 /* LTR-RX override, in us */ 2710 WMI_PDEV_PARAM_LTR_RX_OVERRIDE, 2711 /* Tx activity timeout for LTR, in us */ 2712 WMI_PDEV_PARAM_LTR_TX_ACTIVITY_TIMEOUT, 2713 /* L1SS state machine enable */ 2714 WMI_PDEV_PARAM_L1SS_ENABLE, 2715 /* Deep sleep state machine enable */ 2716 WMI_PDEV_PARAM_DSLEEP_ENABLE, 2717 /* RX buffering flush enable */ 2718 WMI_PDEV_PARAM_PCIELP_TXBUF_FLUSH, 2719 /* RX buffering matermark */ 2720 WMI_PDEV_PARAM_PCIELP_TXBUF_WATERMARK, 2721 /* RX buffering timeout enable */ 2722 WMI_PDEV_PARAM_PCIELP_TXBUF_TMO_EN, 2723 /* RX buffering timeout value */ 2724 WMI_PDEV_PARAM_PCIELP_TXBUF_TMO_VALUE, 2725 /* pdev level stats update period in ms */ 2726 WMI_PDEV_PARAM_PDEV_STATS_UPDATE_PERIOD, 2727 /* vdev level stats update period in ms */ 2728 WMI_PDEV_PARAM_VDEV_STATS_UPDATE_PERIOD, 2729 /* peer level stats update period in ms */ 2730 WMI_PDEV_PARAM_PEER_STATS_UPDATE_PERIOD, 2731 /* beacon filter status update period */ 2732 WMI_PDEV_PARAM_BCNFLT_STATS_UPDATE_PERIOD, 2733 /* QOS Mgmt frame protection MFP/PMF 0: disable, 1: enable */ 2734 WMI_PDEV_PARAM_PMF_QOS, 2735 /* Access category on which ARP frames are sent */ 2736 WMI_PDEV_PARAM_ARP_AC_OVERRIDE, 2737 /* DCS configuration */ 2738 WMI_PDEV_PARAM_DCS, 2739 /* Enable/Disable ANI on target */ 2740 WMI_PDEV_PARAM_ANI_ENABLE, 2741 /* configure the ANI polling period */ 2742 WMI_PDEV_PARAM_ANI_POLL_PERIOD, 2743 /* configure the ANI listening period */ 2744 WMI_PDEV_PARAM_ANI_LISTEN_PERIOD, 2745 /* configure OFDM immunity level */ 2746 WMI_PDEV_PARAM_ANI_OFDM_LEVEL, 2747 /* configure CCK immunity level */ 2748 WMI_PDEV_PARAM_ANI_CCK_LEVEL, 2749 /* Enable/Disable CDD for 1x1 STAs in rate control module */ 2750 WMI_PDEV_PARAM_DYNTXCHAIN, 2751 /* Enable/Disable proxy STA */ 2752 WMI_PDEV_PARAM_PROXY_STA, 2753 /* Enable/Disable low power state when all VDEVs are inactive/idle. */ 2754 WMI_PDEV_PARAM_IDLE_PS_CONFIG, 2755 /* Enable/Disable power gating sleep */ 2756 WMI_PDEV_PARAM_POWER_GATING_SLEEP, 2757 }; 2758 2759 enum wmi_10x_pdev_param { 2760 /* TX chian mask */ 2761 WMI_10X_PDEV_PARAM_TX_CHAIN_MASK = 0x1, 2762 /* RX chian mask */ 2763 WMI_10X_PDEV_PARAM_RX_CHAIN_MASK, 2764 /* TX power limit for 2G Radio */ 2765 WMI_10X_PDEV_PARAM_TXPOWER_LIMIT2G, 2766 /* TX power limit for 5G Radio */ 2767 WMI_10X_PDEV_PARAM_TXPOWER_LIMIT5G, 2768 /* TX power scale */ 2769 WMI_10X_PDEV_PARAM_TXPOWER_SCALE, 2770 /* Beacon generation mode . 0: host, 1: target */ 2771 WMI_10X_PDEV_PARAM_BEACON_GEN_MODE, 2772 /* Beacon generation mode . 0: staggered 1: bursted */ 2773 WMI_10X_PDEV_PARAM_BEACON_TX_MODE, 2774 /* 2775 * Resource manager off chan mode . 2776 * 0: turn off off chan mode. 1: turn on offchan mode 2777 */ 2778 WMI_10X_PDEV_PARAM_RESMGR_OFFCHAN_MODE, 2779 /* 2780 * Protection mode: 2781 * 0: no protection 1:use CTS-to-self 2: use RTS/CTS 2782 */ 2783 WMI_10X_PDEV_PARAM_PROTECTION_MODE, 2784 /* Dynamic bandwidth 0: disable 1: enable */ 2785 WMI_10X_PDEV_PARAM_DYNAMIC_BW, 2786 /* Non aggregrate/ 11g sw retry threshold.0-disable */ 2787 WMI_10X_PDEV_PARAM_NON_AGG_SW_RETRY_TH, 2788 /* aggregrate sw retry threshold. 0-disable*/ 2789 WMI_10X_PDEV_PARAM_AGG_SW_RETRY_TH, 2790 /* Station kickout threshold (non of consecutive failures).0-disable */ 2791 WMI_10X_PDEV_PARAM_STA_KICKOUT_TH, 2792 /* Aggerate size scaling configuration per AC */ 2793 WMI_10X_PDEV_PARAM_AC_AGGRSIZE_SCALING, 2794 /* LTR enable */ 2795 WMI_10X_PDEV_PARAM_LTR_ENABLE, 2796 /* LTR latency for BE, in us */ 2797 WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_BE, 2798 /* LTR latency for BK, in us */ 2799 WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_BK, 2800 /* LTR latency for VI, in us */ 2801 WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_VI, 2802 /* LTR latency for VO, in us */ 2803 WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_VO, 2804 /* LTR AC latency timeout, in ms */ 2805 WMI_10X_PDEV_PARAM_LTR_AC_LATENCY_TIMEOUT, 2806 /* LTR platform latency override, in us */ 2807 WMI_10X_PDEV_PARAM_LTR_SLEEP_OVERRIDE, 2808 /* LTR-RX override, in us */ 2809 WMI_10X_PDEV_PARAM_LTR_RX_OVERRIDE, 2810 /* Tx activity timeout for LTR, in us */ 2811 WMI_10X_PDEV_PARAM_LTR_TX_ACTIVITY_TIMEOUT, 2812 /* L1SS state machine enable */ 2813 WMI_10X_PDEV_PARAM_L1SS_ENABLE, 2814 /* Deep sleep state machine enable */ 2815 WMI_10X_PDEV_PARAM_DSLEEP_ENABLE, 2816 /* pdev level stats update period in ms */ 2817 WMI_10X_PDEV_PARAM_PDEV_STATS_UPDATE_PERIOD, 2818 /* vdev level stats update period in ms */ 2819 WMI_10X_PDEV_PARAM_VDEV_STATS_UPDATE_PERIOD, 2820 /* peer level stats update period in ms */ 2821 WMI_10X_PDEV_PARAM_PEER_STATS_UPDATE_PERIOD, 2822 /* beacon filter status update period */ 2823 WMI_10X_PDEV_PARAM_BCNFLT_STATS_UPDATE_PERIOD, 2824 /* QOS Mgmt frame protection MFP/PMF 0: disable, 1: enable */ 2825 WMI_10X_PDEV_PARAM_PMF_QOS, 2826 /* Access category on which ARP and DHCP frames are sent */ 2827 WMI_10X_PDEV_PARAM_ARPDHCP_AC_OVERRIDE, 2828 /* DCS configuration */ 2829 WMI_10X_PDEV_PARAM_DCS, 2830 /* Enable/Disable ANI on target */ 2831 WMI_10X_PDEV_PARAM_ANI_ENABLE, 2832 /* configure the ANI polling period */ 2833 WMI_10X_PDEV_PARAM_ANI_POLL_PERIOD, 2834 /* configure the ANI listening period */ 2835 WMI_10X_PDEV_PARAM_ANI_LISTEN_PERIOD, 2836 /* configure OFDM immunity level */ 2837 WMI_10X_PDEV_PARAM_ANI_OFDM_LEVEL, 2838 /* configure CCK immunity level */ 2839 WMI_10X_PDEV_PARAM_ANI_CCK_LEVEL, 2840 /* Enable/Disable CDD for 1x1 STAs in rate control module */ 2841 WMI_10X_PDEV_PARAM_DYNTXCHAIN, 2842 /* Enable/Disable Fast channel reset*/ 2843 WMI_10X_PDEV_PARAM_FAST_CHANNEL_RESET, 2844 /* Set Bursting DUR */ 2845 WMI_10X_PDEV_PARAM_BURST_DUR, 2846 /* Set Bursting Enable*/ 2847 WMI_10X_PDEV_PARAM_BURST_ENABLE, 2848 2849 /* following are available as of firmware 10.2 */ 2850 WMI_10X_PDEV_PARAM_SMART_ANTENNA_DEFAULT_ANTENNA, 2851 WMI_10X_PDEV_PARAM_IGMPMLD_OVERRIDE, 2852 WMI_10X_PDEV_PARAM_IGMPMLD_TID, 2853 WMI_10X_PDEV_PARAM_ANTENNA_GAIN, 2854 WMI_10X_PDEV_PARAM_RX_DECAP_MODE, 2855 WMI_10X_PDEV_PARAM_RX_FILTER, 2856 WMI_10X_PDEV_PARAM_SET_MCAST_TO_UCAST_TID, 2857 WMI_10X_PDEV_PARAM_PROXY_STA_MODE, 2858 WMI_10X_PDEV_PARAM_SET_MCAST2UCAST_MODE, 2859 WMI_10X_PDEV_PARAM_SET_MCAST2UCAST_BUFFER, 2860 WMI_10X_PDEV_PARAM_REMOVE_MCAST2UCAST_BUFFER, 2861 }; 2862 2863 struct wmi_pdev_set_param_cmd { 2864 __le32 param_id; 2865 __le32 param_value; 2866 } __packed; 2867 2868 struct wmi_pdev_get_tpc_config_cmd { 2869 /* parameter */ 2870 __le32 param; 2871 } __packed; 2872 2873 #define WMI_TPC_RATE_MAX 160 2874 #define WMI_TPC_TX_N_CHAIN 4 2875 2876 enum wmi_tpc_config_event_flag { 2877 WMI_TPC_CONFIG_EVENT_FLAG_TABLE_CDD = 0x1, 2878 WMI_TPC_CONFIG_EVENT_FLAG_TABLE_STBC = 0x2, 2879 WMI_TPC_CONFIG_EVENT_FLAG_TABLE_TXBF = 0x4, 2880 }; 2881 2882 struct wmi_pdev_tpc_config_event { 2883 __le32 reg_domain; 2884 __le32 chan_freq; 2885 __le32 phy_mode; 2886 __le32 twice_antenna_reduction; 2887 __le32 twice_max_rd_power; 2888 s32 twice_antenna_gain; 2889 __le32 power_limit; 2890 __le32 rate_max; 2891 __le32 num_tx_chain; 2892 __le32 ctl; 2893 __le32 flags; 2894 s8 max_reg_allow_pow[WMI_TPC_TX_N_CHAIN]; 2895 s8 max_reg_allow_pow_agcdd[WMI_TPC_TX_N_CHAIN][WMI_TPC_TX_N_CHAIN]; 2896 s8 max_reg_allow_pow_agstbc[WMI_TPC_TX_N_CHAIN][WMI_TPC_TX_N_CHAIN]; 2897 s8 max_reg_allow_pow_agtxbf[WMI_TPC_TX_N_CHAIN][WMI_TPC_TX_N_CHAIN]; 2898 u8 rates_array[WMI_TPC_RATE_MAX]; 2899 } __packed; 2900 2901 /* Transmit power scale factor. */ 2902 enum wmi_tp_scale { 2903 WMI_TP_SCALE_MAX = 0, /* no scaling (default) */ 2904 WMI_TP_SCALE_50 = 1, /* 50% of max (-3 dBm) */ 2905 WMI_TP_SCALE_25 = 2, /* 25% of max (-6 dBm) */ 2906 WMI_TP_SCALE_12 = 3, /* 12% of max (-9 dBm) */ 2907 WMI_TP_SCALE_MIN = 4, /* min, but still on */ 2908 WMI_TP_SCALE_SIZE = 5, /* max num of enum */ 2909 }; 2910 2911 struct wmi_set_channel_cmd { 2912 /* channel (only frequency and mode info are used) */ 2913 struct wmi_channel chan; 2914 } __packed; 2915 2916 struct wmi_pdev_chanlist_update_event { 2917 /* number of channels */ 2918 __le32 num_chan; 2919 /* array of channels */ 2920 struct wmi_channel channel_list[1]; 2921 } __packed; 2922 2923 #define WMI_MAX_DEBUG_MESG (sizeof(u32) * 32) 2924 2925 struct wmi_debug_mesg_event { 2926 /* message buffer, NULL terminated */ 2927 char bufp[WMI_MAX_DEBUG_MESG]; 2928 } __packed; 2929 2930 enum { 2931 /* P2P device */ 2932 VDEV_SUBTYPE_P2PDEV = 0, 2933 /* P2P client */ 2934 VDEV_SUBTYPE_P2PCLI, 2935 /* P2P GO */ 2936 VDEV_SUBTYPE_P2PGO, 2937 /* BT3.0 HS */ 2938 VDEV_SUBTYPE_BT, 2939 }; 2940 2941 struct wmi_pdev_set_channel_cmd { 2942 /* idnore power , only use flags , mode and freq */ 2943 struct wmi_channel chan; 2944 } __packed; 2945 2946 /* Customize the DSCP (bit) to TID (0-7) mapping for QOS */ 2947 #define WMI_DSCP_MAP_MAX (64) 2948 struct wmi_pdev_set_dscp_tid_map_cmd { 2949 /* map indicating DSCP to TID conversion */ 2950 __le32 dscp_to_tid_map[WMI_DSCP_MAP_MAX]; 2951 } __packed; 2952 2953 enum mcast_bcast_rate_id { 2954 WMI_SET_MCAST_RATE, 2955 WMI_SET_BCAST_RATE 2956 }; 2957 2958 struct mcast_bcast_rate { 2959 enum mcast_bcast_rate_id rate_id; 2960 __le32 rate; 2961 } __packed; 2962 2963 struct wmi_wmm_params { 2964 __le32 cwmin; 2965 __le32 cwmax; 2966 __le32 aifs; 2967 __le32 txop; 2968 __le32 acm; 2969 __le32 no_ack; 2970 } __packed; 2971 2972 struct wmi_pdev_set_wmm_params { 2973 struct wmi_wmm_params ac_be; 2974 struct wmi_wmm_params ac_bk; 2975 struct wmi_wmm_params ac_vi; 2976 struct wmi_wmm_params ac_vo; 2977 } __packed; 2978 2979 struct wmi_wmm_params_arg { 2980 u32 cwmin; 2981 u32 cwmax; 2982 u32 aifs; 2983 u32 txop; 2984 u32 acm; 2985 u32 no_ack; 2986 }; 2987 2988 struct wmi_pdev_set_wmm_params_arg { 2989 struct wmi_wmm_params_arg ac_be; 2990 struct wmi_wmm_params_arg ac_bk; 2991 struct wmi_wmm_params_arg ac_vi; 2992 struct wmi_wmm_params_arg ac_vo; 2993 }; 2994 2995 struct wal_dbg_tx_stats { 2996 /* Num HTT cookies queued to dispatch list */ 2997 __le32 comp_queued; 2998 2999 /* Num HTT cookies dispatched */ 3000 __le32 comp_delivered; 3001 3002 /* Num MSDU queued to WAL */ 3003 __le32 msdu_enqued; 3004 3005 /* Num MPDU queue to WAL */ 3006 __le32 mpdu_enqued; 3007 3008 /* Num MSDUs dropped by WMM limit */ 3009 __le32 wmm_drop; 3010 3011 /* Num Local frames queued */ 3012 __le32 local_enqued; 3013 3014 /* Num Local frames done */ 3015 __le32 local_freed; 3016 3017 /* Num queued to HW */ 3018 __le32 hw_queued; 3019 3020 /* Num PPDU reaped from HW */ 3021 __le32 hw_reaped; 3022 3023 /* Num underruns */ 3024 __le32 underrun; 3025 3026 /* Num PPDUs cleaned up in TX abort */ 3027 __le32 tx_abort; 3028 3029 /* Num MPDUs requed by SW */ 3030 __le32 mpdus_requed; 3031 3032 /* excessive retries */ 3033 __le32 tx_ko; 3034 3035 /* data hw rate code */ 3036 __le32 data_rc; 3037 3038 /* Scheduler self triggers */ 3039 __le32 self_triggers; 3040 3041 /* frames dropped due to excessive sw retries */ 3042 __le32 sw_retry_failure; 3043 3044 /* illegal rate phy errors */ 3045 __le32 illgl_rate_phy_err; 3046 3047 /* wal pdev continous xretry */ 3048 __le32 pdev_cont_xretry; 3049 3050 /* wal pdev continous xretry */ 3051 __le32 pdev_tx_timeout; 3052 3053 /* wal pdev resets */ 3054 __le32 pdev_resets; 3055 3056 /* frames dropped due to non-availability of stateless TIDs */ 3057 __le32 stateless_tid_alloc_failure; 3058 3059 __le32 phy_underrun; 3060 3061 /* MPDU is more than txop limit */ 3062 __le32 txop_ovf; 3063 } __packed; 3064 3065 struct wal_dbg_rx_stats { 3066 /* Cnts any change in ring routing mid-ppdu */ 3067 __le32 mid_ppdu_route_change; 3068 3069 /* Total number of statuses processed */ 3070 __le32 status_rcvd; 3071 3072 /* Extra frags on rings 0-3 */ 3073 __le32 r0_frags; 3074 __le32 r1_frags; 3075 __le32 r2_frags; 3076 __le32 r3_frags; 3077 3078 /* MSDUs / MPDUs delivered to HTT */ 3079 __le32 htt_msdus; 3080 __le32 htt_mpdus; 3081 3082 /* MSDUs / MPDUs delivered to local stack */ 3083 __le32 loc_msdus; 3084 __le32 loc_mpdus; 3085 3086 /* AMSDUs that have more MSDUs than the status ring size */ 3087 __le32 oversize_amsdu; 3088 3089 /* Number of PHY errors */ 3090 __le32 phy_errs; 3091 3092 /* Number of PHY errors drops */ 3093 __le32 phy_err_drop; 3094 3095 /* Number of mpdu errors - FCS, MIC, ENC etc. */ 3096 __le32 mpdu_errs; 3097 } __packed; 3098 3099 struct wal_dbg_peer_stats { 3100 /* REMOVE THIS ONCE REAL PEER STAT COUNTERS ARE ADDED */ 3101 __le32 dummy; 3102 } __packed; 3103 3104 struct wal_dbg_stats { 3105 struct wal_dbg_tx_stats tx; 3106 struct wal_dbg_rx_stats rx; 3107 struct wal_dbg_peer_stats peer; 3108 } __packed; 3109 3110 enum wmi_stats_id { 3111 WMI_REQUEST_PEER_STAT = 0x01, 3112 WMI_REQUEST_AP_STAT = 0x02 3113 }; 3114 3115 struct wlan_inst_rssi_args { 3116 __le16 cfg_retry_count; 3117 __le16 retry_count; 3118 }; 3119 3120 struct wmi_request_stats_cmd { 3121 __le32 stats_id; 3122 3123 __le32 vdev_id; 3124 3125 /* peer MAC address */ 3126 struct wmi_mac_addr peer_macaddr; 3127 3128 /* Instantaneous RSSI arguments */ 3129 struct wlan_inst_rssi_args inst_rssi_args; 3130 } __packed; 3131 3132 /* Suspend option */ 3133 enum { 3134 /* suspend */ 3135 WMI_PDEV_SUSPEND, 3136 3137 /* suspend and disable all interrupts */ 3138 WMI_PDEV_SUSPEND_AND_DISABLE_INTR, 3139 }; 3140 3141 struct wmi_pdev_suspend_cmd { 3142 /* suspend option sent to target */ 3143 __le32 suspend_opt; 3144 } __packed; 3145 3146 struct wmi_stats_event { 3147 __le32 stats_id; /* %WMI_REQUEST_ */ 3148 /* 3149 * number of pdev stats event structures 3150 * (wmi_pdev_stats) 0 or 1 3151 */ 3152 __le32 num_pdev_stats; 3153 /* 3154 * number of vdev stats event structures 3155 * (wmi_vdev_stats) 0 or max vdevs 3156 */ 3157 __le32 num_vdev_stats; 3158 /* 3159 * number of peer stats event structures 3160 * (wmi_peer_stats) 0 or max peers 3161 */ 3162 __le32 num_peer_stats; 3163 __le32 num_bcnflt_stats; 3164 /* 3165 * followed by 3166 * num_pdev_stats * size of(struct wmi_pdev_stats) 3167 * num_vdev_stats * size of(struct wmi_vdev_stats) 3168 * num_peer_stats * size of(struct wmi_peer_stats) 3169 * 3170 * By having a zero sized array, the pointer to data area 3171 * becomes available without increasing the struct size 3172 */ 3173 u8 data[0]; 3174 } __packed; 3175 3176 /* 3177 * PDEV statistics 3178 * TODO: add all PDEV stats here 3179 */ 3180 struct wmi_pdev_stats_old { 3181 __le32 chan_nf; /* Channel noise floor */ 3182 __le32 tx_frame_count; /* TX frame count */ 3183 __le32 rx_frame_count; /* RX frame count */ 3184 __le32 rx_clear_count; /* rx clear count */ 3185 __le32 cycle_count; /* cycle count */ 3186 __le32 phy_err_count; /* Phy error count */ 3187 __le32 chan_tx_pwr; /* channel tx power */ 3188 struct wal_dbg_stats wal; /* WAL dbg stats */ 3189 } __packed; 3190 3191 struct wmi_pdev_stats_10x { 3192 __le32 chan_nf; /* Channel noise floor */ 3193 __le32 tx_frame_count; /* TX frame count */ 3194 __le32 rx_frame_count; /* RX frame count */ 3195 __le32 rx_clear_count; /* rx clear count */ 3196 __le32 cycle_count; /* cycle count */ 3197 __le32 phy_err_count; /* Phy error count */ 3198 __le32 chan_tx_pwr; /* channel tx power */ 3199 struct wal_dbg_stats wal; /* WAL dbg stats */ 3200 __le32 ack_rx_bad; 3201 __le32 rts_bad; 3202 __le32 rts_good; 3203 __le32 fcs_bad; 3204 __le32 no_beacons; 3205 __le32 mib_int_count; 3206 } __packed; 3207 3208 /* 3209 * VDEV statistics 3210 * TODO: add all VDEV stats here 3211 */ 3212 struct wmi_vdev_stats { 3213 __le32 vdev_id; 3214 } __packed; 3215 3216 /* 3217 * peer statistics. 3218 * TODO: add more stats 3219 */ 3220 struct wmi_peer_stats_old { 3221 struct wmi_mac_addr peer_macaddr; 3222 __le32 peer_rssi; 3223 __le32 peer_tx_rate; 3224 } __packed; 3225 3226 struct wmi_peer_stats_10x { 3227 struct wmi_mac_addr peer_macaddr; 3228 __le32 peer_rssi; 3229 __le32 peer_tx_rate; 3230 __le32 peer_rx_rate; 3231 } __packed; 3232 3233 struct wmi_vdev_create_cmd { 3234 __le32 vdev_id; 3235 __le32 vdev_type; 3236 __le32 vdev_subtype; 3237 struct wmi_mac_addr vdev_macaddr; 3238 } __packed; 3239 3240 enum wmi_vdev_type { 3241 WMI_VDEV_TYPE_AP = 1, 3242 WMI_VDEV_TYPE_STA = 2, 3243 WMI_VDEV_TYPE_IBSS = 3, 3244 WMI_VDEV_TYPE_MONITOR = 4, 3245 }; 3246 3247 enum wmi_vdev_subtype { 3248 WMI_VDEV_SUBTYPE_NONE = 0, 3249 WMI_VDEV_SUBTYPE_P2P_DEVICE = 1, 3250 WMI_VDEV_SUBTYPE_P2P_CLIENT = 2, 3251 WMI_VDEV_SUBTYPE_P2P_GO = 3, 3252 }; 3253 3254 /* values for vdev_subtype */ 3255 3256 /* values for vdev_start_request flags */ 3257 /* 3258 * Indicates that AP VDEV uses hidden ssid. only valid for 3259 * AP/GO */ 3260 #define WMI_VDEV_START_HIDDEN_SSID (1<<0) 3261 /* 3262 * Indicates if robust management frame/management frame 3263 * protection is enabled. For GO/AP vdevs, it indicates that 3264 * it may support station/client associations with RMF enabled. 3265 * For STA/client vdevs, it indicates that sta will 3266 * associate with AP with RMF enabled. */ 3267 #define WMI_VDEV_START_PMF_ENABLED (1<<1) 3268 3269 struct wmi_p2p_noa_descriptor { 3270 __le32 type_count; /* 255: continuous schedule, 0: reserved */ 3271 __le32 duration; /* Absent period duration in micro seconds */ 3272 __le32 interval; /* Absent period interval in micro seconds */ 3273 __le32 start_time; /* 32 bit tsf time when in starts */ 3274 } __packed; 3275 3276 struct wmi_vdev_start_request_cmd { 3277 /* WMI channel */ 3278 struct wmi_channel chan; 3279 /* unique id identifying the VDEV, generated by the caller */ 3280 __le32 vdev_id; 3281 /* requestor id identifying the caller module */ 3282 __le32 requestor_id; 3283 /* beacon interval from received beacon */ 3284 __le32 beacon_interval; 3285 /* DTIM Period from the received beacon */ 3286 __le32 dtim_period; 3287 /* Flags */ 3288 __le32 flags; 3289 /* ssid field. Only valid for AP/GO/IBSS/BTAmp VDEV type. */ 3290 struct wmi_ssid ssid; 3291 /* beacon/probe reponse xmit rate. Applicable for SoftAP. */ 3292 __le32 bcn_tx_rate; 3293 /* beacon/probe reponse xmit power. Applicable for SoftAP. */ 3294 __le32 bcn_tx_power; 3295 /* number of p2p NOA descriptor(s) from scan entry */ 3296 __le32 num_noa_descriptors; 3297 /* 3298 * Disable H/W ack. This used by WMI_VDEV_RESTART_REQUEST_CMDID. 3299 * During CAC, Our HW shouldn't ack ditected frames 3300 */ 3301 __le32 disable_hw_ack; 3302 /* actual p2p NOA descriptor from scan entry */ 3303 struct wmi_p2p_noa_descriptor noa_descriptors[2]; 3304 } __packed; 3305 3306 struct wmi_vdev_restart_request_cmd { 3307 struct wmi_vdev_start_request_cmd vdev_start_request_cmd; 3308 } __packed; 3309 3310 struct wmi_vdev_start_request_arg { 3311 u32 vdev_id; 3312 struct wmi_channel_arg channel; 3313 u32 bcn_intval; 3314 u32 dtim_period; 3315 u8 *ssid; 3316 u32 ssid_len; 3317 u32 bcn_tx_rate; 3318 u32 bcn_tx_power; 3319 bool disable_hw_ack; 3320 bool hidden_ssid; 3321 bool pmf_enabled; 3322 }; 3323 3324 struct wmi_vdev_delete_cmd { 3325 /* unique id identifying the VDEV, generated by the caller */ 3326 __le32 vdev_id; 3327 } __packed; 3328 3329 struct wmi_vdev_up_cmd { 3330 __le32 vdev_id; 3331 __le32 vdev_assoc_id; 3332 struct wmi_mac_addr vdev_bssid; 3333 } __packed; 3334 3335 struct wmi_vdev_stop_cmd { 3336 __le32 vdev_id; 3337 } __packed; 3338 3339 struct wmi_vdev_down_cmd { 3340 __le32 vdev_id; 3341 } __packed; 3342 3343 struct wmi_vdev_standby_response_cmd { 3344 /* unique id identifying the VDEV, generated by the caller */ 3345 __le32 vdev_id; 3346 } __packed; 3347 3348 struct wmi_vdev_resume_response_cmd { 3349 /* unique id identifying the VDEV, generated by the caller */ 3350 __le32 vdev_id; 3351 } __packed; 3352 3353 struct wmi_vdev_set_param_cmd { 3354 __le32 vdev_id; 3355 __le32 param_id; 3356 __le32 param_value; 3357 } __packed; 3358 3359 #define WMI_MAX_KEY_INDEX 3 3360 #define WMI_MAX_KEY_LEN 32 3361 3362 #define WMI_KEY_PAIRWISE 0x00 3363 #define WMI_KEY_GROUP 0x01 3364 #define WMI_KEY_TX_USAGE 0x02 /* default tx key - static wep */ 3365 3366 struct wmi_key_seq_counter { 3367 __le32 key_seq_counter_l; 3368 __le32 key_seq_counter_h; 3369 } __packed; 3370 3371 #define WMI_CIPHER_NONE 0x0 /* clear key */ 3372 #define WMI_CIPHER_WEP 0x1 3373 #define WMI_CIPHER_TKIP 0x2 3374 #define WMI_CIPHER_AES_OCB 0x3 3375 #define WMI_CIPHER_AES_CCM 0x4 3376 #define WMI_CIPHER_WAPI 0x5 3377 #define WMI_CIPHER_CKIP 0x6 3378 #define WMI_CIPHER_AES_CMAC 0x7 3379 3380 struct wmi_vdev_install_key_cmd { 3381 __le32 vdev_id; 3382 struct wmi_mac_addr peer_macaddr; 3383 __le32 key_idx; 3384 __le32 key_flags; 3385 __le32 key_cipher; /* %WMI_CIPHER_ */ 3386 struct wmi_key_seq_counter key_rsc_counter; 3387 struct wmi_key_seq_counter key_global_rsc_counter; 3388 struct wmi_key_seq_counter key_tsc_counter; 3389 u8 wpi_key_rsc_counter[16]; 3390 u8 wpi_key_tsc_counter[16]; 3391 __le32 key_len; 3392 __le32 key_txmic_len; 3393 __le32 key_rxmic_len; 3394 3395 /* contains key followed by tx mic followed by rx mic */ 3396 u8 key_data[0]; 3397 } __packed; 3398 3399 struct wmi_vdev_install_key_arg { 3400 u32 vdev_id; 3401 const u8 *macaddr; 3402 u32 key_idx; 3403 u32 key_flags; 3404 u32 key_cipher; 3405 u32 key_len; 3406 u32 key_txmic_len; 3407 u32 key_rxmic_len; 3408 const void *key_data; 3409 }; 3410 3411 /* 3412 * vdev fixed rate format: 3413 * - preamble - b7:b6 - see WMI_RATE_PREMABLE_ 3414 * - nss - b5:b4 - ss number (0 mean 1ss) 3415 * - rate_mcs - b3:b0 - as below 3416 * CCK: 0 - 11Mbps, 1 - 5,5Mbps, 2 - 2Mbps, 3 - 1Mbps, 3417 * 4 - 11Mbps (s), 5 - 5,5Mbps (s), 6 - 2Mbps (s) 3418 * OFDM: 0 - 48Mbps, 1 - 24Mbps, 2 - 12Mbps, 3 - 6Mbps, 3419 * 4 - 54Mbps, 5 - 36Mbps, 6 - 18Mbps, 7 - 9Mbps 3420 * HT/VHT: MCS index 3421 */ 3422 3423 /* Preamble types to be used with VDEV fixed rate configuration */ 3424 enum wmi_rate_preamble { 3425 WMI_RATE_PREAMBLE_OFDM, 3426 WMI_RATE_PREAMBLE_CCK, 3427 WMI_RATE_PREAMBLE_HT, 3428 WMI_RATE_PREAMBLE_VHT, 3429 }; 3430 3431 /* Value to disable fixed rate setting */ 3432 #define WMI_FIXED_RATE_NONE (0xff) 3433 3434 struct wmi_vdev_param_map { 3435 u32 rts_threshold; 3436 u32 fragmentation_threshold; 3437 u32 beacon_interval; 3438 u32 listen_interval; 3439 u32 multicast_rate; 3440 u32 mgmt_tx_rate; 3441 u32 slot_time; 3442 u32 preamble; 3443 u32 swba_time; 3444 u32 wmi_vdev_stats_update_period; 3445 u32 wmi_vdev_pwrsave_ageout_time; 3446 u32 wmi_vdev_host_swba_interval; 3447 u32 dtim_period; 3448 u32 wmi_vdev_oc_scheduler_air_time_limit; 3449 u32 wds; 3450 u32 atim_window; 3451 u32 bmiss_count_max; 3452 u32 bmiss_first_bcnt; 3453 u32 bmiss_final_bcnt; 3454 u32 feature_wmm; 3455 u32 chwidth; 3456 u32 chextoffset; 3457 u32 disable_htprotection; 3458 u32 sta_quickkickout; 3459 u32 mgmt_rate; 3460 u32 protection_mode; 3461 u32 fixed_rate; 3462 u32 sgi; 3463 u32 ldpc; 3464 u32 tx_stbc; 3465 u32 rx_stbc; 3466 u32 intra_bss_fwd; 3467 u32 def_keyid; 3468 u32 nss; 3469 u32 bcast_data_rate; 3470 u32 mcast_data_rate; 3471 u32 mcast_indicate; 3472 u32 dhcp_indicate; 3473 u32 unknown_dest_indicate; 3474 u32 ap_keepalive_min_idle_inactive_time_secs; 3475 u32 ap_keepalive_max_idle_inactive_time_secs; 3476 u32 ap_keepalive_max_unresponsive_time_secs; 3477 u32 ap_enable_nawds; 3478 u32 mcast2ucast_set; 3479 u32 enable_rtscts; 3480 u32 txbf; 3481 u32 packet_powersave; 3482 u32 drop_unencry; 3483 u32 tx_encap_type; 3484 u32 ap_detect_out_of_sync_sleeping_sta_time_secs; 3485 }; 3486 3487 #define WMI_VDEV_PARAM_UNSUPPORTED 0 3488 3489 /* the definition of different VDEV parameters */ 3490 enum wmi_vdev_param { 3491 /* RTS Threshold */ 3492 WMI_VDEV_PARAM_RTS_THRESHOLD = 0x1, 3493 /* Fragmentation threshold */ 3494 WMI_VDEV_PARAM_FRAGMENTATION_THRESHOLD, 3495 /* beacon interval in TUs */ 3496 WMI_VDEV_PARAM_BEACON_INTERVAL, 3497 /* Listen interval in TUs */ 3498 WMI_VDEV_PARAM_LISTEN_INTERVAL, 3499 /* muticast rate in Mbps */ 3500 WMI_VDEV_PARAM_MULTICAST_RATE, 3501 /* management frame rate in Mbps */ 3502 WMI_VDEV_PARAM_MGMT_TX_RATE, 3503 /* slot time (long vs short) */ 3504 WMI_VDEV_PARAM_SLOT_TIME, 3505 /* preamble (long vs short) */ 3506 WMI_VDEV_PARAM_PREAMBLE, 3507 /* SWBA time (time before tbtt in msec) */ 3508 WMI_VDEV_PARAM_SWBA_TIME, 3509 /* time period for updating VDEV stats */ 3510 WMI_VDEV_STATS_UPDATE_PERIOD, 3511 /* age out time in msec for frames queued for station in power save */ 3512 WMI_VDEV_PWRSAVE_AGEOUT_TIME, 3513 /* 3514 * Host SWBA interval (time in msec before tbtt for SWBA event 3515 * generation). 3516 */ 3517 WMI_VDEV_HOST_SWBA_INTERVAL, 3518 /* DTIM period (specified in units of num beacon intervals) */ 3519 WMI_VDEV_PARAM_DTIM_PERIOD, 3520 /* 3521 * scheduler air time limit for this VDEV. used by off chan 3522 * scheduler. 3523 */ 3524 WMI_VDEV_OC_SCHEDULER_AIR_TIME_LIMIT, 3525 /* enable/dsiable WDS for this VDEV */ 3526 WMI_VDEV_PARAM_WDS, 3527 /* ATIM Window */ 3528 WMI_VDEV_PARAM_ATIM_WINDOW, 3529 /* BMISS max */ 3530 WMI_VDEV_PARAM_BMISS_COUNT_MAX, 3531 /* BMISS first time */ 3532 WMI_VDEV_PARAM_BMISS_FIRST_BCNT, 3533 /* BMISS final time */ 3534 WMI_VDEV_PARAM_BMISS_FINAL_BCNT, 3535 /* WMM enables/disabled */ 3536 WMI_VDEV_PARAM_FEATURE_WMM, 3537 /* Channel width */ 3538 WMI_VDEV_PARAM_CHWIDTH, 3539 /* Channel Offset */ 3540 WMI_VDEV_PARAM_CHEXTOFFSET, 3541 /* Disable HT Protection */ 3542 WMI_VDEV_PARAM_DISABLE_HTPROTECTION, 3543 /* Quick STA Kickout */ 3544 WMI_VDEV_PARAM_STA_QUICKKICKOUT, 3545 /* Rate to be used with Management frames */ 3546 WMI_VDEV_PARAM_MGMT_RATE, 3547 /* Protection Mode */ 3548 WMI_VDEV_PARAM_PROTECTION_MODE, 3549 /* Fixed rate setting */ 3550 WMI_VDEV_PARAM_FIXED_RATE, 3551 /* Short GI Enable/Disable */ 3552 WMI_VDEV_PARAM_SGI, 3553 /* Enable LDPC */ 3554 WMI_VDEV_PARAM_LDPC, 3555 /* Enable Tx STBC */ 3556 WMI_VDEV_PARAM_TX_STBC, 3557 /* Enable Rx STBC */ 3558 WMI_VDEV_PARAM_RX_STBC, 3559 /* Intra BSS forwarding */ 3560 WMI_VDEV_PARAM_INTRA_BSS_FWD, 3561 /* Setting Default xmit key for Vdev */ 3562 WMI_VDEV_PARAM_DEF_KEYID, 3563 /* NSS width */ 3564 WMI_VDEV_PARAM_NSS, 3565 /* Set the custom rate for the broadcast data frames */ 3566 WMI_VDEV_PARAM_BCAST_DATA_RATE, 3567 /* Set the custom rate (rate-code) for multicast data frames */ 3568 WMI_VDEV_PARAM_MCAST_DATA_RATE, 3569 /* Tx multicast packet indicate Enable/Disable */ 3570 WMI_VDEV_PARAM_MCAST_INDICATE, 3571 /* Tx DHCP packet indicate Enable/Disable */ 3572 WMI_VDEV_PARAM_DHCP_INDICATE, 3573 /* Enable host inspection of Tx unicast packet to unknown destination */ 3574 WMI_VDEV_PARAM_UNKNOWN_DEST_INDICATE, 3575 3576 /* The minimum amount of time AP begins to consider STA inactive */ 3577 WMI_VDEV_PARAM_AP_KEEPALIVE_MIN_IDLE_INACTIVE_TIME_SECS, 3578 3579 /* 3580 * An associated STA is considered inactive when there is no recent 3581 * TX/RX activity and no downlink frames are buffered for it. Once a 3582 * STA exceeds the maximum idle inactive time, the AP will send an 3583 * 802.11 data-null as a keep alive to verify the STA is still 3584 * associated. If the STA does ACK the data-null, or if the data-null 3585 * is buffered and the STA does not retrieve it, the STA will be 3586 * considered unresponsive 3587 * (see WMI_VDEV_AP_KEEPALIVE_MAX_UNRESPONSIVE_TIME_SECS). 3588 */ 3589 WMI_VDEV_PARAM_AP_KEEPALIVE_MAX_IDLE_INACTIVE_TIME_SECS, 3590 3591 /* 3592 * An associated STA is considered unresponsive if there is no recent 3593 * TX/RX activity and downlink frames are buffered for it. Once a STA 3594 * exceeds the maximum unresponsive time, the AP will send a 3595 * WMI_STA_KICKOUT event to the host so the STA can be deleted. */ 3596 WMI_VDEV_PARAM_AP_KEEPALIVE_MAX_UNRESPONSIVE_TIME_SECS, 3597 3598 /* Enable NAWDS : MCAST INSPECT Enable, NAWDS Flag set */ 3599 WMI_VDEV_PARAM_AP_ENABLE_NAWDS, 3600 /* Enable/Disable RTS-CTS */ 3601 WMI_VDEV_PARAM_ENABLE_RTSCTS, 3602 /* Enable TXBFee/er */ 3603 WMI_VDEV_PARAM_TXBF, 3604 3605 /* Set packet power save */ 3606 WMI_VDEV_PARAM_PACKET_POWERSAVE, 3607 3608 /* 3609 * Drops un-encrypted packets if eceived in an encrypted connection 3610 * otherwise forwards to host. 3611 */ 3612 WMI_VDEV_PARAM_DROP_UNENCRY, 3613 3614 /* 3615 * Set the encapsulation type for frames. 3616 */ 3617 WMI_VDEV_PARAM_TX_ENCAP_TYPE, 3618 }; 3619 3620 /* the definition of different VDEV parameters */ 3621 enum wmi_10x_vdev_param { 3622 /* RTS Threshold */ 3623 WMI_10X_VDEV_PARAM_RTS_THRESHOLD = 0x1, 3624 /* Fragmentation threshold */ 3625 WMI_10X_VDEV_PARAM_FRAGMENTATION_THRESHOLD, 3626 /* beacon interval in TUs */ 3627 WMI_10X_VDEV_PARAM_BEACON_INTERVAL, 3628 /* Listen interval in TUs */ 3629 WMI_10X_VDEV_PARAM_LISTEN_INTERVAL, 3630 /* muticast rate in Mbps */ 3631 WMI_10X_VDEV_PARAM_MULTICAST_RATE, 3632 /* management frame rate in Mbps */ 3633 WMI_10X_VDEV_PARAM_MGMT_TX_RATE, 3634 /* slot time (long vs short) */ 3635 WMI_10X_VDEV_PARAM_SLOT_TIME, 3636 /* preamble (long vs short) */ 3637 WMI_10X_VDEV_PARAM_PREAMBLE, 3638 /* SWBA time (time before tbtt in msec) */ 3639 WMI_10X_VDEV_PARAM_SWBA_TIME, 3640 /* time period for updating VDEV stats */ 3641 WMI_10X_VDEV_STATS_UPDATE_PERIOD, 3642 /* age out time in msec for frames queued for station in power save */ 3643 WMI_10X_VDEV_PWRSAVE_AGEOUT_TIME, 3644 /* 3645 * Host SWBA interval (time in msec before tbtt for SWBA event 3646 * generation). 3647 */ 3648 WMI_10X_VDEV_HOST_SWBA_INTERVAL, 3649 /* DTIM period (specified in units of num beacon intervals) */ 3650 WMI_10X_VDEV_PARAM_DTIM_PERIOD, 3651 /* 3652 * scheduler air time limit for this VDEV. used by off chan 3653 * scheduler. 3654 */ 3655 WMI_10X_VDEV_OC_SCHEDULER_AIR_TIME_LIMIT, 3656 /* enable/dsiable WDS for this VDEV */ 3657 WMI_10X_VDEV_PARAM_WDS, 3658 /* ATIM Window */ 3659 WMI_10X_VDEV_PARAM_ATIM_WINDOW, 3660 /* BMISS max */ 3661 WMI_10X_VDEV_PARAM_BMISS_COUNT_MAX, 3662 /* WMM enables/disabled */ 3663 WMI_10X_VDEV_PARAM_FEATURE_WMM, 3664 /* Channel width */ 3665 WMI_10X_VDEV_PARAM_CHWIDTH, 3666 /* Channel Offset */ 3667 WMI_10X_VDEV_PARAM_CHEXTOFFSET, 3668 /* Disable HT Protection */ 3669 WMI_10X_VDEV_PARAM_DISABLE_HTPROTECTION, 3670 /* Quick STA Kickout */ 3671 WMI_10X_VDEV_PARAM_STA_QUICKKICKOUT, 3672 /* Rate to be used with Management frames */ 3673 WMI_10X_VDEV_PARAM_MGMT_RATE, 3674 /* Protection Mode */ 3675 WMI_10X_VDEV_PARAM_PROTECTION_MODE, 3676 /* Fixed rate setting */ 3677 WMI_10X_VDEV_PARAM_FIXED_RATE, 3678 /* Short GI Enable/Disable */ 3679 WMI_10X_VDEV_PARAM_SGI, 3680 /* Enable LDPC */ 3681 WMI_10X_VDEV_PARAM_LDPC, 3682 /* Enable Tx STBC */ 3683 WMI_10X_VDEV_PARAM_TX_STBC, 3684 /* Enable Rx STBC */ 3685 WMI_10X_VDEV_PARAM_RX_STBC, 3686 /* Intra BSS forwarding */ 3687 WMI_10X_VDEV_PARAM_INTRA_BSS_FWD, 3688 /* Setting Default xmit key for Vdev */ 3689 WMI_10X_VDEV_PARAM_DEF_KEYID, 3690 /* NSS width */ 3691 WMI_10X_VDEV_PARAM_NSS, 3692 /* Set the custom rate for the broadcast data frames */ 3693 WMI_10X_VDEV_PARAM_BCAST_DATA_RATE, 3694 /* Set the custom rate (rate-code) for multicast data frames */ 3695 WMI_10X_VDEV_PARAM_MCAST_DATA_RATE, 3696 /* Tx multicast packet indicate Enable/Disable */ 3697 WMI_10X_VDEV_PARAM_MCAST_INDICATE, 3698 /* Tx DHCP packet indicate Enable/Disable */ 3699 WMI_10X_VDEV_PARAM_DHCP_INDICATE, 3700 /* Enable host inspection of Tx unicast packet to unknown destination */ 3701 WMI_10X_VDEV_PARAM_UNKNOWN_DEST_INDICATE, 3702 3703 /* The minimum amount of time AP begins to consider STA inactive */ 3704 WMI_10X_VDEV_PARAM_AP_KEEPALIVE_MIN_IDLE_INACTIVE_TIME_SECS, 3705 3706 /* 3707 * An associated STA is considered inactive when there is no recent 3708 * TX/RX activity and no downlink frames are buffered for it. Once a 3709 * STA exceeds the maximum idle inactive time, the AP will send an 3710 * 802.11 data-null as a keep alive to verify the STA is still 3711 * associated. If the STA does ACK the data-null, or if the data-null 3712 * is buffered and the STA does not retrieve it, the STA will be 3713 * considered unresponsive 3714 * (see WMI_10X_VDEV_AP_KEEPALIVE_MAX_UNRESPONSIVE_TIME_SECS). 3715 */ 3716 WMI_10X_VDEV_PARAM_AP_KEEPALIVE_MAX_IDLE_INACTIVE_TIME_SECS, 3717 3718 /* 3719 * An associated STA is considered unresponsive if there is no recent 3720 * TX/RX activity and downlink frames are buffered for it. Once a STA 3721 * exceeds the maximum unresponsive time, the AP will send a 3722 * WMI_10X_STA_KICKOUT event to the host so the STA can be deleted. */ 3723 WMI_10X_VDEV_PARAM_AP_KEEPALIVE_MAX_UNRESPONSIVE_TIME_SECS, 3724 3725 /* Enable NAWDS : MCAST INSPECT Enable, NAWDS Flag set */ 3726 WMI_10X_VDEV_PARAM_AP_ENABLE_NAWDS, 3727 3728 WMI_10X_VDEV_PARAM_MCAST2UCAST_SET, 3729 /* Enable/Disable RTS-CTS */ 3730 WMI_10X_VDEV_PARAM_ENABLE_RTSCTS, 3731 3732 WMI_10X_VDEV_PARAM_AP_DETECT_OUT_OF_SYNC_SLEEPING_STA_TIME_SECS, 3733 3734 /* following are available as of firmware 10.2 */ 3735 WMI_10X_VDEV_PARAM_TX_ENCAP_TYPE, 3736 WMI_10X_VDEV_PARAM_CABQ_MAXDUR, 3737 WMI_10X_VDEV_PARAM_MFPTEST_SET, 3738 WMI_10X_VDEV_PARAM_RTS_FIXED_RATE, 3739 WMI_10X_VDEV_PARAM_VHT_SGIMASK, 3740 WMI_10X_VDEV_PARAM_VHT80_RATEMASK, 3741 }; 3742 3743 /* slot time long */ 3744 #define WMI_VDEV_SLOT_TIME_LONG 0x1 3745 /* slot time short */ 3746 #define WMI_VDEV_SLOT_TIME_SHORT 0x2 3747 /* preablbe long */ 3748 #define WMI_VDEV_PREAMBLE_LONG 0x1 3749 /* preablbe short */ 3750 #define WMI_VDEV_PREAMBLE_SHORT 0x2 3751 3752 enum wmi_start_event_param { 3753 WMI_VDEV_RESP_START_EVENT = 0, 3754 WMI_VDEV_RESP_RESTART_EVENT, 3755 }; 3756 3757 struct wmi_vdev_start_response_event { 3758 __le32 vdev_id; 3759 __le32 req_id; 3760 __le32 resp_type; /* %WMI_VDEV_RESP_ */ 3761 __le32 status; 3762 } __packed; 3763 3764 struct wmi_vdev_standby_req_event { 3765 /* unique id identifying the VDEV, generated by the caller */ 3766 __le32 vdev_id; 3767 } __packed; 3768 3769 struct wmi_vdev_resume_req_event { 3770 /* unique id identifying the VDEV, generated by the caller */ 3771 __le32 vdev_id; 3772 } __packed; 3773 3774 struct wmi_vdev_stopped_event { 3775 /* unique id identifying the VDEV, generated by the caller */ 3776 __le32 vdev_id; 3777 } __packed; 3778 3779 /* 3780 * common structure used for simple events 3781 * (stopped, resume_req, standby response) 3782 */ 3783 struct wmi_vdev_simple_event { 3784 /* unique id identifying the VDEV, generated by the caller */ 3785 __le32 vdev_id; 3786 } __packed; 3787 3788 /* VDEV start response status codes */ 3789 /* VDEV succesfully started */ 3790 #define WMI_INIFIED_VDEV_START_RESPONSE_STATUS_SUCCESS 0x0 3791 3792 /* requested VDEV not found */ 3793 #define WMI_INIFIED_VDEV_START_RESPONSE_INVALID_VDEVID 0x1 3794 3795 /* unsupported VDEV combination */ 3796 #define WMI_INIFIED_VDEV_START_RESPONSE_NOT_SUPPORTED 0x2 3797 3798 /* TODO: please add more comments if you have in-depth information */ 3799 struct wmi_vdev_spectral_conf_cmd { 3800 __le32 vdev_id; 3801 3802 /* number of fft samples to send (0 for infinite) */ 3803 __le32 scan_count; 3804 __le32 scan_period; 3805 __le32 scan_priority; 3806 3807 /* number of bins in the FFT: 2^(fft_size - bin_scale) */ 3808 __le32 scan_fft_size; 3809 __le32 scan_gc_ena; 3810 __le32 scan_restart_ena; 3811 __le32 scan_noise_floor_ref; 3812 __le32 scan_init_delay; 3813 __le32 scan_nb_tone_thr; 3814 __le32 scan_str_bin_thr; 3815 __le32 scan_wb_rpt_mode; 3816 __le32 scan_rssi_rpt_mode; 3817 __le32 scan_rssi_thr; 3818 __le32 scan_pwr_format; 3819 3820 /* rpt_mode: Format of FFT report to software for spectral scan 3821 * triggered FFTs: 3822 * 0: No FFT report (only spectral scan summary report) 3823 * 1: 2-dword summary of metrics for each completed FFT + spectral 3824 * scan summary report 3825 * 2: 2-dword summary of metrics for each completed FFT + 3826 * 1x- oversampled bins(in-band) per FFT + spectral scan summary 3827 * report 3828 * 3: 2-dword summary of metrics for each completed FFT + 3829 * 2x- oversampled bins (all) per FFT + spectral scan summary 3830 */ 3831 __le32 scan_rpt_mode; 3832 __le32 scan_bin_scale; 3833 __le32 scan_dbm_adj; 3834 __le32 scan_chn_mask; 3835 } __packed; 3836 3837 struct wmi_vdev_spectral_conf_arg { 3838 u32 vdev_id; 3839 u32 scan_count; 3840 u32 scan_period; 3841 u32 scan_priority; 3842 u32 scan_fft_size; 3843 u32 scan_gc_ena; 3844 u32 scan_restart_ena; 3845 u32 scan_noise_floor_ref; 3846 u32 scan_init_delay; 3847 u32 scan_nb_tone_thr; 3848 u32 scan_str_bin_thr; 3849 u32 scan_wb_rpt_mode; 3850 u32 scan_rssi_rpt_mode; 3851 u32 scan_rssi_thr; 3852 u32 scan_pwr_format; 3853 u32 scan_rpt_mode; 3854 u32 scan_bin_scale; 3855 u32 scan_dbm_adj; 3856 u32 scan_chn_mask; 3857 }; 3858 3859 #define WMI_SPECTRAL_ENABLE_DEFAULT 0 3860 #define WMI_SPECTRAL_COUNT_DEFAULT 0 3861 #define WMI_SPECTRAL_PERIOD_DEFAULT 35 3862 #define WMI_SPECTRAL_PRIORITY_DEFAULT 1 3863 #define WMI_SPECTRAL_FFT_SIZE_DEFAULT 7 3864 #define WMI_SPECTRAL_GC_ENA_DEFAULT 1 3865 #define WMI_SPECTRAL_RESTART_ENA_DEFAULT 0 3866 #define WMI_SPECTRAL_NOISE_FLOOR_REF_DEFAULT -96 3867 #define WMI_SPECTRAL_INIT_DELAY_DEFAULT 80 3868 #define WMI_SPECTRAL_NB_TONE_THR_DEFAULT 12 3869 #define WMI_SPECTRAL_STR_BIN_THR_DEFAULT 8 3870 #define WMI_SPECTRAL_WB_RPT_MODE_DEFAULT 0 3871 #define WMI_SPECTRAL_RSSI_RPT_MODE_DEFAULT 0 3872 #define WMI_SPECTRAL_RSSI_THR_DEFAULT 0xf0 3873 #define WMI_SPECTRAL_PWR_FORMAT_DEFAULT 0 3874 #define WMI_SPECTRAL_RPT_MODE_DEFAULT 2 3875 #define WMI_SPECTRAL_BIN_SCALE_DEFAULT 1 3876 #define WMI_SPECTRAL_DBM_ADJ_DEFAULT 1 3877 #define WMI_SPECTRAL_CHN_MASK_DEFAULT 1 3878 3879 struct wmi_vdev_spectral_enable_cmd { 3880 __le32 vdev_id; 3881 __le32 trigger_cmd; 3882 __le32 enable_cmd; 3883 } __packed; 3884 3885 #define WMI_SPECTRAL_TRIGGER_CMD_TRIGGER 1 3886 #define WMI_SPECTRAL_TRIGGER_CMD_CLEAR 2 3887 #define WMI_SPECTRAL_ENABLE_CMD_ENABLE 1 3888 #define WMI_SPECTRAL_ENABLE_CMD_DISABLE 2 3889 3890 /* Beacon processing related command and event structures */ 3891 struct wmi_bcn_tx_hdr { 3892 __le32 vdev_id; 3893 __le32 tx_rate; 3894 __le32 tx_power; 3895 __le32 bcn_len; 3896 } __packed; 3897 3898 struct wmi_bcn_tx_cmd { 3899 struct wmi_bcn_tx_hdr hdr; 3900 u8 *bcn[0]; 3901 } __packed; 3902 3903 struct wmi_bcn_tx_arg { 3904 u32 vdev_id; 3905 u32 tx_rate; 3906 u32 tx_power; 3907 u32 bcn_len; 3908 const void *bcn; 3909 }; 3910 3911 enum wmi_bcn_tx_ref_flags { 3912 WMI_BCN_TX_REF_FLAG_DTIM_ZERO = 0x1, 3913 WMI_BCN_TX_REF_FLAG_DELIVER_CAB = 0x2, 3914 }; 3915 3916 /* TODO: It is unclear why "no antenna" works while any other seemingly valid 3917 * chainmask yields no beacons on the air at all. 3918 */ 3919 #define WMI_BCN_TX_REF_DEF_ANTENNA 0 3920 3921 struct wmi_bcn_tx_ref_cmd { 3922 __le32 vdev_id; 3923 __le32 data_len; 3924 /* physical address of the frame - dma pointer */ 3925 __le32 data_ptr; 3926 /* id for host to track */ 3927 __le32 msdu_id; 3928 /* frame ctrl to setup PPDU desc */ 3929 __le32 frame_control; 3930 /* to control CABQ traffic: WMI_BCN_TX_REF_FLAG_ */ 3931 __le32 flags; 3932 /* introduced in 10.2 */ 3933 __le32 antenna_mask; 3934 } __packed; 3935 3936 /* Beacon filter */ 3937 #define WMI_BCN_FILTER_ALL 0 /* Filter all beacons */ 3938 #define WMI_BCN_FILTER_NONE 1 /* Pass all beacons */ 3939 #define WMI_BCN_FILTER_RSSI 2 /* Pass Beacons RSSI >= RSSI threshold */ 3940 #define WMI_BCN_FILTER_BSSID 3 /* Pass Beacons with matching BSSID */ 3941 #define WMI_BCN_FILTER_SSID 4 /* Pass Beacons with matching SSID */ 3942 3943 struct wmi_bcn_filter_rx_cmd { 3944 /* Filter ID */ 3945 __le32 bcn_filter_id; 3946 /* Filter type - wmi_bcn_filter */ 3947 __le32 bcn_filter; 3948 /* Buffer len */ 3949 __le32 bcn_filter_len; 3950 /* Filter info (threshold, BSSID, RSSI) */ 3951 u8 *bcn_filter_buf; 3952 } __packed; 3953 3954 /* Capabilities and IEs to be passed to firmware */ 3955 struct wmi_bcn_prb_info { 3956 /* Capabilities */ 3957 __le32 caps; 3958 /* ERP info */ 3959 __le32 erp; 3960 /* Advanced capabilities */ 3961 /* HT capabilities */ 3962 /* HT Info */ 3963 /* ibss_dfs */ 3964 /* wpa Info */ 3965 /* rsn Info */ 3966 /* rrm info */ 3967 /* ath_ext */ 3968 /* app IE */ 3969 } __packed; 3970 3971 struct wmi_bcn_tmpl_cmd { 3972 /* unique id identifying the VDEV, generated by the caller */ 3973 __le32 vdev_id; 3974 /* TIM IE offset from the beginning of the template. */ 3975 __le32 tim_ie_offset; 3976 /* beacon probe capabilities and IEs */ 3977 struct wmi_bcn_prb_info bcn_prb_info; 3978 /* beacon buffer length */ 3979 __le32 buf_len; 3980 /* variable length data */ 3981 u8 data[1]; 3982 } __packed; 3983 3984 struct wmi_prb_tmpl_cmd { 3985 /* unique id identifying the VDEV, generated by the caller */ 3986 __le32 vdev_id; 3987 /* beacon probe capabilities and IEs */ 3988 struct wmi_bcn_prb_info bcn_prb_info; 3989 /* beacon buffer length */ 3990 __le32 buf_len; 3991 /* Variable length data */ 3992 u8 data[1]; 3993 } __packed; 3994 3995 enum wmi_sta_ps_mode { 3996 /* enable power save for the given STA VDEV */ 3997 WMI_STA_PS_MODE_DISABLED = 0, 3998 /* disable power save for a given STA VDEV */ 3999 WMI_STA_PS_MODE_ENABLED = 1, 4000 }; 4001 4002 struct wmi_sta_powersave_mode_cmd { 4003 /* unique id identifying the VDEV, generated by the caller */ 4004 __le32 vdev_id; 4005 4006 /* 4007 * Power save mode 4008 * (see enum wmi_sta_ps_mode) 4009 */ 4010 __le32 sta_ps_mode; 4011 } __packed; 4012 4013 enum wmi_csa_offload_en { 4014 WMI_CSA_OFFLOAD_DISABLE = 0, 4015 WMI_CSA_OFFLOAD_ENABLE = 1, 4016 }; 4017 4018 struct wmi_csa_offload_enable_cmd { 4019 __le32 vdev_id; 4020 __le32 csa_offload_enable; 4021 } __packed; 4022 4023 struct wmi_csa_offload_chanswitch_cmd { 4024 __le32 vdev_id; 4025 struct wmi_channel chan; 4026 } __packed; 4027 4028 /* 4029 * This parameter controls the policy for retrieving frames from AP while the 4030 * STA is in sleep state. 4031 * 4032 * Only takes affect if the sta_ps_mode is enabled 4033 */ 4034 enum wmi_sta_ps_param_rx_wake_policy { 4035 /* 4036 * Wake up when ever there is an RX activity on the VDEV. In this mode 4037 * the Power save SM(state machine) will come out of sleep by either 4038 * sending null frame (or) a data frame (with PS==0) in response to TIM 4039 * bit set in the received beacon frame from AP. 4040 */ 4041 WMI_STA_PS_RX_WAKE_POLICY_WAKE = 0, 4042 4043 /* 4044 * Here the power save state machine will not wakeup in response to TIM 4045 * bit, instead it will send a PSPOLL (or) UASPD trigger based on UAPSD 4046 * configuration setup by WMISET_PS_SET_UAPSD WMI command. When all 4047 * access categories are delivery-enabled, the station will send a 4048 * UAPSD trigger frame, otherwise it will send a PS-Poll. 4049 */ 4050 WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD = 1, 4051 }; 4052 4053 /* 4054 * Number of tx frames/beacon that cause the power save SM to wake up. 4055 * 4056 * Value 1 causes the SM to wake up for every TX. Value 0 has a special 4057 * meaning, It will cause the SM to never wake up. This is useful if you want 4058 * to keep the system to sleep all the time for some kind of test mode . host 4059 * can change this parameter any time. It will affect at the next tx frame. 4060 */ 4061 enum wmi_sta_ps_param_tx_wake_threshold { 4062 WMI_STA_PS_TX_WAKE_THRESHOLD_NEVER = 0, 4063 WMI_STA_PS_TX_WAKE_THRESHOLD_ALWAYS = 1, 4064 4065 /* 4066 * Values greater than one indicate that many TX attempts per beacon 4067 * interval before the STA will wake up 4068 */ 4069 }; 4070 4071 /* 4072 * The maximum number of PS-Poll frames the FW will send in response to 4073 * traffic advertised in TIM before waking up (by sending a null frame with PS 4074 * = 0). Value 0 has a special meaning: there is no maximum count and the FW 4075 * will send as many PS-Poll as are necessary to retrieve buffered BU. This 4076 * parameter is used when the RX wake policy is 4077 * WMI_STA_PS_RX_WAKE_POLICY_POLL_UAPSD and ignored when the RX wake 4078 * policy is WMI_STA_PS_RX_WAKE_POLICY_WAKE. 4079 */ 4080 enum wmi_sta_ps_param_pspoll_count { 4081 WMI_STA_PS_PSPOLL_COUNT_NO_MAX = 0, 4082 /* 4083 * Values greater than 0 indicate the maximum numer of PS-Poll frames 4084 * FW will send before waking up. 4085 */ 4086 }; 4087 4088 /* 4089 * This will include the delivery and trigger enabled state for every AC. 4090 * This is the negotiated state with AP. The host MLME needs to set this based 4091 * on AP capability and the state Set in the association request by the 4092 * station MLME.Lower 8 bits of the value specify the UAPSD configuration. 4093 */ 4094 #define WMI_UAPSD_AC_TYPE_DELI 0 4095 #define WMI_UAPSD_AC_TYPE_TRIG 1 4096 4097 #define WMI_UAPSD_AC_BIT_MASK(ac, type) \ 4098 ((type == WMI_UAPSD_AC_TYPE_DELI) ? (1<<(ac<<1)) : (1<<((ac<<1)+1))) 4099 4100 enum wmi_sta_ps_param_uapsd { 4101 WMI_STA_PS_UAPSD_AC0_DELIVERY_EN = (1 << 0), 4102 WMI_STA_PS_UAPSD_AC0_TRIGGER_EN = (1 << 1), 4103 WMI_STA_PS_UAPSD_AC1_DELIVERY_EN = (1 << 2), 4104 WMI_STA_PS_UAPSD_AC1_TRIGGER_EN = (1 << 3), 4105 WMI_STA_PS_UAPSD_AC2_DELIVERY_EN = (1 << 4), 4106 WMI_STA_PS_UAPSD_AC2_TRIGGER_EN = (1 << 5), 4107 WMI_STA_PS_UAPSD_AC3_DELIVERY_EN = (1 << 6), 4108 WMI_STA_PS_UAPSD_AC3_TRIGGER_EN = (1 << 7), 4109 }; 4110 4111 enum wmi_sta_powersave_param { 4112 /* 4113 * Controls how frames are retrievd from AP while STA is sleeping 4114 * 4115 * (see enum wmi_sta_ps_param_rx_wake_policy) 4116 */ 4117 WMI_STA_PS_PARAM_RX_WAKE_POLICY = 0, 4118 4119 /* 4120 * The STA will go active after this many TX 4121 * 4122 * (see enum wmi_sta_ps_param_tx_wake_threshold) 4123 */ 4124 WMI_STA_PS_PARAM_TX_WAKE_THRESHOLD = 1, 4125 4126 /* 4127 * Number of PS-Poll to send before STA wakes up 4128 * 4129 * (see enum wmi_sta_ps_param_pspoll_count) 4130 * 4131 */ 4132 WMI_STA_PS_PARAM_PSPOLL_COUNT = 2, 4133 4134 /* 4135 * TX/RX inactivity time in msec before going to sleep. 4136 * 4137 * The power save SM will monitor tx/rx activity on the VDEV, if no 4138 * activity for the specified msec of the parameter the Power save 4139 * SM will go to sleep. 4140 */ 4141 WMI_STA_PS_PARAM_INACTIVITY_TIME = 3, 4142 4143 /* 4144 * Set uapsd configuration. 4145 * 4146 * (see enum wmi_sta_ps_param_uapsd) 4147 */ 4148 WMI_STA_PS_PARAM_UAPSD = 4, 4149 }; 4150 4151 struct wmi_sta_powersave_param_cmd { 4152 __le32 vdev_id; 4153 __le32 param_id; /* %WMI_STA_PS_PARAM_ */ 4154 __le32 param_value; 4155 } __packed; 4156 4157 /* No MIMO power save */ 4158 #define WMI_STA_MIMO_PS_MODE_DISABLE 4159 /* mimo powersave mode static*/ 4160 #define WMI_STA_MIMO_PS_MODE_STATIC 4161 /* mimo powersave mode dynamic */ 4162 #define WMI_STA_MIMO_PS_MODE_DYNAMIC 4163 4164 struct wmi_sta_mimo_ps_mode_cmd { 4165 /* unique id identifying the VDEV, generated by the caller */ 4166 __le32 vdev_id; 4167 /* mimo powersave mode as defined above */ 4168 __le32 mimo_pwrsave_mode; 4169 } __packed; 4170 4171 /* U-APSD configuration of peer station from (re)assoc request and TSPECs */ 4172 enum wmi_ap_ps_param_uapsd { 4173 WMI_AP_PS_UAPSD_AC0_DELIVERY_EN = (1 << 0), 4174 WMI_AP_PS_UAPSD_AC0_TRIGGER_EN = (1 << 1), 4175 WMI_AP_PS_UAPSD_AC1_DELIVERY_EN = (1 << 2), 4176 WMI_AP_PS_UAPSD_AC1_TRIGGER_EN = (1 << 3), 4177 WMI_AP_PS_UAPSD_AC2_DELIVERY_EN = (1 << 4), 4178 WMI_AP_PS_UAPSD_AC2_TRIGGER_EN = (1 << 5), 4179 WMI_AP_PS_UAPSD_AC3_DELIVERY_EN = (1 << 6), 4180 WMI_AP_PS_UAPSD_AC3_TRIGGER_EN = (1 << 7), 4181 }; 4182 4183 /* U-APSD maximum service period of peer station */ 4184 enum wmi_ap_ps_peer_param_max_sp { 4185 WMI_AP_PS_PEER_PARAM_MAX_SP_UNLIMITED = 0, 4186 WMI_AP_PS_PEER_PARAM_MAX_SP_2 = 1, 4187 WMI_AP_PS_PEER_PARAM_MAX_SP_4 = 2, 4188 WMI_AP_PS_PEER_PARAM_MAX_SP_6 = 3, 4189 MAX_WMI_AP_PS_PEER_PARAM_MAX_SP, 4190 }; 4191 4192 /* 4193 * AP power save parameter 4194 * Set a power save specific parameter for a peer station 4195 */ 4196 enum wmi_ap_ps_peer_param { 4197 /* Set uapsd configuration for a given peer. 4198 * 4199 * Include the delivery and trigger enabled state for every AC. 4200 * The host MLME needs to set this based on AP capability and stations 4201 * request Set in the association request received from the station. 4202 * 4203 * Lower 8 bits of the value specify the UAPSD configuration. 4204 * 4205 * (see enum wmi_ap_ps_param_uapsd) 4206 * The default value is 0. 4207 */ 4208 WMI_AP_PS_PEER_PARAM_UAPSD = 0, 4209 4210 /* 4211 * Set the service period for a UAPSD capable station 4212 * 4213 * The service period from wme ie in the (re)assoc request frame. 4214 * 4215 * (see enum wmi_ap_ps_peer_param_max_sp) 4216 */ 4217 WMI_AP_PS_PEER_PARAM_MAX_SP = 1, 4218 4219 /* Time in seconds for aging out buffered frames for STA in PS */ 4220 WMI_AP_PS_PEER_PARAM_AGEOUT_TIME = 2, 4221 }; 4222 4223 struct wmi_ap_ps_peer_cmd { 4224 /* unique id identifying the VDEV, generated by the caller */ 4225 __le32 vdev_id; 4226 4227 /* peer MAC address */ 4228 struct wmi_mac_addr peer_macaddr; 4229 4230 /* AP powersave param (see enum wmi_ap_ps_peer_param) */ 4231 __le32 param_id; 4232 4233 /* AP powersave param value */ 4234 __le32 param_value; 4235 } __packed; 4236 4237 /* 128 clients = 4 words */ 4238 #define WMI_TIM_BITMAP_ARRAY_SIZE 4 4239 4240 struct wmi_tim_info { 4241 __le32 tim_len; 4242 __le32 tim_mcast; 4243 __le32 tim_bitmap[WMI_TIM_BITMAP_ARRAY_SIZE]; 4244 __le32 tim_changed; 4245 __le32 tim_num_ps_pending; 4246 } __packed; 4247 4248 /* Maximum number of NOA Descriptors supported */ 4249 #define WMI_P2P_MAX_NOA_DESCRIPTORS 4 4250 #define WMI_P2P_OPPPS_ENABLE_BIT BIT(0) 4251 #define WMI_P2P_OPPPS_CTWINDOW_OFFSET 1 4252 #define WMI_P2P_NOA_CHANGED_BIT BIT(0) 4253 4254 struct wmi_p2p_noa_info { 4255 /* Bit 0 - Flag to indicate an update in NOA schedule 4256 Bits 7-1 - Reserved */ 4257 u8 changed; 4258 /* NOA index */ 4259 u8 index; 4260 /* Bit 0 - Opp PS state of the AP 4261 Bits 1-7 - Ctwindow in TUs */ 4262 u8 ctwindow_oppps; 4263 /* Number of NOA descriptors */ 4264 u8 num_descriptors; 4265 4266 struct wmi_p2p_noa_descriptor descriptors[WMI_P2P_MAX_NOA_DESCRIPTORS]; 4267 } __packed; 4268 4269 struct wmi_bcn_info { 4270 struct wmi_tim_info tim_info; 4271 struct wmi_p2p_noa_info p2p_noa_info; 4272 } __packed; 4273 4274 struct wmi_host_swba_event { 4275 __le32 vdev_map; 4276 struct wmi_bcn_info bcn_info[1]; 4277 } __packed; 4278 4279 #define WMI_MAX_AP_VDEV 16 4280 4281 struct wmi_tbtt_offset_event { 4282 __le32 vdev_map; 4283 __le32 tbttoffset_list[WMI_MAX_AP_VDEV]; 4284 } __packed; 4285 4286 struct wmi_peer_create_cmd { 4287 __le32 vdev_id; 4288 struct wmi_mac_addr peer_macaddr; 4289 } __packed; 4290 4291 struct wmi_peer_delete_cmd { 4292 __le32 vdev_id; 4293 struct wmi_mac_addr peer_macaddr; 4294 } __packed; 4295 4296 struct wmi_peer_flush_tids_cmd { 4297 __le32 vdev_id; 4298 struct wmi_mac_addr peer_macaddr; 4299 __le32 peer_tid_bitmap; 4300 } __packed; 4301 4302 struct wmi_fixed_rate { 4303 /* 4304 * rate mode . 0: disable fixed rate (auto rate) 4305 * 1: legacy (non 11n) rate specified as ieee rate 2*Mbps 4306 * 2: ht20 11n rate specified as mcs index 4307 * 3: ht40 11n rate specified as mcs index 4308 */ 4309 __le32 rate_mode; 4310 /* 4311 * 4 rate values for 4 rate series. series 0 is stored in byte 0 (LSB) 4312 * and series 3 is stored at byte 3 (MSB) 4313 */ 4314 __le32 rate_series; 4315 /* 4316 * 4 retry counts for 4 rate series. retry count for rate 0 is stored 4317 * in byte 0 (LSB) and retry count for rate 3 is stored at byte 3 4318 * (MSB) 4319 */ 4320 __le32 rate_retries; 4321 } __packed; 4322 4323 struct wmi_peer_fixed_rate_cmd { 4324 /* unique id identifying the VDEV, generated by the caller */ 4325 __le32 vdev_id; 4326 /* peer MAC address */ 4327 struct wmi_mac_addr peer_macaddr; 4328 /* fixed rate */ 4329 struct wmi_fixed_rate peer_fixed_rate; 4330 } __packed; 4331 4332 #define WMI_MGMT_TID 17 4333 4334 struct wmi_addba_clear_resp_cmd { 4335 /* unique id identifying the VDEV, generated by the caller */ 4336 __le32 vdev_id; 4337 /* peer MAC address */ 4338 struct wmi_mac_addr peer_macaddr; 4339 } __packed; 4340 4341 struct wmi_addba_send_cmd { 4342 /* unique id identifying the VDEV, generated by the caller */ 4343 __le32 vdev_id; 4344 /* peer MAC address */ 4345 struct wmi_mac_addr peer_macaddr; 4346 /* Tid number */ 4347 __le32 tid; 4348 /* Buffer/Window size*/ 4349 __le32 buffersize; 4350 } __packed; 4351 4352 struct wmi_delba_send_cmd { 4353 /* unique id identifying the VDEV, generated by the caller */ 4354 __le32 vdev_id; 4355 /* peer MAC address */ 4356 struct wmi_mac_addr peer_macaddr; 4357 /* Tid number */ 4358 __le32 tid; 4359 /* Is Initiator */ 4360 __le32 initiator; 4361 /* Reason code */ 4362 __le32 reasoncode; 4363 } __packed; 4364 4365 struct wmi_addba_setresponse_cmd { 4366 /* unique id identifying the vdev, generated by the caller */ 4367 __le32 vdev_id; 4368 /* peer mac address */ 4369 struct wmi_mac_addr peer_macaddr; 4370 /* Tid number */ 4371 __le32 tid; 4372 /* status code */ 4373 __le32 statuscode; 4374 } __packed; 4375 4376 struct wmi_send_singleamsdu_cmd { 4377 /* unique id identifying the vdev, generated by the caller */ 4378 __le32 vdev_id; 4379 /* peer mac address */ 4380 struct wmi_mac_addr peer_macaddr; 4381 /* Tid number */ 4382 __le32 tid; 4383 } __packed; 4384 4385 enum wmi_peer_smps_state { 4386 WMI_PEER_SMPS_PS_NONE = 0x0, 4387 WMI_PEER_SMPS_STATIC = 0x1, 4388 WMI_PEER_SMPS_DYNAMIC = 0x2 4389 }; 4390 4391 enum wmi_peer_chwidth { 4392 WMI_PEER_CHWIDTH_20MHZ = 0, 4393 WMI_PEER_CHWIDTH_40MHZ = 1, 4394 WMI_PEER_CHWIDTH_80MHZ = 2, 4395 }; 4396 4397 enum wmi_peer_param { 4398 WMI_PEER_SMPS_STATE = 0x1, /* see %wmi_peer_smps_state */ 4399 WMI_PEER_AMPDU = 0x2, 4400 WMI_PEER_AUTHORIZE = 0x3, 4401 WMI_PEER_CHAN_WIDTH = 0x4, 4402 WMI_PEER_NSS = 0x5, 4403 WMI_PEER_USE_4ADDR = 0x6 4404 }; 4405 4406 struct wmi_peer_set_param_cmd { 4407 __le32 vdev_id; 4408 struct wmi_mac_addr peer_macaddr; 4409 __le32 param_id; 4410 __le32 param_value; 4411 } __packed; 4412 4413 #define MAX_SUPPORTED_RATES 128 4414 4415 struct wmi_rate_set { 4416 /* total number of rates */ 4417 __le32 num_rates; 4418 /* 4419 * rates (each 8bit value) packed into a 32 bit word. 4420 * the rates are filled from least significant byte to most 4421 * significant byte. 4422 */ 4423 __le32 rates[(MAX_SUPPORTED_RATES/4)+1]; 4424 } __packed; 4425 4426 struct wmi_rate_set_arg { 4427 unsigned int num_rates; 4428 u8 rates[MAX_SUPPORTED_RATES]; 4429 }; 4430 4431 /* 4432 * NOTE: It would bea good idea to represent the Tx MCS 4433 * info in one word and Rx in another word. This is split 4434 * into multiple words for convenience 4435 */ 4436 struct wmi_vht_rate_set { 4437 __le32 rx_max_rate; /* Max Rx data rate */ 4438 __le32 rx_mcs_set; /* Negotiated RX VHT rates */ 4439 __le32 tx_max_rate; /* Max Tx data rate */ 4440 __le32 tx_mcs_set; /* Negotiated TX VHT rates */ 4441 } __packed; 4442 4443 struct wmi_vht_rate_set_arg { 4444 u32 rx_max_rate; 4445 u32 rx_mcs_set; 4446 u32 tx_max_rate; 4447 u32 tx_mcs_set; 4448 }; 4449 4450 struct wmi_peer_set_rates_cmd { 4451 /* peer MAC address */ 4452 struct wmi_mac_addr peer_macaddr; 4453 /* legacy rate set */ 4454 struct wmi_rate_set peer_legacy_rates; 4455 /* ht rate set */ 4456 struct wmi_rate_set peer_ht_rates; 4457 } __packed; 4458 4459 struct wmi_peer_set_q_empty_callback_cmd { 4460 /* unique id identifying the VDEV, generated by the caller */ 4461 __le32 vdev_id; 4462 /* peer MAC address */ 4463 struct wmi_mac_addr peer_macaddr; 4464 __le32 callback_enable; 4465 } __packed; 4466 4467 #define WMI_PEER_AUTH 0x00000001 4468 #define WMI_PEER_QOS 0x00000002 4469 #define WMI_PEER_NEED_PTK_4_WAY 0x00000004 4470 #define WMI_PEER_NEED_GTK_2_WAY 0x00000010 4471 #define WMI_PEER_APSD 0x00000800 4472 #define WMI_PEER_HT 0x00001000 4473 #define WMI_PEER_40MHZ 0x00002000 4474 #define WMI_PEER_STBC 0x00008000 4475 #define WMI_PEER_LDPC 0x00010000 4476 #define WMI_PEER_DYN_MIMOPS 0x00020000 4477 #define WMI_PEER_STATIC_MIMOPS 0x00040000 4478 #define WMI_PEER_SPATIAL_MUX 0x00200000 4479 #define WMI_PEER_VHT 0x02000000 4480 #define WMI_PEER_80MHZ 0x04000000 4481 #define WMI_PEER_PMF 0x08000000 4482 4483 /* 4484 * Peer rate capabilities. 4485 * 4486 * This is of interest to the ratecontrol 4487 * module which resides in the firmware. The bit definitions are 4488 * consistent with that defined in if_athrate.c. 4489 */ 4490 #define WMI_RC_DS_FLAG 0x01 4491 #define WMI_RC_CW40_FLAG 0x02 4492 #define WMI_RC_SGI_FLAG 0x04 4493 #define WMI_RC_HT_FLAG 0x08 4494 #define WMI_RC_RTSCTS_FLAG 0x10 4495 #define WMI_RC_TX_STBC_FLAG 0x20 4496 #define WMI_RC_RX_STBC_FLAG 0xC0 4497 #define WMI_RC_RX_STBC_FLAG_S 6 4498 #define WMI_RC_WEP_TKIP_FLAG 0x100 4499 #define WMI_RC_TS_FLAG 0x200 4500 #define WMI_RC_UAPSD_FLAG 0x400 4501 4502 /* Maximum listen interval supported by hw in units of beacon interval */ 4503 #define ATH10K_MAX_HW_LISTEN_INTERVAL 5 4504 4505 struct wmi_common_peer_assoc_complete_cmd { 4506 struct wmi_mac_addr peer_macaddr; 4507 __le32 vdev_id; 4508 __le32 peer_new_assoc; /* 1=assoc, 0=reassoc */ 4509 __le32 peer_associd; /* 16 LSBs */ 4510 __le32 peer_flags; 4511 __le32 peer_caps; /* 16 LSBs */ 4512 __le32 peer_listen_intval; 4513 __le32 peer_ht_caps; 4514 __le32 peer_max_mpdu; 4515 __le32 peer_mpdu_density; /* 0..16 */ 4516 __le32 peer_rate_caps; 4517 struct wmi_rate_set peer_legacy_rates; 4518 struct wmi_rate_set peer_ht_rates; 4519 __le32 peer_nss; /* num of spatial streams */ 4520 __le32 peer_vht_caps; 4521 __le32 peer_phymode; 4522 struct wmi_vht_rate_set peer_vht_rates; 4523 }; 4524 4525 struct wmi_main_peer_assoc_complete_cmd { 4526 struct wmi_common_peer_assoc_complete_cmd cmd; 4527 4528 /* HT Operation Element of the peer. Five bytes packed in 2 4529 * INT32 array and filled from lsb to msb. */ 4530 __le32 peer_ht_info[2]; 4531 } __packed; 4532 4533 struct wmi_10_1_peer_assoc_complete_cmd { 4534 struct wmi_common_peer_assoc_complete_cmd cmd; 4535 } __packed; 4536 4537 #define WMI_PEER_ASSOC_INFO0_MAX_MCS_IDX_LSB 0 4538 #define WMI_PEER_ASSOC_INFO0_MAX_MCS_IDX_MASK 0x0f 4539 #define WMI_PEER_ASSOC_INFO0_MAX_NSS_LSB 4 4540 #define WMI_PEER_ASSOC_INFO0_MAX_NSS_MASK 0xf0 4541 4542 struct wmi_10_2_peer_assoc_complete_cmd { 4543 struct wmi_common_peer_assoc_complete_cmd cmd; 4544 __le32 info0; /* WMI_PEER_ASSOC_INFO0_ */ 4545 } __packed; 4546 4547 struct wmi_peer_assoc_complete_arg { 4548 u8 addr[ETH_ALEN]; 4549 u32 vdev_id; 4550 bool peer_reassoc; 4551 u16 peer_aid; 4552 u32 peer_flags; /* see %WMI_PEER_ */ 4553 u16 peer_caps; 4554 u32 peer_listen_intval; 4555 u32 peer_ht_caps; 4556 u32 peer_max_mpdu; 4557 u32 peer_mpdu_density; /* 0..16 */ 4558 u32 peer_rate_caps; /* see %WMI_RC_ */ 4559 struct wmi_rate_set_arg peer_legacy_rates; 4560 struct wmi_rate_set_arg peer_ht_rates; 4561 u32 peer_num_spatial_streams; 4562 u32 peer_vht_caps; 4563 enum wmi_phy_mode peer_phymode; 4564 struct wmi_vht_rate_set_arg peer_vht_rates; 4565 }; 4566 4567 struct wmi_peer_add_wds_entry_cmd { 4568 /* peer MAC address */ 4569 struct wmi_mac_addr peer_macaddr; 4570 /* wds MAC addr */ 4571 struct wmi_mac_addr wds_macaddr; 4572 } __packed; 4573 4574 struct wmi_peer_remove_wds_entry_cmd { 4575 /* wds MAC addr */ 4576 struct wmi_mac_addr wds_macaddr; 4577 } __packed; 4578 4579 struct wmi_peer_q_empty_callback_event { 4580 /* peer MAC address */ 4581 struct wmi_mac_addr peer_macaddr; 4582 } __packed; 4583 4584 /* 4585 * Channel info WMI event 4586 */ 4587 struct wmi_chan_info_event { 4588 __le32 err_code; 4589 __le32 freq; 4590 __le32 cmd_flags; 4591 __le32 noise_floor; 4592 __le32 rx_clear_count; 4593 __le32 cycle_count; 4594 } __packed; 4595 4596 struct wmi_peer_sta_kickout_event { 4597 struct wmi_mac_addr peer_macaddr; 4598 } __packed; 4599 4600 #define WMI_CHAN_INFO_FLAG_COMPLETE BIT(0) 4601 4602 /* FIXME: empirically extrapolated */ 4603 #define WMI_CHAN_INFO_MSEC(x) ((x) / 76595) 4604 4605 /* Beacon filter wmi command info */ 4606 #define BCN_FLT_MAX_SUPPORTED_IES 256 4607 #define BCN_FLT_MAX_ELEMS_IE_LIST (BCN_FLT_MAX_SUPPORTED_IES / 32) 4608 4609 struct bss_bcn_stats { 4610 __le32 vdev_id; 4611 __le32 bss_bcnsdropped; 4612 __le32 bss_bcnsdelivered; 4613 } __packed; 4614 4615 struct bcn_filter_stats { 4616 __le32 bcns_dropped; 4617 __le32 bcns_delivered; 4618 __le32 activefilters; 4619 struct bss_bcn_stats bss_stats; 4620 } __packed; 4621 4622 struct wmi_add_bcn_filter_cmd { 4623 u32 vdev_id; 4624 u32 ie_map[BCN_FLT_MAX_ELEMS_IE_LIST]; 4625 } __packed; 4626 4627 enum wmi_sta_keepalive_method { 4628 WMI_STA_KEEPALIVE_METHOD_NULL_FRAME = 1, 4629 WMI_STA_KEEPALIVE_METHOD_UNSOLICITATED_ARP_RESPONSE = 2, 4630 }; 4631 4632 /* note: ip4 addresses are in network byte order, i.e. big endian */ 4633 struct wmi_sta_keepalive_arp_resp { 4634 __be32 src_ip4_addr; 4635 __be32 dest_ip4_addr; 4636 struct wmi_mac_addr dest_mac_addr; 4637 } __packed; 4638 4639 struct wmi_sta_keepalive_cmd { 4640 __le32 vdev_id; 4641 __le32 enabled; 4642 __le32 method; /* WMI_STA_KEEPALIVE_METHOD_ */ 4643 __le32 interval; /* in seconds */ 4644 struct wmi_sta_keepalive_arp_resp arp_resp; 4645 } __packed; 4646 4647 enum wmi_force_fw_hang_type { 4648 WMI_FORCE_FW_HANG_ASSERT = 1, 4649 WMI_FORCE_FW_HANG_NO_DETECT, 4650 WMI_FORCE_FW_HANG_CTRL_EP_FULL, 4651 WMI_FORCE_FW_HANG_EMPTY_POINT, 4652 WMI_FORCE_FW_HANG_STACK_OVERFLOW, 4653 WMI_FORCE_FW_HANG_INFINITE_LOOP, 4654 }; 4655 4656 #define WMI_FORCE_FW_HANG_RANDOM_TIME 0xFFFFFFFF 4657 4658 struct wmi_force_fw_hang_cmd { 4659 __le32 type; 4660 __le32 delay_ms; 4661 } __packed; 4662 4663 enum ath10k_dbglog_level { 4664 ATH10K_DBGLOG_LEVEL_VERBOSE = 0, 4665 ATH10K_DBGLOG_LEVEL_INFO = 1, 4666 ATH10K_DBGLOG_LEVEL_WARN = 2, 4667 ATH10K_DBGLOG_LEVEL_ERR = 3, 4668 }; 4669 4670 /* VAP ids to enable dbglog */ 4671 #define ATH10K_DBGLOG_CFG_VAP_LOG_LSB 0 4672 #define ATH10K_DBGLOG_CFG_VAP_LOG_MASK 0x0000ffff 4673 4674 /* to enable dbglog in the firmware */ 4675 #define ATH10K_DBGLOG_CFG_REPORTING_ENABLE_LSB 16 4676 #define ATH10K_DBGLOG_CFG_REPORTING_ENABLE_MASK 0x00010000 4677 4678 /* timestamp resolution */ 4679 #define ATH10K_DBGLOG_CFG_RESOLUTION_LSB 17 4680 #define ATH10K_DBGLOG_CFG_RESOLUTION_MASK 0x000E0000 4681 4682 /* number of queued messages before sending them to the host */ 4683 #define ATH10K_DBGLOG_CFG_REPORT_SIZE_LSB 20 4684 #define ATH10K_DBGLOG_CFG_REPORT_SIZE_MASK 0x0ff00000 4685 4686 /* 4687 * Log levels to enable. This defines the minimum level to enable, this is 4688 * not a bitmask. See enum ath10k_dbglog_level for the values. 4689 */ 4690 #define ATH10K_DBGLOG_CFG_LOG_LVL_LSB 28 4691 #define ATH10K_DBGLOG_CFG_LOG_LVL_MASK 0x70000000 4692 4693 /* 4694 * Note: this is a cleaned up version of a struct firmware uses. For 4695 * example, config_valid was hidden inside an array. 4696 */ 4697 struct wmi_dbglog_cfg_cmd { 4698 /* bitmask to hold mod id config*/ 4699 __le32 module_enable; 4700 4701 /* see ATH10K_DBGLOG_CFG_ */ 4702 __le32 config_enable; 4703 4704 /* mask of module id bits to be changed */ 4705 __le32 module_valid; 4706 4707 /* mask of config bits to be changed, see ATH10K_DBGLOG_CFG_ */ 4708 __le32 config_valid; 4709 } __packed; 4710 4711 #define ATH10K_RTS_MAX 2347 4712 #define ATH10K_FRAGMT_THRESHOLD_MIN 540 4713 #define ATH10K_FRAGMT_THRESHOLD_MAX 2346 4714 4715 #define WMI_MAX_EVENT 0x1000 4716 /* Maximum number of pending TXed WMI packets */ 4717 #define WMI_SKB_HEADROOM sizeof(struct wmi_cmd_hdr) 4718 4719 /* By default disable power save for IBSS */ 4720 #define ATH10K_DEFAULT_ATIM 0 4721 4722 struct ath10k; 4723 struct ath10k_vif; 4724 4725 int ath10k_wmi_attach(struct ath10k *ar); 4726 void ath10k_wmi_detach(struct ath10k *ar); 4727 int ath10k_wmi_wait_for_service_ready(struct ath10k *ar); 4728 int ath10k_wmi_wait_for_unified_ready(struct ath10k *ar); 4729 4730 int ath10k_wmi_connect(struct ath10k *ar); 4731 4732 struct sk_buff *ath10k_wmi_alloc_skb(struct ath10k *ar, u32 len); 4733 int ath10k_wmi_cmd_send(struct ath10k *ar, struct sk_buff *skb, u32 cmd_id); 4734 4735 int ath10k_wmi_pdev_set_channel(struct ath10k *ar, 4736 const struct wmi_channel_arg *); 4737 int ath10k_wmi_pdev_suspend_target(struct ath10k *ar, u32 suspend_opt); 4738 int ath10k_wmi_pdev_resume_target(struct ath10k *ar); 4739 int ath10k_wmi_pdev_set_regdomain(struct ath10k *ar, u16 rd, u16 rd2g, 4740 u16 rd5g, u16 ctl2g, u16 ctl5g, 4741 enum wmi_dfs_region dfs_reg); 4742 int ath10k_wmi_pdev_set_param(struct ath10k *ar, u32 id, u32 value); 4743 int ath10k_wmi_cmd_init(struct ath10k *ar); 4744 int ath10k_wmi_start_scan(struct ath10k *ar, const struct wmi_start_scan_arg *); 4745 void ath10k_wmi_start_scan_init(struct ath10k *ar, struct wmi_start_scan_arg *); 4746 int ath10k_wmi_stop_scan(struct ath10k *ar, 4747 const struct wmi_stop_scan_arg *arg); 4748 int ath10k_wmi_vdev_create(struct ath10k *ar, u32 vdev_id, 4749 enum wmi_vdev_type type, 4750 enum wmi_vdev_subtype subtype, 4751 const u8 macaddr[ETH_ALEN]); 4752 int ath10k_wmi_vdev_delete(struct ath10k *ar, u32 vdev_id); 4753 int ath10k_wmi_vdev_start(struct ath10k *ar, 4754 const struct wmi_vdev_start_request_arg *); 4755 int ath10k_wmi_vdev_restart(struct ath10k *ar, 4756 const struct wmi_vdev_start_request_arg *); 4757 int ath10k_wmi_vdev_stop(struct ath10k *ar, u32 vdev_id); 4758 int ath10k_wmi_vdev_up(struct ath10k *ar, u32 vdev_id, u32 aid, 4759 const u8 *bssid); 4760 int ath10k_wmi_vdev_down(struct ath10k *ar, u32 vdev_id); 4761 int ath10k_wmi_vdev_set_param(struct ath10k *ar, u32 vdev_id, 4762 u32 param_id, u32 param_value); 4763 int ath10k_wmi_vdev_install_key(struct ath10k *ar, 4764 const struct wmi_vdev_install_key_arg *arg); 4765 int ath10k_wmi_vdev_spectral_conf(struct ath10k *ar, 4766 const struct wmi_vdev_spectral_conf_arg *arg); 4767 int ath10k_wmi_vdev_spectral_enable(struct ath10k *ar, u32 vdev_id, u32 trigger, 4768 u32 enable); 4769 int ath10k_wmi_peer_create(struct ath10k *ar, u32 vdev_id, 4770 const u8 peer_addr[ETH_ALEN]); 4771 int ath10k_wmi_peer_delete(struct ath10k *ar, u32 vdev_id, 4772 const u8 peer_addr[ETH_ALEN]); 4773 int ath10k_wmi_peer_flush(struct ath10k *ar, u32 vdev_id, 4774 const u8 peer_addr[ETH_ALEN], u32 tid_bitmap); 4775 int ath10k_wmi_peer_set_param(struct ath10k *ar, u32 vdev_id, 4776 const u8 *peer_addr, 4777 enum wmi_peer_param param_id, u32 param_value); 4778 int ath10k_wmi_peer_assoc(struct ath10k *ar, 4779 const struct wmi_peer_assoc_complete_arg *arg); 4780 int ath10k_wmi_set_psmode(struct ath10k *ar, u32 vdev_id, 4781 enum wmi_sta_ps_mode psmode); 4782 int ath10k_wmi_set_sta_ps_param(struct ath10k *ar, u32 vdev_id, 4783 enum wmi_sta_powersave_param param_id, 4784 u32 value); 4785 int ath10k_wmi_set_ap_ps_param(struct ath10k *ar, u32 vdev_id, const u8 *mac, 4786 enum wmi_ap_ps_peer_param param_id, u32 value); 4787 int ath10k_wmi_scan_chan_list(struct ath10k *ar, 4788 const struct wmi_scan_chan_list_arg *arg); 4789 int ath10k_wmi_beacon_send_ref_nowait(struct ath10k_vif *arvif); 4790 int ath10k_wmi_pdev_set_wmm_params(struct ath10k *ar, 4791 const struct wmi_pdev_set_wmm_params_arg *arg); 4792 int ath10k_wmi_request_stats(struct ath10k *ar, enum wmi_stats_id stats_id); 4793 int ath10k_wmi_force_fw_hang(struct ath10k *ar, 4794 enum wmi_force_fw_hang_type type, u32 delay_ms); 4795 int ath10k_wmi_mgmt_tx(struct ath10k *ar, struct sk_buff *skb); 4796 int ath10k_wmi_dbglog_cfg(struct ath10k *ar, u32 module_enable); 4797 4798 #endif /* _WMI_H_ */ 4799