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