1 /* 2 * This file is part of wl1271 3 * 4 * Copyright (C) 1998-2009 Texas Instruments. All rights reserved. 5 * Copyright (C) 2009 Nokia Corporation 6 * 7 * Contact: Luciano Coelho <luciano.coelho@nokia.com> 8 * 9 * This program is free software; you can redistribute it and/or 10 * modify it under the terms of the GNU General Public License 11 * version 2 as published by the Free Software Foundation. 12 * 13 * This program is distributed in the hope that it will be useful, but 14 * WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 16 * General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 21 * 02110-1301 USA 22 * 23 */ 24 25 #ifndef __CMD_H__ 26 #define __CMD_H__ 27 28 #include "wlcore.h" 29 30 struct acx_header; 31 32 int wl1271_cmd_send(struct wl1271 *wl, u16 id, void *buf, size_t len, 33 size_t res_len); 34 int wl12xx_cmd_role_enable(struct wl1271 *wl, u8 *addr, u8 role_type, 35 u8 *role_id); 36 int wl12xx_cmd_role_disable(struct wl1271 *wl, u8 *role_id); 37 int wl12xx_cmd_role_start_sta(struct wl1271 *wl, struct wl12xx_vif *wlvif); 38 int wl12xx_cmd_role_stop_sta(struct wl1271 *wl, struct wl12xx_vif *wlvif); 39 int wl12xx_cmd_role_start_ap(struct wl1271 *wl, struct wl12xx_vif *wlvif); 40 int wl12xx_cmd_role_stop_ap(struct wl1271 *wl, struct wl12xx_vif *wlvif); 41 int wl12xx_cmd_role_start_ibss(struct wl1271 *wl, struct wl12xx_vif *wlvif); 42 int wl12xx_start_dev(struct wl1271 *wl, struct wl12xx_vif *wlvif, 43 enum ieee80211_band band, int channel); 44 int wl12xx_stop_dev(struct wl1271 *wl, struct wl12xx_vif *wlvif); 45 int wl1271_cmd_test(struct wl1271 *wl, void *buf, size_t buf_len, u8 answer); 46 int wl1271_cmd_interrogate(struct wl1271 *wl, u16 id, void *buf, 47 size_t cmd_len, size_t res_len); 48 int wl1271_cmd_configure(struct wl1271 *wl, u16 id, void *buf, size_t len); 49 int wlcore_cmd_configure_failsafe(struct wl1271 *wl, u16 id, void *buf, 50 size_t len, unsigned long valid_rets); 51 int wl1271_cmd_data_path(struct wl1271 *wl, bool enable); 52 int wl1271_cmd_ps_mode(struct wl1271 *wl, struct wl12xx_vif *wlvif, 53 u8 ps_mode, u16 auto_ps_timeout); 54 int wl1271_cmd_read_memory(struct wl1271 *wl, u32 addr, void *answer, 55 size_t len); 56 int wl1271_cmd_template_set(struct wl1271 *wl, u8 role_id, 57 u16 template_id, void *buf, size_t buf_len, 58 int index, u32 rates); 59 int wl12xx_cmd_build_null_data(struct wl1271 *wl, struct wl12xx_vif *wlvif); 60 int wl1271_cmd_build_ps_poll(struct wl1271 *wl, struct wl12xx_vif *wlvif, 61 u16 aid); 62 int wl12xx_cmd_build_probe_req(struct wl1271 *wl, struct wl12xx_vif *wlvif, 63 u8 role_id, u8 band, 64 const u8 *ssid, size_t ssid_len, 65 const u8 *ie, size_t ie_len, const u8 *common_ie, 66 size_t common_ie_len, bool sched_scan); 67 struct sk_buff *wl1271_cmd_build_ap_probe_req(struct wl1271 *wl, 68 struct wl12xx_vif *wlvif, 69 struct sk_buff *skb); 70 int wl1271_cmd_build_arp_rsp(struct wl1271 *wl, struct wl12xx_vif *wlvif); 71 int wl1271_build_qos_null_data(struct wl1271 *wl, struct ieee80211_vif *vif); 72 int wl12xx_cmd_build_klv_null_data(struct wl1271 *wl, 73 struct wl12xx_vif *wlvif); 74 int wl12xx_cmd_set_default_wep_key(struct wl1271 *wl, u8 id, u8 hlid); 75 int wl1271_cmd_set_sta_key(struct wl1271 *wl, struct wl12xx_vif *wlvif, 76 u16 action, u8 id, u8 key_type, 77 u8 key_size, const u8 *key, const u8 *addr, 78 u32 tx_seq_32, u16 tx_seq_16); 79 int wl1271_cmd_set_ap_key(struct wl1271 *wl, struct wl12xx_vif *wlvif, 80 u16 action, u8 id, u8 key_type, 81 u8 key_size, const u8 *key, u8 hlid, u32 tx_seq_32, 82 u16 tx_seq_16); 83 int wl12xx_cmd_set_peer_state(struct wl1271 *wl, struct wl12xx_vif *wlvif, 84 u8 hlid); 85 int wl12xx_roc(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 role_id, 86 enum ieee80211_band band, u8 channel); 87 int wl12xx_croc(struct wl1271 *wl, u8 role_id); 88 int wl12xx_cmd_add_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif, 89 struct ieee80211_sta *sta, u8 hlid); 90 int wl12xx_cmd_remove_peer(struct wl1271 *wl, struct wl12xx_vif *wlvif, 91 u8 hlid); 92 void wlcore_set_pending_regdomain_ch(struct wl1271 *wl, u16 channel, 93 enum ieee80211_band band); 94 int wlcore_cmd_regdomain_config_locked(struct wl1271 *wl); 95 int wl12xx_cmd_config_fwlog(struct wl1271 *wl); 96 int wl12xx_cmd_start_fwlog(struct wl1271 *wl); 97 int wl12xx_cmd_stop_fwlog(struct wl1271 *wl); 98 int wl12xx_cmd_channel_switch(struct wl1271 *wl, 99 struct wl12xx_vif *wlvif, 100 struct ieee80211_channel_switch *ch_switch); 101 int wl12xx_cmd_stop_channel_switch(struct wl1271 *wl, 102 struct wl12xx_vif *wlvif); 103 int wl12xx_allocate_link(struct wl1271 *wl, struct wl12xx_vif *wlvif, 104 u8 *hlid); 105 void wl12xx_free_link(struct wl1271 *wl, struct wl12xx_vif *wlvif, u8 *hlid); 106 int wlcore_cmd_wait_for_event_or_timeout(struct wl1271 *wl, 107 u32 mask, bool *timeout); 108 u8 wlcore_get_native_channel_type(u8 nl_channel_type); 109 110 enum wl1271_commands { 111 CMD_INTERROGATE = 1, /* use this to read information elements */ 112 CMD_CONFIGURE = 2, /* use this to write information elements */ 113 CMD_ENABLE_RX = 3, 114 CMD_ENABLE_TX = 4, 115 CMD_DISABLE_RX = 5, 116 CMD_DISABLE_TX = 6, 117 CMD_SCAN = 7, 118 CMD_STOP_SCAN = 8, 119 CMD_SET_KEYS = 9, 120 CMD_READ_MEMORY = 10, 121 CMD_WRITE_MEMORY = 11, 122 CMD_SET_TEMPLATE = 12, 123 CMD_TEST = 13, 124 CMD_NOISE_HIST = 14, 125 CMD_QUIET_ELEMENT_SET_STATE = 15, 126 CMD_SET_BCN_MODE = 16, 127 128 CMD_MEASUREMENT = 17, 129 CMD_STOP_MEASUREMENT = 18, 130 CMD_SET_PS_MODE = 19, 131 CMD_CHANNEL_SWITCH = 20, 132 CMD_STOP_CHANNEL_SWICTH = 21, 133 CMD_AP_DISCOVERY = 22, 134 CMD_STOP_AP_DISCOVERY = 23, 135 CMD_HEALTH_CHECK = 24, 136 CMD_DEBUG = 25, 137 CMD_TRIGGER_SCAN_TO = 26, 138 CMD_CONNECTION_SCAN_CFG = 27, 139 CMD_CONNECTION_SCAN_SSID_CFG = 28, 140 CMD_START_PERIODIC_SCAN = 29, 141 CMD_STOP_PERIODIC_SCAN = 30, 142 CMD_SET_PEER_STATE = 31, 143 CMD_REMAIN_ON_CHANNEL = 32, 144 CMD_CANCEL_REMAIN_ON_CHANNEL = 33, 145 CMD_CONFIG_FWLOGGER = 34, 146 CMD_START_FWLOGGER = 35, 147 CMD_STOP_FWLOGGER = 36, 148 149 /* Access point commands */ 150 CMD_ADD_PEER = 37, 151 CMD_REMOVE_PEER = 38, 152 153 /* Role API */ 154 CMD_ROLE_ENABLE = 39, 155 CMD_ROLE_DISABLE = 40, 156 CMD_ROLE_START = 41, 157 CMD_ROLE_STOP = 42, 158 159 /* DFS */ 160 CMD_START_RADAR_DETECTION = 43, 161 CMD_STOP_RADAR_DETECTION = 44, 162 163 /* WIFI Direct */ 164 CMD_WFD_START_DISCOVERY = 45, 165 CMD_WFD_STOP_DISCOVERY = 46, 166 CMD_WFD_ATTRIBUTE_CONFIG = 47, 167 CMD_GENERIC_CFG = 48, 168 CMD_NOP = 49, 169 170 /* start of 18xx specific commands */ 171 CMD_DFS_CHANNEL_CONFIG = 60, 172 CMD_SMART_CONFIG_START = 61, 173 CMD_SMART_CONFIG_STOP = 62, 174 CMD_SMART_CONFIG_SET_GROUP_KEY = 63, 175 176 CMD_CAC_START = 64, 177 CMD_CAC_STOP = 65, 178 CMD_DFS_MASTER_RESTART = 66, 179 CMD_DFS_RADAR_DETECTION_DEBUG = 67, 180 181 MAX_COMMAND_ID = 0xFFFF, 182 }; 183 184 #define MAX_CMD_PARAMS 572 185 186 enum cmd_templ { 187 CMD_TEMPL_NULL_DATA = 0, 188 CMD_TEMPL_BEACON, 189 CMD_TEMPL_CFG_PROBE_REQ_2_4, 190 CMD_TEMPL_CFG_PROBE_REQ_5, 191 CMD_TEMPL_PROBE_RESPONSE, 192 CMD_TEMPL_QOS_NULL_DATA, 193 CMD_TEMPL_PS_POLL, 194 CMD_TEMPL_KLV, 195 CMD_TEMPL_DISCONNECT, 196 CMD_TEMPL_APP_PROBE_REQ_2_4_LEGACY, 197 CMD_TEMPL_APP_PROBE_REQ_5_LEGACY, 198 CMD_TEMPL_BAR, /* for firmware internal use only */ 199 CMD_TEMPL_CTS, /* 200 * For CTS-to-self (FastCTS) mechanism 201 * for BT/WLAN coexistence (SoftGemini). */ 202 CMD_TEMPL_AP_BEACON, 203 CMD_TEMPL_AP_PROBE_RESPONSE, 204 CMD_TEMPL_ARP_RSP, 205 CMD_TEMPL_DEAUTH_AP, 206 CMD_TEMPL_TEMPORARY, 207 CMD_TEMPL_LINK_MEASUREMENT_REPORT, 208 CMD_TEMPL_PROBE_REQ_2_4_PERIODIC, 209 CMD_TEMPL_PROBE_REQ_5_PERIODIC, 210 211 CMD_TEMPL_MAX = 0xff 212 }; 213 214 /* unit ms */ 215 #define WL1271_COMMAND_TIMEOUT 2000 216 #define WL1271_CMD_TEMPL_DFLT_SIZE 252 217 #define WL1271_CMD_TEMPL_MAX_SIZE 512 218 #define WL1271_EVENT_TIMEOUT 5000 219 220 struct wl1271_cmd_header { 221 __le16 id; 222 __le16 status; 223 /* payload */ 224 u8 data[0]; 225 } __packed; 226 227 #define WL1271_CMD_MAX_PARAMS 572 228 229 struct wl1271_command { 230 struct wl1271_cmd_header header; 231 u8 parameters[WL1271_CMD_MAX_PARAMS]; 232 } __packed; 233 234 enum { 235 CMD_MAILBOX_IDLE = 0, 236 CMD_STATUS_SUCCESS = 1, 237 CMD_STATUS_UNKNOWN_CMD = 2, 238 CMD_STATUS_UNKNOWN_IE = 3, 239 CMD_STATUS_REJECT_MEAS_SG_ACTIVE = 11, 240 CMD_STATUS_RX_BUSY = 13, 241 CMD_STATUS_INVALID_PARAM = 14, 242 CMD_STATUS_TEMPLATE_TOO_LARGE = 15, 243 CMD_STATUS_OUT_OF_MEMORY = 16, 244 CMD_STATUS_STA_TABLE_FULL = 17, 245 CMD_STATUS_RADIO_ERROR = 18, 246 CMD_STATUS_WRONG_NESTING = 19, 247 CMD_STATUS_TIMEOUT = 21, /* Driver internal use.*/ 248 CMD_STATUS_FW_RESET = 22, /* Driver internal use.*/ 249 CMD_STATUS_TEMPLATE_OOM = 23, 250 CMD_STATUS_NO_RX_BA_SESSION = 24, 251 252 MAX_COMMAND_STATUS 253 }; 254 255 #define CMDMBOX_HEADER_LEN 4 256 #define CMDMBOX_INFO_ELEM_HEADER_LEN 4 257 258 enum { 259 BSS_TYPE_IBSS = 0, 260 BSS_TYPE_STA_BSS = 2, 261 BSS_TYPE_AP_BSS = 3, 262 MAX_BSS_TYPE = 0xFF 263 }; 264 265 #define WL1271_JOIN_CMD_CTRL_TX_FLUSH 0x80 /* Firmware flushes all Tx */ 266 #define WL1271_JOIN_CMD_TX_SESSION_OFFSET 1 267 #define WL1271_JOIN_CMD_BSS_TYPE_5GHZ 0x10 268 269 struct wl12xx_cmd_role_enable { 270 struct wl1271_cmd_header header; 271 272 u8 role_id; 273 u8 role_type; 274 u8 mac_address[ETH_ALEN]; 275 } __packed; 276 277 struct wl12xx_cmd_role_disable { 278 struct wl1271_cmd_header header; 279 280 u8 role_id; 281 u8 padding[3]; 282 } __packed; 283 284 enum wlcore_band { 285 WLCORE_BAND_2_4GHZ = 0, 286 WLCORE_BAND_5GHZ = 1, 287 WLCORE_BAND_JAPAN_4_9_GHZ = 2, 288 WLCORE_BAND_DEFAULT = WLCORE_BAND_2_4GHZ, 289 WLCORE_BAND_INVALID = 0x7E, 290 WLCORE_BAND_MAX_RADIO = 0x7F, 291 }; 292 293 enum wlcore_channel_type { 294 WLCORE_CHAN_NO_HT, 295 WLCORE_CHAN_HT20, 296 WLCORE_CHAN_HT40MINUS, 297 WLCORE_CHAN_HT40PLUS 298 }; 299 300 struct wl12xx_cmd_role_start { 301 struct wl1271_cmd_header header; 302 303 u8 role_id; 304 u8 band; 305 u8 channel; 306 307 /* enum wlcore_channel_type */ 308 u8 channel_type; 309 310 union { 311 struct { 312 u8 hlid; 313 u8 session; 314 u8 padding_1[54]; 315 } __packed device; 316 /* sta & p2p_cli use the same struct */ 317 struct { 318 u8 bssid[ETH_ALEN]; 319 u8 hlid; /* data hlid */ 320 u8 session; 321 __le32 remote_rates; /* remote supported rates */ 322 323 /* 324 * The target uses this field to determine the rate at 325 * which to transmit control frame responses (such as 326 * ACK or CTS frames). 327 */ 328 __le32 basic_rate_set; 329 __le32 local_rates; /* local supported rates */ 330 331 u8 ssid_type; 332 u8 ssid_len; 333 u8 ssid[IEEE80211_MAX_SSID_LEN]; 334 335 __le16 beacon_interval; /* in TBTTs */ 336 } __packed sta; 337 struct { 338 u8 bssid[ETH_ALEN]; 339 u8 hlid; /* data hlid */ 340 u8 dtim_interval; 341 __le32 remote_rates; /* remote supported rates */ 342 343 __le32 basic_rate_set; 344 __le32 local_rates; /* local supported rates */ 345 346 u8 ssid_type; 347 u8 ssid_len; 348 u8 ssid[IEEE80211_MAX_SSID_LEN]; 349 350 __le16 beacon_interval; /* in TBTTs */ 351 352 u8 padding_1[4]; 353 } __packed ibss; 354 /* ap & p2p_go use the same struct */ 355 struct { 356 __le16 aging_period; /* in secs */ 357 u8 beacon_expiry; /* in ms */ 358 u8 bss_index; 359 /* The host link id for the AP's global queue */ 360 u8 global_hlid; 361 /* The host link id for the AP's broadcast queue */ 362 u8 broadcast_hlid; 363 364 __le16 beacon_interval; /* in TBTTs */ 365 366 __le32 basic_rate_set; 367 __le32 local_rates; /* local supported rates */ 368 369 u8 dtim_interval; 370 371 u8 ssid_type; 372 u8 ssid_len; 373 u8 ssid[IEEE80211_MAX_SSID_LEN]; 374 375 u8 reset_tsf; 376 377 /* 378 * ap supports wmm (note that there is additional 379 * per-sta wmm configuration) 380 */ 381 u8 wmm; 382 383 u8 bcast_session_id; 384 u8 global_session_id; 385 u8 padding_1[1]; 386 } __packed ap; 387 }; 388 } __packed; 389 390 struct wl12xx_cmd_role_stop { 391 struct wl1271_cmd_header header; 392 393 u8 role_id; 394 u8 disc_type; /* only STA and P2P_CLI */ 395 __le16 reason; /* only STA and P2P_CLI */ 396 } __packed; 397 398 struct cmd_enabledisable_path { 399 struct wl1271_cmd_header header; 400 401 u8 channel; 402 u8 padding[3]; 403 } __packed; 404 405 #define WL1271_RATE_AUTOMATIC 0 406 407 struct wl1271_cmd_template_set { 408 struct wl1271_cmd_header header; 409 410 u8 role_id; 411 u8 template_type; 412 __le16 len; 413 u8 index; /* relevant only for KLV_TEMPLATE type */ 414 u8 padding[3]; 415 416 __le32 enabled_rates; 417 u8 short_retry_limit; 418 u8 long_retry_limit; 419 u8 aflags; 420 u8 reserved; 421 422 u8 template_data[WL1271_CMD_TEMPL_MAX_SIZE]; 423 } __packed; 424 425 #define TIM_ELE_ID 5 426 #define PARTIAL_VBM_MAX 251 427 428 struct wl1271_tim { 429 u8 identity; 430 u8 length; 431 u8 dtim_count; 432 u8 dtim_period; 433 u8 bitmap_ctrl; 434 u8 pvb_field[PARTIAL_VBM_MAX]; /* Partial Virtual Bitmap */ 435 } __packed; 436 437 enum wl1271_cmd_ps_mode { 438 STATION_AUTO_PS_MODE, /* Dynamic Power Save */ 439 STATION_ACTIVE_MODE, 440 STATION_POWER_SAVE_MODE 441 }; 442 443 struct wl1271_cmd_ps_params { 444 struct wl1271_cmd_header header; 445 446 u8 role_id; 447 u8 ps_mode; /* STATION_* */ 448 u16 auto_ps_timeout; 449 } __packed; 450 451 /* HW encryption keys */ 452 #define NUM_ACCESS_CATEGORIES_COPY 4 453 454 enum wl1271_cmd_key_action { 455 KEY_ADD_OR_REPLACE = 1, 456 KEY_REMOVE = 2, 457 KEY_SET_ID = 3, 458 MAX_KEY_ACTION = 0xffff, 459 }; 460 461 enum wl1271_cmd_lid_key_type { 462 UNICAST_LID_TYPE = 0, 463 BROADCAST_LID_TYPE = 1, 464 WEP_DEFAULT_LID_TYPE = 2 465 }; 466 467 enum wl1271_cmd_key_type { 468 KEY_NONE = 0, 469 KEY_WEP = 1, 470 KEY_TKIP = 2, 471 KEY_AES = 3, 472 KEY_GEM = 4, 473 }; 474 475 struct wl1271_cmd_set_keys { 476 struct wl1271_cmd_header header; 477 478 /* 479 * Indicates whether the HLID is a unicast key set 480 * or broadcast key set. A special value 0xFF is 481 * used to indicate that the HLID is on WEP-default 482 * (multi-hlids). of type wl1271_cmd_lid_key_type. 483 */ 484 u8 hlid; 485 486 /* 487 * In WEP-default network (hlid == 0xFF) used to 488 * indicate which network STA/IBSS/AP role should be 489 * changed 490 */ 491 u8 lid_key_type; 492 493 /* 494 * Key ID - For TKIP and AES key types, this field 495 * indicates the value that should be inserted into 496 * the KeyID field of frames transmitted using this 497 * key entry. For broadcast keys the index use as a 498 * marker for TX/RX key. 499 * For WEP default network (HLID=0xFF), this field 500 * indicates the ID of the key to add or remove. 501 */ 502 u8 key_id; 503 u8 reserved_1; 504 505 /* key_action_e */ 506 __le16 key_action; 507 508 /* key size in bytes */ 509 u8 key_size; 510 511 /* key_type_e */ 512 u8 key_type; 513 514 /* This field holds the security key data to add to the STA table */ 515 u8 key[MAX_KEY_SIZE]; 516 __le16 ac_seq_num16[NUM_ACCESS_CATEGORIES_COPY]; 517 __le32 ac_seq_num32[NUM_ACCESS_CATEGORIES_COPY]; 518 } __packed; 519 520 struct wl1271_cmd_test_header { 521 u8 id; 522 u8 padding[3]; 523 } __packed; 524 525 enum wl1271_channel_tune_bands { 526 WL1271_CHANNEL_TUNE_BAND_2_4, 527 WL1271_CHANNEL_TUNE_BAND_5, 528 WL1271_CHANNEL_TUNE_BAND_4_9 529 }; 530 531 #define WL1271_PD_REFERENCE_POINT_BAND_B_G 0 532 533 /* 534 * There are three types of disconnections: 535 * 536 * DISCONNECT_IMMEDIATE: the fw doesn't send any frames 537 * DISCONNECT_DEAUTH: the fw generates a DEAUTH request with the reason 538 * we have passed 539 * DISCONNECT_DISASSOC: the fw generates a DESASSOC request with the reason 540 * we have passed 541 */ 542 enum wl1271_disconnect_type { 543 DISCONNECT_IMMEDIATE, 544 DISCONNECT_DEAUTH, 545 DISCONNECT_DISASSOC 546 }; 547 548 #define WL1271_CMD_STA_STATE_CONNECTED 1 549 550 struct wl12xx_cmd_set_peer_state { 551 struct wl1271_cmd_header header; 552 553 u8 hlid; 554 u8 state; 555 556 /* 557 * wmm is relevant for sta role only. 558 * ap role configures the per-sta wmm params in 559 * the add_peer command. 560 */ 561 u8 wmm; 562 u8 padding[1]; 563 } __packed; 564 565 struct wl12xx_cmd_roc { 566 struct wl1271_cmd_header header; 567 568 u8 role_id; 569 u8 channel; 570 u8 band; 571 u8 padding; 572 }; 573 574 struct wl12xx_cmd_croc { 575 struct wl1271_cmd_header header; 576 577 u8 role_id; 578 u8 padding[3]; 579 }; 580 581 enum wl12xx_ssid_type { 582 WL12XX_SSID_TYPE_PUBLIC = 0, 583 WL12XX_SSID_TYPE_HIDDEN = 1, 584 WL12XX_SSID_TYPE_ANY = 2, 585 }; 586 587 enum wl1271_psd_type { 588 WL1271_PSD_LEGACY = 0, 589 WL1271_PSD_UPSD_TRIGGER = 1, 590 WL1271_PSD_LEGACY_PSPOLL = 2, 591 WL1271_PSD_SAPSD = 3 592 }; 593 594 struct wl12xx_cmd_add_peer { 595 struct wl1271_cmd_header header; 596 597 u8 addr[ETH_ALEN]; 598 u8 hlid; 599 u8 aid; 600 u8 psd_type[NUM_ACCESS_CATEGORIES_COPY]; 601 __le32 supported_rates; 602 u8 bss_index; 603 u8 sp_len; 604 u8 wmm; 605 u8 session_id; 606 u8 role_id; 607 u8 padding[3]; 608 } __packed; 609 610 struct wl12xx_cmd_remove_peer { 611 struct wl1271_cmd_header header; 612 613 u8 hlid; 614 u8 reason_opcode; 615 u8 send_deauth_flag; 616 u8 role_id; 617 } __packed; 618 619 /* 620 * Continuous mode - packets are transferred to the host periodically 621 * via the data path. 622 * On demand - Log messages are stored in a cyclic buffer in the 623 * firmware, and only transferred to the host when explicitly requested 624 */ 625 enum wl12xx_fwlogger_log_mode { 626 WL12XX_FWLOG_CONTINUOUS, 627 WL12XX_FWLOG_ON_DEMAND 628 }; 629 630 /* Include/exclude timestamps from the log messages */ 631 enum wl12xx_fwlogger_timestamp { 632 WL12XX_FWLOG_TIMESTAMP_DISABLED, 633 WL12XX_FWLOG_TIMESTAMP_ENABLED 634 }; 635 636 /* 637 * Logs can be routed to the debug pinouts (where available), to the host bus 638 * (SDIO/SPI), or dropped 639 */ 640 enum wl12xx_fwlogger_output { 641 WL12XX_FWLOG_OUTPUT_NONE, 642 WL12XX_FWLOG_OUTPUT_DBG_PINS, 643 WL12XX_FWLOG_OUTPUT_HOST, 644 }; 645 646 struct wl12xx_cmd_regdomain_dfs_config { 647 struct wl1271_cmd_header header; 648 649 __le32 ch_bit_map1; 650 __le32 ch_bit_map2; 651 u8 dfs_region; 652 u8 padding[3]; 653 } __packed; 654 655 struct wl12xx_cmd_config_fwlog { 656 struct wl1271_cmd_header header; 657 658 /* See enum wl12xx_fwlogger_log_mode */ 659 u8 logger_mode; 660 661 /* Minimum log level threshold */ 662 u8 log_severity; 663 664 /* Include/exclude timestamps from the log messages */ 665 u8 timestamp; 666 667 /* See enum wl1271_fwlogger_output */ 668 u8 output; 669 670 /* Regulates the frequency of log messages */ 671 u8 threshold; 672 673 u8 padding[3]; 674 } __packed; 675 676 struct wl12xx_cmd_start_fwlog { 677 struct wl1271_cmd_header header; 678 } __packed; 679 680 struct wl12xx_cmd_stop_fwlog { 681 struct wl1271_cmd_header header; 682 } __packed; 683 684 struct wl12xx_cmd_stop_channel_switch { 685 struct wl1271_cmd_header header; 686 687 u8 role_id; 688 u8 padding[3]; 689 } __packed; 690 691 /* Used to check radio status after calibration */ 692 #define MAX_TLV_LENGTH 500 693 #define TEST_CMD_P2G_CAL 2 /* TX BiP */ 694 695 struct wl1271_cmd_cal_p2g { 696 struct wl1271_cmd_header header; 697 698 struct wl1271_cmd_test_header test; 699 700 __le32 ver; 701 __le16 len; 702 u8 buf[MAX_TLV_LENGTH]; 703 u8 type; 704 u8 padding; 705 706 __le16 radio_status; 707 708 u8 sub_band_mask; 709 u8 padding2; 710 } __packed; 711 712 #endif /* __WL1271_CMD_H__ */ 713