1 /* 2 * Copyright (c) 2012-2014 Qualcomm Atheros, Inc. 3 * Copyright (c) 2006-2012 Wilocity . 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 /* 19 * This file contains the definitions of the WMI protocol specified in the 20 * Wireless Module Interface (WMI) for the Wilocity 21 * MARLON 60 Gigabit wireless solution. 22 * It includes definitions of all the commands and events. 23 * Commands are messages from the host to the WM. 24 * Events are messages from the WM to the host. 25 */ 26 27 #ifndef __WILOCITY_WMI_H__ 28 #define __WILOCITY_WMI_H__ 29 30 /* General */ 31 #define WILOCITY_MAX_ASSOC_STA (8) 32 #define WILOCITY_DEFAULT_ASSOC_STA (1) 33 #define WMI_MAC_LEN (6) 34 #define WMI_PROX_RANGE_NUM (3) 35 #define WMI_MAX_LOSS_DMG_BEACONS (32) 36 37 /* List of Commands */ 38 enum wmi_command_id { 39 WMI_CONNECT_CMDID = 0x0001, 40 WMI_DISCONNECT_CMDID = 0x0003, 41 WMI_DISCONNECT_STA_CMDID = 0x0004, 42 WMI_START_SCAN_CMDID = 0x0007, 43 WMI_SET_BSS_FILTER_CMDID = 0x0009, 44 WMI_SET_PROBED_SSID_CMDID = 0x000a, 45 WMI_SET_LISTEN_INT_CMDID = 0x000b, 46 WMI_BCON_CTRL_CMDID = 0x000f, 47 WMI_ADD_CIPHER_KEY_CMDID = 0x0016, 48 WMI_DELETE_CIPHER_KEY_CMDID = 0x0017, 49 WMI_SET_APPIE_CMDID = 0x003f, 50 WMI_SET_WSC_STATUS_CMDID = 0x0041, 51 WMI_PXMT_RANGE_CFG_CMDID = 0x0042, 52 WMI_PXMT_SNR2_RANGE_CFG_CMDID = 0x0043, 53 /* WMI_FAST_MEM_ACC_MODE_CMDID = 0x0300, */ 54 WMI_MEM_READ_CMDID = 0x0800, 55 WMI_MEM_WR_CMDID = 0x0801, 56 WMI_ECHO_CMDID = 0x0803, 57 WMI_DEEP_ECHO_CMDID = 0x0804, 58 WMI_CONFIG_MAC_CMDID = 0x0805, 59 WMI_CONFIG_PHY_DEBUG_CMDID = 0x0806, 60 WMI_ADD_DEBUG_TX_PCKT_CMDID = 0x0808, 61 WMI_PHY_GET_STATISTICS_CMDID = 0x0809, 62 WMI_FS_TUNE_CMDID = 0x080a, 63 WMI_CORR_MEASURE_CMDID = 0x080b, 64 WMI_READ_RSSI_CMDID = 0x080c, 65 WMI_TEMP_SENSE_CMDID = 0x080e, 66 WMI_DC_CALIB_CMDID = 0x080f, 67 WMI_SEND_TONE_CMDID = 0x0810, 68 WMI_IQ_TX_CALIB_CMDID = 0x0811, 69 WMI_IQ_RX_CALIB_CMDID = 0x0812, 70 WMI_SET_UCODE_IDLE_CMDID = 0x0813, 71 WMI_SET_WORK_MODE_CMDID = 0x0815, 72 WMI_LO_LEAKAGE_CALIB_CMDID = 0x0816, 73 WMI_MARLON_R_ACTIVATE_CMDID = 0x0817, 74 WMI_MARLON_R_READ_CMDID = 0x0818, 75 WMI_MARLON_R_WRITE_CMDID = 0x0819, 76 WMI_MARLON_R_TXRX_SEL_CMDID = 0x081a, 77 MAC_IO_STATIC_PARAMS_CMDID = 0x081b, 78 MAC_IO_DYNAMIC_PARAMS_CMDID = 0x081c, 79 WMI_SILENT_RSSI_CALIB_CMDID = 0x081d, 80 WMI_RF_RX_TEST_CMDID = 0x081e, 81 WMI_CFG_RX_CHAIN_CMDID = 0x0820, 82 WMI_VRING_CFG_CMDID = 0x0821, 83 WMI_VRING_BA_EN_CMDID = 0x0823, 84 WMI_VRING_BA_DIS_CMDID = 0x0824, 85 WMI_RCP_ADDBA_RESP_CMDID = 0x0825, 86 WMI_RCP_DELBA_CMDID = 0x0826, 87 WMI_SET_SSID_CMDID = 0x0827, 88 WMI_GET_SSID_CMDID = 0x0828, 89 WMI_SET_PCP_CHANNEL_CMDID = 0x0829, 90 WMI_GET_PCP_CHANNEL_CMDID = 0x082a, 91 WMI_SW_TX_REQ_CMDID = 0x082b, 92 WMI_READ_MAC_RXQ_CMDID = 0x0830, 93 WMI_READ_MAC_TXQ_CMDID = 0x0831, 94 WMI_WRITE_MAC_RXQ_CMDID = 0x0832, 95 WMI_WRITE_MAC_TXQ_CMDID = 0x0833, 96 WMI_WRITE_MAC_XQ_FIELD_CMDID = 0x0834, 97 WMI_MLME_PUSH_CMDID = 0x0835, 98 WMI_BEAMFORMING_MGMT_CMDID = 0x0836, 99 WMI_BF_TXSS_MGMT_CMDID = 0x0837, 100 WMI_BF_SM_MGMT_CMDID = 0x0838, 101 WMI_BF_RXSS_MGMT_CMDID = 0x0839, 102 WMI_SET_SECTORS_CMDID = 0x0849, 103 WMI_MAINTAIN_PAUSE_CMDID = 0x0850, 104 WMI_MAINTAIN_RESUME_CMDID = 0x0851, 105 WMI_RS_MGMT_CMDID = 0x0852, 106 WMI_RF_MGMT_CMDID = 0x0853, 107 WMI_THERMAL_THROTTLING_CTRL_CMDID = 0x0854, 108 WMI_THERMAL_THROTTLING_GET_STATUS_CMDID = 0x0855, 109 /* Performance monitoring commands */ 110 WMI_BF_CTRL_CMDID = 0x0862, 111 WMI_NOTIFY_REQ_CMDID = 0x0863, 112 WMI_GET_STATUS_CMDID = 0x0864, 113 WMI_UNIT_TEST_CMDID = 0x0900, 114 WMI_HICCUP_CMDID = 0x0901, 115 WMI_FLASH_READ_CMDID = 0x0902, 116 WMI_FLASH_WRITE_CMDID = 0x0903, 117 WMI_SECURITY_UNIT_TEST_CMDID = 0x0904, 118 /*P2P*/ 119 WMI_P2P_CFG_CMDID = 0x0910, 120 WMI_PORT_ALLOCATE_CMDID = 0x0911, 121 WMI_PORT_DELETE_CMDID = 0x0912, 122 WMI_POWER_MGMT_CFG_CMDID = 0x0913, 123 WMI_START_LISTEN_CMDID = 0x0914, 124 WMI_START_SEARCH_CMDID = 0x0915, 125 WMI_DISCOVERY_START_CMDID = 0x0916, 126 WMI_DISCOVERY_STOP_CMDID = 0x0917, 127 WMI_PCP_START_CMDID = 0x0918, 128 WMI_PCP_STOP_CMDID = 0x0919, 129 WMI_GET_PCP_FACTOR_CMDID = 0x091b, 130 131 WMI_SET_MAC_ADDRESS_CMDID = 0xf003, 132 WMI_ABORT_SCAN_CMDID = 0xf007, 133 WMI_SET_PMK_CMDID = 0xf028, 134 135 WMI_SET_PROMISCUOUS_MODE_CMDID = 0xf041, 136 WMI_GET_PMK_CMDID = 0xf048, 137 WMI_SET_PASSPHRASE_CMDID = 0xf049, 138 WMI_SEND_ASSOC_RES_CMDID = 0xf04a, 139 WMI_SET_ASSOC_REQ_RELAY_CMDID = 0xf04b, 140 WMI_EAPOL_TX_CMDID = 0xf04c, 141 WMI_MAC_ADDR_REQ_CMDID = 0xf04d, 142 WMI_FW_VER_CMDID = 0xf04e, 143 WMI_PMC_CMDID = 0xf04f, 144 }; 145 146 /* 147 * Commands data structures 148 */ 149 150 /* 151 * WMI_CONNECT_CMDID 152 */ 153 enum wmi_network_type { 154 WMI_NETTYPE_INFRA = 0x01, 155 WMI_NETTYPE_ADHOC = 0x02, 156 WMI_NETTYPE_ADHOC_CREATOR = 0x04, 157 WMI_NETTYPE_AP = 0x10, 158 WMI_NETTYPE_P2P = 0x20, 159 WMI_NETTYPE_WBE = 0x40, /* PCIE over 60g */ 160 }; 161 162 enum wmi_dot11_auth_mode { 163 WMI_AUTH11_OPEN = 0x01, 164 WMI_AUTH11_SHARED = 0x02, 165 WMI_AUTH11_LEAP = 0x04, 166 WMI_AUTH11_WSC = 0x08, 167 }; 168 169 enum wmi_auth_mode { 170 WMI_AUTH_NONE = 0x01, 171 WMI_AUTH_WPA = 0x02, 172 WMI_AUTH_WPA2 = 0x04, 173 WMI_AUTH_WPA_PSK = 0x08, 174 WMI_AUTH_WPA2_PSK = 0x10, 175 WMI_AUTH_WPA_CCKM = 0x20, 176 WMI_AUTH_WPA2_CCKM = 0x40, 177 }; 178 179 enum wmi_crypto_type { 180 WMI_CRYPT_NONE = 0x01, 181 WMI_CRYPT_WEP = 0x02, 182 WMI_CRYPT_TKIP = 0x04, 183 WMI_CRYPT_AES = 0x08, 184 WMI_CRYPT_AES_GCMP = 0x20, 185 }; 186 187 enum wmi_connect_ctrl_flag_bits { 188 WMI_CONNECT_ASSOC_POLICY_USER = 0x0001, 189 WMI_CONNECT_SEND_REASSOC = 0x0002, 190 WMI_CONNECT_IGNORE_WPA_GROUP_CIPHER = 0x0004, 191 WMI_CONNECT_PROFILE_MATCH_DONE = 0x0008, 192 WMI_CONNECT_IGNORE_AAC_BEACON = 0x0010, 193 WMI_CONNECT_CSA_FOLLOW_BSS = 0x0020, 194 WMI_CONNECT_DO_WPA_OFFLOAD = 0x0040, 195 WMI_CONNECT_DO_NOT_DEAUTH = 0x0080, 196 }; 197 198 #define WMI_MAX_SSID_LEN (32) 199 200 struct wmi_connect_cmd { 201 u8 network_type; 202 u8 dot11_auth_mode; 203 u8 auth_mode; 204 u8 pairwise_crypto_type; 205 u8 pairwise_crypto_len; 206 u8 group_crypto_type; 207 u8 group_crypto_len; 208 u8 ssid_len; 209 u8 ssid[WMI_MAX_SSID_LEN]; 210 u8 channel; 211 u8 reserved0; 212 u8 bssid[WMI_MAC_LEN]; 213 __le32 ctrl_flags; 214 u8 dst_mac[WMI_MAC_LEN]; 215 u8 reserved1[2]; 216 } __packed; 217 218 /* 219 * WMI_DISCONNECT_STA_CMDID 220 */ 221 struct wmi_disconnect_sta_cmd { 222 u8 dst_mac[WMI_MAC_LEN]; 223 __le16 disconnect_reason; 224 } __packed; 225 226 /* 227 * WMI_SET_PMK_CMDID 228 */ 229 230 #define WMI_MIN_KEY_INDEX (0) 231 #define WMI_MAX_KEY_INDEX (3) 232 #define WMI_MAX_KEY_LEN (32) 233 #define WMI_PASSPHRASE_LEN (64) 234 #define WMI_PMK_LEN (32) 235 236 struct wmi_set_pmk_cmd { 237 u8 pmk[WMI_PMK_LEN]; 238 } __packed; 239 240 /* 241 * WMI_SET_PASSPHRASE_CMDID 242 */ 243 struct wmi_set_passphrase_cmd { 244 u8 ssid[WMI_MAX_SSID_LEN]; 245 u8 passphrase[WMI_PASSPHRASE_LEN]; 246 u8 ssid_len; 247 u8 passphrase_len; 248 } __packed; 249 250 /* 251 * WMI_ADD_CIPHER_KEY_CMDID 252 */ 253 enum wmi_key_usage { 254 WMI_KEY_USE_PAIRWISE = 0, 255 WMI_KEY_USE_GROUP = 1, 256 WMI_KEY_USE_TX = 2, /* default Tx Key - Static WEP only */ 257 }; 258 259 struct wmi_add_cipher_key_cmd { 260 u8 key_index; 261 u8 key_type; 262 u8 key_usage; /* enum wmi_key_usage */ 263 u8 key_len; 264 u8 key_rsc[8]; /* key replay sequence counter */ 265 u8 key[WMI_MAX_KEY_LEN]; 266 u8 key_op_ctrl; /* Additional Key Control information */ 267 u8 mac[WMI_MAC_LEN]; 268 } __packed; 269 270 /* 271 * WMI_DELETE_CIPHER_KEY_CMDID 272 */ 273 struct wmi_delete_cipher_key_cmd { 274 u8 key_index; 275 u8 mac[WMI_MAC_LEN]; 276 } __packed; 277 278 /* 279 * WMI_START_SCAN_CMDID 280 * 281 * Start L1 scan operation 282 * 283 * Returned events: 284 * - WMI_RX_MGMT_PACKET_EVENTID - for every probe resp. 285 * - WMI_SCAN_COMPLETE_EVENTID 286 */ 287 enum wmi_scan_type { 288 WMI_LONG_SCAN = 0, 289 WMI_SHORT_SCAN = 1, 290 WMI_PBC_SCAN = 2, 291 WMI_DIRECT_SCAN = 3, 292 WMI_ACTIVE_SCAN = 4, 293 }; 294 295 struct wmi_start_scan_cmd { 296 u8 direct_scan_mac_addr[6]; 297 u8 reserved[2]; 298 __le32 home_dwell_time; /* Max duration in the home channel(ms) */ 299 __le32 force_scan_interval; /* Time interval between scans (ms)*/ 300 u8 scan_type; /* wmi_scan_type */ 301 u8 num_channels; /* how many channels follow */ 302 struct { 303 u8 channel; 304 u8 reserved; 305 } channel_list[0]; /* channels ID's */ 306 /* 0 - 58320 MHz */ 307 /* 1 - 60480 MHz */ 308 /* 2 - 62640 MHz */ 309 } __packed; 310 311 /* 312 * WMI_SET_PROBED_SSID_CMDID 313 */ 314 #define MAX_PROBED_SSID_INDEX (3) 315 316 enum wmi_ssid_flag { 317 WMI_SSID_FLAG_DISABLE = 0, /* disables entry */ 318 WMI_SSID_FLAG_SPECIFIC = 1, /* probes specified ssid */ 319 WMI_SSID_FLAG_ANY = 2, /* probes for any ssid */ 320 }; 321 322 struct wmi_probed_ssid_cmd { 323 u8 entry_index; /* 0 to MAX_PROBED_SSID_INDEX */ 324 u8 flag; /* enum wmi_ssid_flag */ 325 u8 ssid_len; 326 u8 ssid[WMI_MAX_SSID_LEN]; 327 } __packed; 328 329 /* 330 * WMI_SET_APPIE_CMDID 331 * Add Application specified IE to a management frame 332 */ 333 #define WMI_MAX_IE_LEN (1024) 334 335 /* 336 * Frame Types 337 */ 338 enum wmi_mgmt_frame_type { 339 WMI_FRAME_BEACON = 0, 340 WMI_FRAME_PROBE_REQ = 1, 341 WMI_FRAME_PROBE_RESP = 2, 342 WMI_FRAME_ASSOC_REQ = 3, 343 WMI_FRAME_ASSOC_RESP = 4, 344 WMI_NUM_MGMT_FRAME, 345 }; 346 347 struct wmi_set_appie_cmd { 348 u8 mgmt_frm_type; /* enum wmi_mgmt_frame_type */ 349 u8 reserved; 350 __le16 ie_len; /* Length of the IE to be added to MGMT frame */ 351 u8 ie_info[0]; 352 } __packed; 353 354 /* 355 * WMI_PXMT_RANGE_CFG_CMDID 356 */ 357 struct wmi_pxmt_range_cfg_cmd { 358 u8 dst_mac[WMI_MAC_LEN]; 359 __le16 range; 360 } __packed; 361 362 /* 363 * WMI_PXMT_SNR2_RANGE_CFG_CMDID 364 */ 365 struct wmi_pxmt_snr2_range_cfg_cmd { 366 s8 snr2range_arr[WMI_PROX_RANGE_NUM-1]; 367 } __packed; 368 369 /* 370 * WMI_RF_MGMT_CMDID 371 */ 372 enum wmi_rf_mgmt_type { 373 WMI_RF_MGMT_W_DISABLE = 0, 374 WMI_RF_MGMT_W_ENABLE = 1, 375 WMI_RF_MGMT_GET_STATUS = 2, 376 }; 377 378 struct wmi_rf_mgmt_cmd { 379 __le32 rf_mgmt_type; 380 } __packed; 381 382 /* 383 * WMI_THERMAL_THROTTLING_CTRL_CMDID 384 */ 385 #define THERMAL_THROTTLING_USE_DEFAULT_MAX_TXOP_LENGTH (0xFFFFFFFF) 386 387 struct wmi_thermal_throttling_ctrl_cmd { 388 __le32 time_on_usec; 389 __le32 time_off_usec; 390 __le32 max_txop_length_usec; 391 } __packed; 392 393 /* 394 * WMI_RF_RX_TEST_CMDID 395 */ 396 struct wmi_rf_rx_test_cmd { 397 __le32 sector; 398 } __packed; 399 400 /* 401 * WMI_CORR_MEASURE_CMDID 402 */ 403 struct wmi_corr_measure_cmd { 404 s32 freq_mhz; 405 __le32 length_samples; 406 __le32 iterations; 407 } __packed; 408 409 /* 410 * WMI_SET_SSID_CMDID 411 */ 412 struct wmi_set_ssid_cmd { 413 __le32 ssid_len; 414 u8 ssid[WMI_MAX_SSID_LEN]; 415 } __packed; 416 417 /* 418 * WMI_SET_PCP_CHANNEL_CMDID 419 */ 420 struct wmi_set_pcp_channel_cmd { 421 u8 channel; 422 u8 reserved[3]; 423 } __packed; 424 425 /* 426 * WMI_BCON_CTRL_CMDID 427 */ 428 struct wmi_bcon_ctrl_cmd { 429 __le16 bcon_interval; 430 __le16 frag_num; 431 __le64 ss_mask; 432 u8 network_type; 433 u8 pcp_max_assoc_sta; 434 u8 disable_sec_offload; 435 u8 disable_sec; 436 } __packed; 437 438 /******* P2P ***********/ 439 440 /* 441 * WMI_PORT_ALLOCATE_CMDID 442 */ 443 enum wmi_port_role { 444 WMI_PORT_STA = 0, 445 WMI_PORT_PCP = 1, 446 WMI_PORT_AP = 2, 447 WMI_PORT_P2P_DEV = 3, 448 WMI_PORT_P2P_CLIENT = 4, 449 WMI_PORT_P2P_GO = 5, 450 }; 451 452 struct wmi_port_allocate_cmd { 453 u8 mac[WMI_MAC_LEN]; 454 u8 port_role; 455 u8 mid; 456 } __packed; 457 458 /* 459 * WMI_PORT_DELETE_CMDID 460 */ 461 struct wmi_delete_port_cmd { 462 u8 mid; 463 u8 reserved[3]; 464 } __packed; 465 466 /* 467 * WMI_P2P_CFG_CMDID 468 */ 469 enum wmi_discovery_mode { 470 WMI_DISCOVERY_MODE_NON_OFFLOAD = 0, 471 WMI_DISCOVERY_MODE_OFFLOAD = 1, 472 WMI_DISCOVERY_MODE_PEER2PEER = 2, 473 }; 474 475 struct wmi_p2p_cfg_cmd { 476 u8 discovery_mode; /* wmi_discovery_mode */ 477 u8 channel; 478 __le16 bcon_interval; /* base to listen/search duration calculation */ 479 } __packed; 480 481 /* 482 * WMI_POWER_MGMT_CFG_CMDID 483 */ 484 enum wmi_power_source_type { 485 WMI_POWER_SOURCE_BATTERY = 0, 486 WMI_POWER_SOURCE_OTHER = 1, 487 }; 488 489 struct wmi_power_mgmt_cfg_cmd { 490 u8 power_source; /* wmi_power_source_type */ 491 u8 reserved[3]; 492 } __packed; 493 494 /* 495 * WMI_PCP_START_CMDID 496 */ 497 struct wmi_pcp_start_cmd { 498 __le16 bcon_interval; 499 u8 pcp_max_assoc_sta; 500 u8 reserved0[9]; 501 u8 network_type; 502 u8 channel; 503 u8 disable_sec_offload; 504 u8 disable_sec; 505 } __packed; 506 507 /* 508 * WMI_SW_TX_REQ_CMDID 509 */ 510 struct wmi_sw_tx_req_cmd { 511 u8 dst_mac[WMI_MAC_LEN]; 512 __le16 len; 513 u8 payload[0]; 514 } __packed; 515 516 /* 517 * WMI_VRING_CFG_CMDID 518 */ 519 520 struct wmi_sw_ring_cfg { 521 __le64 ring_mem_base; 522 __le16 ring_size; 523 __le16 max_mpdu_size; 524 } __packed; 525 526 struct wmi_vring_cfg_schd { 527 __le16 priority; 528 __le16 timeslot_us; 529 } __packed; 530 531 enum wmi_vring_cfg_encap_trans_type { 532 WMI_VRING_ENC_TYPE_802_3 = 0, 533 WMI_VRING_ENC_TYPE_NATIVE_WIFI = 1, 534 }; 535 536 enum wmi_vring_cfg_ds_cfg { 537 WMI_VRING_DS_PBSS = 0, 538 WMI_VRING_DS_STATION = 1, 539 WMI_VRING_DS_AP = 2, 540 WMI_VRING_DS_ADDR4 = 3, 541 }; 542 543 enum wmi_vring_cfg_nwifi_ds_trans_type { 544 WMI_NWIFI_TX_TRANS_MODE_NO = 0, 545 WMI_NWIFI_TX_TRANS_MODE_AP2PBSS = 1, 546 WMI_NWIFI_TX_TRANS_MODE_STA2PBSS = 2, 547 }; 548 549 enum wmi_vring_cfg_schd_params_priority { 550 WMI_SCH_PRIO_REGULAR = 0, 551 WMI_SCH_PRIO_HIGH = 1, 552 }; 553 554 #define CIDXTID_CID_POS (0) 555 #define CIDXTID_CID_LEN (4) 556 #define CIDXTID_CID_MSK (0xF) 557 #define CIDXTID_TID_POS (4) 558 #define CIDXTID_TID_LEN (4) 559 #define CIDXTID_TID_MSK (0xF0) 560 561 struct wmi_vring_cfg { 562 struct wmi_sw_ring_cfg tx_sw_ring; 563 u8 ringid; /* 0-23 vrings */ 564 565 u8 cidxtid; 566 567 u8 encap_trans_type; 568 u8 ds_cfg; /* 802.3 DS cfg */ 569 u8 nwifi_ds_trans_type; 570 571 #define VRING_CFG_MAC_CTRL_LIFETIME_EN_POS (0) 572 #define VRING_CFG_MAC_CTRL_LIFETIME_EN_LEN (1) 573 #define VRING_CFG_MAC_CTRL_LIFETIME_EN_MSK (0x1) 574 #define VRING_CFG_MAC_CTRL_AGGR_EN_POS (1) 575 #define VRING_CFG_MAC_CTRL_AGGR_EN_LEN (1) 576 #define VRING_CFG_MAC_CTRL_AGGR_EN_MSK (0x2) 577 u8 mac_ctrl; 578 579 #define VRING_CFG_TO_RESOLUTION_VALUE_POS (0) 580 #define VRING_CFG_TO_RESOLUTION_VALUE_LEN (6) 581 #define VRING_CFG_TO_RESOLUTION_VALUE_MSK (0x3F) 582 u8 to_resolution; 583 u8 agg_max_wsize; 584 struct wmi_vring_cfg_schd schd_params; 585 } __packed; 586 587 enum wmi_vring_cfg_cmd_action { 588 WMI_VRING_CMD_ADD = 0, 589 WMI_VRING_CMD_MODIFY = 1, 590 WMI_VRING_CMD_DELETE = 2, 591 }; 592 593 struct wmi_vring_cfg_cmd { 594 __le32 action; 595 struct wmi_vring_cfg vring_cfg; 596 } __packed; 597 598 /* 599 * WMI_VRING_BA_EN_CMDID 600 */ 601 struct wmi_vring_ba_en_cmd { 602 u8 ringid; 603 u8 agg_max_wsize; 604 __le16 ba_timeout; 605 u8 amsdu; 606 } __packed; 607 608 /* 609 * WMI_VRING_BA_DIS_CMDID 610 */ 611 struct wmi_vring_ba_dis_cmd { 612 u8 ringid; 613 u8 reserved; 614 __le16 reason; 615 } __packed; 616 617 /* 618 * WMI_NOTIFY_REQ_CMDID 619 */ 620 struct wmi_notify_req_cmd { 621 u8 cid; 622 u8 year; 623 u8 month; 624 u8 day; 625 __le32 interval_usec; 626 u8 hour; 627 u8 minute; 628 u8 second; 629 u8 miliseconds; 630 } __packed; 631 632 /* 633 * WMI_CFG_RX_CHAIN_CMDID 634 */ 635 enum wmi_sniffer_cfg_mode { 636 WMI_SNIFFER_OFF = 0, 637 WMI_SNIFFER_ON = 1, 638 }; 639 640 enum wmi_sniffer_cfg_phy_info_mode { 641 WMI_SNIFFER_PHY_INFO_DISABLED = 0, 642 WMI_SNIFFER_PHY_INFO_ENABLED = 1, 643 }; 644 645 enum wmi_sniffer_cfg_phy_support { 646 WMI_SNIFFER_CP = 0, 647 WMI_SNIFFER_DP = 1, 648 WMI_SNIFFER_BOTH_PHYS = 2, 649 }; 650 651 struct wmi_sniffer_cfg { 652 __le32 mode; /* enum wmi_sniffer_cfg_mode */ 653 __le32 phy_info_mode; /* enum wmi_sniffer_cfg_phy_info_mode */ 654 __le32 phy_support; /* enum wmi_sniffer_cfg_phy_support */ 655 u8 channel; 656 u8 reserved[3]; 657 } __packed; 658 659 enum wmi_cfg_rx_chain_cmd_action { 660 WMI_RX_CHAIN_ADD = 0, 661 WMI_RX_CHAIN_DEL = 1, 662 }; 663 664 enum wmi_cfg_rx_chain_cmd_decap_trans_type { 665 WMI_DECAP_TYPE_802_3 = 0, 666 WMI_DECAP_TYPE_NATIVE_WIFI = 1, 667 WMI_DECAP_TYPE_NONE = 2, 668 }; 669 670 enum wmi_cfg_rx_chain_cmd_nwifi_ds_trans_type { 671 WMI_NWIFI_RX_TRANS_MODE_NO = 0, 672 WMI_NWIFI_RX_TRANS_MODE_PBSS2AP = 1, 673 WMI_NWIFI_RX_TRANS_MODE_PBSS2STA = 2, 674 }; 675 676 enum wmi_cfg_rx_chain_cmd_reorder_type { 677 WMI_RX_HW_REORDER = 0, 678 WMI_RX_SW_REORDER = 1, 679 }; 680 681 struct wmi_cfg_rx_chain_cmd { 682 __le32 action; 683 struct wmi_sw_ring_cfg rx_sw_ring; 684 u8 mid; 685 u8 decap_trans_type; 686 687 #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_POS (0) 688 #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_LEN (1) 689 #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_MSK (0x1) 690 u8 l2_802_3_offload_ctrl; 691 692 #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_POS (0) 693 #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_LEN (1) 694 #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_MSK (0x1) 695 #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_POS (1) 696 #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_LEN (1) 697 #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_MSK (0x2) 698 u8 l2_nwifi_offload_ctrl; 699 700 u8 vlan_id; 701 u8 nwifi_ds_trans_type; 702 703 #define L3_L4_CTRL_IPV4_CHECKSUM_EN_POS (0) 704 #define L3_L4_CTRL_IPV4_CHECKSUM_EN_LEN (1) 705 #define L3_L4_CTRL_IPV4_CHECKSUM_EN_MSK (0x1) 706 #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_POS (1) 707 #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_LEN (1) 708 #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_MSK (0x2) 709 u8 l3_l4_ctrl; 710 711 #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_POS (0) 712 #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_LEN (1) 713 #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_MSK (0x1) 714 #define RING_CTRL_OVERRIDE_WB_THRSH_POS (1) 715 #define RING_CTRL_OVERRIDE_WB_THRSH_LEN (1) 716 #define RING_CTRL_OVERRIDE_WB_THRSH_MSK (0x2) 717 #define RING_CTRL_OVERRIDE_ITR_THRSH_POS (2) 718 #define RING_CTRL_OVERRIDE_ITR_THRSH_LEN (1) 719 #define RING_CTRL_OVERRIDE_ITR_THRSH_MSK (0x4) 720 #define RING_CTRL_OVERRIDE_HOST_THRSH_POS (3) 721 #define RING_CTRL_OVERRIDE_HOST_THRSH_LEN (1) 722 #define RING_CTRL_OVERRIDE_HOST_THRSH_MSK (0x8) 723 u8 ring_ctrl; 724 725 __le16 prefetch_thrsh; 726 __le16 wb_thrsh; 727 __le32 itr_value; 728 __le16 host_thrsh; 729 u8 reorder_type; 730 u8 reserved; 731 struct wmi_sniffer_cfg sniffer_cfg; 732 } __packed; 733 734 /* 735 * WMI_RCP_ADDBA_RESP_CMDID 736 */ 737 struct wmi_rcp_addba_resp_cmd { 738 u8 cidxtid; 739 u8 dialog_token; 740 __le16 status_code; 741 __le16 ba_param_set; /* ieee80211_ba_parameterset field to send */ 742 __le16 ba_timeout; 743 } __packed; 744 745 /* 746 * WMI_RCP_DELBA_CMDID 747 */ 748 struct wmi_rcp_delba_cmd { 749 u8 cidxtid; 750 u8 reserved; 751 __le16 reason; 752 } __packed; 753 754 /* 755 * WMI_RCP_ADDBA_REQ_CMDID 756 */ 757 struct wmi_rcp_addba_req_cmd { 758 u8 cidxtid; 759 u8 dialog_token; 760 /* ieee80211_ba_parameterset field as it received */ 761 __le16 ba_param_set; 762 __le16 ba_timeout; 763 /* ieee80211_ba_seqstrl field as it received */ 764 __le16 ba_seq_ctrl; 765 } __packed; 766 767 /* 768 * WMI_SET_MAC_ADDRESS_CMDID 769 */ 770 struct wmi_set_mac_address_cmd { 771 u8 mac[WMI_MAC_LEN]; 772 u8 reserved[2]; 773 } __packed; 774 775 /* 776 * WMI_EAPOL_TX_CMDID 777 */ 778 struct wmi_eapol_tx_cmd { 779 u8 dst_mac[WMI_MAC_LEN]; 780 __le16 eapol_len; 781 u8 eapol[0]; 782 } __packed; 783 784 /* 785 * WMI_ECHO_CMDID 786 * 787 * Check FW is alive 788 * 789 * WMI_DEEP_ECHO_CMDID 790 * 791 * Check FW and ucode are alive 792 * 793 * Returned event: WMI_ECHO_RSP_EVENTID 794 * same event for both commands 795 */ 796 struct wmi_echo_cmd { 797 __le32 value; 798 } __packed; 799 800 /* 801 * WMI_TEMP_SENSE_CMDID 802 * 803 * Measure MAC and radio temperatures 804 */ 805 806 /* Possible modes for temperature measurement */ 807 enum wmi_temperature_measure_mode { 808 TEMPERATURE_USE_OLD_VALUE = 0x1, 809 TEMPERATURE_MEASURE_NOW = 0x2, 810 }; 811 812 struct wmi_temp_sense_cmd { 813 __le32 measure_baseband_en; 814 __le32 measure_rf_en; 815 __le32 measure_mode; 816 } __packed; 817 818 /* 819 * WMI Events 820 */ 821 822 /* 823 * List of Events (target to host) 824 */ 825 enum wmi_event_id { 826 WMI_READY_EVENTID = 0x1001, 827 WMI_CONNECT_EVENTID = 0x1002, 828 WMI_DISCONNECT_EVENTID = 0x1003, 829 WMI_SCAN_COMPLETE_EVENTID = 0x100a, 830 WMI_REPORT_STATISTICS_EVENTID = 0x100b, 831 WMI_RD_MEM_RSP_EVENTID = 0x1800, 832 WMI_FW_READY_EVENTID = 0x1801, 833 WMI_EXIT_FAST_MEM_ACC_MODE_EVENTID = 0x0200, 834 WMI_ECHO_RSP_EVENTID = 0x1803, 835 WMI_FS_TUNE_DONE_EVENTID = 0x180a, 836 WMI_CORR_MEASURE_EVENTID = 0x180b, 837 WMI_READ_RSSI_EVENTID = 0x180c, 838 WMI_TEMP_SENSE_DONE_EVENTID = 0x180e, 839 WMI_DC_CALIB_DONE_EVENTID = 0x180f, 840 WMI_IQ_TX_CALIB_DONE_EVENTID = 0x1811, 841 WMI_IQ_RX_CALIB_DONE_EVENTID = 0x1812, 842 WMI_SET_WORK_MODE_DONE_EVENTID = 0x1815, 843 WMI_LO_LEAKAGE_CALIB_DONE_EVENTID = 0x1816, 844 WMI_MARLON_R_ACTIVATE_DONE_EVENTID = 0x1817, 845 WMI_MARLON_R_READ_DONE_EVENTID = 0x1818, 846 WMI_MARLON_R_WRITE_DONE_EVENTID = 0x1819, 847 WMI_MARLON_R_TXRX_SEL_DONE_EVENTID = 0x181a, 848 WMI_SILENT_RSSI_CALIB_DONE_EVENTID = 0x181d, 849 WMI_RF_RX_TEST_DONE_EVENTID = 0x181e, 850 WMI_CFG_RX_CHAIN_DONE_EVENTID = 0x1820, 851 WMI_VRING_CFG_DONE_EVENTID = 0x1821, 852 WMI_BA_STATUS_EVENTID = 0x1823, 853 WMI_RCP_ADDBA_REQ_EVENTID = 0x1824, 854 WMI_ADDBA_RESP_SENT_EVENTID = 0x1825, 855 WMI_DELBA_EVENTID = 0x1826, 856 WMI_GET_SSID_EVENTID = 0x1828, 857 WMI_GET_PCP_CHANNEL_EVENTID = 0x182a, 858 WMI_SW_TX_COMPLETE_EVENTID = 0x182b, 859 860 WMI_READ_MAC_RXQ_EVENTID = 0x1830, 861 WMI_READ_MAC_TXQ_EVENTID = 0x1831, 862 WMI_WRITE_MAC_RXQ_EVENTID = 0x1832, 863 WMI_WRITE_MAC_TXQ_EVENTID = 0x1833, 864 WMI_WRITE_MAC_XQ_FIELD_EVENTID = 0x1834, 865 866 WMI_BEAFORMING_MGMT_DONE_EVENTID = 0x1836, 867 WMI_BF_TXSS_MGMT_DONE_EVENTID = 0x1837, 868 WMI_BF_RXSS_MGMT_DONE_EVENTID = 0x1839, 869 WMI_RS_MGMT_DONE_EVENTID = 0x1852, 870 WMI_RF_MGMT_STATUS_EVENTID = 0x1853, 871 WMI_THERMAL_THROTTLING_STATUS_EVENTID = 0x1855, 872 WMI_BF_SM_MGMT_DONE_EVENTID = 0x1838, 873 WMI_RX_MGMT_PACKET_EVENTID = 0x1840, 874 WMI_TX_MGMT_PACKET_EVENTID = 0x1841, 875 876 /* Performance monitoring events */ 877 WMI_DATA_PORT_OPEN_EVENTID = 0x1860, 878 WMI_WBE_LINKDOWN_EVENTID = 0x1861, 879 880 WMI_BF_CTRL_DONE_EVENTID = 0x1862, 881 WMI_NOTIFY_REQ_DONE_EVENTID = 0x1863, 882 WMI_GET_STATUS_DONE_EVENTID = 0x1864, 883 884 WMI_UNIT_TEST_EVENTID = 0x1900, 885 WMI_FLASH_READ_DONE_EVENTID = 0x1902, 886 WMI_FLASH_WRITE_DONE_EVENTID = 0x1903, 887 /*P2P*/ 888 WMI_P2P_CFG_DONE_EVENTID = 0x1910, 889 WMI_PORT_ALLOCATED_EVENTID = 0x1911, 890 WMI_PORT_DELETED_EVENTID = 0x1912, 891 WMI_LISTEN_STARTED_EVENTID = 0x1914, 892 WMI_SEARCH_STARTED_EVENTID = 0x1915, 893 WMI_DISCOVERY_STARTED_EVENTID = 0x1916, 894 WMI_DISCOVERY_STOPPED_EVENTID = 0x1917, 895 WMI_PCP_STARTED_EVENTID = 0x1918, 896 WMI_PCP_STOPPED_EVENTID = 0x1919, 897 WMI_PCP_FACTOR_EVENTID = 0x191a, 898 WMI_SET_CHANNEL_EVENTID = 0x9000, 899 WMI_ASSOC_REQ_EVENTID = 0x9001, 900 WMI_EAPOL_RX_EVENTID = 0x9002, 901 WMI_MAC_ADDR_RESP_EVENTID = 0x9003, 902 WMI_FW_VER_EVENTID = 0x9004, 903 }; 904 905 /* 906 * Events data structures 907 */ 908 909 enum wmi_fw_status { 910 WMI_FW_STATUS_SUCCESS, 911 WMI_FW_STATUS_FAILURE, 912 }; 913 914 /* 915 * WMI_RF_MGMT_STATUS_EVENTID 916 */ 917 enum wmi_rf_status { 918 WMI_RF_ENABLED = 0, 919 WMI_RF_DISABLED_HW = 1, 920 WMI_RF_DISABLED_SW = 2, 921 WMI_RF_DISABLED_HW_SW = 3, 922 }; 923 924 struct wmi_rf_mgmt_status_event { 925 __le32 rf_status; 926 } __packed; 927 928 /* 929 * WMI_THERMAL_THROTTLING_STATUS_EVENTID 930 */ 931 struct wmi_thermal_throttling_status_event { 932 __le32 time_on_usec; 933 __le32 time_off_usec; 934 __le32 max_txop_length_usec; 935 } __packed; 936 937 /* 938 * WMI_GET_STATUS_DONE_EVENTID 939 */ 940 struct wmi_get_status_done_event { 941 __le32 is_associated; 942 u8 cid; 943 u8 reserved0[3]; 944 u8 bssid[WMI_MAC_LEN]; 945 u8 channel; 946 u8 reserved1; 947 u8 network_type; 948 u8 reserved2[3]; 949 __le32 ssid_len; 950 u8 ssid[WMI_MAX_SSID_LEN]; 951 __le32 rf_status; 952 __le32 is_secured; 953 } __packed; 954 955 /* 956 * WMI_FW_VER_EVENTID 957 */ 958 struct wmi_fw_ver_event { 959 u8 major; 960 u8 minor; 961 __le16 subminor; 962 __le16 build; 963 } __packed; 964 965 /* 966 * WMI_MAC_ADDR_RESP_EVENTID 967 */ 968 struct wmi_mac_addr_resp_event { 969 u8 mac[WMI_MAC_LEN]; 970 u8 auth_mode; 971 u8 crypt_mode; 972 __le32 offload_mode; 973 } __packed; 974 975 /* 976 * WMI_EAPOL_RX_EVENTID 977 */ 978 struct wmi_eapol_rx_event { 979 u8 src_mac[WMI_MAC_LEN]; 980 __le16 eapol_len; 981 u8 eapol[0]; 982 } __packed; 983 984 /* 985 * WMI_READY_EVENTID 986 */ 987 enum wmi_phy_capability { 988 WMI_11A_CAPABILITY = 1, 989 WMI_11G_CAPABILITY = 2, 990 WMI_11AG_CAPABILITY = 3, 991 WMI_11NA_CAPABILITY = 4, 992 WMI_11NG_CAPABILITY = 5, 993 WMI_11NAG_CAPABILITY = 6, 994 WMI_11AD_CAPABILITY = 7, 995 WMI_11N_CAPABILITY_OFFSET = WMI_11NA_CAPABILITY - WMI_11A_CAPABILITY, 996 }; 997 998 struct wmi_ready_event { 999 __le32 sw_version; 1000 __le32 abi_version; 1001 u8 mac[WMI_MAC_LEN]; 1002 u8 phy_capability; /* enum wmi_phy_capability */ 1003 u8 numof_additional_mids; 1004 } __packed; 1005 1006 /* 1007 * WMI_NOTIFY_REQ_DONE_EVENTID 1008 */ 1009 struct wmi_notify_req_done_event { 1010 __le32 status; /* beamforming status, 0: fail; 1: OK; 2: retrying */ 1011 __le64 tsf; 1012 __le32 snr_val; 1013 __le32 tx_tpt; 1014 __le32 tx_goodput; 1015 __le32 rx_goodput; 1016 __le16 bf_mcs; 1017 __le16 my_rx_sector; 1018 __le16 my_tx_sector; 1019 __le16 other_rx_sector; 1020 __le16 other_tx_sector; 1021 __le16 range; 1022 u8 sqi; 1023 u8 reserved[3]; 1024 } __packed; 1025 1026 /* 1027 * WMI_CONNECT_EVENTID 1028 */ 1029 struct wmi_connect_event { 1030 u8 channel; 1031 u8 reserved0; 1032 u8 bssid[WMI_MAC_LEN]; 1033 __le16 listen_interval; 1034 __le16 beacon_interval; 1035 u8 network_type; 1036 u8 reserved1[3]; 1037 u8 beacon_ie_len; 1038 u8 assoc_req_len; 1039 u8 assoc_resp_len; 1040 u8 cid; 1041 u8 reserved2[3]; 1042 u8 assoc_info[0]; 1043 } __packed; 1044 1045 /* 1046 * WMI_DISCONNECT_EVENTID 1047 */ 1048 enum wmi_disconnect_reason { 1049 WMI_DIS_REASON_NO_NETWORK_AVAIL = 1, 1050 WMI_DIS_REASON_LOST_LINK = 2, /* bmiss */ 1051 WMI_DIS_REASON_DISCONNECT_CMD = 3, 1052 WMI_DIS_REASON_BSS_DISCONNECTED = 4, 1053 WMI_DIS_REASON_AUTH_FAILED = 5, 1054 WMI_DIS_REASON_ASSOC_FAILED = 6, 1055 WMI_DIS_REASON_NO_RESOURCES_AVAIL = 7, 1056 WMI_DIS_REASON_CSERV_DISCONNECT = 8, 1057 WMI_DIS_REASON_INVALID_PROFILE = 10, 1058 WMI_DIS_REASON_DOT11H_CHANNEL_SWITCH = 11, 1059 WMI_DIS_REASON_PROFILE_MISMATCH = 12, 1060 WMI_DIS_REASON_CONNECTION_EVICTED = 13, 1061 WMI_DIS_REASON_IBSS_MERGE = 14, 1062 }; 1063 1064 struct wmi_disconnect_event { 1065 __le16 protocol_reason_status; /* reason code, see 802.11 spec. */ 1066 u8 bssid[WMI_MAC_LEN]; /* set if known */ 1067 u8 disconnect_reason; /* see wmi_disconnect_reason */ 1068 u8 assoc_resp_len; /* not used */ 1069 u8 assoc_info[0]; /* not used */ 1070 } __packed; 1071 1072 /* 1073 * WMI_SCAN_COMPLETE_EVENTID 1074 */ 1075 enum scan_status { 1076 WMI_SCAN_SUCCESS = 0, 1077 WMI_SCAN_FAILED = 1, 1078 WMI_SCAN_ABORTED = 2, 1079 WMI_SCAN_REJECTED = 3, 1080 }; 1081 1082 struct wmi_scan_complete_event { 1083 __le32 status; /* scan_status */ 1084 } __packed; 1085 1086 /* 1087 * WMI_BA_STATUS_EVENTID 1088 */ 1089 enum wmi_vring_ba_status { 1090 WMI_BA_AGREED = 0, 1091 WMI_BA_NON_AGREED = 1, 1092 /* BA_EN in middle of teardown flow */ 1093 WMI_BA_TD_WIP = 2, 1094 /* BA_DIS or BA_EN in middle of BA SETUP flow */ 1095 WMI_BA_SETUP_WIP = 3, 1096 /* BA_EN when the BA session is already active */ 1097 WMI_BA_SESSION_ACTIVE = 4, 1098 /* BA_DIS when the BA session is not active */ 1099 WMI_BA_SESSION_NOT_ACTIVE = 5, 1100 }; 1101 1102 struct wmi_vring_ba_status_event { 1103 __le16 status; /* enum wmi_vring_ba_status */ 1104 u8 reserved[2]; 1105 u8 ringid; 1106 u8 agg_wsize; 1107 __le16 ba_timeout; 1108 u8 amsdu; 1109 } __packed; 1110 1111 /* 1112 * WMI_DELBA_EVENTID 1113 */ 1114 struct wmi_delba_event { 1115 u8 cidxtid; 1116 u8 from_initiator; 1117 __le16 reason; 1118 } __packed; 1119 1120 /* 1121 * WMI_VRING_CFG_DONE_EVENTID 1122 */ 1123 struct wmi_vring_cfg_done_event { 1124 u8 ringid; 1125 u8 status; 1126 u8 reserved[2]; 1127 __le32 tx_vring_tail_ptr; 1128 } __packed; 1129 1130 /* 1131 * WMI_ADDBA_RESP_SENT_EVENTID 1132 */ 1133 struct wmi_rcp_addba_resp_sent_event { 1134 u8 cidxtid; 1135 u8 reserved; 1136 __le16 status; 1137 } __packed; 1138 1139 /* 1140 * WMI_RCP_ADDBA_REQ_EVENTID 1141 */ 1142 struct wmi_rcp_addba_req_event { 1143 u8 cidxtid; 1144 u8 dialog_token; 1145 __le16 ba_param_set; /* ieee80211_ba_parameterset as it received */ 1146 __le16 ba_timeout; 1147 __le16 ba_seq_ctrl; /* ieee80211_ba_seqstrl field as it received */ 1148 } __packed; 1149 1150 /* 1151 * WMI_CFG_RX_CHAIN_DONE_EVENTID 1152 */ 1153 enum wmi_cfg_rx_chain_done_event_status { 1154 WMI_CFG_RX_CHAIN_SUCCESS = 1, 1155 }; 1156 1157 struct wmi_cfg_rx_chain_done_event { 1158 __le32 rx_ring_tail_ptr; /* Rx V-Ring Tail pointer */ 1159 __le32 status; 1160 } __packed; 1161 1162 /* 1163 * WMI_WBE_LINKDOWN_EVENTID 1164 */ 1165 enum wmi_wbe_link_down_event_reason { 1166 WMI_WBE_REASON_USER_REQUEST = 0, 1167 WMI_WBE_REASON_RX_DISASSOC = 1, 1168 WMI_WBE_REASON_BAD_PHY_LINK = 2, 1169 }; 1170 1171 struct wmi_wbe_link_down_event { 1172 u8 cid; 1173 u8 reserved[3]; 1174 __le32 reason; 1175 } __packed; 1176 1177 /* 1178 * WMI_DATA_PORT_OPEN_EVENTID 1179 */ 1180 struct wmi_data_port_open_event { 1181 u8 cid; 1182 u8 reserved[3]; 1183 } __packed; 1184 1185 /* 1186 * WMI_GET_PCP_CHANNEL_EVENTID 1187 */ 1188 struct wmi_get_pcp_channel_event { 1189 u8 channel; 1190 u8 reserved[3]; 1191 } __packed; 1192 1193 /* 1194 * WMI_P2P_CFG_DONE_EVENTID 1195 */ 1196 struct wmi_p2p_cfg_done_event { 1197 u8 status; /* wmi_fw_status */ 1198 u8 reserved[3]; 1199 } __packed; 1200 1201 /* 1202 * WMI_PORT_ALLOCATED_EVENTID 1203 */ 1204 struct wmi_port_allocated_event { 1205 u8 status; /* wmi_fw_status */ 1206 u8 reserved[3]; 1207 } __packed; 1208 1209 /* 1210 * WMI_PORT_DELETED_EVENTID 1211 */ 1212 struct wmi_port_deleted_event { 1213 u8 status; /* wmi_fw_status */ 1214 u8 reserved[3]; 1215 } __packed; 1216 1217 /* 1218 * WMI_LISTEN_STARTED_EVENTID 1219 */ 1220 struct wmi_listen_started_event { 1221 u8 status; /* wmi_fw_status */ 1222 u8 reserved[3]; 1223 } __packed; 1224 1225 /* 1226 * WMI_SEARCH_STARTED_EVENTID 1227 */ 1228 struct wmi_search_started_event { 1229 u8 status; /* wmi_fw_status */ 1230 u8 reserved[3]; 1231 } __packed; 1232 1233 /* 1234 * WMI_PCP_STARTED_EVENTID 1235 */ 1236 struct wmi_pcp_started_event { 1237 u8 status; /* wmi_fw_status */ 1238 u8 reserved[3]; 1239 } __packed; 1240 1241 /* 1242 * WMI_PCP_FACTOR_EVENTID 1243 */ 1244 struct wmi_pcp_factor_event { 1245 __le32 pcp_factor; 1246 } __packed; 1247 1248 /* 1249 * WMI_SW_TX_COMPLETE_EVENTID 1250 */ 1251 enum wmi_sw_tx_status { 1252 WMI_TX_SW_STATUS_SUCCESS = 0, 1253 WMI_TX_SW_STATUS_FAILED_NO_RESOURCES = 1, 1254 WMI_TX_SW_STATUS_FAILED_TX = 2, 1255 }; 1256 1257 struct wmi_sw_tx_complete_event { 1258 u8 status; /* enum wmi_sw_tx_status */ 1259 u8 reserved[3]; 1260 } __packed; 1261 1262 /* 1263 * WMI_CORR_MEASURE_EVENTID 1264 */ 1265 struct wmi_corr_measure_event { 1266 s32 i; 1267 s32 q; 1268 s32 image_i; 1269 s32 image_q; 1270 } __packed; 1271 1272 /* 1273 * WMI_READ_RSSI_EVENTID 1274 */ 1275 struct wmi_read_rssi_event { 1276 __le32 ina_rssi_adc_dbm; 1277 } __packed; 1278 1279 /* 1280 * WMI_GET_SSID_EVENTID 1281 */ 1282 struct wmi_get_ssid_event { 1283 __le32 ssid_len; 1284 u8 ssid[WMI_MAX_SSID_LEN]; 1285 } __packed; 1286 1287 /* 1288 * WMI_RX_MGMT_PACKET_EVENTID 1289 */ 1290 struct wmi_rx_mgmt_info { 1291 u8 mcs; 1292 s8 snr; 1293 u8 range; 1294 u8 sqi; 1295 __le16 stype; 1296 __le16 status; 1297 __le32 len; 1298 u8 qid; 1299 u8 mid; 1300 u8 cid; 1301 u8 channel; /* From Radio MNGR */ 1302 } __packed; 1303 1304 /* 1305 * WMI_TX_MGMT_PACKET_EVENTID 1306 */ 1307 struct wmi_tx_mgmt_packet_event { 1308 u8 payload[0]; 1309 } __packed; 1310 1311 struct wmi_rx_mgmt_packet_event { 1312 struct wmi_rx_mgmt_info info; 1313 u8 payload[0]; 1314 } __packed; 1315 1316 /* 1317 * WMI_ECHO_RSP_EVENTID 1318 */ 1319 struct wmi_echo_event { 1320 __le32 echoed_value; 1321 } __packed; 1322 1323 /* 1324 * WMI_TEMP_SENSE_DONE_EVENTID 1325 * 1326 * Measure MAC and radio temperatures 1327 */ 1328 struct wmi_temp_sense_done_event { 1329 __le32 baseband_t1000; 1330 __le32 rf_t1000; 1331 } __packed; 1332 1333 #endif /* __WILOCITY_WMI_H__ */ 1334