1 /* 2 * Copyright (c) 2012 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 32 #define WMI_MAC_LEN (6) 33 #define WMI_PROX_RANGE_NUM (3) 34 35 /* List of Commands */ 36 enum wmi_command_id { 37 WMI_CONNECT_CMDID = 0x0001, 38 WMI_DISCONNECT_CMDID = 0x0003, 39 WMI_START_SCAN_CMDID = 0x0007, 40 WMI_SET_BSS_FILTER_CMDID = 0x0009, 41 WMI_SET_PROBED_SSID_CMDID = 0x000a, 42 WMI_SET_LISTEN_INT_CMDID = 0x000b, 43 WMI_BCON_CTRL_CMDID = 0x000f, 44 WMI_ADD_CIPHER_KEY_CMDID = 0x0016, 45 WMI_DELETE_CIPHER_KEY_CMDID = 0x0017, 46 WMI_SET_APPIE_CMDID = 0x003f, 47 WMI_GET_APPIE_CMDID = 0x0040, 48 WMI_SET_WSC_STATUS_CMDID = 0x0041, 49 WMI_PXMT_RANGE_CFG_CMDID = 0x0042, 50 WMI_PXMT_SNR2_RANGE_CFG_CMDID = 0x0043, 51 WMI_FAST_MEM_ACC_MODE_CMDID = 0x0300, 52 WMI_MEM_READ_CMDID = 0x0800, 53 WMI_MEM_WR_CMDID = 0x0801, 54 WMI_ECHO_CMDID = 0x0803, 55 WMI_DEEP_ECHO_CMDID = 0x0804, 56 WMI_CONFIG_MAC_CMDID = 0x0805, 57 WMI_CONFIG_PHY_DEBUG_CMDID = 0x0806, 58 WMI_ADD_STATION_CMDID = 0x0807, 59 WMI_ADD_DEBUG_TX_PCKT_CMDID = 0x0808, 60 WMI_PHY_GET_STATISTICS_CMDID = 0x0809, 61 WMI_FS_TUNE_CMDID = 0x080a, 62 WMI_CORR_MEASURE_CMDID = 0x080b, 63 WMI_TEMP_SENSE_CMDID = 0x080e, 64 WMI_DC_CALIB_CMDID = 0x080f, 65 WMI_SEND_TONE_CMDID = 0x0810, 66 WMI_IQ_TX_CALIB_CMDID = 0x0811, 67 WMI_IQ_RX_CALIB_CMDID = 0x0812, 68 WMI_SET_UCODE_IDLE_CMDID = 0x0813, 69 WMI_SET_WORK_MODE_CMDID = 0x0815, 70 WMI_LO_LEAKAGE_CALIB_CMDID = 0x0816, 71 WMI_MARLON_R_ACTIVATE_CMDID = 0x0817, 72 WMI_MARLON_R_READ_CMDID = 0x0818, 73 WMI_MARLON_R_WRITE_CMDID = 0x0819, 74 WMI_MARLON_R_TXRX_SEL_CMDID = 0x081a, 75 MAC_IO_STATIC_PARAMS_CMDID = 0x081b, 76 MAC_IO_DYNAMIC_PARAMS_CMDID = 0x081c, 77 WMI_SILENT_RSSI_CALIB_CMDID = 0x081d, 78 WMI_CFG_RX_CHAIN_CMDID = 0x0820, 79 WMI_VRING_CFG_CMDID = 0x0821, 80 WMI_RX_ON_CMDID = 0x0822, 81 WMI_VRING_BA_EN_CMDID = 0x0823, 82 WMI_VRING_BA_DIS_CMDID = 0x0824, 83 WMI_RCP_ADDBA_RESP_CMDID = 0x0825, 84 WMI_RCP_DELBA_CMDID = 0x0826, 85 WMI_SET_SSID_CMDID = 0x0827, 86 WMI_GET_SSID_CMDID = 0x0828, 87 WMI_SET_PCP_CHANNEL_CMDID = 0x0829, 88 WMI_GET_PCP_CHANNEL_CMDID = 0x082a, 89 WMI_SW_TX_REQ_CMDID = 0x082b, 90 WMI_RX_OFF_CMDID = 0x082c, 91 WMI_READ_MAC_RXQ_CMDID = 0x0830, 92 WMI_READ_MAC_TXQ_CMDID = 0x0831, 93 WMI_WRITE_MAC_RXQ_CMDID = 0x0832, 94 WMI_WRITE_MAC_TXQ_CMDID = 0x0833, 95 WMI_WRITE_MAC_XQ_FIELD_CMDID = 0x0834, 96 WMI_MLME_PUSH_CMDID = 0x0835, 97 WMI_BEAMFORMING_MGMT_CMDID = 0x0836, 98 WMI_BF_TXSS_MGMT_CMDID = 0x0837, 99 WMI_BF_SM_MGMT_CMDID = 0x0838, 100 WMI_BF_RXSS_MGMT_CMDID = 0x0839, 101 WMI_SET_SECTORS_CMDID = 0x0849, 102 WMI_MAINTAIN_PAUSE_CMDID = 0x0850, 103 WMI_MAINTAIN_RESUME_CMDID = 0x0851, 104 WMI_RS_MGMT_CMDID = 0x0852, 105 WMI_RF_MGMT_CMDID = 0x0853, 106 /* Performance monitoring commands */ 107 WMI_BF_CTRL_CMDID = 0x0862, 108 WMI_NOTIFY_REQ_CMDID = 0x0863, 109 WMI_GET_STATUS_CMDID = 0x0864, 110 WMI_UNIT_TEST_CMDID = 0x0900, 111 WMI_HICCUP_CMDID = 0x0901, 112 WMI_FLASH_READ_CMDID = 0x0902, 113 WMI_FLASH_WRITE_CMDID = 0x0903, 114 WMI_SECURITY_UNIT_TEST_CMDID = 0x0904, 115 116 WMI_SET_MAC_ADDRESS_CMDID = 0xf003, 117 WMI_ABORT_SCAN_CMDID = 0xf007, 118 WMI_SET_PMK_CMDID = 0xf028, 119 120 WMI_SET_PROMISCUOUS_MODE_CMDID = 0xf041, 121 WMI_GET_PMK_CMDID = 0xf048, 122 WMI_SET_PASSPHRASE_CMDID = 0xf049, 123 WMI_SEND_ASSOC_RES_CMDID = 0xf04a, 124 WMI_SET_ASSOC_REQ_RELAY_CMDID = 0xf04b, 125 WMI_EAPOL_TX_CMDID = 0xf04c, 126 WMI_MAC_ADDR_REQ_CMDID = 0xf04d, 127 WMI_FW_VER_CMDID = 0xf04e, 128 }; 129 130 /* 131 * Commands data structures 132 */ 133 134 /* 135 * Frame Types 136 */ 137 enum wmi_mgmt_frame_type { 138 WMI_FRAME_BEACON = 0, 139 WMI_FRAME_PROBE_REQ = 1, 140 WMI_FRAME_PROBE_RESP = 2, 141 WMI_FRAME_ASSOC_REQ = 3, 142 WMI_FRAME_ASSOC_RESP = 4, 143 WMI_NUM_MGMT_FRAME, 144 }; 145 146 /* 147 * WMI_CONNECT_CMDID 148 */ 149 enum wmi_network_type { 150 WMI_NETTYPE_INFRA = 0x01, 151 WMI_NETTYPE_ADHOC = 0x02, 152 WMI_NETTYPE_ADHOC_CREATOR = 0x04, 153 WMI_NETTYPE_AP = 0x10, 154 WMI_NETTYPE_P2P = 0x20, 155 WMI_NETTYPE_WBE = 0x40, /* PCIE over 60g */ 156 }; 157 158 enum wmi_dot11_auth_mode { 159 WMI_AUTH11_OPEN = 0x01, 160 WMI_AUTH11_SHARED = 0x02, 161 WMI_AUTH11_LEAP = 0x04, 162 WMI_AUTH11_WSC = 0x08, 163 }; 164 165 enum wmi_auth_mode { 166 WMI_AUTH_NONE = 0x01, 167 WMI_AUTH_WPA = 0x02, 168 WMI_AUTH_WPA2 = 0x04, 169 WMI_AUTH_WPA_PSK = 0x08, 170 WMI_AUTH_WPA2_PSK = 0x10, 171 WMI_AUTH_WPA_CCKM = 0x20, 172 WMI_AUTH_WPA2_CCKM = 0x40, 173 }; 174 175 enum wmi_crypto_type { 176 WMI_CRYPT_NONE = 0x01, 177 WMI_CRYPT_WEP = 0x02, 178 WMI_CRYPT_TKIP = 0x04, 179 WMI_CRYPT_AES = 0x08, 180 WMI_CRYPT_AES_GCMP = 0x20, 181 }; 182 183 184 enum wmi_connect_ctrl_flag_bits { 185 WMI_CONNECT_ASSOC_POLICY_USER = 0x0001, 186 WMI_CONNECT_SEND_REASSOC = 0x0002, 187 WMI_CONNECT_IGNORE_WPAx_GROUP_CIPHER = 0x0004, 188 WMI_CONNECT_PROFILE_MATCH_DONE = 0x0008, 189 WMI_CONNECT_IGNORE_AAC_BEACON = 0x0010, 190 WMI_CONNECT_CSA_FOLLOW_BSS = 0x0020, 191 WMI_CONNECT_DO_WPA_OFFLOAD = 0x0040, 192 WMI_CONNECT_DO_NOT_DEAUTH = 0x0080, 193 }; 194 195 #define WMI_MAX_SSID_LEN (32) 196 197 struct wmi_connect_cmd { 198 u8 network_type; 199 u8 dot11_auth_mode; 200 u8 auth_mode; 201 u8 pairwise_crypto_type; 202 u8 pairwise_crypto_len; 203 u8 group_crypto_type; 204 u8 group_crypto_len; 205 u8 ssid_len; 206 u8 ssid[WMI_MAX_SSID_LEN]; 207 u8 channel; 208 u8 reserved0; 209 u8 bssid[WMI_MAC_LEN]; 210 __le32 ctrl_flags; 211 u8 dst_mac[WMI_MAC_LEN]; 212 u8 reserved1[2]; 213 } __packed; 214 215 216 /* 217 * WMI_RECONNECT_CMDID 218 */ 219 struct wmi_reconnect_cmd { 220 u8 channel; /* hint */ 221 u8 reserved; 222 u8 bssid[WMI_MAC_LEN]; /* mandatory if set */ 223 } __packed; 224 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 /* 242 * WMI_SET_PASSPHRASE_CMDID 243 */ 244 struct wmi_set_passphrase_cmd { 245 u8 ssid[WMI_MAX_SSID_LEN]; 246 u8 passphrase[WMI_PASSPHRASE_LEN]; 247 u8 ssid_len; 248 u8 passphrase_len; 249 } __packed; 250 251 /* 252 * WMI_ADD_CIPHER_KEY_CMDID 253 */ 254 enum wmi_key_usage { 255 WMI_KEY_USE_PAIRWISE = 0, 256 WMI_KEY_USE_GROUP = 1, 257 WMI_KEY_USE_TX = 2, /* default Tx Key - Static WEP only */ 258 }; 259 260 struct wmi_add_cipher_key_cmd { 261 u8 key_index; 262 u8 key_type; 263 u8 key_usage; /* enum wmi_key_usage */ 264 u8 key_len; 265 u8 key_rsc[8]; /* key replay sequence counter */ 266 u8 key[WMI_MAX_KEY_LEN]; 267 u8 key_op_ctrl; /* Additional Key Control information */ 268 u8 mac[WMI_MAC_LEN]; 269 } __packed; 270 271 /* 272 * WMI_DELETE_CIPHER_KEY_CMDID 273 */ 274 struct wmi_delete_cipher_key_cmd { 275 u8 key_index; 276 u8 mac[WMI_MAC_LEN]; 277 } __packed; 278 279 280 /* 281 * WMI_START_SCAN_CMDID 282 * 283 * Start L1 scan operation 284 * 285 * Returned events: 286 * - WMI_RX_MGMT_PACKET_EVENTID - for every probe resp. 287 * - WMI_SCAN_COMPLETE_EVENTID 288 */ 289 enum wmi_scan_type { 290 WMI_LONG_SCAN = 0, 291 WMI_SHORT_SCAN = 1, 292 }; 293 294 struct wmi_start_scan_cmd { 295 u8 reserved[8]; 296 __le32 home_dwell_time; /* Max duration in the home channel(ms) */ 297 __le32 force_scan_interval; /* Time interval between scans (ms)*/ 298 u8 scan_type; /* wmi_scan_type */ 299 u8 num_channels; /* how many channels follow */ 300 struct { 301 u8 channel; 302 u8 reserved; 303 } channel_list[0]; /* channels ID's */ 304 /* 0 - 58320 MHz */ 305 /* 1 - 60480 MHz */ 306 /* 2 - 62640 MHz */ 307 } __packed; 308 309 /* 310 * WMI_SET_PROBED_SSID_CMDID 311 */ 312 #define MAX_PROBED_SSID_INDEX (15) 313 314 enum wmi_ssid_flag { 315 WMI_SSID_FLAG_DISABLE = 0, /* disables entry */ 316 WMI_SSID_FLAG_SPECIFIC = 1, /* probes specified ssid */ 317 WMI_SSID_FLAG_ANY = 2, /* probes for any ssid */ 318 }; 319 320 struct wmi_probed_ssid_cmd { 321 u8 entry_index; /* 0 to MAX_PROBED_SSID_INDEX */ 322 u8 flag; /* enum wmi_ssid_flag */ 323 u8 ssid_len; 324 u8 ssid[WMI_MAX_SSID_LEN]; 325 } __packed; 326 327 /* 328 * WMI_SET_APPIE_CMDID 329 * Add Application specified IE to a management frame 330 */ 331 struct wmi_set_appie_cmd { 332 u8 mgmt_frm_type; /* enum wmi_mgmt_frame_type */ 333 u8 reserved; 334 __le16 ie_len; /* Length of the IE to be added to MGMT frame */ 335 u8 ie_info[0]; 336 } __packed; 337 338 #define WMI_MAX_IE_LEN (1024) 339 340 struct wmi_pxmt_range_cfg_cmd { 341 u8 dst_mac[WMI_MAC_LEN]; 342 __le16 range; 343 } __packed; 344 345 struct wmi_pxmt_snr2_range_cfg_cmd { 346 s8 snr2range_arr[WMI_PROX_RANGE_NUM-1]; 347 } __packed; 348 349 /* 350 * WMI_RF_MGMT_CMDID 351 */ 352 enum wmi_rf_mgmt_type { 353 WMI_RF_MGMT_W_DISABLE = 0, 354 WMI_RF_MGMT_W_ENABLE = 1, 355 WMI_RF_MGMT_GET_STATUS = 2, 356 }; 357 358 struct wmi_rf_mgmt_cmd { 359 __le32 rf_mgmt_type; 360 } __packed; 361 362 /* 363 * WMI_SET_SSID_CMDID 364 */ 365 struct wmi_set_ssid_cmd { 366 __le32 ssid_len; 367 u8 ssid[WMI_MAX_SSID_LEN]; 368 } __packed; 369 370 /* 371 * WMI_SET_PCP_CHANNEL_CMDID 372 */ 373 struct wmi_set_pcp_channel_cmd { 374 u8 channel; 375 u8 reserved[3]; 376 } __packed; 377 378 /* 379 * WMI_BCON_CTRL_CMDID 380 */ 381 struct wmi_bcon_ctrl_cmd { 382 __le16 bcon_interval; 383 __le16 frag_num; 384 __le64 ss_mask; 385 u8 network_type; 386 u8 reserved; 387 u8 disable_sec_offload; 388 u8 disable_sec; 389 } __packed; 390 391 /* 392 * WMI_SW_TX_REQ_CMDID 393 */ 394 struct wmi_sw_tx_req_cmd { 395 u8 dst_mac[WMI_MAC_LEN]; 396 __le16 len; 397 u8 payload[0]; 398 } __packed; 399 400 /* 401 * WMI_VRING_CFG_CMDID 402 */ 403 404 struct wmi_sw_ring_cfg { 405 __le64 ring_mem_base; 406 __le16 ring_size; 407 __le16 max_mpdu_size; 408 } __packed; 409 410 struct wmi_vring_cfg_schd { 411 __le16 priority; 412 __le16 timeslot_us; 413 } __packed; 414 415 enum wmi_vring_cfg_encap_trans_type { 416 WMI_VRING_ENC_TYPE_802_3 = 0, 417 WMI_VRING_ENC_TYPE_NATIVE_WIFI = 1, 418 }; 419 420 enum wmi_vring_cfg_ds_cfg { 421 WMI_VRING_DS_PBSS = 0, 422 WMI_VRING_DS_STATION = 1, 423 WMI_VRING_DS_AP = 2, 424 WMI_VRING_DS_ADDR4 = 3, 425 }; 426 427 enum wmi_vring_cfg_nwifi_ds_trans_type { 428 WMI_NWIFI_TX_TRANS_MODE_NO = 0, 429 WMI_NWIFI_TX_TRANS_MODE_AP2PBSS = 1, 430 WMI_NWIFI_TX_TRANS_MODE_STA2PBSS = 2, 431 }; 432 433 enum wmi_vring_cfg_schd_params_priority { 434 WMI_SCH_PRIO_REGULAR = 0, 435 WMI_SCH_PRIO_HIGH = 1, 436 }; 437 438 struct wmi_vring_cfg { 439 struct wmi_sw_ring_cfg tx_sw_ring; 440 u8 ringid; /* 0-23 vrings */ 441 442 #define CIDXTID_CID_POS (0) 443 #define CIDXTID_CID_LEN (4) 444 #define CIDXTID_CID_MSK (0xF) 445 #define CIDXTID_TID_POS (4) 446 #define CIDXTID_TID_LEN (4) 447 #define CIDXTID_TID_MSK (0xF0) 448 u8 cidxtid; 449 450 u8 encap_trans_type; 451 u8 ds_cfg; /* 802.3 DS cfg */ 452 u8 nwifi_ds_trans_type; 453 454 #define VRING_CFG_MAC_CTRL_LIFETIME_EN_POS (0) 455 #define VRING_CFG_MAC_CTRL_LIFETIME_EN_LEN (1) 456 #define VRING_CFG_MAC_CTRL_LIFETIME_EN_MSK (0x1) 457 #define VRING_CFG_MAC_CTRL_AGGR_EN_POS (1) 458 #define VRING_CFG_MAC_CTRL_AGGR_EN_LEN (1) 459 #define VRING_CFG_MAC_CTRL_AGGR_EN_MSK (0x2) 460 u8 mac_ctrl; 461 462 #define VRING_CFG_TO_RESOLUTION_VALUE_POS (0) 463 #define VRING_CFG_TO_RESOLUTION_VALUE_LEN (6) 464 #define VRING_CFG_TO_RESOLUTION_VALUE_MSK (0x3F) 465 u8 to_resolution; 466 u8 agg_max_wsize; 467 struct wmi_vring_cfg_schd schd_params; 468 } __packed; 469 470 enum wmi_vring_cfg_cmd_action { 471 WMI_VRING_CMD_ADD = 0, 472 WMI_VRING_CMD_MODIFY = 1, 473 WMI_VRING_CMD_DELETE = 2, 474 }; 475 476 struct wmi_vring_cfg_cmd { 477 __le32 action; 478 struct wmi_vring_cfg vring_cfg; 479 } __packed; 480 481 /* 482 * WMI_VRING_BA_EN_CMDID 483 */ 484 struct wmi_vring_ba_en_cmd { 485 u8 ringid; 486 u8 agg_max_wsize; 487 __le16 ba_timeout; 488 } __packed; 489 490 /* 491 * WMI_VRING_BA_DIS_CMDID 492 */ 493 struct wmi_vring_ba_dis_cmd { 494 u8 ringid; 495 u8 reserved; 496 __le16 reason; 497 } __packed; 498 499 /* 500 * WMI_NOTIFY_REQ_CMDID 501 */ 502 struct wmi_notify_req_cmd { 503 u8 cid; 504 u8 reserved[3]; 505 __le32 interval_usec; 506 } __packed; 507 508 /* 509 * WMI_CFG_RX_CHAIN_CMDID 510 */ 511 enum wmi_sniffer_cfg_mode { 512 WMI_SNIFFER_OFF = 0, 513 WMI_SNIFFER_ON = 1, 514 }; 515 516 enum wmi_sniffer_cfg_phy_info_mode { 517 WMI_SNIFFER_PHY_INFO_DISABLED = 0, 518 WMI_SNIFFER_PHY_INFO_ENABLED = 1, 519 }; 520 521 enum wmi_sniffer_cfg_phy_support { 522 WMI_SNIFFER_CP = 0, 523 WMI_SNIFFER_DP = 1, 524 WMI_SNIFFER_BOTH_PHYS = 2, 525 }; 526 527 struct wmi_sniffer_cfg { 528 __le32 mode; /* enum wmi_sniffer_cfg_mode */ 529 __le32 phy_info_mode; /* enum wmi_sniffer_cfg_phy_info_mode */ 530 __le32 phy_support; /* enum wmi_sniffer_cfg_phy_support */ 531 u8 channel; 532 u8 reserved[3]; 533 } __packed; 534 535 enum wmi_cfg_rx_chain_cmd_action { 536 WMI_RX_CHAIN_ADD = 0, 537 WMI_RX_CHAIN_DEL = 1, 538 }; 539 540 enum wmi_cfg_rx_chain_cmd_decap_trans_type { 541 WMI_DECAP_TYPE_802_3 = 0, 542 WMI_DECAP_TYPE_NATIVE_WIFI = 1, 543 }; 544 545 enum wmi_cfg_rx_chain_cmd_nwifi_ds_trans_type { 546 WMI_NWIFI_RX_TRANS_MODE_NO = 0, 547 WMI_NWIFI_RX_TRANS_MODE_PBSS2AP = 1, 548 WMI_NWIFI_RX_TRANS_MODE_PBSS2STA = 2, 549 }; 550 551 struct wmi_cfg_rx_chain_cmd { 552 __le32 action; 553 struct wmi_sw_ring_cfg rx_sw_ring; 554 u8 mid; 555 u8 decap_trans_type; 556 557 #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_POS (0) 558 #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_LEN (1) 559 #define L2_802_3_OFFLOAD_CTRL_VLAN_TAG_INSERTION_MSK (0x1) 560 u8 l2_802_3_offload_ctrl; 561 562 #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_POS (0) 563 #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_LEN (1) 564 #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_QOS_MSK (0x1) 565 #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_POS (1) 566 #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_LEN (1) 567 #define L2_NWIFI_OFFLOAD_CTRL_REMOVE_PN_MSK (0x2) 568 u8 l2_nwifi_offload_ctrl; 569 570 u8 vlan_id; 571 u8 nwifi_ds_trans_type; 572 573 #define L3_L4_CTRL_IPV4_CHECKSUM_EN_POS (0) 574 #define L3_L4_CTRL_IPV4_CHECKSUM_EN_LEN (1) 575 #define L3_L4_CTRL_IPV4_CHECKSUM_EN_MSK (0x1) 576 #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_POS (1) 577 #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_LEN (1) 578 #define L3_L4_CTRL_TCPIP_CHECKSUM_EN_MSK (0x2) 579 u8 l3_l4_ctrl; 580 581 #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_POS (0) 582 #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_LEN (1) 583 #define RING_CTRL_OVERRIDE_PREFETCH_THRSH_MSK (0x1) 584 #define RING_CTRL_OVERRIDE_WB_THRSH_POS (1) 585 #define RING_CTRL_OVERRIDE_WB_THRSH_LEN (1) 586 #define RING_CTRL_OVERRIDE_WB_THRSH_MSK (0x2) 587 #define RING_CTRL_OVERRIDE_ITR_THRSH_POS (2) 588 #define RING_CTRL_OVERRIDE_ITR_THRSH_LEN (1) 589 #define RING_CTRL_OVERRIDE_ITR_THRSH_MSK (0x4) 590 #define RING_CTRL_OVERRIDE_HOST_THRSH_POS (3) 591 #define RING_CTRL_OVERRIDE_HOST_THRSH_LEN (1) 592 #define RING_CTRL_OVERRIDE_HOST_THRSH_MSK (0x8) 593 u8 ring_ctrl; 594 595 __le16 prefetch_thrsh; 596 __le16 wb_thrsh; 597 __le32 itr_value; 598 __le16 host_thrsh; 599 u8 reserved[2]; 600 struct wmi_sniffer_cfg sniffer_cfg; 601 } __packed; 602 603 /* 604 * WMI_RCP_ADDBA_RESP_CMDID 605 */ 606 struct wmi_rcp_addba_resp_cmd { 607 608 #define CIDXTID_CID_POS (0) 609 #define CIDXTID_CID_LEN (4) 610 #define CIDXTID_CID_MSK (0xF) 611 #define CIDXTID_TID_POS (4) 612 #define CIDXTID_TID_LEN (4) 613 #define CIDXTID_TID_MSK (0xF0) 614 u8 cidxtid; 615 616 u8 dialog_token; 617 __le16 status_code; 618 __le16 ba_param_set; /* ieee80211_ba_parameterset field to send */ 619 __le16 ba_timeout; 620 } __packed; 621 622 /* 623 * WMI_RCP_DELBA_CMDID 624 */ 625 struct wmi_rcp_delba_cmd { 626 627 #define CIDXTID_CID_POS (0) 628 #define CIDXTID_CID_LEN (4) 629 #define CIDXTID_CID_MSK (0xF) 630 #define CIDXTID_TID_POS (4) 631 #define CIDXTID_TID_LEN (4) 632 #define CIDXTID_TID_MSK (0xF0) 633 u8 cidxtid; 634 635 u8 reserved; 636 __le16 reason; 637 } __packed; 638 639 /* 640 * WMI_RCP_ADDBA_REQ_CMDID 641 */ 642 struct wmi_rcp_addba_req_cmd { 643 644 #define CIDXTID_CID_POS (0) 645 #define CIDXTID_CID_LEN (4) 646 #define CIDXTID_CID_MSK (0xF) 647 #define CIDXTID_TID_POS (4) 648 #define CIDXTID_TID_LEN (4) 649 #define CIDXTID_TID_MSK (0xF0) 650 u8 cidxtid; 651 652 u8 dialog_token; 653 /* ieee80211_ba_parameterset field as it received */ 654 __le16 ba_param_set; 655 __le16 ba_timeout; 656 /* ieee80211_ba_seqstrl field as it received */ 657 __le16 ba_seq_ctrl; 658 } __packed; 659 660 /* 661 * WMI_SET_MAC_ADDRESS_CMDID 662 */ 663 struct wmi_set_mac_address_cmd { 664 u8 mac[WMI_MAC_LEN]; 665 u8 reserved[2]; 666 } __packed; 667 668 669 /* 670 * WMI_EAPOL_TX_CMDID 671 */ 672 struct wmi_eapol_tx_cmd { 673 u8 dst_mac[WMI_MAC_LEN]; 674 __le16 eapol_len; 675 u8 eapol[0]; 676 } __packed; 677 678 /* 679 * WMI_ECHO_CMDID 680 * 681 * Check FW is alive 682 * 683 * WMI_DEEP_ECHO_CMDID 684 * 685 * Check FW and ucode are alive 686 * 687 * Returned event: WMI_ECHO_RSP_EVENTID 688 * same event for both commands 689 */ 690 struct wmi_echo_cmd { 691 __le32 value; 692 } __packed; 693 694 /* 695 * WMI Events 696 */ 697 698 /* 699 * List of Events (target to host) 700 */ 701 enum wmi_event_id { 702 WMI_IMM_RSP_EVENTID = 0x0000, 703 WMI_READY_EVENTID = 0x1001, 704 WMI_CONNECT_EVENTID = 0x1002, 705 WMI_DISCONNECT_EVENTID = 0x1003, 706 WMI_SCAN_COMPLETE_EVENTID = 0x100a, 707 WMI_REPORT_STATISTICS_EVENTID = 0x100b, 708 WMI_RD_MEM_RSP_EVENTID = 0x1800, 709 WMI_FW_READY_EVENTID = 0x1801, 710 WMI_EXIT_FAST_MEM_ACC_MODE_EVENTID = 0x0200, 711 WMI_ECHO_RSP_EVENTID = 0x1803, 712 WMI_CONFIG_MAC_DONE_EVENTID = 0x1805, 713 WMI_CONFIG_PHY_DEBUG_DONE_EVENTID = 0x1806, 714 WMI_ADD_STATION_DONE_EVENTID = 0x1807, 715 WMI_ADD_DEBUG_TX_PCKT_DONE_EVENTID = 0x1808, 716 WMI_PHY_GET_STATISTICS_EVENTID = 0x1809, 717 WMI_FS_TUNE_DONE_EVENTID = 0x180a, 718 WMI_CORR_MEASURE_DONE_EVENTID = 0x180b, 719 WMI_TEMP_SENSE_DONE_EVENTID = 0x180e, 720 WMI_DC_CALIB_DONE_EVENTID = 0x180f, 721 WMI_IQ_TX_CALIB_DONE_EVENTID = 0x1811, 722 WMI_IQ_RX_CALIB_DONE_EVENTID = 0x1812, 723 WMI_SET_WORK_MODE_DONE_EVENTID = 0x1815, 724 WMI_LO_LEAKAGE_CALIB_DONE_EVENTID = 0x1816, 725 WMI_MARLON_R_ACTIVATE_DONE_EVENTID = 0x1817, 726 WMI_MARLON_R_READ_DONE_EVENTID = 0x1818, 727 WMI_MARLON_R_WRITE_DONE_EVENTID = 0x1819, 728 WMI_MARLON_R_TXRX_SEL_DONE_EVENTID = 0x181a, 729 WMI_SILENT_RSSI_CALIB_DONE_EVENTID = 0x181d, 730 731 WMI_CFG_RX_CHAIN_DONE_EVENTID = 0x1820, 732 WMI_VRING_CFG_DONE_EVENTID = 0x1821, 733 WMI_RX_ON_DONE_EVENTID = 0x1822, 734 WMI_BA_STATUS_EVENTID = 0x1823, 735 WMI_RCP_ADDBA_REQ_EVENTID = 0x1824, 736 WMI_ADDBA_RESP_SENT_EVENTID = 0x1825, 737 WMI_DELBA_EVENTID = 0x1826, 738 WMI_GET_SSID_EVENTID = 0x1828, 739 WMI_GET_PCP_CHANNEL_EVENTID = 0x182a, 740 WMI_SW_TX_COMPLETE_EVENTID = 0x182b, 741 WMI_RX_OFF_DONE_EVENTID = 0x182c, 742 743 WMI_READ_MAC_RXQ_EVENTID = 0x1830, 744 WMI_READ_MAC_TXQ_EVENTID = 0x1831, 745 WMI_WRITE_MAC_RXQ_EVENTID = 0x1832, 746 WMI_WRITE_MAC_TXQ_EVENTID = 0x1833, 747 WMI_WRITE_MAC_XQ_FIELD_EVENTID = 0x1834, 748 749 WMI_BEAFORMING_MGMT_DONE_EVENTID = 0x1836, 750 WMI_BF_TXSS_MGMT_DONE_EVENTID = 0x1837, 751 WMI_BF_RXSS_MGMT_DONE_EVENTID = 0x1839, 752 WMI_RS_MGMT_DONE_EVENTID = 0x1852, 753 WMI_RF_MGMT_STATUS_EVENTID = 0x1853, 754 WMI_BF_SM_MGMT_DONE_EVENTID = 0x1838, 755 WMI_RX_MGMT_PACKET_EVENTID = 0x1840, 756 757 /* Performance monitoring events */ 758 WMI_DATA_PORT_OPEN_EVENTID = 0x1860, 759 WMI_WBE_LINKDOWN_EVENTID = 0x1861, 760 761 WMI_BF_CTRL_DONE_EVENTID = 0x1862, 762 WMI_NOTIFY_REQ_DONE_EVENTID = 0x1863, 763 WMI_GET_STATUS_DONE_EVENTID = 0x1864, 764 765 WMI_UNIT_TEST_EVENTID = 0x1900, 766 WMI_FLASH_READ_DONE_EVENTID = 0x1902, 767 WMI_FLASH_WRITE_DONE_EVENTID = 0x1903, 768 769 WMI_SET_CHANNEL_EVENTID = 0x9000, 770 WMI_ASSOC_REQ_EVENTID = 0x9001, 771 WMI_EAPOL_RX_EVENTID = 0x9002, 772 WMI_MAC_ADDR_RESP_EVENTID = 0x9003, 773 WMI_FW_VER_EVENTID = 0x9004, 774 }; 775 776 /* 777 * Events data structures 778 */ 779 780 /* 781 * WMI_RF_MGMT_STATUS_EVENTID 782 */ 783 enum wmi_rf_status { 784 WMI_RF_ENABLED = 0, 785 WMI_RF_DISABLED_HW = 1, 786 WMI_RF_DISABLED_SW = 2, 787 WMI_RF_DISABLED_HW_SW = 3, 788 }; 789 790 struct wmi_rf_mgmt_status_event { 791 __le32 rf_status; 792 } __packed; 793 794 /* 795 * WMI_GET_STATUS_DONE_EVENTID 796 */ 797 struct wmi_get_status_done_event { 798 __le32 is_associated; 799 u8 cid; 800 u8 reserved0[3]; 801 u8 bssid[WMI_MAC_LEN]; 802 u8 channel; 803 u8 reserved1; 804 u8 network_type; 805 u8 reserved2[3]; 806 __le32 ssid_len; 807 u8 ssid[WMI_MAX_SSID_LEN]; 808 __le32 rf_status; 809 __le32 is_secured; 810 } __packed; 811 812 /* 813 * WMI_FW_VER_EVENTID 814 */ 815 struct wmi_fw_ver_event { 816 u8 major; 817 u8 minor; 818 __le16 subminor; 819 __le16 build; 820 } __packed; 821 822 /* 823 * WMI_MAC_ADDR_RESP_EVENTID 824 */ 825 struct wmi_mac_addr_resp_event { 826 u8 mac[WMI_MAC_LEN]; 827 u8 auth_mode; 828 u8 crypt_mode; 829 __le32 offload_mode; 830 } __packed; 831 832 /* 833 * WMI_EAPOL_RX_EVENTID 834 */ 835 struct wmi_eapol_rx_event { 836 u8 src_mac[WMI_MAC_LEN]; 837 __le16 eapol_len; 838 u8 eapol[0]; 839 } __packed; 840 841 /* 842 * WMI_READY_EVENTID 843 */ 844 enum wmi_phy_capability { 845 WMI_11A_CAPABILITY = 1, 846 WMI_11G_CAPABILITY = 2, 847 WMI_11AG_CAPABILITY = 3, 848 WMI_11NA_CAPABILITY = 4, 849 WMI_11NG_CAPABILITY = 5, 850 WMI_11NAG_CAPABILITY = 6, 851 WMI_11AD_CAPABILITY = 7, 852 WMI_11N_CAPABILITY_OFFSET = WMI_11NA_CAPABILITY - WMI_11A_CAPABILITY, 853 }; 854 855 struct wmi_ready_event { 856 __le32 sw_version; 857 __le32 abi_version; 858 u8 mac[WMI_MAC_LEN]; 859 u8 phy_capability; /* enum wmi_phy_capability */ 860 u8 reserved; 861 } __packed; 862 863 /* 864 * WMI_NOTIFY_REQ_DONE_EVENTID 865 */ 866 struct wmi_notify_req_done_event { 867 __le32 status; 868 __le64 tsf; 869 __le32 snr_val; 870 __le32 tx_tpt; 871 __le32 tx_goodput; 872 __le32 rx_goodput; 873 __le16 bf_mcs; 874 __le16 my_rx_sector; 875 __le16 my_tx_sector; 876 __le16 other_rx_sector; 877 __le16 other_tx_sector; 878 __le16 range; 879 } __packed; 880 881 /* 882 * WMI_CONNECT_EVENTID 883 */ 884 struct wmi_connect_event { 885 u8 channel; 886 u8 reserved0; 887 u8 bssid[WMI_MAC_LEN]; 888 __le16 listen_interval; 889 __le16 beacon_interval; 890 u8 network_type; 891 u8 reserved1[3]; 892 u8 beacon_ie_len; 893 u8 assoc_req_len; 894 u8 assoc_resp_len; 895 u8 cid; 896 u8 reserved2[3]; 897 u8 assoc_info[0]; 898 } __packed; 899 900 /* 901 * WMI_DISCONNECT_EVENTID 902 */ 903 enum wmi_disconnect_reason { 904 WMI_DIS_REASON_NO_NETWORK_AVAIL = 1, 905 WMI_DIS_REASON_LOST_LINK = 2, /* bmiss */ 906 WMI_DIS_REASON_DISCONNECT_CMD = 3, 907 WMI_DIS_REASON_BSS_DISCONNECTED = 4, 908 WMI_DIS_REASON_AUTH_FAILED = 5, 909 WMI_DIS_REASON_ASSOC_FAILED = 6, 910 WMI_DIS_REASON_NO_RESOURCES_AVAIL = 7, 911 WMI_DIS_REASON_CSERV_DISCONNECT = 8, 912 WMI_DIS_REASON_INVALID_PROFILE = 10, 913 WMI_DIS_REASON_DOT11H_CHANNEL_SWITCH = 11, 914 WMI_DIS_REASON_PROFILE_MISMATCH = 12, 915 WMI_DIS_REASON_CONNECTION_EVICTED = 13, 916 WMI_DIS_REASON_IBSS_MERGE = 14, 917 }; 918 919 struct wmi_disconnect_event { 920 __le16 protocol_reason_status; /* reason code, see 802.11 spec. */ 921 u8 bssid[WMI_MAC_LEN]; /* set if known */ 922 u8 disconnect_reason; /* see wmi_disconnect_reason_e */ 923 u8 assoc_resp_len; 924 u8 assoc_info[0]; 925 } __packed; 926 927 /* 928 * WMI_SCAN_COMPLETE_EVENTID 929 */ 930 struct wmi_scan_complete_event { 931 __le32 status; 932 } __packed; 933 934 /* 935 * WMI_BA_STATUS_EVENTID 936 */ 937 enum wmi_vring_ba_status { 938 WMI_BA_AGREED = 0, 939 WMI_BA_NON_AGREED = 1, 940 }; 941 942 struct wmi_vring_ba_status_event { 943 __le16 status; 944 u8 reserved[2]; 945 u8 ringid; 946 u8 agg_wsize; 947 __le16 ba_timeout; 948 } __packed; 949 950 /* 951 * WMI_DELBA_EVENTID 952 */ 953 struct wmi_delba_event { 954 955 #define CIDXTID_CID_POS (0) 956 #define CIDXTID_CID_LEN (4) 957 #define CIDXTID_CID_MSK (0xF) 958 #define CIDXTID_TID_POS (4) 959 #define CIDXTID_TID_LEN (4) 960 #define CIDXTID_TID_MSK (0xF0) 961 u8 cidxtid; 962 963 u8 from_initiator; 964 __le16 reason; 965 } __packed; 966 967 /* 968 * WMI_VRING_CFG_DONE_EVENTID 969 */ 970 enum wmi_vring_cfg_done_event_status { 971 WMI_VRING_CFG_SUCCESS = 0, 972 WMI_VRING_CFG_FAILURE = 1, 973 }; 974 975 struct wmi_vring_cfg_done_event { 976 u8 ringid; 977 u8 status; 978 u8 reserved[2]; 979 __le32 tx_vring_tail_ptr; 980 } __packed; 981 982 /* 983 * WMI_ADDBA_RESP_SENT_EVENTID 984 */ 985 enum wmi_rcp_addba_resp_sent_event_status { 986 WMI_ADDBA_SUCCESS = 0, 987 WMI_ADDBA_FAIL = 1, 988 }; 989 990 struct wmi_rcp_addba_resp_sent_event { 991 992 #define CIDXTID_CID_POS (0) 993 #define CIDXTID_CID_LEN (4) 994 #define CIDXTID_CID_MSK (0xF) 995 #define CIDXTID_TID_POS (4) 996 #define CIDXTID_TID_LEN (4) 997 #define CIDXTID_TID_MSK (0xF0) 998 u8 cidxtid; 999 1000 u8 reserved; 1001 __le16 status; 1002 } __packed; 1003 1004 /* 1005 * WMI_RCP_ADDBA_REQ_EVENTID 1006 */ 1007 struct wmi_rcp_addba_req_event { 1008 1009 #define CIDXTID_CID_POS (0) 1010 #define CIDXTID_CID_LEN (4) 1011 #define CIDXTID_CID_MSK (0xF) 1012 #define CIDXTID_TID_POS (4) 1013 #define CIDXTID_TID_LEN (4) 1014 #define CIDXTID_TID_MSK (0xF0) 1015 u8 cidxtid; 1016 1017 u8 dialog_token; 1018 __le16 ba_param_set; /* ieee80211_ba_parameterset as it received */ 1019 __le16 ba_timeout; 1020 __le16 ba_seq_ctrl; /* ieee80211_ba_seqstrl field as it received */ 1021 } __packed; 1022 1023 /* 1024 * WMI_CFG_RX_CHAIN_DONE_EVENTID 1025 */ 1026 enum wmi_cfg_rx_chain_done_event_status { 1027 WMI_CFG_RX_CHAIN_SUCCESS = 1, 1028 }; 1029 1030 struct wmi_cfg_rx_chain_done_event { 1031 __le32 rx_ring_tail_ptr; /* Rx V-Ring Tail pointer */ 1032 __le32 status; 1033 } __packed; 1034 1035 /* 1036 * WMI_WBE_LINKDOWN_EVENTID 1037 */ 1038 enum wmi_wbe_link_down_event_reason { 1039 WMI_WBE_REASON_USER_REQUEST = 0, 1040 WMI_WBE_REASON_RX_DISASSOC = 1, 1041 WMI_WBE_REASON_BAD_PHY_LINK = 2, 1042 }; 1043 1044 struct wmi_wbe_link_down_event { 1045 u8 cid; 1046 u8 reserved[3]; 1047 __le32 reason; 1048 } __packed; 1049 1050 /* 1051 * WMI_DATA_PORT_OPEN_EVENTID 1052 */ 1053 struct wmi_data_port_open_event { 1054 u8 cid; 1055 u8 reserved[3]; 1056 } __packed; 1057 1058 /* 1059 * WMI_GET_PCP_CHANNEL_EVENTID 1060 */ 1061 struct wmi_get_pcp_channel_event { 1062 u8 channel; 1063 u8 reserved[3]; 1064 } __packed; 1065 1066 /* 1067 * WMI_SW_TX_COMPLETE_EVENTID 1068 */ 1069 enum wmi_sw_tx_status { 1070 WMI_TX_SW_STATUS_SUCCESS = 0, 1071 WMI_TX_SW_STATUS_FAILED_NO_RESOURCES = 1, 1072 WMI_TX_SW_STATUS_FAILED_TX = 2, 1073 }; 1074 1075 struct wmi_sw_tx_complete_event { 1076 u8 status; /* enum wmi_sw_tx_status */ 1077 u8 reserved[3]; 1078 } __packed; 1079 1080 /* 1081 * WMI_GET_SSID_EVENTID 1082 */ 1083 struct wmi_get_ssid_event { 1084 __le32 ssid_len; 1085 u8 ssid[WMI_MAX_SSID_LEN]; 1086 } __packed; 1087 1088 /* 1089 * WMI_RX_MGMT_PACKET_EVENTID 1090 */ 1091 struct wmi_rx_mgmt_info { 1092 u8 mcs; 1093 s8 snr; 1094 __le16 range; 1095 __le16 stype; 1096 __le16 status; 1097 __le32 len; 1098 u8 qid; 1099 u8 mid; 1100 u8 cid; 1101 u8 channel; /* From Radio MNGR */ 1102 } __packed; 1103 1104 struct wmi_rx_mgmt_packet_event { 1105 struct wmi_rx_mgmt_info info; 1106 u8 payload[0]; 1107 } __packed; 1108 1109 /* 1110 * WMI_ECHO_RSP_EVENTID 1111 */ 1112 struct wmi_echo_event { 1113 __le32 echoed_value; 1114 } __packed; 1115 1116 #endif /* __WILOCITY_WMI_H__ */ 1117