Add the rt linux 4.1.3-rt3 as base
[kvmfornfv.git] / kernel / drivers / net / wireless / ti / wlcore / cmd.h
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__ */