]> git.karo-electronics.de Git - karo-tx-linux.git/blob - drivers/net/wireless/ath/wil6210/wmi.h
Merge remote-tracking branch 'regulator/topic/s5m8767' into regulator-next
[karo-tx-linux.git] / drivers / net / wireless / ath / wil6210 / wmi.h
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__ */