cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

wmi.h (61417B)


      1/*
      2 * Copyright (c) 2010-2011 Atheros Communications Inc.
      3 * Copyright (c) 2011-2012 Qualcomm Atheros, Inc.
      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).  It includes definitions of all the
     21 * commands and events. Commands are messages from the host to the WM.
     22 * Events and Replies are messages from the WM to the host.
     23 */
     24
     25#ifndef WMI_H
     26#define WMI_H
     27
     28#include <linux/ieee80211.h>
     29
     30#include "htc.h"
     31
     32#define HTC_PROTOCOL_VERSION		0x0002
     33#define WMI_PROTOCOL_VERSION		0x0002
     34#define WMI_CONTROL_MSG_MAX_LEN		256
     35#define is_ethertype(type_or_len)	((type_or_len) >= 0x0600)
     36
     37#define IP_ETHERTYPE		0x0800
     38
     39#define WMI_IMPLICIT_PSTREAM	0xFF
     40#define WMI_MAX_THINSTREAM	15
     41
     42#define SSID_IE_LEN_INDEX	13
     43
     44/* Host side link management data structures */
     45#define SIG_QUALITY_THRESH_LVLS		6
     46#define SIG_QUALITY_UPPER_THRESH_LVLS	SIG_QUALITY_THRESH_LVLS
     47#define SIG_QUALITY_LOWER_THRESH_LVLS	SIG_QUALITY_THRESH_LVLS
     48
     49#define A_BAND_24GHZ           0
     50#define A_BAND_5GHZ            1
     51#define ATH6KL_NUM_BANDS       2
     52
     53/* in ms */
     54#define WMI_IMPLICIT_PSTREAM_INACTIVITY_INT 5000
     55
     56/*
     57 * There are no signed versions of __le16 and __le32, so for a temporary
     58 * solution come up with our own version. The idea is from fs/ntfs/types.h.
     59 *
     60 * Use a_ prefix so that it doesn't conflict if we get proper support to
     61 * linux/types.h.
     62 */
     63typedef __s16 __bitwise a_sle16;
     64typedef __s32 __bitwise a_sle32;
     65
     66static inline a_sle32 a_cpu_to_sle32(s32 val)
     67{
     68	return (__force a_sle32) cpu_to_le32(val);
     69}
     70
     71static inline s32 a_sle32_to_cpu(a_sle32 val)
     72{
     73	return le32_to_cpu((__force __le32) val);
     74}
     75
     76static inline a_sle16 a_cpu_to_sle16(s16 val)
     77{
     78	return (__force a_sle16) cpu_to_le16(val);
     79}
     80
     81static inline s16 a_sle16_to_cpu(a_sle16 val)
     82{
     83	return le16_to_cpu((__force __le16) val);
     84}
     85
     86struct sq_threshold_params {
     87	s16 upper_threshold[SIG_QUALITY_UPPER_THRESH_LVLS];
     88	s16 lower_threshold[SIG_QUALITY_LOWER_THRESH_LVLS];
     89	u32 upper_threshold_valid_count;
     90	u32 lower_threshold_valid_count;
     91	u32 polling_interval;
     92	u8 weight;
     93	u8 last_rssi;
     94	u8 last_rssi_poll_event;
     95};
     96
     97struct wmi_data_sync_bufs {
     98	u8 traffic_class;
     99	struct sk_buff *skb;
    100};
    101
    102/* WMM stream classes */
    103#define WMM_NUM_AC  4
    104#define WMM_AC_BE   0		/* best effort */
    105#define WMM_AC_BK   1		/* background */
    106#define WMM_AC_VI   2		/* video */
    107#define WMM_AC_VO   3		/* voice */
    108
    109#define WMI_VOICE_USER_PRIORITY		0x7
    110
    111struct wmi {
    112	u16 stream_exist_for_ac[WMM_NUM_AC];
    113	u8 fat_pipe_exist;
    114	struct ath6kl *parent_dev;
    115	u8 pwr_mode;
    116
    117	/* protects fat_pipe_exist and stream_exist_for_ac */
    118	spinlock_t lock;
    119	enum htc_endpoint_id ep_id;
    120	struct sq_threshold_params
    121	    sq_threshld[SIGNAL_QUALITY_METRICS_NUM_MAX];
    122	bool is_wmm_enabled;
    123	u8 traffic_class;
    124	bool is_probe_ssid;
    125
    126	u8 *last_mgmt_tx_frame;
    127	size_t last_mgmt_tx_frame_len;
    128	u8 saved_pwr_mode;
    129};
    130
    131struct host_app_area {
    132	__le32 wmi_protocol_ver;
    133} __packed;
    134
    135enum wmi_msg_type {
    136	DATA_MSGTYPE = 0x0,
    137	CNTL_MSGTYPE,
    138	SYNC_MSGTYPE,
    139	OPT_MSGTYPE,
    140};
    141
    142/*
    143 * Macros for operating on WMI_DATA_HDR (info) field
    144 */
    145
    146#define WMI_DATA_HDR_MSG_TYPE_MASK  0x03
    147#define WMI_DATA_HDR_MSG_TYPE_SHIFT 0
    148#define WMI_DATA_HDR_UP_MASK        0x07
    149#define WMI_DATA_HDR_UP_SHIFT       2
    150
    151/* In AP mode, the same bit (b5) is used to indicate Power save state in
    152 * the Rx dir and More data bit state in the tx direction.
    153 */
    154#define WMI_DATA_HDR_PS_MASK        0x1
    155#define WMI_DATA_HDR_PS_SHIFT       5
    156
    157#define WMI_DATA_HDR_MORE	0x20
    158
    159enum wmi_data_hdr_data_type {
    160	WMI_DATA_HDR_DATA_TYPE_802_3 = 0,
    161	WMI_DATA_HDR_DATA_TYPE_802_11,
    162
    163	/* used to be used for the PAL */
    164	WMI_DATA_HDR_DATA_TYPE_ACL,
    165};
    166
    167/* Bitmap of data header flags */
    168enum wmi_data_hdr_flags {
    169	WMI_DATA_HDR_FLAGS_MORE = 0x1,
    170	WMI_DATA_HDR_FLAGS_EOSP = 0x2,
    171	WMI_DATA_HDR_FLAGS_UAPSD = 0x4,
    172};
    173
    174#define WMI_DATA_HDR_DATA_TYPE_MASK     0x3
    175#define WMI_DATA_HDR_DATA_TYPE_SHIFT    6
    176
    177/* Macros for operating on WMI_DATA_HDR (info2) field */
    178#define WMI_DATA_HDR_SEQNO_MASK     0xFFF
    179#define WMI_DATA_HDR_SEQNO_SHIFT    0
    180
    181#define WMI_DATA_HDR_AMSDU_MASK     0x1
    182#define WMI_DATA_HDR_AMSDU_SHIFT    12
    183
    184#define WMI_DATA_HDR_META_MASK      0x7
    185#define WMI_DATA_HDR_META_SHIFT     13
    186
    187#define WMI_DATA_HDR_PAD_BEFORE_DATA_MASK               0xFF
    188#define WMI_DATA_HDR_PAD_BEFORE_DATA_SHIFT              0x8
    189
    190/* Macros for operating on WMI_DATA_HDR (info3) field */
    191#define WMI_DATA_HDR_IF_IDX_MASK    0xF
    192
    193#define WMI_DATA_HDR_TRIG	    0x10
    194#define WMI_DATA_HDR_EOSP	    0x10
    195
    196struct wmi_data_hdr {
    197	s8 rssi;
    198
    199	/*
    200	 * usage of 'info' field(8-bit):
    201	 *
    202	 *  b1:b0       - WMI_MSG_TYPE
    203	 *  b4:b3:b2    - UP(tid)
    204	 *  b5          - Used in AP mode.
    205	 *  More-data in tx dir, PS in rx.
    206	 *  b7:b6       - Dot3 header(0),
    207	 *                Dot11 Header(1),
    208	 *                ACL data(2)
    209	 */
    210	u8 info;
    211
    212	/*
    213	 * usage of 'info2' field(16-bit):
    214	 *
    215	 * b11:b0       - seq_no
    216	 * b12          - A-MSDU?
    217	 * b15:b13      - META_DATA_VERSION 0 - 7
    218	 */
    219	__le16 info2;
    220
    221	/*
    222	 * usage of info3, 16-bit:
    223	 * b3:b0	- Interface index
    224	 * b4		- uAPSD trigger in rx & EOSP in tx
    225	 * b15:b5	- Reserved
    226	 */
    227	__le16 info3;
    228} __packed;
    229
    230static inline u8 wmi_data_hdr_get_up(struct wmi_data_hdr *dhdr)
    231{
    232	return (dhdr->info >> WMI_DATA_HDR_UP_SHIFT) & WMI_DATA_HDR_UP_MASK;
    233}
    234
    235static inline void wmi_data_hdr_set_up(struct wmi_data_hdr *dhdr,
    236				       u8 usr_pri)
    237{
    238	dhdr->info &= ~(WMI_DATA_HDR_UP_MASK << WMI_DATA_HDR_UP_SHIFT);
    239	dhdr->info |= usr_pri << WMI_DATA_HDR_UP_SHIFT;
    240}
    241
    242static inline u8 wmi_data_hdr_get_dot11(struct wmi_data_hdr *dhdr)
    243{
    244	u8 data_type;
    245
    246	data_type = (dhdr->info >> WMI_DATA_HDR_DATA_TYPE_SHIFT) &
    247				   WMI_DATA_HDR_DATA_TYPE_MASK;
    248	return (data_type == WMI_DATA_HDR_DATA_TYPE_802_11);
    249}
    250
    251static inline u16 wmi_data_hdr_get_seqno(struct wmi_data_hdr *dhdr)
    252{
    253	return (le16_to_cpu(dhdr->info2) >> WMI_DATA_HDR_SEQNO_SHIFT) &
    254				WMI_DATA_HDR_SEQNO_MASK;
    255}
    256
    257static inline u8 wmi_data_hdr_is_amsdu(struct wmi_data_hdr *dhdr)
    258{
    259	return (le16_to_cpu(dhdr->info2) >> WMI_DATA_HDR_AMSDU_SHIFT) &
    260			       WMI_DATA_HDR_AMSDU_MASK;
    261}
    262
    263static inline u8 wmi_data_hdr_get_meta(struct wmi_data_hdr *dhdr)
    264{
    265	return (le16_to_cpu(dhdr->info2) >> WMI_DATA_HDR_META_SHIFT) &
    266			       WMI_DATA_HDR_META_MASK;
    267}
    268
    269static inline u8 wmi_data_hdr_get_if_idx(struct wmi_data_hdr *dhdr)
    270{
    271	return le16_to_cpu(dhdr->info3) & WMI_DATA_HDR_IF_IDX_MASK;
    272}
    273
    274/* Tx meta version definitions */
    275#define WMI_MAX_TX_META_SZ	12
    276#define WMI_META_VERSION_1	0x01
    277#define WMI_META_VERSION_2	0x02
    278
    279/* Flag to signal to FW to calculate TCP checksum */
    280#define WMI_META_V2_FLAG_CSUM_OFFLOAD 0x01
    281
    282struct wmi_tx_meta_v1 {
    283	/* packet ID to identify the tx request */
    284	u8 pkt_id;
    285
    286	/* rate policy to be used for the tx of this frame */
    287	u8 rate_plcy_id;
    288} __packed;
    289
    290struct wmi_tx_meta_v2 {
    291	/*
    292	 * Offset from start of the WMI header for csum calculation to
    293	 * begin.
    294	 */
    295	u8 csum_start;
    296
    297	/* offset from start of WMI header where final csum goes */
    298	u8 csum_dest;
    299
    300	/* no of bytes over which csum is calculated */
    301	u8 csum_flags;
    302} __packed;
    303
    304struct wmi_rx_meta_v1 {
    305	u8 status;
    306
    307	/* rate index mapped to rate at which this packet was received. */
    308	u8 rix;
    309
    310	/* rssi of packet */
    311	u8 rssi;
    312
    313	/* rf channel during packet reception */
    314	u8 channel;
    315
    316	__le16 flags;
    317} __packed;
    318
    319struct wmi_rx_meta_v2 {
    320	__le16 csum;
    321
    322	/* bit 0 set -partial csum valid bit 1 set -test mode */
    323	u8 csum_flags;
    324} __packed;
    325
    326#define WMI_CMD_HDR_IF_ID_MASK 0xF
    327
    328/* Control Path */
    329struct wmi_cmd_hdr {
    330	__le16 cmd_id;
    331
    332	/* info1 - 16 bits
    333	 * b03:b00 - id
    334	 * b15:b04 - unused */
    335	__le16 info1;
    336
    337	/* for alignment */
    338	__le16 reserved;
    339} __packed;
    340
    341static inline u8 wmi_cmd_hdr_get_if_idx(struct wmi_cmd_hdr *chdr)
    342{
    343	return le16_to_cpu(chdr->info1) & WMI_CMD_HDR_IF_ID_MASK;
    344}
    345
    346/* List of WMI commands */
    347enum wmi_cmd_id {
    348	WMI_CONNECT_CMDID = 0x0001,
    349	WMI_RECONNECT_CMDID,
    350	WMI_DISCONNECT_CMDID,
    351	WMI_SYNCHRONIZE_CMDID,
    352	WMI_CREATE_PSTREAM_CMDID,
    353	WMI_DELETE_PSTREAM_CMDID,
    354	/* WMI_START_SCAN_CMDID is to be deprecated. Use
    355	 * WMI_BEGIN_SCAN_CMDID instead. The new cmd supports P2P mgmt
    356	 * operations using station interface.
    357	 */
    358	WMI_START_SCAN_CMDID,
    359	WMI_SET_SCAN_PARAMS_CMDID,
    360	WMI_SET_BSS_FILTER_CMDID,
    361	WMI_SET_PROBED_SSID_CMDID,	/* 10 */
    362	WMI_SET_LISTEN_INT_CMDID,
    363	WMI_SET_BMISS_TIME_CMDID,
    364	WMI_SET_DISC_TIMEOUT_CMDID,
    365	WMI_GET_CHANNEL_LIST_CMDID,
    366	WMI_SET_BEACON_INT_CMDID,
    367	WMI_GET_STATISTICS_CMDID,
    368	WMI_SET_CHANNEL_PARAMS_CMDID,
    369	WMI_SET_POWER_MODE_CMDID,
    370	WMI_SET_IBSS_PM_CAPS_CMDID,
    371	WMI_SET_POWER_PARAMS_CMDID,	/* 20 */
    372	WMI_SET_POWERSAVE_TIMERS_POLICY_CMDID,
    373	WMI_ADD_CIPHER_KEY_CMDID,
    374	WMI_DELETE_CIPHER_KEY_CMDID,
    375	WMI_ADD_KRK_CMDID,
    376	WMI_DELETE_KRK_CMDID,
    377	WMI_SET_PMKID_CMDID,
    378	WMI_SET_TX_PWR_CMDID,
    379	WMI_GET_TX_PWR_CMDID,
    380	WMI_SET_ASSOC_INFO_CMDID,
    381	WMI_ADD_BAD_AP_CMDID,		/* 30 */
    382	WMI_DELETE_BAD_AP_CMDID,
    383	WMI_SET_TKIP_COUNTERMEASURES_CMDID,
    384	WMI_RSSI_THRESHOLD_PARAMS_CMDID,
    385	WMI_TARGET_ERROR_REPORT_BITMASK_CMDID,
    386	WMI_SET_ACCESS_PARAMS_CMDID,
    387	WMI_SET_RETRY_LIMITS_CMDID,
    388	WMI_SET_OPT_MODE_CMDID,
    389	WMI_OPT_TX_FRAME_CMDID,
    390	WMI_SET_VOICE_PKT_SIZE_CMDID,
    391	WMI_SET_MAX_SP_LEN_CMDID,	/* 40 */
    392	WMI_SET_ROAM_CTRL_CMDID,
    393	WMI_GET_ROAM_TBL_CMDID,
    394	WMI_GET_ROAM_DATA_CMDID,
    395	WMI_ENABLE_RM_CMDID,
    396	WMI_SET_MAX_OFFHOME_DURATION_CMDID,
    397	WMI_EXTENSION_CMDID,	/* Non-wireless extensions */
    398	WMI_SNR_THRESHOLD_PARAMS_CMDID,
    399	WMI_LQ_THRESHOLD_PARAMS_CMDID,
    400	WMI_SET_LPREAMBLE_CMDID,
    401	WMI_SET_RTS_CMDID,		/* 50 */
    402	WMI_CLR_RSSI_SNR_CMDID,
    403	WMI_SET_FIXRATES_CMDID,
    404	WMI_GET_FIXRATES_CMDID,
    405	WMI_SET_AUTH_MODE_CMDID,
    406	WMI_SET_REASSOC_MODE_CMDID,
    407	WMI_SET_WMM_CMDID,
    408	WMI_SET_WMM_TXOP_CMDID,
    409	WMI_TEST_CMDID,
    410
    411	/* COEX AR6002 only */
    412	WMI_SET_BT_STATUS_CMDID,
    413	WMI_SET_BT_PARAMS_CMDID,	/* 60 */
    414
    415	WMI_SET_KEEPALIVE_CMDID,
    416	WMI_GET_KEEPALIVE_CMDID,
    417	WMI_SET_APPIE_CMDID,
    418	WMI_GET_APPIE_CMDID,
    419	WMI_SET_WSC_STATUS_CMDID,
    420
    421	/* Wake on Wireless */
    422	WMI_SET_HOST_SLEEP_MODE_CMDID,
    423	WMI_SET_WOW_MODE_CMDID,
    424	WMI_GET_WOW_LIST_CMDID,
    425	WMI_ADD_WOW_PATTERN_CMDID,
    426	WMI_DEL_WOW_PATTERN_CMDID,	/* 70 */
    427
    428	WMI_SET_FRAMERATES_CMDID,
    429	WMI_SET_AP_PS_CMDID,
    430	WMI_SET_QOS_SUPP_CMDID,
    431	WMI_SET_IE_CMDID,
    432
    433	/* WMI_THIN_RESERVED_... mark the start and end
    434	 * values for WMI_THIN_RESERVED command IDs. These
    435	 * command IDs can be found in wmi_thin.h */
    436	WMI_THIN_RESERVED_START = 0x8000,
    437	WMI_THIN_RESERVED_END = 0x8fff,
    438
    439	/* Developer commands starts at 0xF000 */
    440	WMI_SET_BITRATE_CMDID = 0xF000,
    441	WMI_GET_BITRATE_CMDID,
    442	WMI_SET_WHALPARAM_CMDID,
    443	WMI_SET_MAC_ADDRESS_CMDID,
    444	WMI_SET_AKMP_PARAMS_CMDID,
    445	WMI_SET_PMKID_LIST_CMDID,
    446	WMI_GET_PMKID_LIST_CMDID,
    447	WMI_ABORT_SCAN_CMDID,
    448	WMI_SET_TARGET_EVENT_REPORT_CMDID,
    449
    450	/* Unused */
    451	WMI_UNUSED1,
    452	WMI_UNUSED2,
    453
    454	/* AP mode commands */
    455	WMI_AP_HIDDEN_SSID_CMDID,
    456	WMI_AP_SET_NUM_STA_CMDID,
    457	WMI_AP_ACL_POLICY_CMDID,
    458	WMI_AP_ACL_MAC_LIST_CMDID,
    459	WMI_AP_CONFIG_COMMIT_CMDID,
    460	WMI_AP_SET_MLME_CMDID,
    461	WMI_AP_SET_PVB_CMDID,
    462	WMI_AP_CONN_INACT_CMDID,
    463	WMI_AP_PROT_SCAN_TIME_CMDID,
    464	WMI_AP_SET_COUNTRY_CMDID,
    465	WMI_AP_SET_DTIM_CMDID,
    466	WMI_AP_MODE_STAT_CMDID,
    467
    468	WMI_SET_IP_CMDID,
    469	WMI_SET_PARAMS_CMDID,
    470	WMI_SET_MCAST_FILTER_CMDID,
    471	WMI_DEL_MCAST_FILTER_CMDID,
    472
    473	WMI_ALLOW_AGGR_CMDID,
    474	WMI_ADDBA_REQ_CMDID,
    475	WMI_DELBA_REQ_CMDID,
    476	WMI_SET_HT_CAP_CMDID,
    477	WMI_SET_HT_OP_CMDID,
    478	WMI_SET_TX_SELECT_RATES_CMDID,
    479	WMI_SET_TX_SGI_PARAM_CMDID,
    480	WMI_SET_RATE_POLICY_CMDID,
    481
    482	WMI_HCI_CMD_CMDID,
    483	WMI_RX_FRAME_FORMAT_CMDID,
    484	WMI_SET_THIN_MODE_CMDID,
    485	WMI_SET_BT_WLAN_CONN_PRECEDENCE_CMDID,
    486
    487	WMI_AP_SET_11BG_RATESET_CMDID,
    488	WMI_SET_PMK_CMDID,
    489	WMI_MCAST_FILTER_CMDID,
    490
    491	/* COEX CMDID AR6003 */
    492	WMI_SET_BTCOEX_FE_ANT_CMDID,
    493	WMI_SET_BTCOEX_COLOCATED_BT_DEV_CMDID,
    494	WMI_SET_BTCOEX_SCO_CONFIG_CMDID,
    495	WMI_SET_BTCOEX_A2DP_CONFIG_CMDID,
    496	WMI_SET_BTCOEX_ACLCOEX_CONFIG_CMDID,
    497	WMI_SET_BTCOEX_BTINQUIRY_PAGE_CONFIG_CMDID,
    498	WMI_SET_BTCOEX_DEBUG_CMDID,
    499	WMI_SET_BTCOEX_BT_OPERATING_STATUS_CMDID,
    500	WMI_GET_BTCOEX_STATS_CMDID,
    501	WMI_GET_BTCOEX_CONFIG_CMDID,
    502
    503	WMI_SET_DFS_ENABLE_CMDID,	/* F034 */
    504	WMI_SET_DFS_MINRSSITHRESH_CMDID,
    505	WMI_SET_DFS_MAXPULSEDUR_CMDID,
    506	WMI_DFS_RADAR_DETECTED_CMDID,
    507
    508	/* P2P commands */
    509	WMI_P2P_SET_CONFIG_CMDID,	/* F038 */
    510	WMI_WPS_SET_CONFIG_CMDID,
    511	WMI_SET_REQ_DEV_ATTR_CMDID,
    512	WMI_P2P_FIND_CMDID,
    513	WMI_P2P_STOP_FIND_CMDID,
    514	WMI_P2P_GO_NEG_START_CMDID,
    515	WMI_P2P_LISTEN_CMDID,
    516
    517	WMI_CONFIG_TX_MAC_RULES_CMDID,	/* F040 */
    518	WMI_SET_PROMISCUOUS_MODE_CMDID,
    519	WMI_RX_FRAME_FILTER_CMDID,
    520	WMI_SET_CHANNEL_CMDID,
    521
    522	/* WAC commands */
    523	WMI_ENABLE_WAC_CMDID,
    524	WMI_WAC_SCAN_REPLY_CMDID,
    525	WMI_WAC_CTRL_REQ_CMDID,
    526	WMI_SET_DIV_PARAMS_CMDID,
    527
    528	WMI_GET_PMK_CMDID,
    529	WMI_SET_PASSPHRASE_CMDID,
    530	WMI_SEND_ASSOC_RES_CMDID,
    531	WMI_SET_ASSOC_REQ_RELAY_CMDID,
    532
    533	/* ACS command, consists of sub-commands */
    534	WMI_ACS_CTRL_CMDID,
    535	WMI_SET_EXCESS_TX_RETRY_THRES_CMDID,
    536	WMI_SET_TBD_TIME_CMDID, /*added for wmiconfig command for TBD */
    537
    538	/* Pktlog cmds */
    539	WMI_PKTLOG_ENABLE_CMDID,
    540	WMI_PKTLOG_DISABLE_CMDID,
    541
    542	/* More P2P Cmds */
    543	WMI_P2P_GO_NEG_REQ_RSP_CMDID,
    544	WMI_P2P_GRP_INIT_CMDID,
    545	WMI_P2P_GRP_FORMATION_DONE_CMDID,
    546	WMI_P2P_INVITE_CMDID,
    547	WMI_P2P_INVITE_REQ_RSP_CMDID,
    548	WMI_P2P_PROV_DISC_REQ_CMDID,
    549	WMI_P2P_SET_CMDID,
    550
    551	WMI_GET_RFKILL_MODE_CMDID,
    552	WMI_SET_RFKILL_MODE_CMDID,
    553	WMI_AP_SET_APSD_CMDID,
    554	WMI_AP_APSD_BUFFERED_TRAFFIC_CMDID,
    555
    556	WMI_P2P_SDPD_TX_CMDID, /* F05C */
    557	WMI_P2P_STOP_SDPD_CMDID,
    558	WMI_P2P_CANCEL_CMDID,
    559	/* Ultra low power store / recall commands */
    560	WMI_STORERECALL_CONFIGURE_CMDID,
    561	WMI_STORERECALL_RECALL_CMDID,
    562	WMI_STORERECALL_HOST_READY_CMDID,
    563	WMI_FORCE_TARGET_ASSERT_CMDID,
    564
    565	WMI_SET_PROBED_SSID_EX_CMDID,
    566	WMI_SET_NETWORK_LIST_OFFLOAD_CMDID,
    567	WMI_SET_ARP_NS_OFFLOAD_CMDID,
    568	WMI_ADD_WOW_EXT_PATTERN_CMDID,
    569	WMI_GTK_OFFLOAD_OP_CMDID,
    570	WMI_REMAIN_ON_CHNL_CMDID,
    571	WMI_CANCEL_REMAIN_ON_CHNL_CMDID,
    572	/* WMI_SEND_ACTION_CMDID is to be deprecated. Use
    573	 * WMI_SEND_MGMT_CMDID instead. The new cmd supports P2P mgmt
    574	 * operations using station interface.
    575	 */
    576	WMI_SEND_ACTION_CMDID,
    577	WMI_PROBE_REQ_REPORT_CMDID,
    578	WMI_DISABLE_11B_RATES_CMDID,
    579	WMI_SEND_PROBE_RESPONSE_CMDID,
    580	WMI_GET_P2P_INFO_CMDID,
    581	WMI_AP_JOIN_BSS_CMDID,
    582
    583	WMI_SMPS_ENABLE_CMDID,
    584	WMI_SMPS_CONFIG_CMDID,
    585	WMI_SET_RATECTRL_PARM_CMDID,
    586	/*  LPL specific commands*/
    587	WMI_LPL_FORCE_ENABLE_CMDID,
    588	WMI_LPL_SET_POLICY_CMDID,
    589	WMI_LPL_GET_POLICY_CMDID,
    590	WMI_LPL_GET_HWSTATE_CMDID,
    591	WMI_LPL_SET_PARAMS_CMDID,
    592	WMI_LPL_GET_PARAMS_CMDID,
    593
    594	WMI_SET_BUNDLE_PARAM_CMDID,
    595
    596	/*GreenTx specific commands*/
    597
    598	WMI_GREENTX_PARAMS_CMDID,
    599
    600	WMI_RTT_MEASREQ_CMDID,
    601	WMI_RTT_CAPREQ_CMDID,
    602	WMI_RTT_STATUSREQ_CMDID,
    603
    604	/* WPS Commands */
    605	WMI_WPS_START_CMDID,
    606	WMI_GET_WPS_STATUS_CMDID,
    607
    608	/* More P2P commands */
    609	WMI_SET_NOA_CMDID,
    610	WMI_GET_NOA_CMDID,
    611	WMI_SET_OPPPS_CMDID,
    612	WMI_GET_OPPPS_CMDID,
    613	WMI_ADD_PORT_CMDID,
    614	WMI_DEL_PORT_CMDID,
    615
    616	/* 802.11w cmd */
    617	WMI_SET_RSN_CAP_CMDID,
    618	WMI_GET_RSN_CAP_CMDID,
    619	WMI_SET_IGTK_CMDID,
    620
    621	WMI_RX_FILTER_COALESCE_FILTER_OP_CMDID,
    622	WMI_RX_FILTER_SET_FRAME_TEST_LIST_CMDID,
    623
    624	WMI_SEND_MGMT_CMDID,
    625	WMI_BEGIN_SCAN_CMDID,
    626
    627	WMI_SET_BLACK_LIST,
    628	WMI_SET_MCASTRATE,
    629
    630	WMI_STA_BMISS_ENHANCE_CMDID,
    631
    632	WMI_SET_REGDOMAIN_CMDID,
    633
    634	WMI_SET_RSSI_FILTER_CMDID,
    635
    636	WMI_SET_KEEP_ALIVE_EXT,
    637
    638	WMI_VOICE_DETECTION_ENABLE_CMDID,
    639
    640	WMI_SET_TXE_NOTIFY_CMDID,
    641
    642	WMI_SET_RECOVERY_TEST_PARAMETER_CMDID, /*0xf094*/
    643
    644	WMI_ENABLE_SCHED_SCAN_CMDID,
    645};
    646
    647enum wmi_mgmt_frame_type {
    648	WMI_FRAME_BEACON = 0,
    649	WMI_FRAME_PROBE_REQ,
    650	WMI_FRAME_PROBE_RESP,
    651	WMI_FRAME_ASSOC_REQ,
    652	WMI_FRAME_ASSOC_RESP,
    653	WMI_NUM_MGMT_FRAME
    654};
    655
    656enum wmi_ie_field_type {
    657	WMI_RSN_IE_CAPB	= 0x1,
    658	WMI_IE_FULL	= 0xFF,  /* indicats full IE */
    659};
    660
    661/* WMI_CONNECT_CMDID  */
    662enum network_type {
    663	INFRA_NETWORK = 0x01,
    664	ADHOC_NETWORK = 0x02,
    665	ADHOC_CREATOR = 0x04,
    666	AP_NETWORK = 0x10,
    667};
    668
    669enum network_subtype {
    670	SUBTYPE_NONE,
    671	SUBTYPE_BT,
    672	SUBTYPE_P2PDEV,
    673	SUBTYPE_P2PCLIENT,
    674	SUBTYPE_P2PGO,
    675};
    676
    677enum dot11_auth_mode {
    678	OPEN_AUTH = 0x01,
    679	SHARED_AUTH = 0x02,
    680
    681	/* different from IEEE_AUTH_MODE definitions */
    682	LEAP_AUTH = 0x04,
    683};
    684
    685enum auth_mode {
    686	NONE_AUTH = 0x01,
    687	WPA_AUTH = 0x02,
    688	WPA2_AUTH = 0x04,
    689	WPA_PSK_AUTH = 0x08,
    690	WPA2_PSK_AUTH = 0x10,
    691	WPA_AUTH_CCKM = 0x20,
    692	WPA2_AUTH_CCKM = 0x40,
    693};
    694
    695#define WMI_MAX_KEY_INDEX   3
    696
    697#define WMI_MAX_KEY_LEN     32
    698
    699/*
    700 * NB: these values are ordered carefully; there are lots of
    701 * of implications in any reordering.  In particular beware
    702 * that 4 is not used to avoid conflicting with IEEE80211_F_PRIVACY.
    703 */
    704#define ATH6KL_CIPHER_WEP            0
    705#define ATH6KL_CIPHER_TKIP           1
    706#define ATH6KL_CIPHER_AES_OCB        2
    707#define ATH6KL_CIPHER_AES_CCM        3
    708#define ATH6KL_CIPHER_CKIP           5
    709#define ATH6KL_CIPHER_CCKM_KRK       6
    710#define ATH6KL_CIPHER_NONE           7 /* pseudo value */
    711
    712/*
    713 * 802.11 rate set.
    714 */
    715#define ATH6KL_RATE_MAXSIZE  15	/* max rates we'll handle */
    716
    717#define ATH_OUI_TYPE            0x01
    718#define WPA_OUI_TYPE            0x01
    719#define WMM_PARAM_OUI_SUBTYPE   0x01
    720#define WMM_OUI_TYPE            0x02
    721#define WSC_OUT_TYPE            0x04
    722
    723enum wmi_connect_ctrl_flags_bits {
    724	CONNECT_ASSOC_POLICY_USER = 0x0001,
    725	CONNECT_SEND_REASSOC = 0x0002,
    726	CONNECT_IGNORE_WPAx_GROUP_CIPHER = 0x0004,
    727	CONNECT_PROFILE_MATCH_DONE = 0x0008,
    728	CONNECT_IGNORE_AAC_BEACON = 0x0010,
    729	CONNECT_CSA_FOLLOW_BSS = 0x0020,
    730	CONNECT_DO_WPA_OFFLOAD = 0x0040,
    731	CONNECT_DO_NOT_DEAUTH = 0x0080,
    732	CONNECT_WPS_FLAG = 0x0100,
    733};
    734
    735struct wmi_connect_cmd {
    736	u8 nw_type;
    737	u8 dot11_auth_mode;
    738	u8 auth_mode;
    739	u8 prwise_crypto_type;
    740	u8 prwise_crypto_len;
    741	u8 grp_crypto_type;
    742	u8 grp_crypto_len;
    743	u8 ssid_len;
    744	u8 ssid[IEEE80211_MAX_SSID_LEN];
    745	__le16 ch;
    746	u8 bssid[ETH_ALEN];
    747	__le32 ctrl_flags;
    748	u8 nw_subtype;
    749} __packed;
    750
    751/* WMI_RECONNECT_CMDID */
    752struct wmi_reconnect_cmd {
    753	/* channel hint */
    754	__le16 channel;
    755
    756	/* mandatory if set */
    757	u8 bssid[ETH_ALEN];
    758} __packed;
    759
    760/* WMI_ADD_CIPHER_KEY_CMDID */
    761enum key_usage {
    762	PAIRWISE_USAGE = 0x00,
    763	GROUP_USAGE = 0x01,
    764
    765	/* default Tx Key - static WEP only */
    766	TX_USAGE = 0x02,
    767};
    768
    769/*
    770 * Bit Flag
    771 * Bit 0 - Initialise TSC - default is Initialize
    772 */
    773#define KEY_OP_INIT_TSC     0x01
    774#define KEY_OP_INIT_RSC     0x02
    775
    776/* default initialise the TSC & RSC */
    777#define KEY_OP_INIT_VAL     0x03
    778#define KEY_OP_VALID_MASK   0x03
    779
    780struct wmi_add_cipher_key_cmd {
    781	u8 key_index;
    782	u8 key_type;
    783
    784	/* enum key_usage */
    785	u8 key_usage;
    786
    787	u8 key_len;
    788
    789	/* key replay sequence counter */
    790	u8 key_rsc[8];
    791
    792	u8 key[WLAN_MAX_KEY_LEN];
    793
    794	/* additional key control info */
    795	u8 key_op_ctrl;
    796
    797	u8 key_mac_addr[ETH_ALEN];
    798} __packed;
    799
    800/* WMI_DELETE_CIPHER_KEY_CMDID */
    801struct wmi_delete_cipher_key_cmd {
    802	u8 key_index;
    803} __packed;
    804
    805#define WMI_KRK_LEN     16
    806
    807/* WMI_ADD_KRK_CMDID */
    808struct wmi_add_krk_cmd {
    809	u8 krk[WMI_KRK_LEN];
    810} __packed;
    811
    812/* WMI_SETPMKID_CMDID */
    813
    814#define WMI_PMKID_LEN 16
    815
    816enum pmkid_enable_flg {
    817	PMKID_DISABLE = 0,
    818	PMKID_ENABLE = 1,
    819};
    820
    821struct wmi_setpmkid_cmd {
    822	u8 bssid[ETH_ALEN];
    823
    824	/* enum pmkid_enable_flg */
    825	u8 enable;
    826
    827	u8 pmkid[WMI_PMKID_LEN];
    828} __packed;
    829
    830/* WMI_START_SCAN_CMD */
    831enum wmi_scan_type {
    832	WMI_LONG_SCAN = 0,
    833	WMI_SHORT_SCAN = 1,
    834};
    835
    836struct wmi_supp_rates {
    837	u8 nrates;
    838	u8 rates[ATH6KL_RATE_MAXSIZE];
    839};
    840
    841struct wmi_begin_scan_cmd {
    842	__le32 force_fg_scan;
    843
    844	/* for legacy cisco AP compatibility */
    845	__le32 is_legacy;
    846
    847	/* max duration in the home channel(msec) */
    848	__le32 home_dwell_time;
    849
    850	/* time interval between scans (msec) */
    851	__le32 force_scan_intvl;
    852
    853	/* no CCK rates */
    854	__le32 no_cck;
    855
    856	/* enum wmi_scan_type */
    857	u8 scan_type;
    858
    859	/* Supported rates to advertise in the probe request frames */
    860	struct wmi_supp_rates supp_rates[ATH6KL_NUM_BANDS];
    861
    862	/* how many channels follow */
    863	u8 num_ch;
    864
    865	/* channels in Mhz */
    866	__le16 ch_list[];
    867} __packed;
    868
    869/* wmi_start_scan_cmd is to be deprecated. Use
    870 * wmi_begin_scan_cmd instead. The new structure supports P2P mgmt
    871 * operations using station interface.
    872 */
    873struct wmi_start_scan_cmd {
    874	__le32 force_fg_scan;
    875
    876	/* for legacy cisco AP compatibility */
    877	__le32 is_legacy;
    878
    879	/* max duration in the home channel(msec) */
    880	__le32 home_dwell_time;
    881
    882	/* time interval between scans (msec) */
    883	__le32 force_scan_intvl;
    884
    885	/* enum wmi_scan_type */
    886	u8 scan_type;
    887
    888	/* how many channels follow */
    889	u8 num_ch;
    890
    891	/* channels in Mhz */
    892	__le16 ch_list[];
    893} __packed;
    894
    895/*
    896 *  Warning: scan control flag value of 0xFF is used to disable
    897 *  all flags in WMI_SCAN_PARAMS_CMD. Do not add any more
    898 *  flags here
    899 */
    900enum wmi_scan_ctrl_flags_bits {
    901	/* set if can scan in the connect cmd */
    902	CONNECT_SCAN_CTRL_FLAGS = 0x01,
    903
    904	/* set if scan for the SSID it is already connected to */
    905	SCAN_CONNECTED_CTRL_FLAGS = 0x02,
    906
    907	/* set if enable active scan */
    908	ACTIVE_SCAN_CTRL_FLAGS = 0x04,
    909
    910	/* set if enable roam scan when bmiss and lowrssi */
    911	ROAM_SCAN_CTRL_FLAGS = 0x08,
    912
    913	/* set if follows customer BSSINFO reporting rule */
    914	REPORT_BSSINFO_CTRL_FLAGS = 0x10,
    915
    916	/* if disabled, target doesn't scan after a disconnect event  */
    917	ENABLE_AUTO_CTRL_FLAGS = 0x20,
    918
    919	/*
    920	 * Scan complete event with canceled status will be generated when
    921	 * a scan is prempted before it gets completed.
    922	 */
    923	ENABLE_SCAN_ABORT_EVENT = 0x40
    924};
    925
    926struct wmi_scan_params_cmd {
    927	  /* sec */
    928	__le16 fg_start_period;
    929
    930	/* sec */
    931	__le16 fg_end_period;
    932
    933	/* sec */
    934	__le16 bg_period;
    935
    936	/* msec */
    937	__le16 maxact_chdwell_time;
    938
    939	/* msec */
    940	__le16 pas_chdwell_time;
    941
    942	  /* how many shorts scan for one long */
    943	u8 short_scan_ratio;
    944
    945	u8 scan_ctrl_flags;
    946
    947	/* msec */
    948	__le16 minact_chdwell_time;
    949
    950	/* max active scans per ssid */
    951	__le16 maxact_scan_per_ssid;
    952
    953	/* msecs */
    954	__le32 max_dfsch_act_time;
    955} __packed;
    956
    957/* WMI_ENABLE_SCHED_SCAN_CMDID */
    958struct wmi_enable_sched_scan_cmd {
    959	u8 enable;
    960} __packed;
    961
    962/* WMI_SET_BSS_FILTER_CMDID */
    963enum wmi_bss_filter {
    964	/* no beacons forwarded */
    965	NONE_BSS_FILTER = 0x0,
    966
    967	/* all beacons forwarded */
    968	ALL_BSS_FILTER,
    969
    970	/* only beacons matching profile */
    971	PROFILE_FILTER,
    972
    973	/* all but beacons matching profile */
    974	ALL_BUT_PROFILE_FILTER,
    975
    976	/* only beacons matching current BSS */
    977	CURRENT_BSS_FILTER,
    978
    979	/* all but beacons matching BSS */
    980	ALL_BUT_BSS_FILTER,
    981
    982	/* beacons matching probed ssid */
    983	PROBED_SSID_FILTER,
    984
    985	/* beacons matching matched ssid */
    986	MATCHED_SSID_FILTER,
    987
    988	/* marker only */
    989	LAST_BSS_FILTER,
    990};
    991
    992struct wmi_bss_filter_cmd {
    993	/* see, enum wmi_bss_filter */
    994	u8 bss_filter;
    995
    996	/* for alignment */
    997	u8 reserved1;
    998
    999	/* for alignment */
   1000	__le16 reserved2;
   1001
   1002	__le32 ie_mask;
   1003} __packed;
   1004
   1005/* WMI_SET_PROBED_SSID_CMDID */
   1006#define MAX_PROBED_SSIDS   16
   1007
   1008enum wmi_ssid_flag {
   1009	/* disables entry */
   1010	DISABLE_SSID_FLAG = 0,
   1011
   1012	/* probes specified ssid */
   1013	SPECIFIC_SSID_FLAG = 0x01,
   1014
   1015	/* probes for any ssid */
   1016	ANY_SSID_FLAG = 0x02,
   1017
   1018	/* match for ssid */
   1019	MATCH_SSID_FLAG = 0x08,
   1020};
   1021
   1022struct wmi_probed_ssid_cmd {
   1023	/* 0 to MAX_PROBED_SSIDS - 1 */
   1024	u8 entry_index;
   1025
   1026	/* see, enum wmi_ssid_flg */
   1027	u8 flag;
   1028
   1029	u8 ssid_len;
   1030	u8 ssid[IEEE80211_MAX_SSID_LEN];
   1031} __packed;
   1032
   1033/*
   1034 * WMI_SET_LISTEN_INT_CMDID
   1035 * The Listen interval is between 15 and 3000 TUs
   1036 */
   1037struct wmi_listen_int_cmd {
   1038	__le16 listen_intvl;
   1039	__le16 num_beacons;
   1040} __packed;
   1041
   1042/* WMI_SET_BMISS_TIME_CMDID */
   1043struct wmi_bmiss_time_cmd {
   1044	__le16 bmiss_time;
   1045	__le16 num_beacons;
   1046};
   1047
   1048/* WMI_STA_ENHANCE_BMISS_CMDID */
   1049struct wmi_sta_bmiss_enhance_cmd {
   1050	u8 enable;
   1051} __packed;
   1052
   1053struct wmi_set_regdomain_cmd {
   1054	u8 length;
   1055	u8 iso_name[2];
   1056} __packed;
   1057
   1058/* WMI_SET_POWER_MODE_CMDID */
   1059enum wmi_power_mode {
   1060	REC_POWER = 0x01,
   1061	MAX_PERF_POWER,
   1062};
   1063
   1064struct wmi_power_mode_cmd {
   1065	/* see, enum wmi_power_mode */
   1066	u8 pwr_mode;
   1067} __packed;
   1068
   1069/*
   1070 * Policy to determine whether power save failure event should be sent to
   1071 * host during scanning
   1072 */
   1073enum power_save_fail_event_policy {
   1074	SEND_POWER_SAVE_FAIL_EVENT_ALWAYS = 1,
   1075	IGNORE_PS_FAIL_DURING_SCAN = 2,
   1076};
   1077
   1078struct wmi_power_params_cmd {
   1079	/* msec */
   1080	__le16 idle_period;
   1081
   1082	__le16 pspoll_number;
   1083	__le16 dtim_policy;
   1084	__le16 tx_wakeup_policy;
   1085	__le16 num_tx_to_wakeup;
   1086	__le16 ps_fail_event_policy;
   1087} __packed;
   1088
   1089/*
   1090 * Ratemask for below modes should be passed
   1091 * to WMI_SET_TX_SELECT_RATES_CMDID.
   1092 * AR6003 has 32 bit mask for each modes.
   1093 * First 12 bits for legacy rates, 13 to 20
   1094 * bits for HT 20 rates and 21 to 28 bits for
   1095 * HT 40 rates
   1096 */
   1097enum wmi_mode_phy {
   1098	WMI_RATES_MODE_11A = 0,
   1099	WMI_RATES_MODE_11G,
   1100	WMI_RATES_MODE_11B,
   1101	WMI_RATES_MODE_11GONLY,
   1102	WMI_RATES_MODE_11A_HT20,
   1103	WMI_RATES_MODE_11G_HT20,
   1104	WMI_RATES_MODE_11A_HT40,
   1105	WMI_RATES_MODE_11G_HT40,
   1106	WMI_RATES_MODE_MAX
   1107};
   1108
   1109/* WMI_SET_TX_SELECT_RATES_CMDID */
   1110struct wmi_set_tx_select_rates32_cmd {
   1111	__le32 ratemask[WMI_RATES_MODE_MAX];
   1112} __packed;
   1113
   1114/* WMI_SET_TX_SELECT_RATES_CMDID */
   1115struct wmi_set_tx_select_rates64_cmd {
   1116	__le64 ratemask[WMI_RATES_MODE_MAX];
   1117} __packed;
   1118
   1119/* WMI_SET_DISC_TIMEOUT_CMDID */
   1120struct wmi_disc_timeout_cmd {
   1121	/* seconds */
   1122	u8 discon_timeout;
   1123} __packed;
   1124
   1125enum dir_type {
   1126	UPLINK_TRAFFIC = 0,
   1127	DNLINK_TRAFFIC = 1,
   1128	BIDIR_TRAFFIC = 2,
   1129};
   1130
   1131enum voiceps_cap_type {
   1132	DISABLE_FOR_THIS_AC = 0,
   1133	ENABLE_FOR_THIS_AC = 1,
   1134	ENABLE_FOR_ALL_AC = 2,
   1135};
   1136
   1137enum traffic_type {
   1138	TRAFFIC_TYPE_APERIODIC = 0,
   1139	TRAFFIC_TYPE_PERIODIC = 1,
   1140};
   1141
   1142/* WMI_SYNCHRONIZE_CMDID */
   1143struct wmi_sync_cmd {
   1144	u8 data_sync_map;
   1145} __packed;
   1146
   1147/* WMI_CREATE_PSTREAM_CMDID */
   1148struct wmi_create_pstream_cmd {
   1149	/* msec */
   1150	__le32 min_service_int;
   1151
   1152	/* msec */
   1153	__le32 max_service_int;
   1154
   1155	/* msec */
   1156	__le32 inactivity_int;
   1157
   1158	/* msec */
   1159	__le32 suspension_int;
   1160
   1161	__le32 service_start_time;
   1162
   1163	/* in bps */
   1164	__le32 min_data_rate;
   1165
   1166	/* in bps */
   1167	__le32 mean_data_rate;
   1168
   1169	/* in bps */
   1170	__le32 peak_data_rate;
   1171
   1172	__le32 max_burst_size;
   1173	__le32 delay_bound;
   1174
   1175	/* in bps */
   1176	__le32 min_phy_rate;
   1177
   1178	__le32 sba;
   1179	__le32 medium_time;
   1180
   1181	/* in octects */
   1182	__le16 nominal_msdu;
   1183
   1184	/* in octects */
   1185	__le16 max_msdu;
   1186
   1187	u8 traffic_class;
   1188
   1189	/* see, enum dir_type */
   1190	u8 traffic_direc;
   1191
   1192	u8 rx_queue_num;
   1193
   1194	/* see, enum traffic_type */
   1195	u8 traffic_type;
   1196
   1197	/* see, enum voiceps_cap_type */
   1198	u8 voice_psc_cap;
   1199	u8 tsid;
   1200
   1201	/* 802.1D user priority */
   1202	u8 user_pri;
   1203
   1204	/* nominal phy rate */
   1205	u8 nominal_phy;
   1206} __packed;
   1207
   1208/* WMI_DELETE_PSTREAM_CMDID */
   1209struct wmi_delete_pstream_cmd {
   1210	u8 tx_queue_num;
   1211	u8 rx_queue_num;
   1212	u8 traffic_direc;
   1213	u8 traffic_class;
   1214	u8 tsid;
   1215} __packed;
   1216
   1217/* WMI_SET_CHANNEL_PARAMS_CMDID */
   1218enum wmi_phy_mode {
   1219	WMI_11A_MODE = 0x1,
   1220	WMI_11G_MODE = 0x2,
   1221	WMI_11AG_MODE = 0x3,
   1222	WMI_11B_MODE = 0x4,
   1223	WMI_11GONLY_MODE = 0x5,
   1224	WMI_11G_HT20	= 0x6,
   1225};
   1226
   1227#define WMI_MAX_CHANNELS        32
   1228
   1229/*
   1230 *  WMI_RSSI_THRESHOLD_PARAMS_CMDID
   1231 *  Setting the polltime to 0 would disable polling. Threshold values are
   1232 *  in the ascending order, and should agree to:
   1233 *  (lowThreshold_lowerVal < lowThreshold_upperVal < highThreshold_lowerVal
   1234 *   < highThreshold_upperVal)
   1235 */
   1236
   1237struct wmi_rssi_threshold_params_cmd {
   1238	/* polling time as a factor of LI */
   1239	__le32 poll_time;
   1240
   1241	/* lowest of upper */
   1242	a_sle16 thresh_above1_val;
   1243
   1244	a_sle16 thresh_above2_val;
   1245	a_sle16 thresh_above3_val;
   1246	a_sle16 thresh_above4_val;
   1247	a_sle16 thresh_above5_val;
   1248
   1249	/* highest of upper */
   1250	a_sle16 thresh_above6_val;
   1251
   1252	/* lowest of bellow */
   1253	a_sle16 thresh_below1_val;
   1254
   1255	a_sle16 thresh_below2_val;
   1256	a_sle16 thresh_below3_val;
   1257	a_sle16 thresh_below4_val;
   1258	a_sle16 thresh_below5_val;
   1259
   1260	/* highest of bellow */
   1261	a_sle16 thresh_below6_val;
   1262
   1263	/* "alpha" */
   1264	u8 weight;
   1265
   1266	u8 reserved[3];
   1267} __packed;
   1268
   1269/*
   1270 *  WMI_SNR_THRESHOLD_PARAMS_CMDID
   1271 *  Setting the polltime to 0 would disable polling.
   1272 */
   1273
   1274struct wmi_snr_threshold_params_cmd {
   1275	/* polling time as a factor of LI */
   1276	__le32 poll_time;
   1277
   1278	/* "alpha" */
   1279	u8 weight;
   1280
   1281	/* lowest of uppper */
   1282	u8 thresh_above1_val;
   1283
   1284	u8 thresh_above2_val;
   1285	u8 thresh_above3_val;
   1286
   1287	/* highest of upper */
   1288	u8 thresh_above4_val;
   1289
   1290	/* lowest of bellow */
   1291	u8 thresh_below1_val;
   1292
   1293	u8 thresh_below2_val;
   1294	u8 thresh_below3_val;
   1295
   1296	/* highest of bellow */
   1297	u8 thresh_below4_val;
   1298
   1299	u8 reserved[3];
   1300} __packed;
   1301
   1302/* Don't report BSSs with signal (RSSI) below this threshold */
   1303struct wmi_set_rssi_filter_cmd {
   1304	s8 rssi;
   1305} __packed;
   1306
   1307enum wmi_preamble_policy {
   1308	WMI_IGNORE_BARKER_IN_ERP = 0,
   1309	WMI_FOLLOW_BARKER_IN_ERP,
   1310};
   1311
   1312struct wmi_set_lpreamble_cmd {
   1313	u8 status;
   1314	u8 preamble_policy;
   1315} __packed;
   1316
   1317struct wmi_set_rts_cmd {
   1318	__le16 threshold;
   1319} __packed;
   1320
   1321/* WMI_SET_TX_PWR_CMDID */
   1322struct wmi_set_tx_pwr_cmd {
   1323	/* in dbM units */
   1324	u8 dbM;
   1325} __packed;
   1326
   1327struct wmi_tx_pwr_reply {
   1328	/* in dbM units */
   1329	u8 dbM;
   1330} __packed;
   1331
   1332struct wmi_report_sleep_state_event {
   1333	__le32 sleep_state;
   1334};
   1335
   1336enum wmi_report_sleep_status {
   1337	WMI_REPORT_SLEEP_STATUS_IS_DEEP_SLEEP = 0,
   1338	WMI_REPORT_SLEEP_STATUS_IS_AWAKE
   1339};
   1340enum target_event_report_config {
   1341	/* default */
   1342	DISCONN_EVT_IN_RECONN = 0,
   1343
   1344	NO_DISCONN_EVT_IN_RECONN
   1345};
   1346
   1347struct wmi_mcast_filter_cmd {
   1348	u8 mcast_all_enable;
   1349} __packed;
   1350
   1351#define ATH6KL_MCAST_FILTER_MAC_ADDR_SIZE 6
   1352struct wmi_mcast_filter_add_del_cmd {
   1353	u8 mcast_mac[ATH6KL_MCAST_FILTER_MAC_ADDR_SIZE];
   1354} __packed;
   1355
   1356struct wmi_set_htcap_cmd {
   1357	u8 band;
   1358	u8 ht_enable;
   1359	u8 ht40_supported;
   1360	u8 ht20_sgi;
   1361	u8 ht40_sgi;
   1362	u8 intolerant_40mhz;
   1363	u8 max_ampdu_len_exp;
   1364} __packed;
   1365
   1366/* Command Replies */
   1367
   1368/* WMI_GET_CHANNEL_LIST_CMDID reply */
   1369struct wmi_channel_list_reply {
   1370	u8 reserved;
   1371
   1372	/* number of channels in reply */
   1373	u8 num_ch;
   1374
   1375	/* channel in Mhz */
   1376	__le16 ch_list[];
   1377} __packed;
   1378
   1379/* List of Events (target to host) */
   1380enum wmi_event_id {
   1381	WMI_READY_EVENTID = 0x1001,
   1382	WMI_CONNECT_EVENTID,
   1383	WMI_DISCONNECT_EVENTID,
   1384	WMI_BSSINFO_EVENTID,
   1385	WMI_CMDERROR_EVENTID,
   1386	WMI_REGDOMAIN_EVENTID,
   1387	WMI_PSTREAM_TIMEOUT_EVENTID,
   1388	WMI_NEIGHBOR_REPORT_EVENTID,
   1389	WMI_TKIP_MICERR_EVENTID,
   1390	WMI_SCAN_COMPLETE_EVENTID,	/* 0x100a */
   1391	WMI_REPORT_STATISTICS_EVENTID,
   1392	WMI_RSSI_THRESHOLD_EVENTID,
   1393	WMI_ERROR_REPORT_EVENTID,
   1394	WMI_OPT_RX_FRAME_EVENTID,
   1395	WMI_REPORT_ROAM_TBL_EVENTID,
   1396	WMI_EXTENSION_EVENTID,
   1397	WMI_CAC_EVENTID,
   1398	WMI_SNR_THRESHOLD_EVENTID,
   1399	WMI_LQ_THRESHOLD_EVENTID,
   1400	WMI_TX_RETRY_ERR_EVENTID,	/* 0x1014 */
   1401	WMI_REPORT_ROAM_DATA_EVENTID,
   1402	WMI_TEST_EVENTID,
   1403	WMI_APLIST_EVENTID,
   1404	WMI_GET_WOW_LIST_EVENTID,
   1405	WMI_GET_PMKID_LIST_EVENTID,
   1406	WMI_CHANNEL_CHANGE_EVENTID,
   1407	WMI_PEER_NODE_EVENTID,
   1408	WMI_PSPOLL_EVENTID,
   1409	WMI_DTIMEXPIRY_EVENTID,
   1410	WMI_WLAN_VERSION_EVENTID,
   1411	WMI_SET_PARAMS_REPLY_EVENTID,
   1412	WMI_ADDBA_REQ_EVENTID,		/*0x1020 */
   1413	WMI_ADDBA_RESP_EVENTID,
   1414	WMI_DELBA_REQ_EVENTID,
   1415	WMI_TX_COMPLETE_EVENTID,
   1416	WMI_HCI_EVENT_EVENTID,
   1417	WMI_ACL_DATA_EVENTID,
   1418	WMI_REPORT_SLEEP_STATE_EVENTID,
   1419	WMI_REPORT_BTCOEX_STATS_EVENTID,
   1420	WMI_REPORT_BTCOEX_CONFIG_EVENTID,
   1421	WMI_GET_PMK_EVENTID,
   1422
   1423	/* DFS Events */
   1424	WMI_DFS_HOST_ATTACH_EVENTID,
   1425	WMI_DFS_HOST_INIT_EVENTID,
   1426	WMI_DFS_RESET_DELAYLINES_EVENTID,
   1427	WMI_DFS_RESET_RADARQ_EVENTID,
   1428	WMI_DFS_RESET_AR_EVENTID,
   1429	WMI_DFS_RESET_ARQ_EVENTID,
   1430	WMI_DFS_SET_DUR_MULTIPLIER_EVENTID,
   1431	WMI_DFS_SET_BANGRADAR_EVENTID,
   1432	WMI_DFS_SET_DEBUGLEVEL_EVENTID,
   1433	WMI_DFS_PHYERR_EVENTID,
   1434
   1435	/* CCX Evants */
   1436	WMI_CCX_RM_STATUS_EVENTID,
   1437
   1438	/* P2P Events */
   1439	WMI_P2P_GO_NEG_RESULT_EVENTID,
   1440
   1441	WMI_WAC_SCAN_DONE_EVENTID,
   1442	WMI_WAC_REPORT_BSS_EVENTID,
   1443	WMI_WAC_START_WPS_EVENTID,
   1444	WMI_WAC_CTRL_REQ_REPLY_EVENTID,
   1445
   1446	WMI_REPORT_WMM_PARAMS_EVENTID,
   1447	WMI_WAC_REJECT_WPS_EVENTID,
   1448
   1449	/* More P2P Events */
   1450	WMI_P2P_GO_NEG_REQ_EVENTID,
   1451	WMI_P2P_INVITE_REQ_EVENTID,
   1452	WMI_P2P_INVITE_RCVD_RESULT_EVENTID,
   1453	WMI_P2P_INVITE_SENT_RESULT_EVENTID,
   1454	WMI_P2P_PROV_DISC_RESP_EVENTID,
   1455	WMI_P2P_PROV_DISC_REQ_EVENTID,
   1456
   1457	/* RFKILL Events */
   1458	WMI_RFKILL_STATE_CHANGE_EVENTID,
   1459	WMI_RFKILL_GET_MODE_CMD_EVENTID,
   1460
   1461	WMI_P2P_START_SDPD_EVENTID,
   1462	WMI_P2P_SDPD_RX_EVENTID,
   1463
   1464	WMI_SET_HOST_SLEEP_MODE_CMD_PROCESSED_EVENTID = 0x1047,
   1465
   1466	WMI_THIN_RESERVED_START_EVENTID = 0x8000,
   1467	/* Events in this range are reserved for thinmode */
   1468	WMI_THIN_RESERVED_END_EVENTID = 0x8fff,
   1469
   1470	WMI_SET_CHANNEL_EVENTID,
   1471	WMI_ASSOC_REQ_EVENTID,
   1472
   1473	/* Generic ACS event */
   1474	WMI_ACS_EVENTID,
   1475	WMI_STORERECALL_STORE_EVENTID,
   1476	WMI_WOW_EXT_WAKE_EVENTID,
   1477	WMI_GTK_OFFLOAD_STATUS_EVENTID,
   1478	WMI_NETWORK_LIST_OFFLOAD_EVENTID,
   1479	WMI_REMAIN_ON_CHNL_EVENTID,
   1480	WMI_CANCEL_REMAIN_ON_CHNL_EVENTID,
   1481	WMI_TX_STATUS_EVENTID,
   1482	WMI_RX_PROBE_REQ_EVENTID,
   1483	WMI_P2P_CAPABILITIES_EVENTID,
   1484	WMI_RX_ACTION_EVENTID,
   1485	WMI_P2P_INFO_EVENTID,
   1486
   1487	/* WPS Events */
   1488	WMI_WPS_GET_STATUS_EVENTID,
   1489	WMI_WPS_PROFILE_EVENTID,
   1490
   1491	/* more P2P events */
   1492	WMI_NOA_INFO_EVENTID,
   1493	WMI_OPPPS_INFO_EVENTID,
   1494	WMI_PORT_STATUS_EVENTID,
   1495
   1496	/* 802.11w */
   1497	WMI_GET_RSN_CAP_EVENTID,
   1498
   1499	WMI_TXE_NOTIFY_EVENTID,
   1500};
   1501
   1502struct wmi_ready_event_2 {
   1503	__le32 sw_version;
   1504	__le32 abi_version;
   1505	u8 mac_addr[ETH_ALEN];
   1506	u8 phy_cap;
   1507} __packed;
   1508
   1509/* WMI_PHY_CAPABILITY */
   1510enum wmi_phy_cap {
   1511	WMI_11A_CAP = 0x01,
   1512	WMI_11G_CAP = 0x02,
   1513	WMI_11AG_CAP = 0x03,
   1514	WMI_11AN_CAP = 0x04,
   1515	WMI_11GN_CAP = 0x05,
   1516	WMI_11AGN_CAP = 0x06,
   1517};
   1518
   1519/* Connect Event */
   1520struct wmi_connect_event {
   1521	union {
   1522		struct {
   1523			__le16 ch;
   1524			u8 bssid[ETH_ALEN];
   1525			__le16 listen_intvl;
   1526			__le16 beacon_intvl;
   1527			__le32 nw_type;
   1528		} sta;
   1529		struct {
   1530			u8 aid;
   1531			u8 phymode;
   1532			u8 mac_addr[ETH_ALEN];
   1533			u8 auth;
   1534			u8 keymgmt;
   1535			__le16 cipher;
   1536			u8 apsd_info;
   1537			u8 unused[3];
   1538		} ap_sta;
   1539		struct {
   1540			__le16 ch;
   1541			u8 bssid[ETH_ALEN];
   1542			u8 unused[8];
   1543		} ap_bss;
   1544	} u;
   1545	u8 beacon_ie_len;
   1546	u8 assoc_req_len;
   1547	u8 assoc_resp_len;
   1548	u8 assoc_info[];
   1549} __packed;
   1550
   1551/* Disconnect Event */
   1552enum wmi_disconnect_reason {
   1553	NO_NETWORK_AVAIL = 0x01,
   1554
   1555	/* bmiss */
   1556	LOST_LINK = 0x02,
   1557
   1558	DISCONNECT_CMD = 0x03,
   1559	BSS_DISCONNECTED = 0x04,
   1560	AUTH_FAILED = 0x05,
   1561	ASSOC_FAILED = 0x06,
   1562	NO_RESOURCES_AVAIL = 0x07,
   1563	CSERV_DISCONNECT = 0x08,
   1564	INVALID_PROFILE = 0x0a,
   1565	DOT11H_CHANNEL_SWITCH = 0x0b,
   1566	PROFILE_MISMATCH = 0x0c,
   1567	CONNECTION_EVICTED = 0x0d,
   1568	IBSS_MERGE = 0xe,
   1569};
   1570
   1571/* AP mode disconnect proto_reasons */
   1572enum ap_disconnect_reason {
   1573	WMI_AP_REASON_STA_LEFT		= 101,
   1574	WMI_AP_REASON_FROM_HOST		= 102,
   1575	WMI_AP_REASON_COMM_TIMEOUT	= 103,
   1576	WMI_AP_REASON_MAX_STA		= 104,
   1577	WMI_AP_REASON_ACL		= 105,
   1578	WMI_AP_REASON_STA_ROAM		= 106,
   1579	WMI_AP_REASON_DFS_CHANNEL	= 107,
   1580};
   1581
   1582#define ATH6KL_COUNTRY_RD_SHIFT        16
   1583
   1584struct ath6kl_wmi_regdomain {
   1585	__le32 reg_code;
   1586};
   1587
   1588struct wmi_disconnect_event {
   1589	/* reason code, see 802.11 spec. */
   1590	__le16 proto_reason_status;
   1591
   1592	/* set if known */
   1593	u8 bssid[ETH_ALEN];
   1594
   1595	/* see WMI_DISCONNECT_REASON */
   1596	u8 disconn_reason;
   1597
   1598	u8 assoc_resp_len;
   1599	u8 assoc_info[];
   1600} __packed;
   1601
   1602/*
   1603 * BSS Info Event.
   1604 * Mechanism used to inform host of the presence and characteristic of
   1605 * wireless networks present.  Consists of bss info header followed by
   1606 * the beacon or probe-response frame body.  The 802.11 header is no included.
   1607 */
   1608enum wmi_bi_ftype {
   1609	BEACON_FTYPE = 0x1,
   1610	PROBERESP_FTYPE,
   1611	ACTION_MGMT_FTYPE,
   1612	PROBEREQ_FTYPE,
   1613};
   1614
   1615#define DEF_LRSSI_SCAN_PERIOD		 5
   1616#define DEF_LRSSI_ROAM_THRESHOLD	20
   1617#define DEF_LRSSI_ROAM_FLOOR		60
   1618#define DEF_SCAN_FOR_ROAM_INTVL		 2
   1619
   1620enum wmi_roam_ctrl {
   1621	WMI_FORCE_ROAM = 1,
   1622	WMI_SET_ROAM_MODE,
   1623	WMI_SET_HOST_BIAS,
   1624	WMI_SET_LRSSI_SCAN_PARAMS,
   1625};
   1626
   1627enum wmi_roam_mode {
   1628	WMI_DEFAULT_ROAM_MODE = 1, /* RSSI based roam */
   1629	WMI_HOST_BIAS_ROAM_MODE = 2, /* Host bias based roam */
   1630	WMI_LOCK_BSS_MODE = 3, /* Lock to the current BSS */
   1631};
   1632
   1633struct bss_bias {
   1634	u8 bssid[ETH_ALEN];
   1635	s8 bias;
   1636} __packed;
   1637
   1638struct bss_bias_info {
   1639	u8 num_bss;
   1640	struct bss_bias bss_bias[];
   1641} __packed;
   1642
   1643struct low_rssi_scan_params {
   1644	__le16 lrssi_scan_period;
   1645	a_sle16 lrssi_scan_threshold;
   1646	a_sle16 lrssi_roam_threshold;
   1647	u8 roam_rssi_floor;
   1648	u8 reserved[1];
   1649} __packed;
   1650
   1651struct roam_ctrl_cmd {
   1652	union {
   1653		u8 bssid[ETH_ALEN]; /* WMI_FORCE_ROAM */
   1654		u8 roam_mode; /* WMI_SET_ROAM_MODE */
   1655		struct bss_bias_info bss; /* WMI_SET_HOST_BIAS */
   1656		struct low_rssi_scan_params params; /* WMI_SET_LRSSI_SCAN_PARAMS
   1657						     */
   1658	} __packed info;
   1659	u8 roam_ctrl;
   1660} __packed;
   1661
   1662struct set_beacon_int_cmd {
   1663	__le32 beacon_intvl;
   1664} __packed;
   1665
   1666struct set_dtim_cmd {
   1667	__le32 dtim_period;
   1668} __packed;
   1669
   1670/* BSS INFO HDR version 2.0 */
   1671struct wmi_bss_info_hdr2 {
   1672	__le16 ch; /* frequency in MHz */
   1673
   1674	/* see, enum wmi_bi_ftype */
   1675	u8 frame_type;
   1676
   1677	u8 snr; /* note: rssi = snr - 95 dBm */
   1678	u8 bssid[ETH_ALEN];
   1679	__le16 ie_mask;
   1680} __packed;
   1681
   1682/* Command Error Event */
   1683enum wmi_error_code {
   1684	INVALID_PARAM = 0x01,
   1685	ILLEGAL_STATE = 0x02,
   1686	INTERNAL_ERROR = 0x03,
   1687};
   1688
   1689struct wmi_cmd_error_event {
   1690	__le16 cmd_id;
   1691	u8 err_code;
   1692} __packed;
   1693
   1694struct wmi_pstream_timeout_event {
   1695	u8 tx_queue_num;
   1696	u8 rx_queue_num;
   1697	u8 traffic_direc;
   1698	u8 traffic_class;
   1699} __packed;
   1700
   1701/*
   1702 * The WMI_NEIGHBOR_REPORT Event is generated by the target to inform
   1703 * the host of BSS's it has found that matches the current profile.
   1704 * It can be used by the host to cache PMKs and/to initiate pre-authentication
   1705 * if the BSS supports it.  The first bssid is always the current associated
   1706 * BSS.
   1707 * The bssid and bssFlags information repeats according to the number
   1708 * or APs reported.
   1709 */
   1710enum wmi_bss_flags {
   1711	WMI_DEFAULT_BSS_FLAGS = 0x00,
   1712	WMI_PREAUTH_CAPABLE_BSS = 0x01,
   1713	WMI_PMKID_VALID_BSS = 0x02,
   1714};
   1715
   1716struct wmi_neighbor_info {
   1717	u8 bssid[ETH_ALEN];
   1718	u8 bss_flags; /* enum wmi_bss_flags */
   1719} __packed;
   1720
   1721struct wmi_neighbor_report_event {
   1722	u8 num_neighbors;
   1723	struct wmi_neighbor_info neighbor[];
   1724} __packed;
   1725
   1726/* TKIP MIC Error Event */
   1727struct wmi_tkip_micerr_event {
   1728	u8 key_id;
   1729	u8 is_mcast;
   1730} __packed;
   1731
   1732enum wmi_scan_status {
   1733	WMI_SCAN_STATUS_SUCCESS = 0,
   1734};
   1735
   1736/* WMI_SCAN_COMPLETE_EVENTID */
   1737struct wmi_scan_complete_event {
   1738	a_sle32 status;
   1739} __packed;
   1740
   1741#define MAX_OPT_DATA_LEN 1400
   1742
   1743/*
   1744 * Special frame receive Event.
   1745 * Mechanism used to inform host of the receiption of the special frames.
   1746 * Consists of special frame info header followed by special frame body.
   1747 * The 802.11 header is not included.
   1748 */
   1749struct wmi_opt_rx_info_hdr {
   1750	__le16 ch;
   1751	u8 frame_type;
   1752	s8 snr;
   1753	u8 src_addr[ETH_ALEN];
   1754	u8 bssid[ETH_ALEN];
   1755} __packed;
   1756
   1757/* Reporting statistic */
   1758struct tx_stats {
   1759	__le32 pkt;
   1760	__le32 byte;
   1761	__le32 ucast_pkt;
   1762	__le32 ucast_byte;
   1763	__le32 mcast_pkt;
   1764	__le32 mcast_byte;
   1765	__le32 bcast_pkt;
   1766	__le32 bcast_byte;
   1767	__le32 rts_success_cnt;
   1768	__le32 pkt_per_ac[4];
   1769	__le32 err_per_ac[4];
   1770
   1771	__le32 err;
   1772	__le32 fail_cnt;
   1773	__le32 retry_cnt;
   1774	__le32 mult_retry_cnt;
   1775	__le32 rts_fail_cnt;
   1776	a_sle32 ucast_rate;
   1777} __packed;
   1778
   1779struct rx_stats {
   1780	__le32 pkt;
   1781	__le32 byte;
   1782	__le32 ucast_pkt;
   1783	__le32 ucast_byte;
   1784	__le32 mcast_pkt;
   1785	__le32 mcast_byte;
   1786	__le32 bcast_pkt;
   1787	__le32 bcast_byte;
   1788	__le32 frgment_pkt;
   1789
   1790	__le32 err;
   1791	__le32 crc_err;
   1792	__le32 key_cache_miss;
   1793	__le32 decrypt_err;
   1794	__le32 dupl_frame;
   1795	a_sle32 ucast_rate;
   1796} __packed;
   1797
   1798#define RATE_INDEX_WITHOUT_SGI_MASK     0x7f
   1799#define RATE_INDEX_MSB     0x80
   1800
   1801struct tkip_ccmp_stats {
   1802	__le32 tkip_local_mic_fail;
   1803	__le32 tkip_cnter_measures_invoked;
   1804	__le32 tkip_replays;
   1805	__le32 tkip_fmt_err;
   1806	__le32 ccmp_fmt_err;
   1807	__le32 ccmp_replays;
   1808} __packed;
   1809
   1810struct pm_stats {
   1811	__le32 pwr_save_failure_cnt;
   1812	__le16 stop_tx_failure_cnt;
   1813	__le16 atim_tx_failure_cnt;
   1814	__le16 atim_rx_failure_cnt;
   1815	__le16 bcn_rx_failure_cnt;
   1816} __packed;
   1817
   1818struct cserv_stats {
   1819	__le32 cs_bmiss_cnt;
   1820	__le32 cs_low_rssi_cnt;
   1821	__le16 cs_connect_cnt;
   1822	__le16 cs_discon_cnt;
   1823	a_sle16 cs_ave_beacon_rssi;
   1824	__le16 cs_roam_count;
   1825	a_sle16 cs_rssi;
   1826	u8 cs_snr;
   1827	u8 cs_ave_beacon_snr;
   1828	u8 cs_last_roam_msec;
   1829} __packed;
   1830
   1831struct wlan_net_stats {
   1832	struct tx_stats tx;
   1833	struct rx_stats rx;
   1834	struct tkip_ccmp_stats tkip_ccmp_stats;
   1835} __packed;
   1836
   1837struct arp_stats {
   1838	__le32 arp_received;
   1839	__le32 arp_matched;
   1840	__le32 arp_replied;
   1841} __packed;
   1842
   1843struct wlan_wow_stats {
   1844	__le32 wow_pkt_dropped;
   1845	__le16 wow_evt_discarded;
   1846	u8 wow_host_pkt_wakeups;
   1847	u8 wow_host_evt_wakeups;
   1848} __packed;
   1849
   1850struct wmi_target_stats {
   1851	__le32 lq_val;
   1852	a_sle32 noise_floor_calib;
   1853	struct pm_stats pm_stats;
   1854	struct wlan_net_stats stats;
   1855	struct wlan_wow_stats wow_stats;
   1856	struct arp_stats arp_stats;
   1857	struct cserv_stats cserv_stats;
   1858} __packed;
   1859
   1860/*
   1861 * WMI_RSSI_THRESHOLD_EVENTID.
   1862 * Indicate the RSSI events to host. Events are indicated when we breach a
   1863 * thresold value.
   1864 */
   1865enum wmi_rssi_threshold_val {
   1866	WMI_RSSI_THRESHOLD1_ABOVE = 0,
   1867	WMI_RSSI_THRESHOLD2_ABOVE,
   1868	WMI_RSSI_THRESHOLD3_ABOVE,
   1869	WMI_RSSI_THRESHOLD4_ABOVE,
   1870	WMI_RSSI_THRESHOLD5_ABOVE,
   1871	WMI_RSSI_THRESHOLD6_ABOVE,
   1872	WMI_RSSI_THRESHOLD1_BELOW,
   1873	WMI_RSSI_THRESHOLD2_BELOW,
   1874	WMI_RSSI_THRESHOLD3_BELOW,
   1875	WMI_RSSI_THRESHOLD4_BELOW,
   1876	WMI_RSSI_THRESHOLD5_BELOW,
   1877	WMI_RSSI_THRESHOLD6_BELOW
   1878};
   1879
   1880struct wmi_rssi_threshold_event {
   1881	a_sle16 rssi;
   1882	u8 range;
   1883} __packed;
   1884
   1885enum wmi_snr_threshold_val {
   1886	WMI_SNR_THRESHOLD1_ABOVE = 1,
   1887	WMI_SNR_THRESHOLD1_BELOW,
   1888	WMI_SNR_THRESHOLD2_ABOVE,
   1889	WMI_SNR_THRESHOLD2_BELOW,
   1890	WMI_SNR_THRESHOLD3_ABOVE,
   1891	WMI_SNR_THRESHOLD3_BELOW,
   1892	WMI_SNR_THRESHOLD4_ABOVE,
   1893	WMI_SNR_THRESHOLD4_BELOW
   1894};
   1895
   1896struct wmi_snr_threshold_event {
   1897	/* see, enum wmi_snr_threshold_val */
   1898	u8 range;
   1899
   1900	u8 snr;
   1901} __packed;
   1902
   1903/* WMI_REPORT_ROAM_TBL_EVENTID */
   1904#define MAX_ROAM_TBL_CAND   5
   1905
   1906struct wmi_bss_roam_info {
   1907	a_sle32 roam_util;
   1908	u8 bssid[ETH_ALEN];
   1909	s8 rssi;
   1910	s8 rssidt;
   1911	s8 last_rssi;
   1912	s8 util;
   1913	s8 bias;
   1914
   1915	/* for alignment */
   1916	u8 reserved;
   1917} __packed;
   1918
   1919struct wmi_target_roam_tbl {
   1920	__le16 roam_mode;
   1921	__le16 num_entries;
   1922	struct wmi_bss_roam_info info[];
   1923} __packed;
   1924
   1925/* WMI_CAC_EVENTID */
   1926enum cac_indication {
   1927	CAC_INDICATION_ADMISSION = 0x00,
   1928	CAC_INDICATION_ADMISSION_RESP = 0x01,
   1929	CAC_INDICATION_DELETE = 0x02,
   1930	CAC_INDICATION_NO_RESP = 0x03,
   1931};
   1932
   1933#define WMM_TSPEC_IE_LEN   63
   1934
   1935struct wmi_cac_event {
   1936	u8 ac;
   1937	u8 cac_indication;
   1938	u8 status_code;
   1939	u8 tspec_suggestion[WMM_TSPEC_IE_LEN];
   1940} __packed;
   1941
   1942/* WMI_APLIST_EVENTID */
   1943
   1944enum aplist_ver {
   1945	APLIST_VER1 = 1,
   1946};
   1947
   1948struct wmi_ap_info_v1 {
   1949	u8 bssid[ETH_ALEN];
   1950	__le16 channel;
   1951} __packed;
   1952
   1953union wmi_ap_info {
   1954	struct wmi_ap_info_v1 ap_info_v1;
   1955} __packed;
   1956
   1957struct wmi_aplist_event {
   1958	u8 ap_list_ver;
   1959	u8 num_ap;
   1960	union wmi_ap_info ap_list[];
   1961} __packed;
   1962
   1963/* Developer Commands */
   1964
   1965/*
   1966 * WMI_SET_BITRATE_CMDID
   1967 *
   1968 * Get bit rate cmd uses same definition as set bit rate cmd
   1969 */
   1970enum wmi_bit_rate {
   1971	RATE_AUTO = -1,
   1972	RATE_1Mb = 0,
   1973	RATE_2Mb = 1,
   1974	RATE_5_5Mb = 2,
   1975	RATE_11Mb = 3,
   1976	RATE_6Mb = 4,
   1977	RATE_9Mb = 5,
   1978	RATE_12Mb = 6,
   1979	RATE_18Mb = 7,
   1980	RATE_24Mb = 8,
   1981	RATE_36Mb = 9,
   1982	RATE_48Mb = 10,
   1983	RATE_54Mb = 11,
   1984	RATE_MCS_0_20 = 12,
   1985	RATE_MCS_1_20 = 13,
   1986	RATE_MCS_2_20 = 14,
   1987	RATE_MCS_3_20 = 15,
   1988	RATE_MCS_4_20 = 16,
   1989	RATE_MCS_5_20 = 17,
   1990	RATE_MCS_6_20 = 18,
   1991	RATE_MCS_7_20 = 19,
   1992	RATE_MCS_0_40 = 20,
   1993	RATE_MCS_1_40 = 21,
   1994	RATE_MCS_2_40 = 22,
   1995	RATE_MCS_3_40 = 23,
   1996	RATE_MCS_4_40 = 24,
   1997	RATE_MCS_5_40 = 25,
   1998	RATE_MCS_6_40 = 26,
   1999	RATE_MCS_7_40 = 27,
   2000};
   2001
   2002struct wmi_bit_rate_reply {
   2003	/* see, enum wmi_bit_rate */
   2004	s8 rate_index;
   2005} __packed;
   2006
   2007/*
   2008 * WMI_SET_FIXRATES_CMDID
   2009 *
   2010 * Get fix rates cmd uses same definition as set fix rates cmd
   2011 */
   2012struct wmi_fix_rates_reply {
   2013	/* see wmi_bit_rate */
   2014	__le32 fix_rate_mask;
   2015} __packed;
   2016
   2017enum roam_data_type {
   2018	/* get the roam time data */
   2019	ROAM_DATA_TIME = 1,
   2020};
   2021
   2022struct wmi_target_roam_time {
   2023	__le32 disassoc_time;
   2024	__le32 no_txrx_time;
   2025	__le32 assoc_time;
   2026	__le32 allow_txrx_time;
   2027	u8 disassoc_bssid[ETH_ALEN];
   2028	s8 disassoc_bss_rssi;
   2029	u8 assoc_bssid[ETH_ALEN];
   2030	s8 assoc_bss_rssi;
   2031} __packed;
   2032
   2033enum wmi_txop_cfg {
   2034	WMI_TXOP_DISABLED = 0,
   2035	WMI_TXOP_ENABLED
   2036};
   2037
   2038struct wmi_set_wmm_txop_cmd {
   2039	u8 txop_enable;
   2040} __packed;
   2041
   2042struct wmi_set_keepalive_cmd {
   2043	u8 keep_alive_intvl;
   2044} __packed;
   2045
   2046struct wmi_get_keepalive_cmd {
   2047	__le32 configured;
   2048	u8 keep_alive_intvl;
   2049} __packed;
   2050
   2051struct wmi_set_appie_cmd {
   2052	u8 mgmt_frm_type; /* enum wmi_mgmt_frame_type */
   2053	u8 ie_len;
   2054	u8 ie_info[];
   2055} __packed;
   2056
   2057struct wmi_set_ie_cmd {
   2058	u8 ie_id;
   2059	u8 ie_field;	/* enum wmi_ie_field_type */
   2060	u8 ie_len;
   2061	u8 reserved;
   2062	u8 ie_info[];
   2063} __packed;
   2064
   2065/* Notify the WSC registration status to the target */
   2066#define WSC_REG_ACTIVE     1
   2067#define WSC_REG_INACTIVE   0
   2068
   2069#define WOW_MAX_FILTERS_PER_LIST 4
   2070#define WOW_PATTERN_SIZE	 64
   2071
   2072#define MAC_MAX_FILTERS_PER_LIST 4
   2073
   2074struct wow_filter {
   2075	u8 wow_valid_filter;
   2076	u8 wow_filter_id;
   2077	u8 wow_filter_size;
   2078	u8 wow_filter_offset;
   2079	u8 wow_filter_mask[WOW_PATTERN_SIZE];
   2080	u8 wow_filter_pattern[WOW_PATTERN_SIZE];
   2081} __packed;
   2082
   2083#define MAX_IP_ADDRS  2
   2084
   2085struct wmi_set_ip_cmd {
   2086	/* IP in network byte order */
   2087	__be32 ips[MAX_IP_ADDRS];
   2088} __packed;
   2089
   2090enum ath6kl_wow_filters {
   2091	WOW_FILTER_SSID			= BIT(1),
   2092	WOW_FILTER_OPTION_MAGIC_PACKET  = BIT(2),
   2093	WOW_FILTER_OPTION_EAP_REQ	= BIT(3),
   2094	WOW_FILTER_OPTION_PATTERNS	= BIT(4),
   2095	WOW_FILTER_OPTION_OFFLOAD_ARP	= BIT(5),
   2096	WOW_FILTER_OPTION_OFFLOAD_NS	= BIT(6),
   2097	WOW_FILTER_OPTION_OFFLOAD_GTK	= BIT(7),
   2098	WOW_FILTER_OPTION_8021X_4WAYHS	= BIT(8),
   2099	WOW_FILTER_OPTION_NLO_DISCVRY	= BIT(9),
   2100	WOW_FILTER_OPTION_NWK_DISASSOC	= BIT(10),
   2101	WOW_FILTER_OPTION_GTK_ERROR	= BIT(11),
   2102	WOW_FILTER_OPTION_TEST_MODE	= BIT(15),
   2103};
   2104
   2105enum ath6kl_host_mode {
   2106	ATH6KL_HOST_MODE_AWAKE,
   2107	ATH6KL_HOST_MODE_ASLEEP,
   2108};
   2109
   2110struct wmi_set_host_sleep_mode_cmd {
   2111	__le32 awake;
   2112	__le32 asleep;
   2113} __packed;
   2114
   2115enum ath6kl_wow_mode {
   2116	ATH6KL_WOW_MODE_DISABLE,
   2117	ATH6KL_WOW_MODE_ENABLE,
   2118};
   2119
   2120struct wmi_set_wow_mode_cmd {
   2121	__le32 enable_wow;
   2122	__le32 filter;
   2123	__le16 host_req_delay;
   2124} __packed;
   2125
   2126struct wmi_add_wow_pattern_cmd {
   2127	u8 filter_list_id;
   2128	u8 filter_size;
   2129	u8 filter_offset;
   2130	u8 filter[];
   2131} __packed;
   2132
   2133struct wmi_del_wow_pattern_cmd {
   2134	__le16 filter_list_id;
   2135	__le16 filter_id;
   2136} __packed;
   2137
   2138/* WMI_SET_TXE_NOTIFY_CMDID */
   2139struct wmi_txe_notify_cmd {
   2140	__le32 rate;
   2141	__le32 pkts;
   2142	__le32 intvl;
   2143} __packed;
   2144
   2145/* WMI_TXE_NOTIFY_EVENTID */
   2146struct wmi_txe_notify_event {
   2147	__le32 rate;
   2148	__le32 pkts;
   2149} __packed;
   2150
   2151/* WMI_SET_AKMP_PARAMS_CMD */
   2152
   2153struct wmi_pmkid {
   2154	u8 pmkid[WMI_PMKID_LEN];
   2155} __packed;
   2156
   2157/* WMI_GET_PMKID_LIST_CMD  Reply */
   2158struct wmi_pmkid_list_reply {
   2159	__le32 num_pmkid;
   2160	u8 bssid_list[ETH_ALEN][1];
   2161	struct wmi_pmkid pmkid_list[1];
   2162} __packed;
   2163
   2164/* WMI_ADDBA_REQ_EVENTID */
   2165struct wmi_addba_req_event {
   2166	u8 tid;
   2167	u8 win_sz;
   2168	__le16 st_seq_no;
   2169
   2170	/* f/w response for ADDBA Req; OK (0) or failure (!=0) */
   2171	u8 status;
   2172} __packed;
   2173
   2174/* WMI_ADDBA_RESP_EVENTID */
   2175struct wmi_addba_resp_event {
   2176	u8 tid;
   2177
   2178	/* OK (0), failure (!=0) */
   2179	u8 status;
   2180
   2181	/* three values: not supported(0), 3839, 8k */
   2182	__le16 amsdu_sz;
   2183} __packed;
   2184
   2185/* WMI_DELBA_EVENTID
   2186 * f/w received a DELBA for peer and processed it.
   2187 * Host is notified of this
   2188 */
   2189struct wmi_delba_event {
   2190	u8 tid;
   2191	u8 is_peer_initiator;
   2192	__le16 reason_code;
   2193} __packed;
   2194
   2195#define PEER_NODE_JOIN_EVENT		0x00
   2196#define PEER_NODE_LEAVE_EVENT		0x01
   2197#define PEER_FIRST_NODE_JOIN_EVENT	0x10
   2198#define PEER_LAST_NODE_LEAVE_EVENT	0x11
   2199
   2200struct wmi_peer_node_event {
   2201	u8 event_code;
   2202	u8 peer_mac_addr[ETH_ALEN];
   2203} __packed;
   2204
   2205/* Transmit complete event data structure(s) */
   2206
   2207/* version 1 of tx complete msg */
   2208struct tx_complete_msg_v1 {
   2209#define TX_COMPLETE_STATUS_SUCCESS 0
   2210#define TX_COMPLETE_STATUS_RETRIES 1
   2211#define TX_COMPLETE_STATUS_NOLINK  2
   2212#define TX_COMPLETE_STATUS_TIMEOUT 3
   2213#define TX_COMPLETE_STATUS_OTHER   4
   2214
   2215	u8 status;
   2216
   2217	/* packet ID to identify parent packet */
   2218	u8 pkt_id;
   2219
   2220	/* rate index on successful transmission */
   2221	u8 rate_idx;
   2222
   2223	/* number of ACK failures in tx attempt */
   2224	u8 ack_failures;
   2225} __packed;
   2226
   2227struct wmi_tx_complete_event {
   2228	/* no of tx comp msgs following this struct */
   2229	u8 num_msg;
   2230
   2231	/* length in bytes for each individual msg following this struct */
   2232	u8 msg_len;
   2233
   2234	/* version of tx complete msg data following this struct */
   2235	u8 msg_type;
   2236
   2237	/* individual messages follow this header */
   2238	u8 reserved;
   2239} __packed;
   2240
   2241/*
   2242 * ------- AP Mode definitions --------------
   2243 */
   2244
   2245/*
   2246 * !!! Warning !!!
   2247 * -Changing the following values needs compilation of both driver and firmware
   2248 */
   2249#define AP_MAX_NUM_STA          10
   2250
   2251/* Spl. AID used to set DTIM flag in the beacons */
   2252#define MCAST_AID               0xFF
   2253
   2254#define DEF_AP_COUNTRY_CODE     "US "
   2255
   2256/* Used with WMI_AP_SET_NUM_STA_CMDID */
   2257
   2258/*
   2259 * Used with WMI_AP_SET_MLME_CMDID
   2260 */
   2261
   2262/* MLME Commands */
   2263#define WMI_AP_MLME_ASSOC       1   /* associate station */
   2264#define WMI_AP_DISASSOC         2   /* disassociate station */
   2265#define WMI_AP_DEAUTH           3   /* deauthenticate station */
   2266#define WMI_AP_MLME_AUTHORIZE   4   /* authorize station */
   2267#define WMI_AP_MLME_UNAUTHORIZE 5   /* unauthorize station */
   2268
   2269struct wmi_ap_set_mlme_cmd {
   2270	u8 mac[ETH_ALEN];
   2271	__le16 reason;		/* 802.11 reason code */
   2272	u8 cmd;			/* operation to perform (WMI_AP_*) */
   2273} __packed;
   2274
   2275struct wmi_ap_set_pvb_cmd {
   2276	__le32 flag;
   2277	__le16 rsvd;
   2278	__le16 aid;
   2279} __packed;
   2280
   2281struct wmi_rx_frame_format_cmd {
   2282	/* version of meta data for rx packets <0 = default> (0-7 = valid) */
   2283	u8 meta_ver;
   2284
   2285	/*
   2286	 * 1 == leave .11 header intact,
   2287	 * 0 == replace .11 header with .3 <default>
   2288	 */
   2289	u8 dot11_hdr;
   2290
   2291	/*
   2292	 * 1 == defragmentation is performed by host,
   2293	 * 0 == performed by target <default>
   2294	 */
   2295	u8 defrag_on_host;
   2296
   2297	/* for alignment */
   2298	u8 reserved[1];
   2299} __packed;
   2300
   2301struct wmi_ap_hidden_ssid_cmd {
   2302	u8 hidden_ssid;
   2303} __packed;
   2304
   2305struct wmi_set_inact_period_cmd {
   2306	__le32 inact_period;
   2307	u8 num_null_func;
   2308} __packed;
   2309
   2310/* AP mode events */
   2311struct wmi_ap_set_apsd_cmd {
   2312	u8 enable;
   2313} __packed;
   2314
   2315enum wmi_ap_apsd_buffered_traffic_flags {
   2316	WMI_AP_APSD_NO_DELIVERY_FRAMES =  0x1,
   2317};
   2318
   2319struct wmi_ap_apsd_buffered_traffic_cmd {
   2320	__le16 aid;
   2321	__le16 bitmap;
   2322	__le32 flags;
   2323} __packed;
   2324
   2325/* WMI_PS_POLL_EVENT */
   2326struct wmi_pspoll_event {
   2327	__le16 aid;
   2328} __packed;
   2329
   2330struct wmi_per_sta_stat {
   2331	__le32 tx_bytes;
   2332	__le32 tx_pkts;
   2333	__le32 tx_error;
   2334	__le32 tx_discard;
   2335	__le32 rx_bytes;
   2336	__le32 rx_pkts;
   2337	__le32 rx_error;
   2338	__le32 rx_discard;
   2339	__le32 aid;
   2340} __packed;
   2341
   2342struct wmi_ap_mode_stat {
   2343	__le32 action;
   2344	struct wmi_per_sta_stat sta[AP_MAX_NUM_STA + 1];
   2345} __packed;
   2346
   2347/* End of AP mode definitions */
   2348
   2349struct wmi_remain_on_chnl_cmd {
   2350	__le32 freq;
   2351	__le32 duration;
   2352} __packed;
   2353
   2354/* wmi_send_action_cmd is to be deprecated. Use
   2355 * wmi_send_mgmt_cmd instead. The new structure supports P2P mgmt
   2356 * operations using station interface.
   2357 */
   2358struct wmi_send_action_cmd {
   2359	__le32 id;
   2360	__le32 freq;
   2361	__le32 wait;
   2362	__le16 len;
   2363	u8 data[];
   2364} __packed;
   2365
   2366struct wmi_send_mgmt_cmd {
   2367	__le32 id;
   2368	__le32 freq;
   2369	__le32 wait;
   2370	__le32 no_cck;
   2371	__le16 len;
   2372	u8 data[];
   2373} __packed;
   2374
   2375struct wmi_tx_status_event {
   2376	__le32 id;
   2377	u8 ack_status;
   2378} __packed;
   2379
   2380struct wmi_probe_req_report_cmd {
   2381	u8 enable;
   2382} __packed;
   2383
   2384struct wmi_disable_11b_rates_cmd {
   2385	u8 disable;
   2386} __packed;
   2387
   2388struct wmi_set_appie_extended_cmd {
   2389	u8 role_id;
   2390	u8 mgmt_frm_type;
   2391	u8 ie_len;
   2392	u8 ie_info[];
   2393} __packed;
   2394
   2395struct wmi_remain_on_chnl_event {
   2396	__le32 freq;
   2397	__le32 duration;
   2398} __packed;
   2399
   2400struct wmi_cancel_remain_on_chnl_event {
   2401	__le32 freq;
   2402	__le32 duration;
   2403	u8 status;
   2404} __packed;
   2405
   2406struct wmi_rx_action_event {
   2407	__le32 freq;
   2408	__le16 len;
   2409	u8 data[];
   2410} __packed;
   2411
   2412struct wmi_p2p_capabilities_event {
   2413	__le16 len;
   2414	u8 data[];
   2415} __packed;
   2416
   2417struct wmi_p2p_rx_probe_req_event {
   2418	__le32 freq;
   2419	__le16 len;
   2420	u8 data[];
   2421} __packed;
   2422
   2423#define P2P_FLAG_CAPABILITIES_REQ   (0x00000001)
   2424#define P2P_FLAG_MACADDR_REQ        (0x00000002)
   2425#define P2P_FLAG_HMODEL_REQ         (0x00000002)
   2426
   2427struct wmi_get_p2p_info {
   2428	__le32 info_req_flags;
   2429} __packed;
   2430
   2431struct wmi_p2p_info_event {
   2432	__le32 info_req_flags;
   2433	__le16 len;
   2434	u8 data[];
   2435} __packed;
   2436
   2437struct wmi_p2p_capabilities {
   2438	u8 go_power_save;
   2439} __packed;
   2440
   2441struct wmi_p2p_macaddr {
   2442	u8 mac_addr[ETH_ALEN];
   2443} __packed;
   2444
   2445struct wmi_p2p_hmodel {
   2446	u8 p2p_model;
   2447} __packed;
   2448
   2449struct wmi_p2p_probe_response_cmd {
   2450	__le32 freq;
   2451	u8 destination_addr[ETH_ALEN];
   2452	__le16 len;
   2453	u8 data[];
   2454} __packed;
   2455
   2456/* Extended WMI (WMIX)
   2457 *
   2458 * Extended WMIX commands are encapsulated in a WMI message with
   2459 * cmd=WMI_EXTENSION_CMD.
   2460 *
   2461 * Extended WMI commands are those that are needed during wireless
   2462 * operation, but which are not really wireless commands.  This allows,
   2463 * for instance, platform-specific commands.  Extended WMI commands are
   2464 * embedded in a WMI command message with WMI_COMMAND_ID=WMI_EXTENSION_CMDID.
   2465 * Extended WMI events are similarly embedded in a WMI event message with
   2466 * WMI_EVENT_ID=WMI_EXTENSION_EVENTID.
   2467 */
   2468struct wmix_cmd_hdr {
   2469	__le32 cmd_id;
   2470} __packed;
   2471
   2472enum wmix_command_id {
   2473	WMIX_DSETOPEN_REPLY_CMDID = 0x2001,
   2474	WMIX_DSETDATA_REPLY_CMDID,
   2475	WMIX_GPIO_OUTPUT_SET_CMDID,
   2476	WMIX_GPIO_INPUT_GET_CMDID,
   2477	WMIX_GPIO_REGISTER_SET_CMDID,
   2478	WMIX_GPIO_REGISTER_GET_CMDID,
   2479	WMIX_GPIO_INTR_ACK_CMDID,
   2480	WMIX_HB_CHALLENGE_RESP_CMDID,
   2481	WMIX_DBGLOG_CFG_MODULE_CMDID,
   2482	WMIX_PROF_CFG_CMDID,	/* 0x200a */
   2483	WMIX_PROF_ADDR_SET_CMDID,
   2484	WMIX_PROF_START_CMDID,
   2485	WMIX_PROF_STOP_CMDID,
   2486	WMIX_PROF_COUNT_GET_CMDID,
   2487};
   2488
   2489enum wmix_event_id {
   2490	WMIX_DSETOPENREQ_EVENTID = 0x3001,
   2491	WMIX_DSETCLOSE_EVENTID,
   2492	WMIX_DSETDATAREQ_EVENTID,
   2493	WMIX_GPIO_INTR_EVENTID,
   2494	WMIX_GPIO_DATA_EVENTID,
   2495	WMIX_GPIO_ACK_EVENTID,
   2496	WMIX_HB_CHALLENGE_RESP_EVENTID,
   2497	WMIX_DBGLOG_EVENTID,
   2498	WMIX_PROF_COUNT_EVENTID,
   2499};
   2500
   2501/*
   2502 * ------Error Detection support-------
   2503 */
   2504
   2505/*
   2506 * WMIX_HB_CHALLENGE_RESP_CMDID
   2507 * Heartbeat Challenge Response command
   2508 */
   2509struct wmix_hb_challenge_resp_cmd {
   2510	__le32 cookie;
   2511	__le32 source;
   2512} __packed;
   2513
   2514struct ath6kl_wmix_dbglog_cfg_module_cmd {
   2515	__le32 valid;
   2516	__le32 config;
   2517} __packed;
   2518
   2519/* End of Extended WMI (WMIX) */
   2520
   2521enum wmi_sync_flag {
   2522	NO_SYNC_WMIFLAG = 0,
   2523
   2524	/* transmit all queued data before cmd */
   2525	SYNC_BEFORE_WMIFLAG,
   2526
   2527	/* any new data waits until cmd execs */
   2528	SYNC_AFTER_WMIFLAG,
   2529
   2530	SYNC_BOTH_WMIFLAG,
   2531
   2532	/* end marker */
   2533	END_WMIFLAG
   2534};
   2535
   2536enum htc_endpoint_id ath6kl_wmi_get_control_ep(struct wmi *wmi);
   2537void ath6kl_wmi_set_control_ep(struct wmi *wmi, enum htc_endpoint_id ep_id);
   2538int ath6kl_wmi_dix_2_dot3(struct wmi *wmi, struct sk_buff *skb);
   2539int ath6kl_wmi_data_hdr_add(struct wmi *wmi, struct sk_buff *skb,
   2540			    u8 msg_type, u32 flags,
   2541			    enum wmi_data_hdr_data_type data_type,
   2542			    u8 meta_ver, void *tx_meta_info, u8 if_idx);
   2543
   2544int ath6kl_wmi_dot11_hdr_remove(struct wmi *wmi, struct sk_buff *skb);
   2545int ath6kl_wmi_dot3_2_dix(struct sk_buff *skb);
   2546int ath6kl_wmi_implicit_create_pstream(struct wmi *wmi, u8 if_idx,
   2547				       struct sk_buff *skb, u32 layer2_priority,
   2548				       bool wmm_enabled, u8 *ac);
   2549
   2550int ath6kl_wmi_control_rx(struct wmi *wmi, struct sk_buff *skb);
   2551
   2552int ath6kl_wmi_cmd_send(struct wmi *wmi, u8 if_idx, struct sk_buff *skb,
   2553			enum wmi_cmd_id cmd_id, enum wmi_sync_flag sync_flag);
   2554
   2555int ath6kl_wmi_connect_cmd(struct wmi *wmi, u8 if_idx,
   2556			   enum network_type nw_type,
   2557			   enum dot11_auth_mode dot11_auth_mode,
   2558			   enum auth_mode auth_mode,
   2559			   enum ath6kl_crypto_type pairwise_crypto,
   2560			   u8 pairwise_crypto_len,
   2561			   enum ath6kl_crypto_type group_crypto,
   2562			   u8 group_crypto_len, int ssid_len, u8 *ssid,
   2563			   u8 *bssid, u16 channel, u32 ctrl_flags,
   2564			   u8 nw_subtype);
   2565
   2566int ath6kl_wmi_reconnect_cmd(struct wmi *wmi, u8 if_idx, u8 *bssid,
   2567			     u16 channel);
   2568int ath6kl_wmi_disconnect_cmd(struct wmi *wmi, u8 if_idx);
   2569
   2570int ath6kl_wmi_beginscan_cmd(struct wmi *wmi, u8 if_idx,
   2571			     enum wmi_scan_type scan_type,
   2572			     u32 force_fgscan, u32 is_legacy,
   2573			     u32 home_dwell_time, u32 force_scan_interval,
   2574			     s8 num_chan, u16 *ch_list, u32 no_cck,
   2575			     u32 *rates);
   2576int ath6kl_wmi_enable_sched_scan_cmd(struct wmi *wmi, u8 if_idx, bool enable);
   2577
   2578int ath6kl_wmi_scanparams_cmd(struct wmi *wmi, u8 if_idx, u16 fg_start_sec,
   2579			      u16 fg_end_sec, u16 bg_sec,
   2580			      u16 minact_chdw_msec, u16 maxact_chdw_msec,
   2581			      u16 pas_chdw_msec, u8 short_scan_ratio,
   2582			      u8 scan_ctrl_flag, u32 max_dfsch_act_time,
   2583			      u16 maxact_scan_per_ssid);
   2584int ath6kl_wmi_bssfilter_cmd(struct wmi *wmi, u8 if_idx, u8 filter,
   2585			     u32 ie_mask);
   2586int ath6kl_wmi_probedssid_cmd(struct wmi *wmi, u8 if_idx, u8 index, u8 flag,
   2587			      u8 ssid_len, u8 *ssid);
   2588int ath6kl_wmi_listeninterval_cmd(struct wmi *wmi, u8 if_idx,
   2589				  u16 listen_interval,
   2590				  u16 listen_beacons);
   2591int ath6kl_wmi_bmisstime_cmd(struct wmi *wmi, u8 if_idx,
   2592			     u16 bmiss_time, u16 num_beacons);
   2593int ath6kl_wmi_powermode_cmd(struct wmi *wmi, u8 if_idx, u8 pwr_mode);
   2594int ath6kl_wmi_pmparams_cmd(struct wmi *wmi, u8 if_idx, u16 idle_period,
   2595			    u16 ps_poll_num, u16 dtim_policy,
   2596			    u16 tx_wakup_policy, u16 num_tx_to_wakeup,
   2597			    u16 ps_fail_event_policy);
   2598int ath6kl_wmi_create_pstream_cmd(struct wmi *wmi, u8 if_idx,
   2599				  struct wmi_create_pstream_cmd *pstream);
   2600int ath6kl_wmi_delete_pstream_cmd(struct wmi *wmi, u8 if_idx, u8 traffic_class,
   2601				  u8 tsid);
   2602int ath6kl_wmi_disctimeout_cmd(struct wmi *wmi, u8 if_idx, u8 timeout);
   2603
   2604int ath6kl_wmi_set_rts_cmd(struct wmi *wmi, u16 threshold);
   2605int ath6kl_wmi_set_lpreamble_cmd(struct wmi *wmi, u8 if_idx, u8 status,
   2606				 u8 preamble_policy);
   2607
   2608int ath6kl_wmi_get_challenge_resp_cmd(struct wmi *wmi, u32 cookie, u32 source);
   2609int ath6kl_wmi_config_debug_module_cmd(struct wmi *wmi, u32 valid, u32 config);
   2610
   2611int ath6kl_wmi_get_stats_cmd(struct wmi *wmi, u8 if_idx);
   2612int ath6kl_wmi_addkey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index,
   2613			  enum ath6kl_crypto_type key_type,
   2614			  u8 key_usage, u8 key_len,
   2615			  u8 *key_rsc, unsigned int key_rsc_len,
   2616			  u8 *key_material,
   2617			  u8 key_op_ctrl, u8 *mac_addr,
   2618			  enum wmi_sync_flag sync_flag);
   2619int ath6kl_wmi_add_krk_cmd(struct wmi *wmi, u8 if_idx, const u8 *krk);
   2620int ath6kl_wmi_deletekey_cmd(struct wmi *wmi, u8 if_idx, u8 key_index);
   2621int ath6kl_wmi_setpmkid_cmd(struct wmi *wmi, u8 if_idx, const u8 *bssid,
   2622			    const u8 *pmkid, bool set);
   2623int ath6kl_wmi_set_tx_pwr_cmd(struct wmi *wmi, u8 if_idx, u8 dbM);
   2624int ath6kl_wmi_get_tx_pwr_cmd(struct wmi *wmi, u8 if_idx);
   2625int ath6kl_wmi_get_roam_tbl_cmd(struct wmi *wmi);
   2626
   2627int ath6kl_wmi_set_wmm_txop(struct wmi *wmi, u8 if_idx, enum wmi_txop_cfg cfg);
   2628int ath6kl_wmi_set_keepalive_cmd(struct wmi *wmi, u8 if_idx,
   2629				 u8 keep_alive_intvl);
   2630int ath6kl_wmi_set_htcap_cmd(struct wmi *wmi, u8 if_idx,
   2631			     enum nl80211_band band,
   2632			     struct ath6kl_htcap *htcap);
   2633int ath6kl_wmi_test_cmd(struct wmi *wmi, void *buf, size_t len);
   2634
   2635s32 ath6kl_wmi_get_rate(struct wmi *wmi, s8 rate_index);
   2636
   2637int ath6kl_wmi_set_ip_cmd(struct wmi *wmi, u8 if_idx,
   2638			  __be32 ips0, __be32 ips1);
   2639int ath6kl_wmi_set_host_sleep_mode_cmd(struct wmi *wmi, u8 if_idx,
   2640				       enum ath6kl_host_mode host_mode);
   2641int ath6kl_wmi_set_bitrate_mask(struct wmi *wmi, u8 if_idx,
   2642				const struct cfg80211_bitrate_mask *mask);
   2643int ath6kl_wmi_set_wow_mode_cmd(struct wmi *wmi, u8 if_idx,
   2644				enum ath6kl_wow_mode wow_mode,
   2645				u32 filter, u16 host_req_delay);
   2646int ath6kl_wmi_add_wow_pattern_cmd(struct wmi *wmi, u8 if_idx,
   2647				   u8 list_id, u8 filter_size,
   2648				   u8 filter_offset, const u8 *filter,
   2649				   const u8 *mask);
   2650int ath6kl_wmi_del_wow_pattern_cmd(struct wmi *wmi, u8 if_idx,
   2651				   u16 list_id, u16 filter_id);
   2652int ath6kl_wmi_set_rssi_filter_cmd(struct wmi *wmi, u8 if_idx, s8 rssi);
   2653int ath6kl_wmi_set_roam_lrssi_cmd(struct wmi *wmi, u8 lrssi);
   2654int ath6kl_wmi_ap_set_dtim_cmd(struct wmi *wmi, u8 if_idx, u32 dtim_period);
   2655int ath6kl_wmi_ap_set_beacon_intvl_cmd(struct wmi *wmi, u8 if_idx,
   2656				       u32 beacon_interval);
   2657int ath6kl_wmi_force_roam_cmd(struct wmi *wmi, const u8 *bssid);
   2658int ath6kl_wmi_set_roam_mode_cmd(struct wmi *wmi, enum wmi_roam_mode mode);
   2659int ath6kl_wmi_mcast_filter_cmd(struct wmi *wmi, u8 if_idx, bool mc_all_on);
   2660int ath6kl_wmi_add_del_mcast_filter_cmd(struct wmi *wmi, u8 if_idx,
   2661					u8 *filter, bool add_filter);
   2662int ath6kl_wmi_sta_bmiss_enhance_cmd(struct wmi *wmi, u8 if_idx, bool enable);
   2663int ath6kl_wmi_set_txe_notify(struct wmi *wmi, u8 idx,
   2664			      u32 rate, u32 pkts, u32 intvl);
   2665int ath6kl_wmi_set_regdomain_cmd(struct wmi *wmi, const char *alpha2);
   2666
   2667/* AP mode uAPSD */
   2668int ath6kl_wmi_ap_set_apsd(struct wmi *wmi, u8 if_idx, u8 enable);
   2669
   2670int ath6kl_wmi_set_apsd_bfrd_traf(struct wmi *wmi,
   2671						u8 if_idx, u16 aid,
   2672						u16 bitmap, u32 flags);
   2673
   2674u8 ath6kl_wmi_get_traffic_class(u8 user_priority);
   2675
   2676u8 ath6kl_wmi_determine_user_priority(u8 *pkt, u32 layer2_pri);
   2677/* AP mode */
   2678int ath6kl_wmi_ap_hidden_ssid(struct wmi *wmi, u8 if_idx, bool enable);
   2679int ath6kl_wmi_ap_profile_commit(struct wmi *wmip, u8 if_idx,
   2680				 struct wmi_connect_cmd *p);
   2681
   2682int ath6kl_wmi_ap_set_mlme(struct wmi *wmip, u8 if_idx, u8 cmd,
   2683			   const u8 *mac, u16 reason);
   2684
   2685int ath6kl_wmi_set_pvb_cmd(struct wmi *wmi, u8 if_idx, u16 aid, bool flag);
   2686
   2687int ath6kl_wmi_set_rx_frame_format_cmd(struct wmi *wmi, u8 if_idx,
   2688				       u8 rx_meta_version,
   2689				       bool rx_dot11_hdr, bool defrag_on_host);
   2690
   2691int ath6kl_wmi_set_appie_cmd(struct wmi *wmi, u8 if_idx, u8 mgmt_frm_type,
   2692			     const u8 *ie, u8 ie_len);
   2693
   2694int ath6kl_wmi_set_ie_cmd(struct wmi *wmi, u8 if_idx, u8 ie_id, u8 ie_field,
   2695			  const u8 *ie_info, u8 ie_len);
   2696
   2697/* P2P */
   2698int ath6kl_wmi_disable_11b_rates_cmd(struct wmi *wmi, bool disable);
   2699
   2700int ath6kl_wmi_remain_on_chnl_cmd(struct wmi *wmi, u8 if_idx, u32 freq,
   2701				  u32 dur);
   2702
   2703int ath6kl_wmi_send_mgmt_cmd(struct wmi *wmi, u8 if_idx, u32 id, u32 freq,
   2704			       u32 wait, const u8 *data, u16 data_len,
   2705			       u32 no_cck);
   2706
   2707int ath6kl_wmi_send_probe_response_cmd(struct wmi *wmi, u8 if_idx, u32 freq,
   2708				       const u8 *dst, const u8 *data,
   2709				       u16 data_len);
   2710
   2711int ath6kl_wmi_probe_report_req_cmd(struct wmi *wmi, u8 if_idx, bool enable);
   2712
   2713int ath6kl_wmi_info_req_cmd(struct wmi *wmi, u8 if_idx, u32 info_req_flags);
   2714
   2715int ath6kl_wmi_cancel_remain_on_chnl_cmd(struct wmi *wmi, u8 if_idx);
   2716
   2717int ath6kl_wmi_set_appie_cmd(struct wmi *wmi, u8 if_idx, u8 mgmt_frm_type,
   2718			     const u8 *ie, u8 ie_len);
   2719
   2720int ath6kl_wmi_set_inact_period(struct wmi *wmi, u8 if_idx, int inact_timeout);
   2721
   2722void ath6kl_wmi_sscan_timer(struct timer_list *t);
   2723
   2724int ath6kl_wmi_get_challenge_resp_cmd(struct wmi *wmi, u32 cookie, u32 source);
   2725
   2726struct ath6kl_vif *ath6kl_get_vif_by_index(struct ath6kl *ar, u8 if_idx);
   2727void *ath6kl_wmi_init(struct ath6kl *devt);
   2728void ath6kl_wmi_shutdown(struct wmi *wmi);
   2729void ath6kl_wmi_reset(struct wmi *wmi);
   2730
   2731#endif /* WMI_H */