blob: 35690a90f2272dd3e96e5d8be4be4af961a6a7ac [file] [log] [blame]
Govind Singh3ddda1f2016-03-09 11:34:12 +05301/*
2 * Copyright (c) 2016 The Linux Foundation. All rights reserved.
3 *
4 * Previously licensed under the ISC license by Qualcomm Atheros, Inc.
5 *
6 *
7 * Permission to use, copy, modify, and/or distribute this software for
8 * any purpose with or without fee is hereby granted, provided that the
9 * above copyright notice and this permission notice appear in all
10 * copies.
11 *
12 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
13 * WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
14 * WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE
15 * AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
16 * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
17 * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
18 * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
19 * PERFORMANCE OF THIS SOFTWARE.
20 */
21
22/*
23 * This file was originally distributed by Qualcomm Atheros, Inc.
24 * under proprietary terms before Copyright ownership was assigned
25 * to the Linux Foundation.
26 */
27
28/*
29 * This file contains the API definitions for the Unified Wireless Module
30 * Interface (WMI).
31 */
32
33#ifndef _WMI_UNIFIED_PARAM_H_
34#define _WMI_UNIFIED_PARAM_H_
Padma, Santhosh Kumar73524052016-09-11 18:24:59 +053035
36#define MAC_MAX_KEY_LENGTH 32
37#define MAC_PN_LENGTH 8
38#define MAX_MAC_HEADER_LEN 32
39#define MIN_MAC_HEADER_LEN 24
40#define QOS_CONTROL_LEN 2
41
Govind Singh3ddda1f2016-03-09 11:34:12 +053042#define IEEE80211_ADDR_LEN 6 /* size of 802.11 address */
Govind Singh3ddda1f2016-03-09 11:34:12 +053043#define WMI_MAC_MAX_SSID_LENGTH 32
44#define WMI_SCAN_MAX_NUM_SSID 0x0A
45#define mgmt_tx_dl_frm_len 64
46#define WMI_SMPS_MASK_LOWER_16BITS 0xFF
47#define WMI_SMPS_MASK_UPPER_3BITS 0x7
48#define WMI_SMPS_PARAM_VALUE_S 29
Govind Singhae855362016-03-07 14:24:22 +053049#define WMI_MAX_NUM_ARGS 8
Govind Singhe7b800c2016-03-01 15:30:53 +053050/* The size of the utc time in bytes. */
51#define WMI_SIZE_UTC_TIME (10)
52/* The size of the utc time error in bytes. */
53#define WMI_SIZE_UTC_TIME_ERROR (5)
Govind Singh9bad0002016-03-01 15:54:59 +053054#define WMI_MCC_MIN_CHANNEL_QUOTA 20
55#define WMI_MCC_MAX_CHANNEL_QUOTA 80
56#define WMI_MCC_MIN_NON_ZERO_CHANNEL_LATENCY 30
57#define WMI_BEACON_TX_BUFFER_SIZE (512)
58#define WMI_WIFI_SCANNING_MAC_OUI_LENGTH 3
59#define WMI_EXTSCAN_MAX_SIGNIFICANT_CHANGE_APS 64
60#define WMI_RSSI_THOLD_DEFAULT -300
61#define WMI_NLO_FREQ_THRESH 1000
62#define WMI_SEC_TO_MSEC(sec) (sec * 1000)
63#define WMI_MSEC_TO_USEC(msec) (msec * 1000)
64#define WMI_ETH_LEN 64
65#define WMI_QOS_NUM_TSPEC_MAX 2
66#define WMI_QOS_NUM_AC_MAX 4
Govind Singhae855362016-03-07 14:24:22 +053067#define WMI_IPV4_ADDR_LEN 4
68#define WMI_KEEP_ALIVE_NULL_PKT 1
69#define WMI_KEEP_ALIVE_UNSOLICIT_ARP_RSP 2
Himanshu Agarwal9efd9bf2016-03-09 18:49:18 +053070#define WMI_MAC_MAX_KEY_LENGTH 32
Himanshu Agarwal5f2d0482016-03-09 15:25:44 +053071#define WMI_KRK_KEY_LEN 16
72#ifdef WLAN_FEATURE_ROAM_OFFLOAD
73#define WMI_BTK_KEY_LEN 32
74#define WMI_ROAM_R0KH_ID_MAX_LEN 48
75#define WMI_ROAM_SCAN_PSK_SIZE 32
76#endif
77#define WMI_NOISE_FLOOR_DBM_DEFAULT (-96)
Govind Singh89727882016-04-15 13:58:27 +053078#define WMI_MAC_IPV6_ADDR_LEN 16
Govind Singhc7cd2d62016-06-21 14:33:26 +053079#define WMI_OFFLOAD_DISABLE 0
80#define WMI_OFFLOAD_ENABLE 1
Govind Singhfa201d92016-06-08 19:40:11 +053081#ifdef WLAN_NS_OFFLOAD
Govind Singhae855362016-03-07 14:24:22 +053082/* support only one IPv6 offload */
83#define WMI_MAC_NS_OFFLOAD_SIZE 1
84/* Number of target IP V6 addresses for NS offload */
85#define WMI_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA 16
Govind Singhae855362016-03-07 14:24:22 +053086#define WMI_IPV6_ADDR_VALID 1
87#endif /* WLAN_NS_OFFLOAD */
88#define WMI_EXTSCAN_MAX_HOTLIST_SSIDS 8
89#define WMI_ROAM_MAX_CHANNELS 80
Govind Singhd7468a52016-03-09 14:32:57 +053090#ifdef FEATURE_WLAN_EXTSCAN
91#define WMI_MAX_EXTSCAN_MSG_SIZE 1536
92#define WMI_EXTSCAN_REST_TIME 100
93#define WMI_EXTSCAN_MAX_SCAN_TIME 50000
94#define WMI_EXTSCAN_BURST_DURATION 150
95#endif
96#define WMI_SCAN_NPROBES_DEFAULT (2)
97#define WMI_SEC_TO_MSEC(sec) (sec * 1000) /* sec to msec */
98#define WMI_MSEC_TO_USEC(msec) (msec * 1000) /* msec to usec */
99#define WMI_NLO_FREQ_THRESH 1000 /* in MHz */
Govind Singh89727882016-04-15 13:58:27 +0530100
101#define MAX_UTF_EVENT_LENGTH 2048
102#define MAX_WMI_UTF_LEN 252
103#define MAX_WMI_QVIT_LEN 252
104#define THERMAL_LEVELS 4
105#define WMI_HOST_BCN_FLT_MAX_SUPPORTED_IES 256
106#define WMI_HOST_BCN_FLT_MAX_ELEMS_IE_LIST \
107 (WMI_HOST_BCN_FLT_MAX_SUPPORTED_IES/32)
108#define LTEU_MAX_BINS 10
109#define ATF_ACTIVED_MAX_CLIENTS 50
110#define ATF_ACTIVED_MAX_ATFGROUPS 8
111#define CTL_5G_SIZE 1536
112#define CTL_2G_SIZE 684
113#define MAX_CTL_SIZE (CTL_5G_SIZE > CTL_2G_SIZE ? CTL_5G_SIZE : CTL_2G_SIZE)
114#define IEEE80211_MICBUF_SIZE (8+8)
115#define IEEE80211_TID_SIZE 17
116#define WME_NUM_AC 4
117#define SMART_ANT_MODE_SERIAL 0
118#define SMART_ANT_MODE_PARALLEL 1
119#define IEEE80211_WEP_NKID 4 /* number of key ids */
120#define WPI_IV_LEN 16
121#define WMI_SCAN_MAX_NUM_BSSID 10
122#define MAX_CHANS 1023
123#define TARGET_OEM_CONFIGURE_LCI 0x0A
124#define RTT_LCI_ALTITUDE_MASK 0x3FFFFFFF
125#define TARGET_OEM_CONFIGURE_LCR 0x09
126#define RTT_TIMEOUT_MS 180
127#define MAX_SUPPORTED_RATES 128
128#define WMI_HOST_MAX_BUFFER_SIZE 1712
Govind Singh41da3152016-05-06 20:20:25 +0530129#define WMI_HAL_MAX_SANTENNA 4
Sathish Kumar7e2eaed2016-11-14 17:44:29 +0530130#define WMI_HOST_PDEV_VI_PRIORITY_BIT (1<<2)
131#define WMI_HOST_PDEV_BEACON_PRIORITY_BIT (1<<4)
132#define WMI_HOST_PDEV_MGMT_PRIORITY_BIT (1<<5)
Govind Singh89727882016-04-15 13:58:27 +0530133
Govind Singhec1401a2016-07-08 19:00:56 +0530134#ifdef CONFIG_WIN
135#if ATH_SUPPORT_FIPS
136#define FIPS_ALIGN 4
137#define FIPS_ALIGNTO(__addr, __to) ((((unsigned long int)(__addr)) + (__to) - 1) & ~((__to) - 1))
138#define FIPS_IS_ALIGNED(__addr, __to) (!(((unsigned long int)(__addr)) & ((__to)-1)))
139#endif
140#endif
141
Govind Singh89727882016-04-15 13:58:27 +0530142#define WMI_HOST_F_MS(_v, _f) \
143 (((_v) & (_f)) >> (_f##_S))
144
145#define WMI_HOST_F_RMW(_var, _v, _f) \
146 do { \
147 (_var) &= ~(_f); \
148 (_var) |= (((_v) << (_f##_S)) & (_f)); \
149 } while (0)
150
Sathish Kumar7e2eaed2016-11-14 17:44:29 +0530151/* vdev capabilities bit mask */
152#define WMI_HOST_VDEV_BEACON_SUPPORT 0x1
153#define WMI_HOST_VDEV_WDS_LRN_ENABLED 0x2
154#define WMI_HOST_VDEV_VOW_ENABLED 0x4
155#define WMI_HOST_VDEV_IS_BEACON_SUPPORTED(param) \
156 ((param) & WMI_HOST_VDEV_BEACON_SUPPORT)
157#define WMI_HOST_VDEV_IS_WDS_LRN_ENABLED(param) \
158 ((param) & WMI_HOST_VDEV_WDS_LRN_ENABLED)
159#define WMI_HOST_VDEV_IS_VOW_ENABLED(param) \
160 ((param) & WMI_HOST_VDEV_VOW_ENABLED)
161
Govind Singh89727882016-04-15 13:58:27 +0530162/* TXBF capabilities masks */
163#define WMI_HOST_TXBF_CONF_SU_TX_BFEE_S 0
164#define WMI_HOST_TXBF_CONF_SU_TX_BFEE_M 0x1
165#define WMI_HOST_TXBF_CONF_SU_TX_BFEE \
166 (WMI_HOST_TXBF_CONF_SU_TX_BFEE_M << WMI_HOST_TXBF_CONF_SU_TX_BFEE_S)
167#define WMI_HOST_TXBF_CONF_SU_TX_BFEE_GET(x) \
168 WMI_HOST_F_MS(x, WMI_HOST_TXBF_CONF_SU_TX_BFEE)
169#define WMI_HOST_TXBF_CONF_SU_TX_BFEE_SET(x, z) \
170 WMI_HOST_F_RMW(x, z, WMI_HOST_TXBF_CONF_SU_TX_BFEE)
171
172#define WMI_HOST_TXBF_CONF_MU_TX_BFEE_S 1
173#define WMI_HOST_TXBF_CONF_MU_TX_BFEE_M 0x1
174#define WMI_HOST_TXBF_CONF_MU_TX_BFEE \
175 (WMI_HOST_TXBF_CONF_MU_TX_BFEE_M << WMI_HOST_TXBF_CONF_MU_TX_BFEE_S)
176#define WMI_HOST_TXBF_CONF_MU_TX_BFEE_GET(x) \
177 WMI_HOST_F_MS(x, WMI_HOST_TXBF_CONF_MU_TX_BFEE)
178#define WMI_HOST_TXBF_CONF_MU_TX_BFEE_SET(x, z) \
179 WMI_HOST_F_RMW(x, z, WMI_HOST_TXBF_CONF_MU_TX_BFEE)
180
181#define WMI_HOST_TXBF_CONF_SU_TX_BFER_S 2
182#define WMI_HOST_TXBF_CONF_SU_TX_BFER_M 0x1
183#define WMI_HOST_TXBF_CONF_SU_TX_BFER \
184 (WMI_HOST_TXBF_CONF_SU_TX_BFER_M << WMI_HOST_TXBF_CONF_SU_TX_BFER_S)
185#define WMI_HOST_TXBF_CONF_SU_TX_BFER_GET(x) \
186 WMI_HOST_F_MS(x, WMI_HOST_TXBF_CONF_SU_TX_BFER)
187#define WMI_HOST_TXBF_CONF_SU_TX_BFER_SET(x, z) \
188 WMI_HOST_F_RMW(x, z, WMI_HOST_TXBF_CONF_SU_TX_BFER)
189
190#define WMI_HOST_TXBF_CONF_MU_TX_BFER_S 3
191#define WMI_HOST_TXBF_CONF_MU_TX_BFER_M 0x1
192#define WMI_HOST_TXBF_CONF_MU_TX_BFER \
193 (WMI_HOST_TXBF_CONF_MU_TX_BFER_M << WMI_HOST_TXBF_CONF_MU_TX_BFER_S)
194#define WMI_HOST_TXBF_CONF_MU_TX_BFER_GET(x) \
195 WMI_HOST_F_MS(x, WMI_HOST_TXBF_CONF_MU_TX_BFER)
196#define WMI_HOST_TXBF_CONF_MU_TX_BFER_SET(x, z) \
197 WMI_HOST_F_RMW(x, z, WMI_HOST_TXBF_CONF_MU_TX_BFER)
198
199#define WMI_HOST_TXBF_CONF_STS_CAP_S 4
200#define WMI_HOST_TXBF_CONF_STS_CAP_M 0x7
201#define WMI_HOST_TXBF_CONF_STS_CAP \
202 (WMI_HOST_TXBF_CONF_STS_CAP_M << WMI_HOST_TXBF_CONF_STS_CAP_S)
203#define WMI_HOST_TXBF_CONF_STS_CAP_GET(x) \
204 WMI_HOST_F_MS(x, WMI_HOST_TXBF_CONF_STS_CAP);
205#define WMI_HOST_TXBF_CONF_STS_CAP_SET(x, z) \
206 WMI_HOST_F_RMW(x, z, WMI_HOST_TXBF_CONF_STS_CAP)
207
208#define WMI_HOST_TXBF_CONF_IMPLICIT_BF_S 7
209#define WMI_HOST_TXBF_CONF_IMPLICIT_BF_M 0x1
210#define WMI_HOST_TXBF_CONF_IMPLICIT_BF \
211 (WMI_HOST_TXBF_CONF_IMPLICIT_BF_M << WMI_HOST_TXBF_CONF_IMPLICIT_BF_S)
212#define WMI_HOST_TXBF_CONF_IMPLICIT_BF_GET(x) \
213 WMI_HOST_F_MS(x, WMI_HOST_TXBF_CONF_IMPLICIT_BF)
214#define WMI_HOST_TXBF_CONF_IMPLICIT_BF_SET(x, z) \
215 WMI_HOST_F_RMW(x, z, WMI_HOST_TXBF_CONF_IMPLICIT_BF)
216
217#define WMI_HOST_TXBF_CONF_BF_SND_DIM_S 8
218#define WMI_HOST_TXBF_CONF_BF_SND_DIM_M 0x7
219#define WMI_HOST_TXBF_CONF_BF_SND_DIM \
220 (WMI_HOST_TXBF_CONF_BF_SND_DIM_M << WMI_HOST_TXBF_CONF_BF_SND_DIM_S)
221#define WMI_HOST_TXBF_CONF_BF_SND_DIM_GET(x) \
222 WMI_HOST_F_MS(x, WMI_HOST_TXBF_CONF_BF_SND_DIM)
223#define WMI_HOST_TXBF_CONF_BF_SND_DIM_SET(x, z) \
224 WMI_HOST_F_RMW(x, z, WMI_HOST_TXBF_CONF_BF_SND_DIM)
225
226#define WMI_HOST_TPC_RATE_MAX 160
227#define WMI_HOST_TPC_TX_NUM_CHAIN 4
228#define WMI_HOST_RXG_CAL_CHAN_MAX 4
229#define WMI_HOST_MAX_NUM_CHAINS 4
Poddar, Siddarth794b9962016-04-28 15:49:11 +0530230#define WMI_MAX_NUM_OF_RATE_THRESH 4
Govind Singh89727882016-04-15 13:58:27 +0530231
Himanshu Agarwal7e4f4bc2016-03-09 16:49:38 +0530232#include "qdf_atomic.h"
Govind Singhd7468a52016-03-09 14:32:57 +0530233
Govind Singh89727882016-04-15 13:58:27 +0530234#ifdef BIG_ENDIAN_HOST
235 /* This API is used in copying in elements to WMI message,
236 since WMI message uses multilpes of 4 bytes, This API
237 converts length into multiples of 4 bytes, and performs copy
238 */
239#define WMI_HOST_IF_MSG_COPY_CHAR_ARRAY(destp, srcp, len) do { \
240 int j; \
241 u_int32_t *src, *dest; \
242 src = (u_int32_t *)srcp; \
243 dest = (u_int32_t *)destp; \
244 for (j = 0; j < roundup(len, sizeof(u_int32_t))/4; j++) { \
245 *(dest+j) = qdf_le32_to_cpu(*(src+j)); \
246 } \
247} while (0)
248#else
249
250#define WMI_HOST_IF_MSG_COPY_CHAR_ARRAY(destp, srcp, len) OS_MEMCPY(destp,\
251 srcp, len)
252
253#endif
254
255/** macro to convert MAC address from WMI word format to char array */
256#define WMI_HOST_MAC_ADDR_TO_CHAR_ARRAY(pwmi_mac_addr, c_macaddr) do { \
257 (c_macaddr)[0] = ((pwmi_mac_addr)->mac_addr31to0) & 0xff; \
258 (c_macaddr)[1] = (((pwmi_mac_addr)->mac_addr31to0) >> 8) & 0xff; \
259 (c_macaddr)[2] = (((pwmi_mac_addr)->mac_addr31to0) >> 16) & 0xff; \
260 (c_macaddr)[3] = (((pwmi_mac_addr)->mac_addr31to0) >> 24) & 0xff; \
261 (c_macaddr)[4] = ((pwmi_mac_addr)->mac_addr47to32) & 0xff; \
262 (c_macaddr)[5] = (((pwmi_mac_addr)->mac_addr47to32) >> 8) & 0xff; \
263 } while (0)
264
265#define TARGET_INIT_STATUS_SUCCESS 0x0
266#define TARGET_INIT_STATUS_GEN_FAILED 0x1
267#define TARGET_GET_INIT_STATUS_REASON(status) ((status) & 0xffff)
268#define TARGET_GET_INIT_STATUS_MODULE_ID(status) (((status) >> 16) & 0xffff)
Selvaraj, Sridhar0a1427f2016-07-04 21:40:23 +0530269
270#define MAX_ASSOC_IE_LENGTH 1024
Govind Singh89727882016-04-15 13:58:27 +0530271typedef uint32_t TARGET_INIT_STATUS;
272
273typedef enum {
274 WMI_HOST_MODE_11A = 0, /* 11a Mode */
275 WMI_HOST_MODE_11G = 1, /* 11b/g Mode */
276 WMI_HOST_MODE_11B = 2, /* 11b Mode */
277 WMI_HOST_MODE_11GONLY = 3, /* 11g only Mode */
278 WMI_HOST_MODE_11NA_HT20 = 4, /* 11a HT20 mode */
279 WMI_HOST_MODE_11NG_HT20 = 5, /* 11g HT20 mode */
280 WMI_HOST_MODE_11NA_HT40 = 6, /* 11a HT40 mode */
281 WMI_HOST_MODE_11NG_HT40 = 7, /* 11g HT40 mode */
282 WMI_HOST_MODE_11AC_VHT20 = 8,
283 WMI_HOST_MODE_11AC_VHT40 = 9,
284 WMI_HOST_MODE_11AC_VHT80 = 10,
285 WMI_HOST_MODE_11AC_VHT20_2G = 11,
286 WMI_HOST_MODE_11AC_VHT40_2G = 12,
287 WMI_HOST_MODE_11AC_VHT80_2G = 13,
288 WMI_HOST_MODE_11AC_VHT80_80 = 14,
289 WMI_HOST_MODE_11AC_VHT160 = 15,
290 WMI_HOST_MODE_UNKNOWN = 16,
291 WMI_HOST_MODE_MAX = 16
292} WMI_HOST_WLAN_PHY_MODE;
293
Sathish Kumar753eb7d2016-10-25 18:47:52 +0530294typedef enum {
295 WMI_HOST_VDEV_START_OK = 0,
296 WMI_HOST_VDEV_START_CHAN_INVALID,
297} WMI_HOST_VDEV_START_STATUS;
298
299/*
300 * Needs to be removed and use channel_param based
301 * on how it is processed
302 */
303typedef struct {
304 /** primary 20 MHz channel frequency in mhz */
305 uint32_t mhz;
306 /** Center frequency 1 in MHz*/
307 uint32_t band_center_freq1;
308 /** Center frequency 2 in MHz - valid only for 11acvht 80plus80 mode*/
309 uint32_t band_center_freq2;
310 /** channel info described below */
311 uint32_t info;
312 /** contains min power, max power, reg power and reg class id. */
313 uint32_t reg_info_1;
314 /** contains antennamax */
315 uint32_t reg_info_2;
316} wmi_host_channel;
Govind Singh89727882016-04-15 13:58:27 +0530317
Gupta, Kapil7b768002016-04-25 19:14:19 +0530318/**
319 * enum wmi_dwelltime_adaptive_mode: dwelltime_mode
320 * @WMI_DWELL_MODE_DEFAULT: Use firmware default mode
321 * @WMI_DWELL_MODE_CONSERVATIVE: Conservative adaptive mode
322 * @WMI_DWELL_MODE_MODERATE: Moderate adaptive mode
323 * @WMI_DWELL_MODE_AGGRESSIVE: Aggressive adaptive mode
324 * @WMI_DWELL_MODE_STATIC: static adaptive mode
325 */
326enum wmi_dwelltime_adaptive_mode {
327 WMI_DWELL_MODE_DEFAULT = 0,
328 WMI_DWELL_MODE_CONSERVATIVE = 1,
329 WMI_DWELL_MODE_MODERATE = 2,
330 WMI_DWELL_MODE_AGGRESSIVE = 3,
331 WMI_DWELL_MODE_STATIC = 4
332};
333
Manishekar Chandrasekaranb8c59382016-04-21 19:16:32 +0530334#define MAX_NUM_CHAN 128
335
Govind Singhc7cd2d62016-06-21 14:33:26 +0530336/* WME stream classes */
Himanshu Agarwal56c292f2016-07-19 15:41:51 +0530337#define WMI_HOST_AC_BE 0 /* best effort */
338#define WMI_HOST_AC_BK 1 /* background */
339#define WMI_HOST_AC_VI 2 /* video */
340#define WMI_HOST_AC_VO 3 /* voice */
Govind Singhc7cd2d62016-06-21 14:33:26 +0530341#define WMI_TID_TO_AC(_tid) (\
Himanshu Agarwal56c292f2016-07-19 15:41:51 +0530342 (((_tid) == 0) || ((_tid) == 3)) ? WMI_HOST_AC_BE : \
343 (((_tid) == 1) || ((_tid) == 2)) ? WMI_HOST_AC_BK : \
344 (((_tid) == 4) || ((_tid) == 5)) ? WMI_HOST_AC_VI : \
345 WMI_HOST_AC_VO)
Govind Singhc7cd2d62016-06-21 14:33:26 +0530346
Govind Singh3ddda1f2016-03-09 11:34:12 +0530347/**
348 * struct vdev_create_params - vdev create cmd parameter
349 * @if_id: interface id
350 * @type: interface type
351 * @subtype: interface subtype
352 */
353struct vdev_create_params {
354 uint8_t if_id;
355 uint32_t type;
356 uint32_t subtype;
Kiran Kumar Lokere0ae9fb92016-05-02 12:32:27 -0700357 uint8_t nss_2g;
358 uint8_t nss_5g;
Govind Singh3ddda1f2016-03-09 11:34:12 +0530359};
360
361/**
362 * struct vdev_delete_params - vdev delete cmd parameter
363 * @if_id: interface id
364 */
365struct vdev_delete_params {
366 uint8_t if_id;
367};
368
369/**
Govind Singh89727882016-04-15 13:58:27 +0530370 * struct channel_param - Channel paramters with all
371 * info required by target.
372 * @chan_id: channel id
373 * @pwr: channel power
374 * @mhz: channel frequency
375 * @half_rate: is half rate
376 * @quarter_rate: is quarter rate
377 * @dfs_set: is dfs channel
378 * @dfs_set_cfreq2: is secondary freq dfs channel
379 * @is_chan_passive: is this passive channel
380 * @allow_ht: HT allowed in chan
381 * @allow_vht: VHT allowed on chan
Nandha Kishore Easwaran3f1115a2016-11-10 16:01:07 +0530382 * @set_agile: is agile mode
Govind Singh89727882016-04-15 13:58:27 +0530383 * @phy_mode: phymode (vht80 or ht40 or ...)
384 * @cfreq1: centre frequency on primary
385 * @cfreq2: centre frequency on secondary
386 * @maxpower: max power for channel
387 * @minpower: min power for channel
388 * @maxreqpower: Max regulatory power
389 * @antennamac: Max antenna
390 * @reg_class_id: Regulatory class id.
391 */
392
393struct channel_param {
394 uint8_t chan_id;
395 uint8_t pwr;
396 uint32_t mhz;
397 uint32_t half_rate:1,
398 quarter_rate:1,
399 dfs_set:1,
400 dfs_set_cfreq2:1,
401 is_chan_passive:1,
402 allow_ht:1,
Nandha Kishore Easwaran5bee1432016-10-18 10:30:14 +0530403 allow_vht:1,
Nandha Kishore Easwaran3f1115a2016-11-10 16:01:07 +0530404 set_agile:1;
Govind Singh89727882016-04-15 13:58:27 +0530405 uint32_t phy_mode;
406 uint32_t cfreq1;
407 uint32_t cfreq2;
408 int8_t maxpower;
409 int8_t minpower;
410 int8_t maxregpower;
411 uint8_t antennamax;
412 uint8_t reg_class_id;
413};
414
415/**
Govind Singh3ddda1f2016-03-09 11:34:12 +0530416 * struct vdev_stop_params - vdev stop cmd parameter
417 * @vdev_id: vdev id
418 */
419struct vdev_stop_params {
420 uint8_t vdev_id;
421};
422
423/**
424 * struct vdev_up_params - vdev up cmd parameter
425 * @vdev_id: vdev id
426 * @assoc_id: association id
427 */
428struct vdev_up_params {
429 uint8_t vdev_id;
430 uint16_t assoc_id;
431};
432
433/**
434 * struct vdev_down_params - vdev down cmd parameter
435 * @vdev_id: vdev id
436 */
437struct vdev_down_params {
438 uint8_t vdev_id;
439};
440
441/**
Himanshu Agarwal7e4f4bc2016-03-09 16:49:38 +0530442 * struct mac_ssid - mac ssid structure
443 * @length:
444 * @mac_ssid[WMI_MAC_MAX_SSID_LENGTH]:
445 */
446struct mac_ssid {
447 uint8_t length;
448 uint8_t mac_ssid[WMI_MAC_MAX_SSID_LENGTH];
449} qdf_packed;
450
451/**
452 * struct vdev_start_params - vdev start cmd parameter
453 * @vdev_id: vdev id
454 * @chan_freq: channel frequency
455 * @chan_mode: channel mode
456 * @band_center_freq1: center freq 1
457 * @band_center_freq2: center freq 2
458 * @flags: flags to set like pmf_enabled etc.
459 * @is_dfs: flag to check if dfs enabled
460 * @beacon_intval: beacon interval
461 * @dtim_period: dtim period
462 * @max_txpow: max tx power
463 * @is_restart: flag to check if it is vdev
464 * @ssid: ssid and ssid length info
465 * @preferred_tx_streams: preferred tx streams
466 * @preferred_rx_streams: preferred rx streams
467 * @intr_update: flag to check if need to update
468 * required wma interface params
469 * @intr_ssid: pointer to wma interface ssid
470 * @intr_flags: poiter to wma interface flags
471 * @requestor_id: to update requestor id
472 * @disable_hw_ack: to update disable hw ack flag
473 * @info: to update channel info
474 * @reg_info_1: to update min power, max power,
475 * reg power and reg class id
476 * @reg_info_2: to update antennamax
Govind Singh89727882016-04-15 13:58:27 +0530477 * @oper_mode: Operating mode
478 * @dfs_pri_multiplier: DFS primary multiplier
479 * allow pulse if they are within multiple of PRI for the radar type
480 * @dot11_mode: Phy mode (VHT20/VHT80...)
481 * @disable_hw_ack: Disable hw ack if chan is dfs channel for cac
482 * @channel_param: Channel params required by target.
Himanshu Agarwal7e4f4bc2016-03-09 16:49:38 +0530483 */
484struct vdev_start_params {
485 uint8_t vdev_id;
486 uint32_t chan_freq;
487 uint32_t chan_mode;
488 uint32_t band_center_freq1;
489 uint32_t band_center_freq2;
490 uint32_t flags;
491 bool is_dfs;
492 uint32_t beacon_intval;
493 uint32_t dtim_period;
494 int32_t max_txpow;
495 bool is_restart;
Siddarth Poddar466963e2016-03-29 15:13:26 +0530496 bool is_half_rate;
497 bool is_quarter_rate;
498 uint32_t dis_hw_ack;
499 uint32_t flag_dfs;
500 uint8_t hidden_ssid;
501 uint8_t pmf_enabled;
Himanshu Agarwal7e4f4bc2016-03-09 16:49:38 +0530502 struct mac_ssid ssid;
Siddarth Poddar466963e2016-03-29 15:13:26 +0530503 uint32_t num_noa_descriptors;
Himanshu Agarwal7e4f4bc2016-03-09 16:49:38 +0530504 uint32_t preferred_rx_streams;
505 uint32_t preferred_tx_streams;
Kiran Venkatappa9da7e042016-08-09 22:52:35 +0530506#ifndef CONFIG_MCL
Govind Singh89727882016-04-15 13:58:27 +0530507 uint8_t oper_mode;
508 int32_t dfs_pri_multiplier;
509 uint8_t dot11_mode;
510 uint8_t disable_hw_ack;
511 struct channel_param channel;
512#endif
Himanshu Agarwal7e4f4bc2016-03-09 16:49:38 +0530513};
514
515/**
516 * struct hidden_ssid_vdev_restart_params -
517 * vdev restart cmd parameter
518 * @session_id: session id
519 * @ssid_len: ssid length
520 * @ssid: ssid
521 * @flags: flags
522 * @requestor_id: requestor id
523 * @disable_hw_ack: flag to disable hw ack feature
524 * @mhz: channel frequency
525 * @band_center_freq1: center freq 1
526 * @band_center_freq2: center freq 2
527 * @info: channel info
528 * @reg_info_1: contains min power, max power,
529 * reg power and reg class id
530 * @reg_info_2: contains antennamax
531 * @hidden_ssid_restart_in_progress:
532 * flag to check if restart is in progress
533 */
534struct hidden_ssid_vdev_restart_params {
535 uint8_t session_id;
536 uint32_t ssid_len;
537 uint32_t ssid[8];
538 uint32_t flags;
539 uint32_t requestor_id;
540 uint32_t disable_hw_ack;
541 uint32_t mhz;
542 uint32_t band_center_freq1;
543 uint32_t band_center_freq2;
544 uint32_t info;
545 uint32_t reg_info_1;
546 uint32_t reg_info_2;
547 qdf_atomic_t hidden_ssid_restart_in_progress;
548};
549
550/**
Govind Singh3ddda1f2016-03-09 11:34:12 +0530551 * struct vdev_set_params - vdev set cmd parameter
552 * @if_id: vdev id
553 * @param_id: parameter id
554 * @param_value: parameter value
555 */
556struct vdev_set_params {
557 uint32_t if_id;
558 uint32_t param_id;
559 uint32_t param_value;
560};
561
562/**
Govind Singh89727882016-04-15 13:58:27 +0530563 * struct vdev_install_key_params - vdev key set cmd parameter
564 * @wk_keylen: key length
565 * @wk_flags: key flags
566 * @ic_cipher: cipher
567 * @if_id: vdev id
568 * @is_group_key: Group key
569 * @wk_keyix: key index
570 * @def_keyid: default key index
571 * @wk_keytsc: Key TSC
572 * @wk_keyrsc: key RSC
573 * @key_data: pounter to key data
574 * @force_none: force
575 * @is_host_based_crypt: Host based encrypt
576 * @is_xmit_or_recv_key: xmit or recieve key
577 * @wk_recviv: WAPI recv IV
578 * @wk_txiv: WAPI TX IV
579 */
580struct vdev_install_key_params {
581 uint8_t wk_keylen;
582 uint16_t wk_flags;
583 uint8_t ic_cipher;
584 uint8_t if_id;
585 bool is_group_key;
586 uint16_t wk_keyix;
587 uint8_t def_keyid;
588 uint64_t wk_keytsc;
589 uint64_t *wk_keyrsc;
590 uint8_t *key_data;
591 uint8_t force_none;
592 bool is_host_based_crypt;
593 bool is_xmit_or_recv_key;
594#if ATH_SUPPORT_WAPI
595 uint8_t *wk_recviv;
596 uint32_t *wk_txiv;
597#endif
598};
599
600/**
Govind Singh3ddda1f2016-03-09 11:34:12 +0530601 * struct peer_delete_params - peer delete cmd parameter
602 * @vdev_id: vdev id
603 */
604struct peer_delete_params {
605 uint8_t vdev_id;
606};
607
608/**
609 * struct peer_flush_params - peer flush cmd parameter
610 * @peer_tid_bitmap: peer tid bitmap
611 * @vdev_id: vdev id
612 */
613struct peer_flush_params {
614 uint32_t peer_tid_bitmap;
615 uint8_t vdev_id;
616};
617
618/**
619 * struct peer_set_params - peer set cmd parameter
620 * @param_id: parameter id
621 * @param_value: parameter value
622 * @vdev_id: vdev id
623 */
624struct peer_set_params {
625 uint32_t param_id;
626 uint32_t param_value;
627 uint32_t vdev_id;
628};
629
630/**
631 * struct peer_create_params - peer create cmd parameter
632 * @peer_addr: peer mac addr
633 * @peer_type: peer type
634 * @vdev_id: vdev id
635 */
636struct peer_create_params {
637 const uint8_t *peer_addr;
638 uint32_t peer_type;
639 uint32_t vdev_id;
640};
641
642/**
643 * struct peer_remove_params - peer remove cmd parameter
644 * @bssid: bss id
645 * @vdev_id: vdev id
646 * @roam_synch_in_progress: flag to indicate if roaming is in progress
647 */
648struct peer_remove_params {
649 uint8_t *bssid;
650 uint8_t vdev_id;
651 bool roam_synch_in_progress;
652};
653
654/**
Govind Singh89727882016-04-15 13:58:27 +0530655 * Stats ID enums defined in host
656 */
657typedef enum {
658 WMI_HOST_REQUEST_PEER_STAT = 0x01,
659 WMI_HOST_REQUEST_AP_STAT = 0x02,
660 WMI_HOST_REQUEST_PDEV_STAT = 0x04,
661 WMI_HOST_REQUEST_VDEV_STAT = 0x08,
662 WMI_HOST_REQUEST_BCNFLT_STAT = 0x10,
663 WMI_HOST_REQUEST_VDEV_RATE_STAT = 0x20,
664 WMI_HOST_REQUEST_INST_STAT = 0x40,
665 WMI_HOST_REQUEST_PEER_EXTD_STAT = 0x80,
666 WMI_HOST_REQUEST_VDEV_EXTD_STAT = 0x100,
667} wmi_host_stats_id;
668
669typedef struct {
670 uint16_t cfg_retry_count;
671 uint16_t retry_count;
672} wmi_host_inst_rssi_args;
673
674/**
Govind Singh3ddda1f2016-03-09 11:34:12 +0530675 * struct stats_request_params - stats_request cmd parameter
676 * @stats_id: statistics id
677 * @vdev_id: vdev id
Govind Singh89727882016-04-15 13:58:27 +0530678 * @wmi_host_inst_rssi_args: Instantaneous rssi stats args
Govind Singh3ddda1f2016-03-09 11:34:12 +0530679 */
680struct stats_request_params {
681 uint32_t stats_id;
682 uint32_t vdev_id;
Kiran Venkatappa9da7e042016-08-09 22:52:35 +0530683#ifndef CONFIG_MCL
Govind Singh89727882016-04-15 13:58:27 +0530684 wmi_host_inst_rssi_args rssi_args;
685#endif
686};
687
688/**
689 * struct bss_chan_info_request_params - BSS chan info params
690 * @param: parameter value
691 */
692struct bss_chan_info_request_params {
693 uint32_t param;
Govind Singh3ddda1f2016-03-09 11:34:12 +0530694};
695
696/**
697 * struct green_ap_ps_params - green ap ps cmd parameter
698 * @value: parameter value
699 */
700struct green_ap_ps_params {
701 uint32_t value;
702};
703
704/**
705 * struct wow_cmd_params - wow cmd parameter
706 * @enable: wow enable or disable flag
707 * @can_suspend_link: flag to indicate if link can be suspended
708 * @pause_iface_config: interface config
709 */
710struct wow_cmd_params {
711 bool enable;
712 bool can_suspend_link;
713 uint8_t pause_iface_config;
Dustin Browndee95c72016-11-10 11:25:36 -0800714 uint32_t flags;
Govind Singh3ddda1f2016-03-09 11:34:12 +0530715};
716
717/**
Govind Singh89727882016-04-15 13:58:27 +0530718 * struct wow_add_wakeup_params - wow wakeup parameter
719 * @type: param type
720 */
721struct wow_add_wakeup_params {
722 uint32_t type;
723};
724
725/**
726 * struct wow_add_wakeup_pattern_params - Add WoW pattern params
727 * @pattern_bytes: pointer to pattern bytes
728 * @mask_bytes: pointer to mask bytes
729 * @pattern_len: pattern length
730 * @pattern_id: pattern id
731 */
732struct wow_add_wakeup_pattern_params {
733 uint8_t *pattern_bytes;
734 uint8_t *mask_bytes;
735 uint32_t pattern_len;
736 uint32_t pattern_id;
737};
738
739/**
740 * struct wow_remove_wakeup_pattern params - WoW remove pattern param
741 * @pattern_bytes: pointer to pattern bytes
742 * @mask_bytes: Mask bytes
743 * @pattern_id: pattern identifier
744 */
745struct wow_remove_wakeup_pattern_params {
746 uint32_t *pattern_bytes;
747 uint32_t *mask_bytes;
748 uint32_t pattern_id;
749};
750
751
752/**
Govind Singh3ddda1f2016-03-09 11:34:12 +0530753 * struct packet_enable_params - packet enable cmd parameter
754 * @vdev_id: vdev id
755 * @enable: flag to indicate if parameter can be enabled or disabled
756 */
757struct packet_enable_params {
758 uint8_t vdev_id;
759 bool enable;
760};
761
762/**
763 * struct suspend_params - suspend cmd parameter
764 * @disable_target_intr: disable target interrupt
765 */
766struct suspend_params {
767 uint8_t disable_target_intr;
768};
769
770/**
771 * struct pdev_params - pdev set cmd parameter
772 * @param_id: parameter id
773 * @param_value: parameter value
774 */
775struct pdev_params {
776 uint32_t param_id;
777 uint32_t param_value;
778};
779
780/**
Govind Singh89727882016-04-15 13:58:27 +0530781 * struct beacon_tmpl_params - beacon template cmd parameter
782 * @vdev_id: vdev id
783 * @tim_ie_offset: tim ie offset
784 * @tmpl_len: beacon template length
785 * @tmpl_len_aligned: beacon template alignment
786 * @frm: beacon template parameter
787 */
788struct beacon_tmpl_params {
789 uint8_t vdev_id;
790 uint32_t tim_ie_offset;
791 uint32_t tmpl_len;
792 uint32_t tmpl_len_aligned;
793 uint8_t *frm;
794};
795
Govind Singhfa201d92016-06-08 19:40:11 +0530796#ifdef CONFIG_MCL
Govind Singh89727882016-04-15 13:58:27 +0530797/**
798 * struct beacon_params - beacon cmd parameter
Govind Singh3ddda1f2016-03-09 11:34:12 +0530799 * @vdev_id: vdev id
800 * @tim_ie_offset: tim ie offset
801 * @tmpl_len: beacon template length
802 * @tmpl_len_aligned: beacon template alignment
803 * @frm: beacon template parameter
804 */
805struct beacon_params {
806 uint8_t vdev_id;
807 uint32_t tim_ie_offset;
808 uint32_t tmpl_len;
809 uint32_t tmpl_len_aligned;
810 uint8_t *frm;
811};
Govind Singh89727882016-04-15 13:58:27 +0530812#else
813/**
814 * struct beacon_params - beacon cmd parameter
815 * @vdev_id: vdev id
816 * @beaconInterval: Beacon interval
817 * @wbuf: beacon buffer
818 * @frame_ctrl: frame control field
819 * @bcn_txant: beacon antenna
820 * @is_dtim_count_zero: is it dtim beacon
821 * @is_bitctl_reqd: is Bit control required
822 * @is_high_latency: Is this high latency target
823 */
824struct beacon_params {
825 uint8_t vdev_id;
826 uint16_t beaconInterval;
827 qdf_nbuf_t wbuf;
828 uint16_t frame_ctrl;
829 uint32_t bcn_txant;
830 bool is_dtim_count_zero;
831 bool is_bitctl_reqd;
832 bool is_high_latency;
833};
834#endif
835
836/**
837 * struct bcn_prb_template_params - beacon probe template parameter
838 * @vdev_id: vdev id
839 * @buf_len: Template length
840 * @caps: capabilities field
841 * @erp: ERP field
842 */
843struct bcn_prb_template_params {
844 uint8_t vdev_id;
845 int buf_len;
846 uint16_t caps;
847 uint8_t erp;
848};
849
850#define WMI_MAX_SUPPORTED_RATES 128
851/**
852 * struct target_rate_set - Rate set bitmap
853 * @num_rate: number of rates in rates bitmap
854 * @rates: rates (each 8bit value) packed into a 32 bit word.
855 * the rates are filled from least significant byte to most
856 * significant byte.
857 */
858typedef struct {
859 uint32_t num_rates;
860 uint32_t rates[(WMI_MAX_SUPPORTED_RATES / 4) + 1];
861} target_rate_set;
Govind Singh3ddda1f2016-03-09 11:34:12 +0530862
863/**
Himanshu Agarwal56c292f2016-07-19 15:41:51 +0530864 * struct wmi_host_mac_addr - host mac addr 2 word representation of MAC addr
865 * @mac_addr31to0: upper 4 bytes of MAC address
866 * @mac_addr47to32: lower 2 bytes of MAC address
867 */
868typedef struct {
869 uint32_t mac_addr31to0;
870 uint32_t mac_addr47to32;
871} wmi_host_mac_addr;
872
873/**
Govind Singh3ddda1f2016-03-09 11:34:12 +0530874 * struct peer_assoc_params - peer assoc cmd parameter
875 * @peer_macaddr: peer mac address
876 * @vdev_id: vdev id
877 * @peer_new_assoc: peer association type
878 * @peer_associd: peer association id
879 * @peer_flags: peer flags
880 * @peer_caps: peer capabalities
881 * @peer_listen_intval: peer listen interval
882 * @peer_ht_caps: HT capabalities
883 * @peer_max_mpdu: 0 : 8k , 1 : 16k, 2 : 32k, 3 : 64k
884 * @peer_mpdu_density: 3 : 0~7 : 2^(11nAMPDUdensity -4)
885 * @peer_rate_caps: peer rate capabalities
886 * @peer_nss: peer nss
887 * @peer_phymode: peer phymode
888 * @peer_ht_info: peer HT info
889 * @peer_legacy_rates: peer legacy rates
890 * @peer_ht_rates: peer ht rates
Govind Singh3ddda1f2016-03-09 11:34:12 +0530891 * @rx_max_rate: max rx rates
892 * @rx_mcs_set: rx mcs
893 * @tx_max_rate: max tx rates
894 * @tx_mcs_set: tx mcs
895 * @vht_capable: VHT capabalities
Govind Singh89727882016-04-15 13:58:27 +0530896 * @tx_max_mcs_nss: max tx MCS and NSS
897 * @peer_bw_rxnss_override: Peer BW RX NSS overriden or not.
898 * @is_pmf_enabled: PMF enabled
899 * @is_wme_set: WME enabled
900 * @qos_flag: QoS Flags
901 * @apsd_flag: APSD flags
902 * @ht_flag: HT flags
903 * @bw_40: 40 capabale
904 * @bw_80: 80 capabale
905 * @bw_160: 160 capabale
906 * @stbc_flag: STBC flag
907 * @ldpc_flag: LDPC flag
908 * @static_mimops_flag: statis MIMO PS flags
909 * @dynamic_mimops_flag: Dynamic MIMO PS flags
910 * @spatial_mux_flag: spatial MUX flags
911 * @vht_flag: VHT flags
912 * @vht_ng_flag: VHT on 11N/G flags
913 * @need_ptk_4_way: Needs 4 way handshake
914 * @need_gtk_2_way: Needs 2 way GTK
915 * @auth_flag: Is peer authenticated
916 * @safe_mode_enabled: Safe enabled for this peer
917 * @amsdu_disable: AMSDU disble
918 * @peer_mac: Peer mac address
Govind Singh3ddda1f2016-03-09 11:34:12 +0530919 */
920struct peer_assoc_params {
Himanshu Agarwal56c292f2016-07-19 15:41:51 +0530921 wmi_host_mac_addr peer_macaddr;
Govind Singh3ddda1f2016-03-09 11:34:12 +0530922 uint32_t vdev_id;
923 uint32_t peer_new_assoc;
924 uint32_t peer_associd;
925 uint32_t peer_flags;
926 uint32_t peer_caps;
927 uint32_t peer_listen_intval;
928 uint32_t peer_ht_caps;
929 uint32_t peer_max_mpdu;
930 uint32_t peer_mpdu_density;
931 uint32_t peer_rate_caps;
932 uint32_t peer_nss;
933 uint32_t peer_vht_caps;
934 uint32_t peer_phymode;
935 uint32_t peer_ht_info[2];
Govind Singh89727882016-04-15 13:58:27 +0530936 target_rate_set peer_legacy_rates;
937 target_rate_set peer_ht_rates;
Govind Singh3ddda1f2016-03-09 11:34:12 +0530938 uint32_t rx_max_rate;
939 uint32_t rx_mcs_set;
940 uint32_t tx_max_rate;
941 uint32_t tx_mcs_set;
942 uint8_t vht_capable;
Kiran Venkatappa9da7e042016-08-09 22:52:35 +0530943#ifndef CONFIG_MCL
Govind Singh89727882016-04-15 13:58:27 +0530944 uint32_t tx_max_mcs_nss;
945 uint32_t peer_bw_rxnss_override;
946 bool is_pmf_enabled;
947 bool is_wme_set;
948 bool qos_flag;
949 bool apsd_flag;
950 bool ht_flag;
951 bool bw_40;
952 bool bw_80;
953 bool bw_160;
954 bool stbc_flag;
955 bool ldpc_flag;
956 bool static_mimops_flag;
957 bool dynamic_mimops_flag;
958 bool spatial_mux_flag;
959 bool vht_flag;
960 bool vht_ng_flag;
961 bool need_ptk_4_way;
962 bool need_gtk_2_way;
963 bool auth_flag;
964 bool safe_mode_enabled;
965 bool amsdu_disable;
966 /* Use common structure */
967 uint8_t peer_mac[IEEE80211_ADDR_LEN];
968#endif
Govind Singh3ddda1f2016-03-09 11:34:12 +0530969};
970
971/**
972 * struct sta_ps_params - sta ps cmd parameter
973 * @vdev_id: vdev id
974 * @param: sta ps paramter
975 * @value: sta ps parameter value
976 */
977struct sta_ps_params {
978 uint32_t vdev_id;
979 uint32_t param;
980 uint32_t value;
981};
982
983/**
984 * struct ap_ps_params - ap ps cmd parameter
985 * @vdev_id: vdev id
986 * @param: ap ps paramter
987 * @value: ap ps paramter value
988 */
989struct ap_ps_params {
990 uint32_t vdev_id;
991 uint32_t param;
992 uint32_t value;
993};
994
Govind Singh89727882016-04-15 13:58:27 +0530995#define WMI_HOST_SCAN_CHAN_FREQ_SHIFT 0
996#define WMI_HOST_SCAN_CHAN_FREQ_MASK 0xffff
997#define WMI_HOST_SCAN_CHAN_MODE_SHIFT 16
998#define WMI_HOST_SCAN_CHAN_MODE_MASK 0xff
999
Govind Singh3ddda1f2016-03-09 11:34:12 +05301000/**
Govind Singh3ddda1f2016-03-09 11:34:12 +05301001 * struct scan_start_params - start scan cmd parameter
1002 * @scan_id: scan id
1003 * @scan_req_id: requeted scan id
1004 * @vdev_id: vdev id
1005 * @scan_priority: scan priority
1006 * @notify_scan_events: flag to indicate if scan to be notified
1007 * @dwell_time_active: active dwell time
1008 * @dwell_time_passive: passive dwell time
1009 * @min_rest_time: min rest time
1010 * @max_rest_time: max rest time
1011 * @repeat_probe_time: repeat probe time
1012 * @probe_spacing_time: probe spacing time
1013 * @idle_time: idle time
1014 * @max_scan_time: max scan time
1015 * @probe_delay: probe delay
1016 * @scan_ctrl_flags: scan control flag
1017 * @burst_duration: burst duration
1018 * @num_chan: no of channel
1019 * @num_bssid: no of bssid
1020 * @num_ssids: no of ssid
1021 * @ie_len: ie length
1022 * @n_probes: no of probe
1023 * @chan_list: channel list
1024 * @ie_len_with_pad: ie length with padding
1025 * @num_ssid: no of ssid
1026 * @sid: pointer to mac_ssid structure
1027 * @uie_fieldOffset: ie field offset
1028 * @mac_add_bytes: mac address bytes
Govind Singh89727882016-04-15 13:58:27 +05301029 * @is_strict_pscan_en: Is this a strict passive scan
1030 * @is_promiscous_mode: Is promiscous mode
1031 * @is_phy_error: is Phy error
1032 * @add_cck_rates: Add cck rates
1033 * @chan_stat_enable: channel stats enabled
1034 * @offchan_tx_mgmt: Offchan tx scan
1035 * @offchan_tx_data: offchan tx data
1036 * @add_bcast_probe_reqd: Add bcast probe request
1037 * @bssid_list: Lisst of bssid to scan
1038 * @ie_data: IE data buffer pointer
1039 * @passive_flag: Is this passive scan
Govind Singh3ddda1f2016-03-09 11:34:12 +05301040 */
1041struct scan_start_params {
1042 uint32_t scan_id;
1043 uint32_t scan_req_id;
1044 uint32_t vdev_id;
1045 uint32_t scan_priority;
1046 uint32_t notify_scan_events;
1047 uint32_t dwell_time_active;
1048 uint32_t dwell_time_passive;
1049 uint32_t min_rest_time;
1050 uint32_t max_rest_time;
1051 uint32_t repeat_probe_time;
1052 uint32_t probe_spacing_time;
1053 uint32_t idle_time;
1054 uint32_t max_scan_time;
1055 uint32_t probe_delay;
1056 uint32_t scan_ctrl_flags;
1057 uint32_t burst_duration;
1058 uint32_t num_chan;
1059 uint32_t num_bssid;
1060 uint32_t num_ssids;
1061 uint32_t ie_len;
1062 uint32_t n_probes;
1063 uint32_t *chan_list;
1064 uint32_t ie_len_with_pad;
1065 struct mac_ssid ssid[WMI_SCAN_MAX_NUM_SSID];
1066 uint8_t *ie_base;
1067 uint16_t uie_fieldOffset;
1068 uint8_t mac_add_bytes[IEEE80211_ADDR_LEN];
Kiran Venkatappa9da7e042016-08-09 22:52:35 +05301069#ifndef CONFIG_MCL
Sathish Kumar7e2eaed2016-11-14 17:44:29 +05301070 bool half_rate;
1071 bool quarter_rate;
Govind Singh89727882016-04-15 13:58:27 +05301072 bool is_strict_pscan_en;
1073 bool is_promiscous_mode;
1074 bool is_phy_error;
1075 bool add_cck_rates;
1076 bool chan_stat_enable;
1077 bool offchan_tx_mgmt;
1078 bool offchan_tx_data;
1079 bool add_bcast_probe_reqd;
1080 uint8_t bssid_list[WMI_SCAN_MAX_NUM_BSSID][IEEE80211_ADDR_LEN];
1081 uint8_t *ie_data;
1082 int passive_flag;
1083#endif
Govind Singh3ddda1f2016-03-09 11:34:12 +05301084};
1085
1086/**
1087 * struct scan_stop_params - stop scan cmd parameter
1088 * @requestor: scan requestor
1089 * @scan_id: scan id
1090 * @req_type: scan request type
1091 * @vdev_id: vdev id
Govind Singh89727882016-04-15 13:58:27 +05301092 * @all_scans: Stop all scans
1093 * @vap_scans: stop vap scans
1094 * @specific_scan: specific scan
1095 * @flags: scan flags
1096 * @ss_scan_id: ss scan id
Govind Singh3ddda1f2016-03-09 11:34:12 +05301097 */
1098struct scan_stop_params {
1099 uint32_t requestor;
1100 uint32_t scan_id;
1101 uint32_t req_type;
1102 uint32_t vdev_id;
Kiran Venkatappa9da7e042016-08-09 22:52:35 +05301103#ifndef CONFIG_MCL
Govind Singh89727882016-04-15 13:58:27 +05301104 bool all_scans;
1105 bool vap_scans;
1106 bool specific_scan;
1107 uint32_t flags;
1108 uint32_t ss_scan_id;
1109#endif
Govind Singh3ddda1f2016-03-09 11:34:12 +05301110};
1111
1112/**
1113 * struct scan_chan_list_params - scan channel list cmd parameter
1114 * @num_scan_chans: no of scan channels
1115 * @chan_info: pointer to wmi channel info
1116 */
Govind Singhfa201d92016-06-08 19:40:11 +05301117#ifdef CONFIG_MCL
Himanshu Agarwal56c292f2016-07-19 15:41:51 +05301118/* TODO: This needs clean-up based on how its processed. */
1119typedef struct {
1120 /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_channel */
1121 uint32_t tlv_header;
1122 /** primary 20 MHz channel frequency in mhz */
1123 uint32_t mhz;
1124 /** Center frequency 1 in MHz*/
1125 uint32_t band_center_freq1;
1126 /** Center frequency 2 in MHz - valid only for 11acvht 80plus80 mode*/
1127 uint32_t band_center_freq2;
1128 /** channel info described below */
1129 uint32_t info;
1130 /** contains min power, max power, reg power and reg class id. */
1131 uint32_t reg_info_1;
1132 /** contains antennamax */
1133 uint32_t reg_info_2;
1134} wmi_channel_param;
1135
Govind Singh3ddda1f2016-03-09 11:34:12 +05301136struct scan_chan_list_params {
1137 uint8_t num_scan_chans;
Himanshu Agarwal56c292f2016-07-19 15:41:51 +05301138 wmi_channel_param *chan_info;
Govind Singh3ddda1f2016-03-09 11:34:12 +05301139};
Govind Singh89727882016-04-15 13:58:27 +05301140#else
1141/**
1142 * struct scan_chan_list_params - scan channel list cmd parameter
1143 * @num_chan: no of scan channels
1144 * @nallchans: nall chans
1145 * @ch_param: pointer to channel_paramw
1146 */
1147struct scan_chan_list_params {
Govind Singh89727882016-04-15 13:58:27 +05301148 uint16_t nallchans;
1149 struct channel_param ch_param[1];
1150};
1151#endif
Govind Singh3ddda1f2016-03-09 11:34:12 +05301152
1153/**
1154 * struct fw_hang_params - fw hang command parameters
1155 * @type: 0:unused 1: ASSERT, 2:not respond detect command, 3:simulate ep-full
1156 * @delay_time_ms: 0xffffffff means the simulate will delay for random time (0 ~0xffffffff ms)
1157 */
1158struct fw_hang_params {
1159 uint32_t type;
1160 uint32_t delay_time_ms;
1161};
1162
1163/**
1164 * struct pdev_utf_params - pdev utf command parameters
1165 * @utf_payload:
1166 * @len:
Govind Singh89727882016-04-15 13:58:27 +05301167 * @is_ar900b: is it 900b target
Govind Singh3ddda1f2016-03-09 11:34:12 +05301168 */
1169struct pdev_utf_params {
1170 uint8_t *utf_payload;
1171 uint32_t len;
Kiran Venkatappa9da7e042016-08-09 22:52:35 +05301172#ifndef CONFIG_MCL
Govind Singh89727882016-04-15 13:58:27 +05301173 bool is_ar900b;
1174#endif
Govind Singh3ddda1f2016-03-09 11:34:12 +05301175};
1176
Govind Singh89727882016-04-15 13:58:27 +05301177/*Adding this due to dependency on wmi_unified.h
1178 */
1179typedef struct {
1180 uint32_t len;
1181 uint32_t msgref;
1182 uint32_t segmentInfo;
1183} QVIT_SEG_HDR_INFO_STRUCT;
1184
1185struct pdev_qvit_params {
1186 uint8_t *utf_payload;
1187 uint32_t len;
1188};
Govind Singh3ddda1f2016-03-09 11:34:12 +05301189/**
1190 * struct crash_inject - crash inject command parameters
1191 * @type: crash inject type
1192 * @delay_time_ms: time in milliseconds for FW to delay the crash
1193 */
1194struct crash_inject {
1195 uint32_t type;
1196 uint32_t delay_time_ms;
1197};
1198
1199/**
1200 * struct dbglog_params - fw deboglog command parameters
1201 * @param: command parameter
1202 * @val: parameter value
1203 * @module_id_bitmap: fixed length module id bitmap
1204 * @bitmap_len: module id bitmap length
Govind Singh89727882016-04-15 13:58:27 +05301205 * @cfgvalid: cfgvalid
Govind Singh3ddda1f2016-03-09 11:34:12 +05301206 */
1207struct dbglog_params {
1208 uint32_t param;
1209 uint32_t val;
1210 uint32_t *module_id_bitmap;
1211 uint32_t bitmap_len;
Kiran Venkatappa9da7e042016-08-09 22:52:35 +05301212#ifndef CONFIG_MCL
Govind Singh89727882016-04-15 13:58:27 +05301213 uint32_t cfgvalid[2];
1214#endif
Govind Singh3ddda1f2016-03-09 11:34:12 +05301215};
1216
1217/**
1218 * struct seg_hdr_info - header info
1219 * @len: length
1220 * @msgref: message refrence
1221 * @segmentInfo: segment info
1222 * @pad: padding
1223 */
1224struct seg_hdr_info {
1225 uint32_t len;
1226 uint32_t msgref;
1227 uint32_t segmentInfo;
1228 uint32_t pad;
1229};
1230
1231/**
1232 * struct wmi_mgmt_params - wmi mgmt cmd paramters
1233 * @tx_frame: management tx frame
Govind Singh89727882016-04-15 13:58:27 +05301234 * @frm_len: frame length
Govind Singh3ddda1f2016-03-09 11:34:12 +05301235 * @vdev_id: vdev id
1236 * @tx_complete_cb: tx download callback handler
1237 * @tx_ota_post_proc_cb: OTA complition handler
1238 * @chanfreq: channel frequency
1239 * @pdata: frame data
1240 * @wmi_desc: command descriptor
Govind Singh89727882016-04-15 13:58:27 +05301241 * @desc_id: descriptor id relyaed back by target
1242 * @macaddr - macaddr of peer
Govind Singh3ddda1f2016-03-09 11:34:12 +05301243 */
1244struct wmi_mgmt_params {
1245 void *tx_frame;
1246 uint16_t frm_len;
1247 uint8_t vdev_id;
Govind Singh3ddda1f2016-03-09 11:34:12 +05301248 uint16_t chanfreq;
1249 void *pdata;
Govind Singh89727882016-04-15 13:58:27 +05301250 uint16_t desc_id;
1251 uint8_t *macaddr;
Govind Singhd7468a52016-03-09 14:32:57 +05301252 void *qdf_ctx;
Govind Singh3ddda1f2016-03-09 11:34:12 +05301253};
Govind Singhbffe4de2016-02-26 17:50:39 +05301254
1255/**
1256 * struct p2p_ps_params - P2P powersave related params
1257 * @opp_ps: opportunistic power save
1258 * @ctwindow: CT window
1259 * @count: count
1260 * @duration: duration
1261 * @interval: interval
1262 * @single_noa_duration: single shot noa duration
1263 * @ps_selection: power save selection
1264 * @session_id: session id
1265 */
1266struct p2p_ps_params {
1267 uint8_t opp_ps;
1268 uint32_t ctwindow;
1269 uint8_t count;
1270 uint32_t duration;
1271 uint32_t interval;
1272 uint32_t single_noa_duration;
1273 uint8_t ps_selection;
1274 uint8_t session_id;
1275};
1276
1277
1278/**
1279 * struct ta_uapsd_trig_params - uapsd trigger parameter
1280 * @vdevid: vdev id
1281 * @peer_addr: peer address
1282 * @auto_triggerparam: trigger parameters
1283 * @num_ac: no of access category
1284 */
1285struct sta_uapsd_trig_params {
1286 uint32_t vdevid;
1287 uint8_t peer_addr[IEEE80211_ADDR_LEN];
1288 uint8_t *auto_triggerparam;
1289 uint32_t num_ac;
1290};
Govind Singhe7b800c2016-03-01 15:30:53 +05301291
1292/**
1293 * struct ocb_utc_param
1294 * @vdev_id: session id
1295 * @utc_time: number of nanoseconds from Jan 1st 1958
1296 * @time_error: the error in the UTC time. All 1's for unknown
1297 */
1298struct ocb_utc_param {
1299 uint32_t vdev_id;
1300 uint8_t utc_time[WMI_SIZE_UTC_TIME];
1301 uint8_t time_error[WMI_SIZE_UTC_TIME_ERROR];
1302};
1303
1304/**
1305 * struct ocb_timing_advert_param
1306 * @vdev_id: session id
1307 * @chan_freq: frequency on which to advertise
1308 * @repeat_rate: the number of times it will send TA in 5 seconds
1309 * @timestamp_offset: offset of the timestamp field in the TA frame
1310 * @time_value_offset: offset of the time_value field in the TA frame
1311 * @template_length: size in bytes of the TA frame
1312 * @template_value: the TA frame
1313 */
1314struct ocb_timing_advert_param {
1315 uint32_t vdev_id;
1316 uint32_t chan_freq;
1317 uint32_t repeat_rate;
1318 uint32_t timestamp_offset;
1319 uint32_t time_value_offset;
1320 uint32_t template_length;
1321 uint8_t *template_value;
1322};
1323
1324/**
1325 * struct dcc_get_stats_param
1326 * @vdev_id: session id
1327 * @channel_count: number of dcc channels
1328 * @request_array_len: size in bytes of the request array
1329 * @request_array: the request array
1330 */
1331struct dcc_get_stats_param {
1332 uint32_t vdev_id;
1333 uint32_t channel_count;
1334 uint32_t request_array_len;
1335 void *request_array;
1336};
1337
1338/**
1339 * struct dcc_update_ndl_param
1340 * @vdev_id: session id
1341 * @channel_count: number of channels to be updated
1342 * @dcc_ndl_chan_list_len: size in bytes of the ndl_chan array
1343 * @dcc_ndl_chan_list: the ndl_chan array
1344 * @dcc_ndl_active_state_list_len: size in bytes of the active_state array
1345 * @dcc_ndl_active_state_list: the active state array
1346 */
1347struct dcc_update_ndl_param {
1348 uint32_t vdev_id;
1349 uint32_t channel_count;
1350 uint32_t dcc_ndl_chan_list_len;
1351 void *dcc_ndl_chan_list;
1352 uint32_t dcc_ndl_active_state_list_len;
1353 void *dcc_ndl_active_state_list;
1354};
1355
1356/**
1357 * struct ocb_config_sched
1358 * @chan_freq: frequency of the channel
1359 * @total_duration: duration of the schedule
1360 * @guard_interval: guard interval on the start of the schedule
1361 */
1362struct ocb_config_sched {
1363 uint32_t chan_freq;
1364 uint32_t total_duration;
1365 uint32_t guard_interval;
1366};
1367
1368/**
1369 * OCB structures
1370 */
1371
1372#define WMI_NUM_AC (4)
1373#define WMI_OCB_CHANNEL_MAX (5)
1374#define WMI_MAX_NUM_AC 4
1375struct wmi_ocb_qos_params {
1376 uint8_t aifsn;
1377 uint8_t cwmin;
1378 uint8_t cwmax;
1379};
1380/**
1381 * struct ocb_config_channel
1382 * @chan_freq: frequency of the channel
1383 * @bandwidth: bandwidth of the channel, either 10 or 20 MHz
1384 * @mac_address: MAC address assigned to this channel
1385 * @qos_params: QoS parameters
1386 * @max_pwr: maximum transmit power of the channel (dBm)
1387 * @min_pwr: minimum transmit power of the channel (dBm)
1388 * @reg_pwr: maximum transmit power specified by the regulatory domain (dBm)
1389 * @antenna_max: maximum antenna gain specified by the regulatory domain (dB)
1390 */
1391struct ocb_config_channel {
1392 uint32_t chan_freq;
1393 uint32_t bandwidth;
Govind Singhd7468a52016-03-09 14:32:57 +05301394 struct qdf_mac_addr mac_address;
Govind Singhe7b800c2016-03-01 15:30:53 +05301395 struct wmi_ocb_qos_params qos_params[WMI_MAX_NUM_AC];
1396 uint32_t max_pwr;
1397 uint32_t min_pwr;
1398 uint8_t reg_pwr;
1399 uint8_t antenna_max;
1400 uint16_t flags;
1401};
1402
1403/**
1404 * struct ocb_config_param
1405 * @session_id: session id
1406 * @channel_count: number of channels
1407 * @schedule_size: size of the channel schedule
1408 * @flags: reserved
1409 * @channels: array of OCB channels
1410 * @schedule: array of OCB schedule elements
1411 * @dcc_ndl_chan_list_len: size of the ndl_chan array
1412 * @dcc_ndl_chan_list: array of dcc channel info
1413 * @dcc_ndl_active_state_list_len: size of the active state array
1414 * @dcc_ndl_active_state_list: array of active states
1415 * @adapter: the OCB adapter
1416 * @dcc_stats_callback: callback for the response event
1417 */
1418struct ocb_config_param {
1419 uint8_t session_id;
1420 uint32_t channel_count;
1421 uint32_t schedule_size;
1422 uint32_t flags;
1423 struct ocb_config_channel *channels;
1424 struct ocb_config_sched *schedule;
1425 uint32_t dcc_ndl_chan_list_len;
1426 void *dcc_ndl_chan_list;
1427 uint32_t dcc_ndl_active_state_list_len;
1428 void *dcc_ndl_active_state_list;
1429};
Govind Singh9bad0002016-03-01 15:54:59 +05301430
Poddar, Siddarth794b9962016-04-28 15:49:11 +05301431enum wmi_peer_rate_report_cond_phy_type {
1432 WMI_PEER_RATE_REPORT_COND_11B = 0,
1433 WMI_PEER_RATE_REPORT_COND_11A_G,
1434 WMI_PEER_RATE_REPORT_COND_11N,
1435 WMI_PEER_RATE_REPORT_COND_11AC,
1436 WMI_PEER_RATE_REPORT_COND_MAX_NUM
1437};
1438
1439/**
1440 * struct report_rate_delta - peer specific parameters
1441 * @percent: percentage
1442 * @delta_min: rate min delta
1443 */
1444struct report_rate_delta {
Himanshu Agarwal56c292f2016-07-19 15:41:51 +05301445 uint32_t percent; /* in unit of 12.5% */
1446 uint32_t delta_min; /* in unit of Mbps */
Poddar, Siddarth794b9962016-04-28 15:49:11 +05301447};
1448
1449/**
1450 * struct report_rate_per_phy - per phy report parameters
1451 * @cond_flags: condition flag val
1452 * @delta: rate delta
1453 * @report_rate_threshold: rate threshold
1454 */
1455struct report_rate_per_phy {
1456 /*
1457 * PEER_RATE_REPORT_COND_FLAG_DELTA,
1458 * PEER_RATE_REPORT_COND_FLAG_THRESHOLD
1459 * Any of these two conditions or both of
1460 * them can be set.
1461 */
Himanshu Agarwal56c292f2016-07-19 15:41:51 +05301462 uint32_t cond_flags;
Poddar, Siddarth794b9962016-04-28 15:49:11 +05301463 struct report_rate_delta delta;
1464 /*
1465 * In unit of Mbps. There are at most 4 thresholds
1466 * If the threshold count is less than 4, set zero to
1467 * the one following the last threshold
1468 */
Himanshu Agarwal56c292f2016-07-19 15:41:51 +05301469 uint32_t report_rate_threshold[WMI_MAX_NUM_OF_RATE_THRESH];
Poddar, Siddarth794b9962016-04-28 15:49:11 +05301470};
1471
1472/**
1473 * struct peer_rate_report_params - peer rate report parameters
1474 * @rate_report_enable: enable rate report param
1475 * @backoff_time: backoff time
1476 * @timer_period: timer
1477 * @report_per_phy: report per phy type
1478 */
1479struct wmi_peer_rate_report_params {
Himanshu Agarwal56c292f2016-07-19 15:41:51 +05301480 uint32_t rate_report_enable;
1481 uint32_t backoff_time; /* in unit of msecond */
1482 uint32_t timer_period; /* in unit of msecond */
Poddar, Siddarth794b9962016-04-28 15:49:11 +05301483 /*
1484 *In the following field, the array index means the phy type,
1485 * please see enum wmi_peer_rate_report_cond_phy_type for detail
1486 */
1487 struct report_rate_per_phy report_per_phy[
1488 WMI_PEER_RATE_REPORT_COND_MAX_NUM];
1489
1490};
1491
Govind Singh9bad0002016-03-01 15:54:59 +05301492/**
1493 * struct t_thermal_cmd_params - thermal command parameters
1494 * @min_temp: minimum temprature
1495 * @max_temp: maximum temprature
1496 * @thermal_enable: thermal enable
1497 */
1498struct thermal_cmd_params {
1499 uint16_t min_temp;
1500 uint16_t max_temp;
1501 uint8_t thermal_enable;
1502};
1503
1504#define WMI_LRO_IPV4_SEED_ARR_SZ 5
1505#define WMI_LRO_IPV6_SEED_ARR_SZ 11
1506
1507/**
1508 * struct wmi_lro_config_cmd_t - set LRO init parameters
1509 * @lro_enable: indicates whether lro is enabled
1510 * @tcp_flag: If the TCP flags from the packet do not match
1511 * the values in this field after masking with TCP flags mask
1512 * below, packet is not LRO eligible
1513 * @tcp_flag_mask: field for comparing the TCP values provided
1514 * above with the TCP flags field in the received packet
1515 * @toeplitz_hash_ipv4: contains seed needed to compute the flow id
1516 * 5-tuple toeplitz hash for ipv4 packets
1517 * @toeplitz_hash_ipv6: contains seed needed to compute the flow id
1518 * 5-tuple toeplitz hash for ipv6 packets
1519 */
1520struct wmi_lro_config_cmd_t {
1521 uint32_t lro_enable;
1522 uint32_t tcp_flag:9,
1523 tcp_flag_mask:9;
1524 uint32_t toeplitz_hash_ipv4[WMI_LRO_IPV4_SEED_ARR_SZ];
1525 uint32_t toeplitz_hash_ipv6[WMI_LRO_IPV6_SEED_ARR_SZ];
1526};
Govind Singhae855362016-03-07 14:24:22 +05301527
1528/**
1529 * struct gtx_config_t - GTX config
1530 * @gtx_rt_mask: for HT and VHT rate masks
1531 * @gtx_usrcfg: host request for GTX mask
1532 * @gtx_threshold: PER Threshold (default: 10%)
1533 * @gtx_margin: PER margin (default: 2%)
1534 * @gtx_tcpstep: TCP step (default: 1)
1535 * @gtx_tpcMin: TCP min (default: 5)
1536 * @gtx_bwmask: BW mask (20/40/80/160 Mhz)
1537 */
1538struct wmi_gtx_config {
1539 uint32_t gtx_rt_mask[2];
1540 uint32_t gtx_usrcfg;
1541 uint32_t gtx_threshold;
1542 uint32_t gtx_margin;
1543 uint32_t gtx_tpcstep;
1544 uint32_t gtx_tpcmin;
1545 uint32_t gtx_bwmask;
1546};
1547
1548/**
1549 * struct wmi_probe_resp_params - send probe response parameters
1550 * @bssId: BSSID
1551 * @pProbeRespTemplate: probe response template
1552 * @probeRespTemplateLen: probe response template length
1553 * @ucProxyProbeReqValidIEBmap: valid IE bitmap
1554 */
1555struct wmi_probe_resp_params {
Govind Singh8675b862016-03-28 22:09:18 +05301556 uint8_t bssId[IEEE80211_ADDR_LEN];
Govind Singhae855362016-03-07 14:24:22 +05301557 uint8_t *pProbeRespTemplate;
1558 uint32_t probeRespTemplateLen;
1559 uint32_t ucProxyProbeReqValidIEBmap[8];
1560};
1561
Himanshu Agarwal9efd9bf2016-03-09 18:49:18 +05301562/* struct set_key_params: structure containing
1563 * installation key parameters
1564 * @vdev_id: vdev id
1565 * @key_len: key length
1566 * @key_idx: key index
1567 * @peer_mac: peer mac address
1568 * @key_flags: key flags, 0:pairwise key, 1:group key, 2:static key
1569 * @key_cipher: key cipher based on security mode
1570 * @key_txmic_len: tx mic length
1571 * @key_rxmic_len: rx mic length
1572 * @rx_iv: receive IV, applicable only in case of WAPI
1573 * @tx_iv: transmit IV, applicable only in case of WAPI
1574 * @key_data: key data
1575 */
1576struct set_key_params {
1577 uint8_t vdev_id;
1578 uint16_t key_len;
1579 uint32_t key_idx;
1580 uint8_t peer_mac[IEEE80211_ADDR_LEN];
1581 uint32_t key_flags;
1582 uint32_t key_cipher;
1583 uint32_t key_txmic_len;
1584 uint32_t key_rxmic_len;
1585#ifdef FEATURE_WLAN_WAPI
1586 uint8_t rx_iv[16];
1587 uint8_t tx_iv[16];
1588#endif
1589 uint8_t key_data[WMI_MAC_MAX_KEY_LENGTH];
1590};
1591
Govind Singhae855362016-03-07 14:24:22 +05301592/**
1593 * struct sta_params - sta keep alive parameters
1594 * @vdev_id: vdev id
1595 * @method: keep alive method
1596 * @timeperiod: time to keep alive
1597 * @hostv4addr: host ipv4 address
1598 * @destv4addr: destination ipv4 address
1599 * @destmac: destination mac address
1600 */
1601struct sta_params {
1602 uint8_t vdev_id;
1603 uint32_t method;
1604 uint32_t timeperiod;
1605 uint8_t *hostv4addr;
1606 uint8_t *destv4addr;
1607 uint8_t *destmac;
1608};
1609
1610/**
1611 * struct gateway_update_req_param - gateway parameter update request
1612 * @request_id: request id
1613 * @session_id: session id
1614 * @max_retries: Max ARP/NS retry attempts
1615 * @timeout: Retry interval
1616 * @ipv4_addr_type: on ipv4 network
1617 * @ipv6_addr_type: on ipv6 network
1618 * @gw_mac_addr: gateway mac addr
1619 * @ipv4_addr: ipv4 addr
1620 * @ipv6_addr: ipv6 addr
1621 */
1622struct gateway_update_req_param {
1623 uint32_t request_id;
1624 uint32_t session_id;
1625 uint32_t max_retries;
1626 uint32_t timeout;
1627 uint32_t ipv4_addr_type;
1628 uint32_t ipv6_addr_type;
Govind Singhd7468a52016-03-09 14:32:57 +05301629 struct qdf_mac_addr gw_mac_addr;
1630 uint8_t ipv4_addr[QDF_IPV4_ADDR_SIZE];
1631 uint8_t ipv6_addr[QDF_IPV6_ADDR_SIZE];
Govind Singhae855362016-03-07 14:24:22 +05301632};
1633
1634/**
1635 * struct rssi_monitor_param - rssi monitoring
1636 * @request_id: request id
1637 * @session_id: session id
1638 * @min_rssi: minimum rssi
1639 * @max_rssi: maximum rssi
1640 * @control: flag to indicate start or stop
1641 */
1642struct rssi_monitor_param {
1643 uint32_t request_id;
1644 uint32_t session_id;
1645 int8_t min_rssi;
1646 int8_t max_rssi;
1647 bool control;
1648};
1649
1650/**
1651 * struct scan_mac_oui - oui paramters
1652 * @oui: oui parameters
1653 */
1654struct scan_mac_oui {
1655 uint8_t oui[WMI_WIFI_SCANNING_MAC_OUI_LENGTH];
1656};
1657
1658#define WMI_PASSPOINT_REALM_LEN 256
1659#define WMI_PASSPOINT_ROAMING_CONSORTIUM_ID_NUM 16
1660#define WMI_PASSPOINT_PLMN_LEN 3
1661/**
1662 * struct wifi_passpoint_network_param - passpoint network block
1663 * @id: identifier of this network block
1664 * @realm: null terminated UTF8 encoded realm, 0 if unspecified
1665 * @roaming_consortium_ids: roaming consortium ids to match, 0s if unspecified
1666 * @plmn: mcc/mnc combination as per rules, 0s if unspecified
1667 */
1668struct wifi_passpoint_network_param {
1669 uint32_t id;
1670 uint8_t realm[WMI_PASSPOINT_REALM_LEN];
1671 int64_t roaming_consortium_ids[WMI_PASSPOINT_ROAMING_CONSORTIUM_ID_NUM];
1672 uint8_t plmn[WMI_PASSPOINT_PLMN_LEN];
1673};
1674
1675/**
1676 * struct wifi_passpoint_req_param - passpoint request
1677 * @request_id: request identifier
1678 * @num_networks: number of networks
1679 * @networks: passpoint networks
1680 */
1681struct wifi_passpoint_req_param {
1682 uint32_t request_id;
1683 uint32_t session_id;
1684 uint32_t num_networks;
1685 struct wifi_passpoint_network_param networks[];
1686};
1687
Himanshu Agarwal5f2d0482016-03-09 15:25:44 +05301688/* struct mobility_domain_info - structure containing
1689 * mobility domain info
1690 * @mdie_present: mobility domain present or not
1691 * @mobility_domain: mobility domain
1692 */
1693struct mobility_domain_info {
1694 uint8_t mdie_present;
1695 uint16_t mobility_domain;
1696};
1697
Himanshu Agarwal56c292f2016-07-19 15:41:51 +05301698#define WMI_HOST_ROAM_OFFLOAD_NUM_MCS_SET (16)
1699
1700/* This TLV will be filled only in case roam offload
1701 * for wpa2-psk/okc/ese/11r is enabled */
1702typedef struct {
1703 /*
1704 * TLV tag and len; tag equals
1705 * WMITLV_TAG_STRUC_wmi_roam_offload_fixed_param
1706 */
1707 uint32_t tlv_header;
1708 uint32_t rssi_cat_gap; /* gap for every category bucket */
1709 uint32_t prefer_5g; /* prefer select 5G candidate */
1710 uint32_t select_5g_margin;
1711 uint32_t reassoc_failure_timeout; /* reassoc failure timeout */
1712 uint32_t capability;
1713 uint32_t ht_caps_info;
1714 uint32_t ampdu_param;
1715 uint32_t ht_ext_cap;
1716 uint32_t ht_txbf;
1717 uint32_t asel_cap;
1718 uint32_t qos_enabled;
1719 uint32_t qos_caps;
1720 uint32_t wmm_caps;
1721 /* since this is 4 byte aligned, we don't declare it as tlv array */
1722 uint32_t mcsset[WMI_HOST_ROAM_OFFLOAD_NUM_MCS_SET >> 2];
1723} roam_offload_param;
1724
Himanshu Agarwal5f2d0482016-03-09 15:25:44 +05301725/* struct roam_offload_scan_params - structure
1726 * containing roaming offload scan parameters
1727 * @is_roam_req_valid: flag to tell whether roam req
1728 * is valid or NULL
1729 * @mode: stores flags for scan
1730 * @vdev_id: vdev id
1731 * @roam_offload_enabled: flag for offload enable
1732 * @psk_pmk: pre shared key/pairwise master key
1733 * @pmk_len: length of PMK
1734 * @prefer_5ghz: prefer select 5G candidate
1735 * @roam_rssi_cat_gap: gap for every category bucket
1736 * @select_5ghz_margin: select 5 Ghz margin
1737 * @krk: KRK
1738 * @btk: BTK
1739 * @reassoc_failure_timeout: reassoc failure timeout
1740 * @rokh_id_length: r0kh id length
1741 * @rokh_id: r0kh id
1742 * @roam_key_mgmt_offload_enabled: roam offload flag
1743 * @auth_mode: authentication mode
Deepak Dhamdhere3ae33a32016-08-22 18:04:00 -07001744 * @okc_enabled: enable opportunistic key caching
Himanshu Agarwal5f2d0482016-03-09 15:25:44 +05301745 * @is_ese_assoc: flag to determine ese assoc
1746 * @mdid: mobility domain info
1747 * @roam_offload_params: roam offload tlv params
1748 */
1749struct roam_offload_scan_params {
1750 uint8_t is_roam_req_valid;
1751 uint32_t mode;
1752 uint32_t vdev_id;
1753#ifdef WLAN_FEATURE_ROAM_OFFLOAD
1754 uint8_t roam_offload_enabled;
1755 uint8_t psk_pmk[WMI_ROAM_SCAN_PSK_SIZE];
1756 uint32_t pmk_len;
1757 uint8_t prefer_5ghz;
1758 uint8_t roam_rssi_cat_gap;
1759 uint8_t select_5ghz_margin;
1760 uint8_t krk[WMI_KRK_KEY_LEN];
1761 uint8_t btk[WMI_BTK_KEY_LEN];
1762 uint32_t reassoc_failure_timeout;
1763 uint32_t rokh_id_length;
1764 uint8_t rokh_id[WMI_ROAM_R0KH_ID_MAX_LEN];
1765 uint8_t roam_key_mgmt_offload_enabled;
1766 int auth_mode;
Deepak Dhamdhere3ae33a32016-08-22 18:04:00 -07001767 bool okc_enabled;
Himanshu Agarwal5f2d0482016-03-09 15:25:44 +05301768#endif
1769 bool is_ese_assoc;
1770 struct mobility_domain_info mdid;
Kiran Venkatappa9da7e042016-08-09 22:52:35 +05301771#ifdef CONFIG_MCL
Govind Singh89727882016-04-15 13:58:27 +05301772 /* THis is not available in non tlv target.
1773 * please remove this and replace with a host based
1774 * structure */
Himanshu Agarwal56c292f2016-07-19 15:41:51 +05301775 roam_offload_param roam_offload_params;
Govind Singh89727882016-04-15 13:58:27 +05301776#endif
Selvaraj, Sridhar0a1427f2016-07-04 21:40:23 +05301777 uint32_t assoc_ie_length;
1778 uint8_t assoc_ie[MAX_ASSOC_IE_LENGTH];
Himanshu Agarwal5f2d0482016-03-09 15:25:44 +05301779};
1780
1781/* struct roam_offload_scan_rssi_params - structure containing
1782 * parameters for roam offload scan based on RSSI
1783 * @rssi_thresh: rssi threshold
1784 * @rssi_thresh_diff: difference in rssi threshold
1785 * @hi_rssi_scan_max_count: 5G scan max count
1786 * @hi_rssi_scan_rssi_delta: 5G scan rssi change threshold value
1787 * @hi_rssi_scan_rssi_ub: 5G scan upper bound
1788 * @raise_rssi_thresh_5g: flag to determine penalty and boost thresholds
1789 * @session_id: vdev id
1790 * @penalty_threshold_5g: RSSI threshold below which 5GHz RSSI is penalized
1791 * @boost_threshold_5g: RSSI threshold above which 5GHz RSSI is favored
1792 * @raise_factor_5g: factor by which 5GHz RSSI is boosted
1793 * @drop_factor_5g: factor by which 5GHz RSSI is penalized
1794 * @max_raise_rssi_5g: maximum boost that can be applied to a 5GHz RSSI
1795 * @max_drop_rssi_5g: maximum penalty that can be applied to a 5GHz RSSI
1796 * @good_rssi_threshold: RSSI below which roam is kicked in by background
1797 * scan although rssi is still good
1798 * @roam_earlystop_thres_min: Minimum RSSI threshold value for early stop,
1799 * unit is dB above NF
1800 * @roam_earlystop_thres_max: Maximum RSSI threshold value for early stop,
1801 * unit is dB above NF
Gupta, Kapil1f4a4c32016-04-12 15:02:00 +05301802 * @dense_rssi_thresh_offset: dense roam RSSI threshold difference
1803 * @dense_min_aps_cnt: dense roam minimum APs
1804 * @initial_dense_status: dense status detected by host
1805 * @traffic_threshold: dense roam RSSI threshold
Himanshu Agarwal5f2d0482016-03-09 15:25:44 +05301806 */
1807struct roam_offload_scan_rssi_params {
1808 int8_t rssi_thresh;
1809 uint8_t rssi_thresh_diff;
1810 uint32_t hi_rssi_scan_max_count;
1811 uint32_t hi_rssi_scan_rssi_delta;
1812 int32_t hi_rssi_scan_rssi_ub;
1813 int raise_rssi_thresh_5g;
1814 uint8_t session_id;
1815 uint32_t penalty_threshold_5g;
1816 uint32_t boost_threshold_5g;
1817 uint8_t raise_factor_5g;
1818 uint8_t drop_factor_5g;
1819 int max_raise_rssi_5g;
1820 int max_drop_rssi_5g;
1821 uint32_t good_rssi_threshold;
1822 uint32_t roam_earlystop_thres_min;
1823 uint32_t roam_earlystop_thres_max;
Gupta, Kapil1f4a4c32016-04-12 15:02:00 +05301824 int dense_rssi_thresh_offset;
1825 int dense_min_aps_cnt;
1826 int initial_dense_status;
1827 int traffic_threshold;
Himanshu Agarwal5f2d0482016-03-09 15:25:44 +05301828};
1829
Govind Singhae855362016-03-07 14:24:22 +05301830/**
1831 * struct wifi_epno_network - enhanced pno network block
1832 * @ssid: ssid
1833 * @rssi_threshold: threshold for considering this SSID as found, required
1834 * granularity for this threshold is 4dBm to 8dBm
1835 * @flags: WIFI_PNO_FLAG_XXX
1836 * @auth_bit_field: auth bit field for matching WPA IE
1837 */
1838struct wifi_epno_network_params {
1839 struct mac_ssid ssid;
1840 int8_t rssi_threshold;
1841 uint8_t flags;
1842 uint8_t auth_bit_field;
1843};
1844
1845/**
1846 * struct wifi_enhanched_pno_params - enhanced pno network params
Mukul Sharma90bc73b2016-10-03 15:04:20 +05301847 * @request_id: request id number
1848 * @session_id: session_id number
1849 * @min_5ghz_rssi: minimum 5GHz RSSI for a BSSID to be considered
1850 * @min_24ghz_rssi: minimum 2.4GHz RSSI for a BSSID to be considered
1851 * @initial_score_max: maximum score that a network can have before bonuses
1852 * @current_connection_bonus: only report when there is a network's score this
1853 * much higher than the current connection
1854 * @same_network_bonus: score bonus for all n/w with the same network flag
1855 * @secure_bonus: score bonus for networks that are not open
1856 * @band_5ghz_bonus: 5GHz RSSI score bonus (applied to all 5GHz networks)
Govind Singhae855362016-03-07 14:24:22 +05301857 * @num_networks: number of ssids
Mukul Sharma90bc73b2016-10-03 15:04:20 +05301858 * @networks: EPNO networks
Govind Singhae855362016-03-07 14:24:22 +05301859 */
1860struct wifi_enhanched_pno_params {
1861 uint32_t request_id;
1862 uint32_t session_id;
Mukul Sharma90bc73b2016-10-03 15:04:20 +05301863 uint32_t min_5ghz_rssi;
1864 uint32_t min_24ghz_rssi;
1865 uint32_t initial_score_max;
1866 uint32_t current_connection_bonus;
1867 uint32_t same_network_bonus;
1868 uint32_t secure_bonus;
1869 uint32_t band_5ghz_bonus;
Govind Singhae855362016-03-07 14:24:22 +05301870 uint32_t num_networks;
1871 struct wifi_epno_network_params networks[];
1872};
1873
1874enum {
1875 WMI_AP_RX_DATA_OFFLOAD = 0x00,
1876 WMI_STA_RX_DATA_OFFLOAD = 0x01,
1877};
1878
1879/**
Govind Singhc7cd2d62016-06-21 14:33:26 +05301880 * enum extscan_configuration_flags - extscan config flags
1881 * @WMI_EXTSCAN_LP_EXTENDED_BATCHING: extended batching
1882 */
1883enum wmi_extscan_configuration_flags {
1884 WMI_EXTSCAN_LP_EXTENDED_BATCHING = 0x00000001,
1885};
1886
1887/**
Govind Singhae855362016-03-07 14:24:22 +05301888 * enum extscan_report_events_type - extscan report events type
1889 * @EXTSCAN_REPORT_EVENTS_BUFFER_FULL: report only when scan history is % full
1890 * @EXTSCAN_REPORT_EVENTS_EACH_SCAN: report a scan completion event after scan
1891 * @EXTSCAN_REPORT_EVENTS_FULL_RESULTS: forward scan results
1892 * (beacons/probe responses + IEs)
1893 * in real time to HAL, in addition to completion events.
1894 * Note: To keep backward compatibility,
1895 * fire completion events regardless of REPORT_EVENTS_EACH_SCAN.
1896 * @EXTSCAN_REPORT_EVENTS_NO_BATCH: controls batching,
1897 * 0 => batching, 1 => no batching
1898 */
1899enum wmi_extscan_report_events_type {
1900 WMI_EXTSCAN_REPORT_EVENTS_BUFFER_FULL = 0x00,
1901 WMI_EXTSCAN_REPORT_EVENTS_EACH_SCAN = 0x01,
1902 WMI_EXTSCAN_REPORT_EVENTS_FULL_RESULTS = 0x02,
1903 WMI_EXTSCAN_REPORT_EVENTS_NO_BATCH = 0x04,
1904};
1905
1906/**
1907 * struct ipa_offload_control_params - ipa offload parameters
1908 * @offload_type: ipa offload type
1909 * @vdev_id: vdev id
1910 * @enable: ipa offload enable/disable
1911 */
1912struct ipa_offload_control_params {
1913 uint32_t offload_type;
1914 uint32_t vdev_id;
1915 uint32_t enable;
1916};
1917
1918/**
1919 * struct extscan_capabilities_params - ext scan capablities
1920 * @request_id: request_id
1921 * @session_id: session_id
1922 */
1923struct extscan_capabilities_params {
1924 uint32_t request_id;
1925 uint8_t session_id;
1926};
1927
1928/**
1929 * struct extscan_capabilities_reset_params - ext scan capablities reset parameter
1930 * @request_id: request_id
1931 * @session_id: session_id
1932 */
1933struct extscan_capabilities_reset_params {
1934 uint32_t request_id;
1935 uint8_t session_id;
1936};
1937
1938/**
1939 * struct extscan_bssid_hotlist_reset_params - ext scan hotlist reset parameter
1940 * @request_id: request_id
1941 * @session_id: session_id
1942 */
1943struct extscan_bssid_hotlist_reset_params {
1944 uint32_t request_id;
1945 uint8_t session_id;
1946};
1947
1948/**
1949 * struct extscan_stop_req_params - ext scan stop parameter
1950 * @request_id: request_id
1951 * @session_id: session_id
1952 */
1953struct extscan_stop_req_params {
1954 uint32_t request_id;
1955 uint8_t session_id;
1956};
1957
1958/**
1959 * struct ap_threshold_params - ap threshold parameter
1960 * @bssid: mac address
1961 * @low: low threshold
1962 * @high: high threshold
1963 */
1964struct ap_threshold_params {
Govind Singhd7468a52016-03-09 14:32:57 +05301965 struct qdf_mac_addr bssid;
Govind Singhae855362016-03-07 14:24:22 +05301966 int32_t low;
1967 int32_t high;
1968};
1969
1970/**
1971 * struct extscan_set_sig_changereq_params - ext scan channel parameter
1972 * @request_id: mac address
1973 * @session_id: low threshold
1974 * @rssi_sample_size: Number of samples for averaging RSSI
1975 * @lostap_sample_size: Number of missed samples to confirm AP loss
1976 * @min_breaching: Number of APs breaching threshold required for firmware
1977 * @num_ap: no of scanned ap
1978 * @ap: ap threshold parameter
1979 */
1980struct extscan_set_sig_changereq_params {
1981 uint32_t request_id;
1982 uint8_t session_id;
1983 uint32_t rssi_sample_size;
1984 uint32_t lostap_sample_size;
1985 uint32_t min_breaching;
1986 uint32_t num_ap;
1987 struct ap_threshold_params ap[WMI_EXTSCAN_MAX_SIGNIFICANT_CHANGE_APS];
1988};
1989
1990/**
1991 * struct extscan_cached_result_params - ext scan cached parameter
1992 * @request_id: mac address
1993 * @session_id: low threshold
1994 * @flush: cached results flush
1995 */
1996struct extscan_cached_result_params {
1997 uint32_t request_id;
1998 uint8_t session_id;
1999 bool flush;
2000};
2001
Govind Singhae855362016-03-07 14:24:22 +05302002/* Set PNO */
2003#define WMI_PNO_MAX_NETW_CHANNELS 26
2004#define WMI_PNO_MAX_NETW_CHANNELS_EX 60
2005#define WMI_PNO_MAX_SUPP_NETWORKS 16
2006
2007/*
2008 * size based of dot11 declaration without extra IEs as we will not carry those
2009 * for PNO
2010 */
2011#define WMI_PNO_MAX_PB_REQ_SIZE 450
2012
2013#define WMI_PNO_24G_DEFAULT_CH 1
2014#define WMI_PNO_5G_DEFAULT_CH 36
2015
2016/**
2017 * enum pno_mode - pno mode types
2018 * @WMI_PNO_MODE_IMMEDIATE: immidiate mode
2019 * @WMI_PNO_MODE_ON_SUSPEND: suspend on mode
2020 * @WMI_PNO_MODE_ON_RESUME: resume on mode
2021 * @WMI_PNO_MODE_MAX: max range
2022 */
2023enum pno_mode {
2024 WMI_PNO_MODE_IMMEDIATE,
2025 WMI_PNO_MODE_ON_SUSPEND,
2026 WMI_PNO_MODE_ON_RESUME,
2027 WMI_PNO_MODE_MAX
2028};
2029
2030/**
2031 * struct pno_nw_type - pno nw type
2032 * @ssid: mac ssid
2033 * @authentication: authentication type
2034 * @encryption: encryption type
2035 * @bcastNetwType: broadcast nw type
2036 * @ucChannelCount: uc channel count
2037 * @aChannels: pno channel
2038 * @rssiThreshold: rssi threshold
2039 */
2040struct pno_nw_type {
2041 struct mac_ssid ssid;
2042 uint32_t authentication;
2043 uint32_t encryption;
2044 uint32_t bcastNetwType;
2045 uint8_t ucChannelCount;
2046 uint8_t aChannels[WMI_PNO_MAX_NETW_CHANNELS_EX];
2047 int32_t rssiThreshold;
2048};
2049
2050/**
2051 * struct pno_scan_req_params - PNO Scan request structure
2052 * @enable: flag to enable or disable
2053 * @modePNO: PNO Mode
2054 * @ucNetworksCount: Number of networks
2055 * @aNetworks: Preferred network list
2056 * @sessionId: Session identifier
2057 * @fast_scan_period: Fast Scan period
2058 * @slow_scan_period: Slow scan period
2059 * @fast_scan_max_cycles: Fast scan max cycles
2060 * @us24GProbeTemplateLen: 2.4G probe template length
2061 * @p24GProbeTemplate: 2.4G probe template
2062 * @us5GProbeTemplateLen: 5G probe template length
2063 * @p5GProbeTemplate: 5G probe template
Gupta, Kapil7b768002016-04-25 19:14:19 +05302064 * @pno_channel_prediction: PNO channel prediction feature status
2065 * @top_k_num_of_channels: top K number of channels are used for tanimoto
2066 * distance calculation.
2067 * @stationary_thresh: threshold value to determine that the STA is stationary.
2068 * @pnoscan_adaptive_dwell_mode: adaptive dwelltime mode for pno scan
2069 * @channel_prediction_full_scan: periodic timer upon which a full scan needs
2070 * to be triggered.
Govind Singhae855362016-03-07 14:24:22 +05302071 */
2072struct pno_scan_req_params {
2073 uint8_t enable;
2074 enum pno_mode modePNO;
2075 uint8_t ucNetworksCount;
2076 struct pno_nw_type aNetworks[WMI_PNO_MAX_SUPP_NETWORKS];
2077 uint8_t sessionId;
2078 uint32_t fast_scan_period;
2079 uint32_t slow_scan_period;
2080 uint8_t fast_scan_max_cycles;
2081 uint32_t active_min_time;
2082 uint32_t active_max_time;
2083 uint32_t passive_min_time;
2084 uint32_t passive_max_time;
2085 uint16_t us24GProbeTemplateLen;
2086 uint8_t p24GProbeTemplate[WMI_PNO_MAX_PB_REQ_SIZE];
2087 uint16_t us5GProbeTemplateLen;
2088 uint8_t p5GProbeTemplate[WMI_PNO_MAX_PB_REQ_SIZE];
2089#ifdef FEATURE_WLAN_SCAN_PNO
2090 bool pno_channel_prediction;
2091 uint8_t top_k_num_of_channels;
2092 uint8_t stationary_thresh;
Gupta, Kapil7b768002016-04-25 19:14:19 +05302093 enum wmi_dwelltime_adaptive_mode pnoscan_adaptive_dwell_mode;
Govind Singhae855362016-03-07 14:24:22 +05302094 uint32_t channel_prediction_full_scan;
2095#endif
2096};
2097
Govind Singhae855362016-03-07 14:24:22 +05302098
2099#define WMI_WLAN_EXTSCAN_MAX_CHANNELS 36
2100#define WMI_WLAN_EXTSCAN_MAX_BUCKETS 16
2101#define WMI_WLAN_EXTSCAN_MAX_HOTLIST_APS 128
2102#define WMI_WLAN_EXTSCAN_MAX_SIGNIFICANT_CHANGE_APS 64
2103#define WMI_EXTSCAN_MAX_HOTLIST_SSIDS 8
2104
2105/**
2106 * struct wifi_scan_channelspec_params - wifi scan channel parameter
2107 * @channel: Frequency in MHz
2108 * @dwellTimeMs: dwell time
2109 * @flush: cached results flush
2110 * @passive: passive scan
2111 * @chnlClass: channel class
2112 */
2113struct wifi_scan_channelspec_params {
2114 uint32_t channel;
2115 uint32_t dwellTimeMs;
2116 bool passive;
2117 uint8_t chnlClass;
2118};
2119
2120/**
2121 * enum wmi_wifi_band - wifi band
2122 * @WMI_WIFI_BAND_UNSPECIFIED: unspecified band
2123 * @WMI_WIFI_BAND_BG: 2.4 GHz
2124 * @WMI_WIFI_BAND_A: 5 GHz without DFS
2125 * @WMI_WIFI_BAND_ABG: 2.4 GHz + 5 GHz; no DFS
2126 * @WMI_WIFI_BAND_A_DFS_ONLY: 5 GHz DFS only
2127 * @WMI_WIFI_BAND_A_WITH_DFS: 5 GHz with DFS
2128 * @WMI_WIFI_BAND_ABG_WITH_DFS: 2.4 GHz + 5 GHz with DFS
2129 * @WMI_WIFI_BAND_MAX: max range
2130 */
2131enum wmi_wifi_band {
2132 WMI_WIFI_BAND_UNSPECIFIED,
2133 WMI_WIFI_BAND_BG = 1,
2134 WMI_WIFI_BAND_A = 2,
2135 WMI_WIFI_BAND_ABG = 3,
2136 WMI_WIFI_BAND_A_DFS_ONLY = 4,
2137 /* 5 is reserved */
2138 WMI_WIFI_BAND_A_WITH_DFS = 6,
2139 WMI_WIFI_BAND_ABG_WITH_DFS = 7,
2140 /* Keep it last */
2141 WMI_WIFI_BAND_MAX
2142};
2143
2144/**
2145 * struct wifi_scan_bucket_params - wifi scan bucket spec
2146 * @bucket: bucket identifier
2147 * @band: wifi band
2148 * @period: Desired period, in millisecond; if this is too
2149 * low, the firmware should choose to generate results as fast as
2150 * it can instead of failing the command byte
2151 * for exponential backoff bucket this is the min_period
2152 * @reportEvents: 0 => normal reporting (reporting rssi history
2153 * only, when rssi history buffer is % full)
2154 * 1 => same as 0 + report a scan completion event after scanning
2155 * this bucket
2156 * 2 => same as 1 + forward scan results
2157 * (beacons/probe responses + IEs) in real time to HAL
2158 * @max_period: if max_period is non zero or different than period,
2159 * then this bucket is an exponential backoff bucket and
2160 * the scan period will grow exponentially as per formula:
2161 * actual_period(N) = period ^ (N/(step_count+1)) to a
2162 * maximum period of max_period
2163 * @exponent: for exponential back off bucket: multiplier:
2164 * new_period = old_period * exponent
2165 * @step_count: for exponential back off bucket, number of scans performed
2166 * at a given period and until the exponent is applied
2167 * @numChannels: channels to scan; these may include DFS channels
2168 * Note that a given channel may appear in multiple buckets
2169 * @min_dwell_time_active: per bucket minimum active dwell time
2170 * @max_dwell_time_active: per bucket maximum active dwell time
2171 * @min_dwell_time_passive: per bucket minimum passive dwell time
2172 * @max_dwell_time_passive: per bucket maximum passive dwell time
2173 * @channels: Channel list
2174 */
2175struct wifi_scan_bucket_params {
2176 uint8_t bucket;
2177 enum wmi_wifi_band band;
2178 uint32_t period;
2179 uint32_t reportEvents;
2180 uint32_t max_period;
2181 uint32_t exponent;
2182 uint32_t step_count;
2183 uint32_t numChannels;
2184 uint32_t min_dwell_time_active;
2185 uint32_t max_dwell_time_active;
2186 uint32_t min_dwell_time_passive;
2187 uint32_t max_dwell_time_passive;
2188 struct wifi_scan_channelspec_params channels[WMI_WLAN_EXTSCAN_MAX_CHANNELS];
2189};
2190
2191/**
2192 * struct wifi_scan_cmd_req_params - wifi scan command request params
2193 * @basePeriod: base timer period
2194 * @maxAPperScan: max ap per scan
2195 * @report_threshold_percent: report threshold
2196 * in %, when buffer is this much full, wake up host
2197 * @report_threshold_num_scans: report threshold number of scans
2198 * in number of scans, wake up host after these many scans
2199 * @requestId: request id
2200 * @sessionId: session id
2201 * @numBuckets: number of buckets
2202 * @min_dwell_time_active: per bucket minimum active dwell time
2203 * @max_dwell_time_active: per bucket maximum active dwell time
2204 * @min_dwell_time_passive: per bucket minimum passive dwell time
2205 * @max_dwell_time_passive: per bucket maximum passive dwell time
2206 * @configuration_flags: configuration flags
Gupta, Kapil7b768002016-04-25 19:14:19 +05302207 * @extscan_adaptive_dwell_mode: adaptive dwelltime mode for extscan
Govind Singhae855362016-03-07 14:24:22 +05302208 * @buckets: buckets array
2209 */
2210struct wifi_scan_cmd_req_params {
2211 uint32_t basePeriod;
2212 uint32_t maxAPperScan;
2213
2214 uint32_t report_threshold_percent;
2215 uint32_t report_threshold_num_scans;
2216
2217 uint32_t requestId;
2218 uint8_t sessionId;
2219 uint32_t numBuckets;
2220
2221 uint32_t min_dwell_time_active;
2222 uint32_t max_dwell_time_active;
2223 uint32_t min_dwell_time_passive;
2224 uint32_t max_dwell_time_passive;
2225 uint32_t configuration_flags;
Gupta, Kapil7b768002016-04-25 19:14:19 +05302226 enum wmi_dwelltime_adaptive_mode extscan_adaptive_dwell_mode;
Govind Singhae855362016-03-07 14:24:22 +05302227 struct wifi_scan_bucket_params buckets[WMI_WLAN_EXTSCAN_MAX_BUCKETS];
2228};
2229
Govind Singhae855362016-03-07 14:24:22 +05302230#define WMI_CFG_VALID_CHANNEL_LIST_LEN 100
Govind Singhc7cd2d62016-06-21 14:33:26 +05302231/* Occupied channel list remains static */
2232#define WMI_CHANNEL_LIST_STATIC 1
2233/* Occupied channel list can be learnt after init */
2234#define WMI_CHANNEL_LIST_DYNAMIC_INIT 2
2235/* Occupied channel list can be learnt after flush */
2236#define WMI_CHANNEL_LIST_DYNAMIC_FLUSH 3
2237/* Occupied channel list can be learnt after update */
2238#define WMI_CHANNEL_LIST_DYNAMIC_UPDATE 4
Govind Singhae855362016-03-07 14:24:22 +05302239
2240/**
2241 * struct plm_req_params - plm req parameter
2242 * @diag_token: Dialog token
2243 * @meas_token: measurement token
2244 * @num_bursts: total number of bursts
2245 * @burst_int: burst interval in seconds
2246 * @meas_duration:in TU's,STA goes off-ch
2247 * @burst_len: no of times the STA should cycle through PLM ch list
2248 * @desired_tx_pwr: desired tx power
2249 * @mac_addr: MC dest addr
2250 * @plm_num_ch: channel numbers
2251 * @plm_ch_list: channel list
2252 * @session_id: session id
2253 * @enable: enable/disable
2254 */
2255struct plm_req_params {
2256 uint16_t diag_token;
2257 uint16_t meas_token;
2258 uint16_t num_bursts;
2259 uint16_t burst_int;
2260 uint16_t meas_duration;
2261 /* no of times the STA should cycle through PLM ch list */
2262 uint8_t burst_len;
2263 int8_t desired_tx_pwr;
Govind Singhd7468a52016-03-09 14:32:57 +05302264 struct qdf_mac_addr mac_addr;
Govind Singhae855362016-03-07 14:24:22 +05302265 /* no of channels */
2266 uint8_t plm_num_ch;
2267 /* channel numbers */
2268 uint8_t plm_ch_list[WMI_CFG_VALID_CHANNEL_LIST_LEN];
2269 uint8_t session_id;
2270 bool enable;
2271};
Naveen Rawatd5ffe152016-04-14 23:42:46 -07002272
Himanshu Agarwal5f2d0482016-03-09 15:25:44 +05302273#define MAX_SSID_ALLOWED_LIST 4
2274#define MAX_BSSID_AVOID_LIST 16
2275#define MAX_BSSID_FAVORED 16
Govind Singhae855362016-03-07 14:24:22 +05302276
2277
2278/**
2279 * struct mac_ts_info_tfc - mac ts info parameters
2280 * @burstSizeDefn: burst size
2281 * @reserved: reserved
2282 * @ackPolicy: ack policy
2283 * @psb: psb
2284 * @aggregation: aggregation
2285 * @accessPolicy: access policy
2286 * @direction: direction
2287 * @tsid: direction
2288 * @trafficType: traffic type
2289 */
2290struct mac_ts_info_tfc {
2291#ifndef ANI_LITTLE_BIT_ENDIAN
2292 uint8_t burstSizeDefn:1;
2293 uint8_t reserved:7;
2294#else
2295 uint8_t reserved:7;
2296 uint8_t burstSizeDefn:1;
2297#endif
2298
2299#ifndef ANI_LITTLE_BIT_ENDIAN
2300 uint16_t ackPolicy:2;
2301 uint16_t userPrio:3;
2302 uint16_t psb:1;
2303 uint16_t aggregation:1;
2304 uint16_t accessPolicy:2;
2305 uint16_t direction:2;
2306 uint16_t tsid:4;
2307 uint16_t trafficType:1;
2308#else
2309 uint16_t trafficType:1;
2310 uint16_t tsid:4;
2311 uint16_t direction:2;
2312 uint16_t accessPolicy:2;
2313 uint16_t aggregation:1;
2314 uint16_t psb:1;
2315 uint16_t userPrio:3;
2316 uint16_t ackPolicy:2;
2317#endif
Govind Singhd7468a52016-03-09 14:32:57 +05302318} qdf_packed;
Govind Singhae855362016-03-07 14:24:22 +05302319
2320/**
2321 * struct mac_ts_info_sch - mac ts info schedule parameters
2322 * @rsvd: reserved
2323 * @schedule: schedule bit
2324 */
2325struct mac_ts_info_sch {
2326#ifndef ANI_LITTLE_BIT_ENDIAN
2327 uint8_t rsvd:7;
2328 uint8_t schedule:1;
2329#else
2330 uint8_t schedule:1;
2331 uint8_t rsvd:7;
2332#endif
Govind Singhd7468a52016-03-09 14:32:57 +05302333} qdf_packed;
Govind Singhae855362016-03-07 14:24:22 +05302334
2335/**
2336 * struct mac_ts_info_sch - mac ts info schedule parameters
2337 * @traffic: mac tfc parameter
2338 * @schedule: mac schedule parameters
2339 */
2340struct mac_ts_info {
2341 struct mac_ts_info_tfc traffic;
2342 struct mac_ts_info_sch schedule;
Govind Singhd7468a52016-03-09 14:32:57 +05302343} qdf_packed;
Govind Singhae855362016-03-07 14:24:22 +05302344
2345/**
2346 * struct mac_tspec_ie - mac ts spec
2347 * @type: type
2348 * @length: length
2349 * @tsinfo: tsinfo
2350 * @nomMsduSz: nomMsduSz
2351 * @maxMsduSz: maxMsduSz
2352 * @minSvcInterval: minSvcInterval
2353 * @maxSvcInterval: maxSvcInterval
2354 * @inactInterval: inactInterval
2355 * @suspendInterval: suspendInterval
2356 * @svcStartTime: svcStartTime
2357 * @minDataRate: minDataRate
2358 * @meanDataRate: meanDataRate
2359 * @peakDataRate: peakDataRate
2360 * @maxBurstSz: maxBurstSz
2361 * @delayBound: delayBound
2362 * @minPhyRate: minPhyRate
2363 * @surplusBw: surplusBw
2364 * @mediumTime: mediumTime
2365 */
2366struct mac_tspec_ie {
2367 uint8_t type;
2368 uint8_t length;
2369 struct mac_ts_info tsinfo;
2370 uint16_t nomMsduSz;
2371 uint16_t maxMsduSz;
2372 uint32_t minSvcInterval;
2373 uint32_t maxSvcInterval;
2374 uint32_t inactInterval;
2375 uint32_t suspendInterval;
2376 uint32_t svcStartTime;
2377 uint32_t minDataRate;
2378 uint32_t meanDataRate;
2379 uint32_t peakDataRate;
2380 uint32_t maxBurstSz;
2381 uint32_t delayBound;
2382 uint32_t minPhyRate;
2383 uint16_t surplusBw;
2384 uint16_t mediumTime;
Govind Singhd7468a52016-03-09 14:32:57 +05302385} qdf_packed;
Govind Singhae855362016-03-07 14:24:22 +05302386
2387/**
2388 * struct add_ts_param - ADDTS related parameters
2389 * @staIdx: station index
2390 * @tspecIdx: TSPEC handler uniquely identifying a TSPEC for a STA in a BSS
2391 * @tspec: tspec value
2392 * @status: CDF status
2393 * @sessionId: session id
Govind Singhd7468a52016-03-09 14:32:57 +05302394 * @tsm_interval: TSM interval period passed from UMAC to WMI
Govind Singhae855362016-03-07 14:24:22 +05302395 * @setRICparams: RIC parameters
2396 * @sme_session_id: sme session id
2397 */
2398struct add_ts_param {
2399 uint16_t staIdx;
2400 uint16_t tspecIdx;
2401 struct mac_tspec_ie tspec;
Govind Singhd7468a52016-03-09 14:32:57 +05302402 QDF_STATUS status;
Govind Singhae855362016-03-07 14:24:22 +05302403 uint8_t sessionId;
2404#ifdef FEATURE_WLAN_ESE
2405 uint16_t tsm_interval;
2406#endif /* FEATURE_WLAN_ESE */
2407#ifdef WLAN_FEATURE_ROAM_OFFLOAD
2408 uint8_t setRICparams;
2409#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
2410 uint8_t sme_session_id;
2411};
2412
2413/**
2414 * struct delts_req_info - DELTS request parameter
2415 * @tsinfo: ts info
2416 * @tspec: ts spec
2417 * @wmeTspecPresent: wme ts spec flag
2418 * @wsmTspecPresent: wsm ts spec flag
2419 * @lleTspecPresent: lle ts spec flag
2420 */
2421struct delts_req_info {
2422 struct mac_ts_info tsinfo;
2423 struct mac_tspec_ie tspec;
2424 uint8_t wmeTspecPresent:1;
2425 uint8_t wsmTspecPresent:1;
2426 uint8_t lleTspecPresent:1;
2427};
2428
2429/**
2430 * struct del_ts_params - DELTS related parameters
2431 * @staIdx: station index
2432 * @tspecIdx: TSPEC identifier uniquely identifying a TSPEC for a STA in a BSS
2433 * @bssId: BSSID
2434 * @sessionId: session id
2435 * @userPrio: user priority
2436 * @delTsInfo: DELTS info
2437 * @setRICparams: RIC parameters
2438 */
2439struct del_ts_params {
2440 uint16_t staIdx;
2441 uint16_t tspecIdx;
Govind Singh8675b862016-03-28 22:09:18 +05302442 uint8_t bssId[IEEE80211_ADDR_LEN];
Govind Singhae855362016-03-07 14:24:22 +05302443 uint8_t sessionId;
2444 uint8_t userPrio;
2445#ifdef WLAN_FEATURE_ROAM_OFFLOAD
2446 struct delts_req_info delTsInfo;
2447 uint8_t setRICparams;
2448#endif /* WLAN_FEATURE_ROAM_OFFLOAD */
2449};
2450
2451/**
2452 * struct ll_stats_clear_params - ll stats clear parameter
2453 * @req_id: request id
2454 * @sta_id: sta id
2455 * @stats_clear_mask: stats clear mask
2456 * @stop_req: stop request
2457 */
2458struct ll_stats_clear_params {
2459 uint32_t req_id;
2460 uint8_t sta_id;
2461 uint32_t stats_clear_mask;
2462 uint8_t stop_req;
2463};
2464
2465/**
2466 * struct ll_stats_set_params - ll stats get parameter
2467 * @req_id: request id
2468 * @sta_id: sta id
2469 * @mpdu_size_threshold: mpdu sixe threshold
2470 * @aggressive_statistics_gathering: aggressive_statistics_gathering
2471 */
2472struct ll_stats_set_params {
2473 uint32_t req_id;
2474 uint8_t sta_id;
2475 uint32_t mpdu_size_threshold;
2476 uint32_t aggressive_statistics_gathering;
2477};
2478
2479/**
2480 * struct ll_stats_get_params - ll stats parameter
2481 * @req_id: request id
2482 * @sta_id: sta id
2483 * @param_id_mask: param is mask
2484 */
2485struct ll_stats_get_params {
2486 uint32_t req_id;
2487 uint8_t sta_id;
2488 uint32_t param_id_mask;
2489};
2490
2491/**
2492 * struct pe_stats_req - pe stats parameter
2493 * @msg_type: message type is same as the request type
2494 * @msg_len: length of the entire request
2495 * @sta_id: Per STA stats request must contain valid
2496 * @stats_mask: categories of stats requested
2497 * @session_id: wsm ts spec flag
2498 */
2499struct pe_stats_req {
2500 /* Common for all types are requests */
2501 uint16_t msg_type;
2502 uint16_t msg_len;
2503 uint32_t sta_id;
2504 /* categories of stats requested. look at ePEStatsMask */
2505 uint32_t stats_mask;
2506 uint8_t session_id;
2507};
2508
2509/**
2510 * struct link_status_params - link stats parameter
2511 * @msg_type: message type is same as the request type
2512 * @msg_len: length of the entire request
2513 * @link_status: wme ts spec flag
2514 * @session_id: wsm ts spec flag
2515 */
2516struct link_status_params {
2517 uint16_t msg_type;
2518 uint16_t msg_len;
2519 uint8_t link_status;
2520 uint8_t session_id;
2521};
2522
2523/**
2524 * struct dhcp_stop_ind_params - DHCP Stop indication message
2525 * @msgtype: message type is same as the request type
2526 * @msglen: length of the entire request
2527 * @device_mode: Mode of the device(ex:STA, AP)
2528 * @adapter_macaddr: MAC address of the adapter
2529 * @peer_macaddr: MAC address of the connected peer
2530 */
2531struct dhcp_stop_ind_params {
2532 uint16_t msgtype;
2533 uint16_t msglen;
2534 uint8_t device_mode;
Govind Singhd7468a52016-03-09 14:32:57 +05302535 struct qdf_mac_addr adapter_macaddr;
2536 struct qdf_mac_addr peer_macaddr;
Govind Singhae855362016-03-07 14:24:22 +05302537};
2538
2539/**
2540 * struct aggr_add_ts_param - ADDTS parameters
2541 * @staIdx: station index
2542 * @tspecIdx: TSPEC handler uniquely identifying a TSPEC for a STA in a BSS
2543 * @tspec: tspec value
2544 * @status: CDF status
2545 * @sessionId: session id
2546 */
2547struct aggr_add_ts_param {
2548 uint16_t staIdx;
2549 uint16_t tspecIdx;
2550 struct mac_tspec_ie tspec[WMI_QOS_NUM_AC_MAX];
Govind Singhd7468a52016-03-09 14:32:57 +05302551 QDF_STATUS status[WMI_QOS_NUM_AC_MAX];
Govind Singhae855362016-03-07 14:24:22 +05302552 uint8_t sessionId;
2553};
2554
2555#define WMI_MAX_FILTER_TEST_DATA_LEN 8
2556#define WMI_MAX_NUM_MULTICAST_ADDRESS 240
2557#define WMI_MAX_NUM_FILTERS 20
2558#define WMI_MAX_NUM_TESTS_PER_FILTER 10
2559
2560/**
2561 * enum packet_filter_type - packet filter type
2562 * @WMI_RCV_FILTER_TYPE_INVALID: invalid type
2563 * @WMI_RCV_FILTER_TYPE_FILTER_PKT: filter packet type
2564 * @WMI_RCV_FILTER_TYPE_BUFFER_PKT: buffer packet type
2565 * @WMI_RCV_FILTER_TYPE_MAX_ENUM_SIZE: max enum size
2566 */
2567enum packet_filter_type {
2568 WMI_RCV_FILTER_TYPE_INVALID,
2569 WMI_RCV_FILTER_TYPE_FILTER_PKT,
2570 WMI_RCV_FILTER_TYPE_BUFFER_PKT,
2571 WMI_RCV_FILTER_TYPE_MAX_ENUM_SIZE
2572};
2573
2574/**
2575 * enum packet_protocol_type - packet protocol type
2576 * @WMI_FILTER_HDR_TYPE_INVALID: invalid type
2577 * @WMI_FILTER_HDR_TYPE_MAC: mac type
2578 * @WMI_FILTER_HDR_TYPE_ARP: trp type
2579 * @WMI_FILTER_HDR_TYPE_IPV4: ipv4 type
2580 * @WMI_FILTER_HDR_TYPE_IPV6: ipv6 type
2581 * @WMI_FILTER_HDR_TYPE_UDP: udp type
2582 * @WMI_FILTER_HDR_TYPE_MAX: max type
2583 */
2584enum packet_protocol_type {
2585 WMI_FILTER_HDR_TYPE_INVALID,
2586 WMI_FILTER_HDR_TYPE_MAC,
2587 WMI_FILTER_HDR_TYPE_ARP,
2588 WMI_FILTER_HDR_TYPE_IPV4,
2589 WMI_FILTER_HDR_TYPE_IPV6,
2590 WMI_FILTER_HDR_TYPE_UDP,
2591 WMI_FILTER_HDR_TYPE_MAX
2592};
2593
2594/**
2595 * enum packet_filter_comp_type - packet filter comparison type
2596 * @WMI_FILTER_CMP_TYPE_INVALID: invalid type
2597 * @WMI_FILTER_CMP_TYPE_EQUAL: type equal
2598 * @WMI_FILTER_CMP_TYPE_MASK_EQUAL: mask equal
2599 * @WMI_FILTER_CMP_TYPE_NOT_EQUAL: type not equal
2600 * @WMI_FILTER_CMP_TYPE_MASK_NOT_EQUAL: mask not equal
2601 * @WMI_FILTER_CMP_TYPE_MAX: max type
2602 */
2603enum packet_filter_comp_type {
2604 WMI_FILTER_CMP_TYPE_INVALID,
2605 WMI_FILTER_CMP_TYPE_EQUAL,
2606 WMI_FILTER_CMP_TYPE_MASK_EQUAL,
2607 WMI_FILTER_CMP_TYPE_NOT_EQUAL,
2608 WMI_FILTER_CMP_TYPE_MASK_NOT_EQUAL,
2609 WMI_FILTER_CMP_TYPE_MAX
2610};
2611
2612/**
2613 * struct rcv_pkt_filter_params - recieve packet filter parameters
2614 * @protocolLayer - protocol layer
2615 * @cmpFlag - comparison flag
2616 * @dataLength - data length
2617 * @dataOffset - data offset
2618 * @reserved - resserved
2619 * @compareData - compare data
2620 * @dataMask - data mask
2621 */
2622struct rcv_pkt_filter_params {
2623 enum packet_protocol_type protocolLayer;
2624 enum packet_filter_comp_type cmpFlag;
2625 uint16_t dataLength;
2626 uint8_t dataOffset;
2627 uint8_t reserved;
2628 uint8_t compareData[WMI_MAX_FILTER_TEST_DATA_LEN];
2629 uint8_t dataMask[WMI_MAX_FILTER_TEST_DATA_LEN];
2630};
2631
2632/**
2633 * struct rcv_pkt_filter_config - recieve packet filter info
2634 * @filterId - filter id
2635 * @filterType - filter type
2636 * @numFieldParams - no of fields
2637 * @coalesceTime - reserved parameter
2638 * @self_macaddr - self mac address
2639 * @bssid - Bssid of the connected AP
2640 * @paramsData - data parameter
2641 */
2642struct rcv_pkt_filter_config {
2643 uint8_t filterId;
2644 enum packet_filter_type filterType;
2645 uint32_t numFieldParams;
2646 uint32_t coalesceTime;
Govind Singhd7468a52016-03-09 14:32:57 +05302647 struct qdf_mac_addr self_macaddr;
2648 struct qdf_mac_addr bssid;
Govind Singhae855362016-03-07 14:24:22 +05302649 struct rcv_pkt_filter_params paramsData[WMI_MAX_NUM_TESTS_PER_FILTER];
2650};
2651
2652/**
2653 * struct vdev_ie_info_param - IE info
2654 * @vdev_id - vdev for which the IE is being sent
2655 * @ie_id - ID of the IE
2656 * @length - length of the IE data
2657 * @data - IE data
2658 *
2659 * This structure is used to store the IE information.
2660 */
2661struct vdev_ie_info_param {
2662 uint32_t vdev_id;
2663 uint32_t ie_id;
2664 uint32_t length;
Selvaraj, Sridharce064292016-07-25 16:25:14 +05302665 uint32_t ie_source;
Naveen Rawat71268882016-08-03 16:41:33 -07002666 uint32_t band;
Govind Singhae855362016-03-07 14:24:22 +05302667 uint8_t *data;
2668};
2669
2670#define WMI_MAX_NUM_FW_SEGMENTS 4
2671
2672/**
2673 * struct fw_dump_seg_req_param - individual segment details
2674 * @seg_id - segment id.
2675 * @seg_start_addr_lo - lower address of the segment.
2676 * @seg_start_addr_hi - higher address of the segment.
2677 * @seg_length - length of the segment.
2678 * @dst_addr_lo - lower address of the destination buffer.
2679 * @dst_addr_hi - higher address of the destination buffer.
2680 *
2681 * This structure carries the information to firmware about the
2682 * individual segments. This structure is part of firmware memory
2683 * dump request.
2684 */
2685struct fw_dump_seg_req_param {
2686 uint8_t seg_id;
2687 uint32_t seg_start_addr_lo;
2688 uint32_t seg_start_addr_hi;
2689 uint32_t seg_length;
2690 uint32_t dst_addr_lo;
2691 uint32_t dst_addr_hi;
2692};
2693
2694/**
2695 * struct fw_dump_req_param - firmware memory dump request details.
2696 * @request_id - request id.
2697 * @num_seg - requested number of segments.
2698 * @fw_dump_seg_req - individual segment information.
2699 *
2700 * This structure carries information about the firmware
2701 * memory dump request.
2702 */
2703struct fw_dump_req_param {
2704 uint32_t request_id;
2705 uint32_t num_seg;
2706 struct fw_dump_seg_req_param segment[WMI_MAX_NUM_FW_SEGMENTS];
2707};
2708
2709#define WMI_TDLS_MAX_SUPP_CHANNELS 128
2710#define WMI_TDLS_MAX_SUPP_OPER_CLASSES 32
2711#define WMI_2_4_GHZ_MAX_FREQ 3000
2712
2713/**
2714 * struct tdls_update_ch_params - channel parameters
2715 * @chanId: ID of the channel
2716 * @pwr: power level
2717 * @dfsSet: is dfs supported or not
2718 * @half_rate: is the channel operating at 10MHz
2719 * @quarter_rate: is the channel operating at 5MHz
2720 */
2721struct tdls_update_ch_params {
2722 uint8_t chanId;
2723 uint8_t pwr;
2724 bool dfsSet;
2725 bool half_rate;
2726 bool quarter_rate;
2727};
2728
2729/**
2730 * struct tdls_peer_cap_params - TDLS peer capablities parameters
2731 * @isPeerResponder: is peer responder or not
2732 * @peerUapsdQueue: peer uapsd queue
2733 * @peerMaxSp: peer max SP value
2734 * @peerBuffStaSupport: peer buffer sta supported or not
2735 * @peerOffChanSupport: peer offchannel support
2736 * @peerCurrOperClass: peer current operating class
2737 * @selfCurrOperClass: self current operating class
2738 * @peerChanLen: peer channel length
2739 * @peerChan: peer channel list
2740 * @peerOperClassLen: peer operating class length
2741 * @peerOperClass: peer operating class
2742 * @prefOffChanNum: peer offchannel number
2743 * @prefOffChanBandwidth: peer offchannel bandwidth
2744 * @opClassForPrefOffChan: operating class for offchannel
2745 */
2746struct tdls_peer_cap_params {
2747 uint8_t isPeerResponder;
2748 uint8_t peerUapsdQueue;
2749 uint8_t peerMaxSp;
2750 uint8_t peerBuffStaSupport;
2751 uint8_t peerOffChanSupport;
2752 uint8_t peerCurrOperClass;
2753 uint8_t selfCurrOperClass;
2754 uint8_t peerChanLen;
2755 struct tdls_update_ch_params peerChan[WMI_TDLS_MAX_SUPP_CHANNELS];
2756 uint8_t peerOperClassLen;
2757 uint8_t peerOperClass[WMI_TDLS_MAX_SUPP_OPER_CLASSES];
2758 uint8_t prefOffChanNum;
2759 uint8_t prefOffChanBandwidth;
2760 uint8_t opClassForPrefOffChan;
2761};
2762
2763/**
2764 * struct tdls_peer_state_params - TDLS peer state parameters
2765 * @vdevId: vdev id
2766 * @peerMacAddr: peer mac address
2767 * @peerCap: peer capabality
2768 */
2769struct tdls_peer_state_params {
2770 uint32_t vdevId;
Govind Singh8675b862016-03-28 22:09:18 +05302771 uint8_t peerMacAddr[IEEE80211_ADDR_LEN];
Govind Singhae855362016-03-07 14:24:22 +05302772 uint32_t peerState;
2773 struct tdls_peer_cap_params peerCap;
2774};
2775
2776/**
2777 * struct wmi_tdls_params - TDLS parameters
2778 * @vdev_id: vdev id
2779 * @tdls_state: TDLS state
2780 * @notification_interval_ms: notification inerval
2781 * @tx_discovery_threshold: tx discovery threshold
2782 * @tx_teardown_threshold: tx teardown threashold
2783 * @rssi_teardown_threshold: RSSI teardown threshold
2784 * @rssi_delta: RSSI delta
2785 * @tdls_options: TDLS options
2786 * @peer_traffic_ind_window: raffic indication window
2787 * @peer_traffic_response_timeout: traffic response timeout
2788 * @puapsd_mask: uapsd mask
2789 * @puapsd_inactivity_time: uapsd inactivity time
2790 * @puapsd_rx_frame_threshold: uapsd rx frame threshold
2791 * @teardown_notification_ms: tdls teardown notification interval
2792 * @tdls_peer_kickout_threshold: tdls packet threshold for
2793 * peer kickout operation
2794 */
2795struct wmi_tdls_params {
2796 uint32_t vdev_id;
2797 uint32_t tdls_state;
2798 uint32_t notification_interval_ms;
2799 uint32_t tx_discovery_threshold;
2800 uint32_t tx_teardown_threshold;
2801 int32_t rssi_teardown_threshold;
2802 int32_t rssi_delta;
2803 uint32_t tdls_options;
2804 uint32_t peer_traffic_ind_window;
2805 uint32_t peer_traffic_response_timeout;
2806 uint32_t puapsd_mask;
2807 uint32_t puapsd_inactivity_time;
2808 uint32_t puapsd_rx_frame_threshold;
2809 uint32_t teardown_notification_ms;
2810 uint32_t tdls_peer_kickout_threshold;
2811};
2812
2813/**
2814 * struct tdls_chan_switch_params - channel switch parameter structure
2815 * @vdev_id: vdev ID
2816 * @peer_mac_addr: Peer mac address
2817 * @tdls_off_ch_bw_offset: Target off-channel bandwitdh offset
2818 * @tdls_off_ch: Target Off Channel
2819 * @oper_class: Operating class for target channel
2820 * @is_responder: Responder or initiator
2821 */
2822struct tdls_channel_switch_params {
2823 uint32_t vdev_id;
Govind Singh8675b862016-03-28 22:09:18 +05302824 uint8_t peer_mac_addr[IEEE80211_ADDR_LEN];
Govind Singhae855362016-03-07 14:24:22 +05302825 uint16_t tdls_off_ch_bw_offset;
2826 uint8_t tdls_off_ch;
2827 uint8_t tdls_sw_mode;
2828 uint8_t oper_class;
2829 uint8_t is_responder;
2830};
2831
2832/**
2833 * struct dhcp_offload_info_params - dhcp offload parameters
2834 * @vdev_id: request data length
2835 * @dhcpSrvOffloadEnabled: dhcp offload enabled
2836 * @dhcpClientNum: dhcp client no
2837 * @dhcpSrvIP: dhcp server ip
2838 */
2839struct dhcp_offload_info_params {
2840 uint32_t vdev_id;
2841 uint32_t dhcpSrvOffloadEnabled;
2842 uint32_t dhcpClientNum;
2843 uint32_t dhcpSrvIP;
2844};
2845
2846/**
2847 * struct nan_req_params - NAN request params
2848 * @request_data_len: request data length
2849 * @request_data: request data
2850 */
2851struct nan_req_params {
2852 uint16_t request_data_len;
2853 uint8_t request_data[];
2854};
2855
2856
2857/**
2858 * struct app_type2_params - app type2parameter
2859 * @vdev_id: vdev id
2860 * @rc4_key: rc4 key
2861 * @rc4_key_len: rc4 key length
2862 * @ip_id: NC id
2863 * @ip_device_ip: NC IP addres
2864 * @ip_server_ip: Push server IP address
2865 * @tcp_src_port: NC TCP port
2866 * @tcp_dst_port: Push server TCP port
2867 * @tcp_seq: tcp sequence
2868 * @tcp_ack_seq: tcp ack sequence
2869 * @keepalive_init: Initial ping interval
2870 * @keepalive_min: Minimum ping interval
2871 * @keepalive_max: Maximum ping interval
2872 * @keepalive_inc: Increment of ping interval
2873 * @gateway_mac: gateway mac address
2874 * @tcp_tx_timeout_val: tcp tx timeout value
2875 * @tcp_rx_timeout_val: tcp rx timeout value
2876 */
2877struct app_type2_params {
2878 uint8_t vdev_id;
2879 uint8_t rc4_key[16];
2880 uint32_t rc4_key_len;
2881 /** ip header parameter */
2882 uint32_t ip_id;
2883 uint32_t ip_device_ip;
2884 uint32_t ip_server_ip;
2885 /** tcp header parameter */
2886 uint16_t tcp_src_port;
2887 uint16_t tcp_dst_port;
2888 uint32_t tcp_seq;
2889 uint32_t tcp_ack_seq;
2890 uint32_t keepalive_init;
2891 uint32_t keepalive_min;
2892 uint32_t keepalive_max;
2893 uint32_t keepalive_inc;
Govind Singhd7468a52016-03-09 14:32:57 +05302894 struct qdf_mac_addr gateway_mac;
Govind Singhae855362016-03-07 14:24:22 +05302895 uint32_t tcp_tx_timeout_val;
2896 uint32_t tcp_rx_timeout_val;
2897};
2898
2899/**
2900 * struct app_type1_params - app type1 parameter
2901 * @vdev_id: vdev id
2902 * @wakee_mac_addr: mac address
2903 * @identification_id: identification id
2904 * @password: password
2905 * @id_length: id length
2906 * @pass_length: password length
2907 */
2908struct app_type1_params {
2909 uint8_t vdev_id;
Govind Singhd7468a52016-03-09 14:32:57 +05302910 struct qdf_mac_addr wakee_mac_addr;
Govind Singhae855362016-03-07 14:24:22 +05302911 uint8_t identification_id[8];
2912 uint8_t password[16];
2913 uint32_t id_length;
2914 uint32_t pass_length;
2915};
2916
2917/**
2918 * enum wmi_ext_wow_type - wow type
2919 * @WMI_EXT_WOW_TYPE_APP_TYPE1: only enable wakeup for app type1
2920 * @WMI_EXT_WOW_TYPE_APP_TYPE2: only enable wakeup for app type2
2921 * @WMI_EXT_WOW_TYPE_APP_TYPE1_2: enable wakeup for app type1&2
2922 */
2923enum wmi_ext_wow_type {
2924 WMI_EXT_WOW_TYPE_APP_TYPE1,
2925 WMI_EXT_WOW_TYPE_APP_TYPE2,
2926 WMI_EXT_WOW_TYPE_APP_TYPE1_2,
2927};
2928
2929/**
2930 * struct ext_wow_params - ext wow parameters
2931 * @vdev_id: vdev id
2932 * @type: wow type
2933 * @wakeup_pin_num: wake up gpio no
2934 */
2935struct ext_wow_params {
2936 uint8_t vdev_id;
2937 enum wmi_ext_wow_type type;
2938 uint32_t wakeup_pin_num;
2939};
2940
2941/**
2942 * struct stats_ext_params - ext stats request
2943 * @vdev_id: vdev id
2944 * @request_data_len: request data length
2945 * @request_data: request data
2946 */
2947struct stats_ext_params {
2948 uint32_t vdev_id;
2949 uint32_t request_data_len;
2950 uint8_t request_data[];
2951};
2952
2953#define WMI_PERIODIC_TX_PTRN_MAX_SIZE 1536
2954/**
2955 * struct periodic_tx_pattern - periodic tx pattern
2956 * @mac_address: MAC Address for the adapter
2957 * @ucPtrnId: Pattern ID
2958 * @ucPtrnSize: Pattern size
2959 * @usPtrnIntervalMs: in ms
2960 * @ucPattern: Pattern buffer
2961 */
2962struct periodic_tx_pattern {
Govind Singhd7468a52016-03-09 14:32:57 +05302963 struct qdf_mac_addr mac_address;
Govind Singhae855362016-03-07 14:24:22 +05302964 uint8_t ucPtrnId;
2965 uint16_t ucPtrnSize;
2966 uint32_t usPtrnIntervalMs;
2967 uint8_t ucPattern[WMI_PERIODIC_TX_PTRN_MAX_SIZE];
2968};
2969
2970#define WMI_GTK_OFFLOAD_KEK_BYTES 16
2971#define WMI_GTK_OFFLOAD_KCK_BYTES 16
Siddarth Poddard9221542016-04-01 17:45:06 +05302972#define WMI_GTK_OFFLOAD_ENABLE 0
2973#define WMI_GTK_OFFLOAD_DISABLE 1
Govind Singhae855362016-03-07 14:24:22 +05302974
2975/**
2976 * struct gtk_offload_params - gtk offload parameters
2977 * @ulFlags: optional flags
2978 * @aKCK: Key confirmation key
2979 * @aKEK: key encryption key
2980 * @ullKeyReplayCounter: replay counter
2981 * @bssid: bss id
2982 */
2983struct gtk_offload_params {
2984 uint32_t ulFlags;
2985 uint8_t aKCK[WMI_GTK_OFFLOAD_KCK_BYTES];
2986 uint8_t aKEK[WMI_GTK_OFFLOAD_KEK_BYTES];
2987 uint64_t ullKeyReplayCounter;
Govind Singhd7468a52016-03-09 14:32:57 +05302988 struct qdf_mac_addr bssid;
Govind Singhae855362016-03-07 14:24:22 +05302989};
2990
2991/**
2992 * struct flashing_req_params - led flashing parameter
2993 * @reqId: request id
2994 * @pattern_id: pattern identifier. 0: disconnected 1: connected
2995 * @led_x0: led flashing parameter0
2996 * @led_x1: led flashing parameter1
2997 */
2998struct flashing_req_params {
2999 uint32_t req_id;
3000 uint32_t pattern_id;
3001 uint32_t led_x0;
3002 uint32_t led_x1;
3003};
3004
Govind Singh89727882016-04-15 13:58:27 +05303005#define MAX_MEM_CHUNKS 32
3006/**
3007 * struct wmi_host_mem_chunk - host memory chunk structure
3008 * @vaddr: Pointer to virtual address
3009 * @paddr: Physical address
3010 * @memctx: qdf memory context for mapped address.
3011 * @len: length of chunk
3012 * @req_id: request id from target
3013 */
Govind Singhae855362016-03-07 14:24:22 +05303014struct wmi_host_mem_chunk {
3015 uint32_t *vaddr;
3016 uint32_t paddr;
Govind Singhd7468a52016-03-09 14:32:57 +05303017 qdf_dma_mem_context(memctx);
Govind Singhae855362016-03-07 14:24:22 +05303018 uint32_t len;
3019 uint32_t req_id;
3020};
3021
Govind Singh89727882016-04-15 13:58:27 +05303022/**
3023 * struct target_resource_config - Resource config given to target
3024 * This structure is union of wmi_resource_config defined
3025 * by both TLV and non-TLV target.
3026 */
Govind Singhae855362016-03-07 14:24:22 +05303027struct target_resource_config {
3028 uint32_t num_vdevs;
3029 uint32_t num_peers;
3030 uint32_t num_active_peers;
3031 uint32_t num_offload_peers;
3032 uint32_t num_offload_reorder_buffs;
3033 uint32_t num_peer_keys;
3034 uint32_t num_tids;
3035 uint32_t ast_skid_limit;
3036 uint32_t tx_chain_mask;
3037 uint32_t rx_chain_mask;
3038 uint32_t rx_timeout_pri[4];
3039 uint32_t rx_decap_mode;
3040 uint32_t scan_max_pending_req;
3041 uint32_t bmiss_offload_max_vdev;
3042 uint32_t roam_offload_max_vdev;
3043 uint32_t roam_offload_max_ap_profiles;
3044 uint32_t num_mcast_groups;
3045 uint32_t num_mcast_table_elems;
3046 uint32_t mcast2ucast_mode;
3047 uint32_t tx_dbg_log_size;
3048 uint32_t num_wds_entries;
3049 uint32_t dma_burst_size;
3050 uint32_t mac_aggr_delim;
3051 uint32_t rx_skip_defrag_timeout_dup_detection_check;
3052 uint32_t vow_config;
3053 uint32_t gtk_offload_max_vdev;
3054 uint32_t num_msdu_desc; /* Number of msdu desc */
3055 uint32_t max_frag_entries;
3056 /* End common */
3057
3058 /* Added in MCL */
3059 uint32_t num_tdls_vdevs;
3060 uint32_t num_tdls_conn_table_entries;
3061 uint32_t beacon_tx_offload_max_vdev;
3062 uint32_t num_multicast_filter_entries;
3063 uint32_t num_wow_filters;
3064 uint32_t num_keep_alive_pattern;
3065 uint32_t keep_alive_pattern_size;
3066 uint32_t max_tdls_concurrent_sleep_sta;
3067 uint32_t max_tdls_concurrent_buffer_sta;
3068 uint32_t wmi_send_separate;
3069 uint32_t num_ocb_vdevs;
3070 uint32_t num_ocb_channels;
3071 uint32_t num_ocb_schedules;
3072};
3073
3074/**
3075 * struct wmi_wifi_start_log - Structure to store the params sent to start/
3076 * stop logging
3077 * @name: Attribute which indicates the type of logging like per packet
3078 * statistics, connectivity etc.
3079 * @verbose_level: Verbose level which can be 0,1,2,3
3080 * @flag: Flag field for future use
3081 */
3082struct wmi_wifi_start_log {
3083 uint32_t ring_id;
3084 uint32_t verbose_level;
3085 uint32_t flag;
3086};
3087
3088/**
3089 * struct wmi_pcl_list - Format of PCL
3090 * @pcl_list: List of preferred channels
Manishekar Chandrasekaranb8c59382016-04-21 19:16:32 +05303091 * @weight_list: Weights of the PCL
Govind Singhae855362016-03-07 14:24:22 +05303092 * @pcl_len: Number of channels in the PCL
3093 */
3094struct wmi_pcl_list {
3095 uint8_t pcl_list[128];
Manishekar Chandrasekaranb8c59382016-04-21 19:16:32 +05303096 uint8_t weight_list[128];
Govind Singhae855362016-03-07 14:24:22 +05303097 uint32_t pcl_len;
3098};
3099
3100/**
Manishekar Chandrasekaranb8c59382016-04-21 19:16:32 +05303101 * struct wmi_pcl_chan_weights - Params to get the valid weighed list
3102 * @pcl_list: Preferred channel list already sorted in the order of preference
3103 * @pcl_len: Length of the PCL
3104 * @saved_chan_list: Valid channel list updated as part of
3105 * WMA_UPDATE_CHAN_LIST_REQ
3106 * @saved_num_chan: Length of the valid channel list
3107 * @weighed_valid_list: Weights of the valid channel list. This will have one
3108 * to one mapping with valid_chan_list. FW expects channel order and size to be
3109 * as per the list provided in WMI_SCAN_CHAN_LIST_CMDID.
3110 * @weight_list: Weights assigned by policy manager
3111 */
3112struct wmi_pcl_chan_weights {
3113 uint8_t pcl_list[MAX_NUM_CHAN];
3114 uint32_t pcl_len;
3115 uint8_t saved_chan_list[MAX_NUM_CHAN];
3116 uint32_t saved_num_chan;
3117 uint8_t weighed_valid_list[MAX_NUM_CHAN];
3118 uint8_t weight_list[MAX_NUM_CHAN];
3119};
3120
3121/**
Govind Singhae855362016-03-07 14:24:22 +05303122 * struct wmi_hw_mode_params - HW mode params
3123 * @mac0_tx_ss: MAC0 Tx spatial stream
3124 * @mac0_rx_ss: MAC0 Rx spatial stream
3125 * @mac1_tx_ss: MAC1 Tx spatial stream
3126 * @mac1_rx_ss: MAC1 Rx spatial stream
3127 * @mac0_bw: MAC0 bandwidth
3128 * @mac1_bw: MAC1 bandwidth
3129 * @dbs_cap: DBS capabality
3130 * @agile_dfs_cap: Agile DFS capabality
3131 */
3132struct wmi_hw_mode_params {
3133 uint8_t mac0_tx_ss;
3134 uint8_t mac0_rx_ss;
3135 uint8_t mac1_tx_ss;
3136 uint8_t mac1_rx_ss;
3137 uint8_t mac0_bw;
3138 uint8_t mac1_bw;
3139 uint8_t dbs_cap;
3140 uint8_t agile_dfs_cap;
3141};
3142
3143/**
3144 * struct wmi_dual_mac_config - Dual MAC configuration
3145 * @scan_config: Scan configuration
3146 * @fw_mode_config: FW mode configuration
3147 * @set_dual_mac_cb: Callback function to be executed on response to the command
3148 */
3149struct wmi_dual_mac_config {
3150 uint32_t scan_config;
3151 uint32_t fw_mode_config;
3152 void *set_dual_mac_cb;
3153};
3154
3155#ifdef WLAN_NS_OFFLOAD
3156/**
3157 * struct ns_offload_req_params - ns offload request paramter
3158 * @srcIPv6Addr: src ipv6 address
3159 * @selfIPv6Addr: self ipv6 address
3160 * @targetIPv6Addr: target ipv6 address
3161 * @self_macaddr: self mac address
3162 * @srcIPv6AddrValid: src ipv6 address valid flag
3163 * @targetIPv6AddrValid: target ipv6 address valid flag
Sravan Kumar Kairam33b95492016-07-26 17:59:59 +05303164 * @target_ipv6_addr_ac_type: target ipv6 address type
Govind Singhae855362016-03-07 14:24:22 +05303165 * @slotIdx: slot index
3166 */
3167struct ns_offload_req_params {
3168 uint8_t srcIPv6Addr[WMI_MAC_IPV6_ADDR_LEN];
3169 uint8_t selfIPv6Addr[WMI_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA][WMI_MAC_IPV6_ADDR_LEN];
3170 uint8_t targetIPv6Addr[WMI_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA][WMI_MAC_IPV6_ADDR_LEN];
Govind Singhd7468a52016-03-09 14:32:57 +05303171 struct qdf_mac_addr self_macaddr;
Govind Singhae855362016-03-07 14:24:22 +05303172 uint8_t srcIPv6AddrValid;
3173 uint8_t targetIPv6AddrValid[WMI_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA];
Sravan Kumar Kairam33b95492016-07-26 17:59:59 +05303174 uint8_t target_ipv6_addr_ac_type[WMI_MAC_NUM_TARGET_IPV6_NS_OFFLOAD_NA];
Govind Singhae855362016-03-07 14:24:22 +05303175 uint8_t slotIdx;
3176};
3177#endif /* WLAN_NS_OFFLOAD */
3178
3179/**
3180 * struct host_offload_req_param - arp offload parameter
3181 * @offloadType: offload type
3182 * @enableOrDisable: enable or disable
3183 * @num_ns_offload_count: offload count
3184 */
3185struct host_offload_req_param {
3186 uint8_t offloadType;
3187 uint8_t enableOrDisable;
3188 uint32_t num_ns_offload_count;
3189 union {
3190 uint8_t hostIpv4Addr[WMI_IPV4_ADDR_LEN];
3191 uint8_t hostIpv6Addr[WMI_MAC_IPV6_ADDR_LEN];
3192 } params;
3193#ifdef WLAN_NS_OFFLOAD
3194 struct ns_offload_req_params nsOffloadInfo;
3195#endif /* WLAN_NS_OFFLOAD */
Govind Singhd7468a52016-03-09 14:32:57 +05303196 struct qdf_mac_addr bssid;
Govind Singhae855362016-03-07 14:24:22 +05303197};
3198
3199/**
3200 * struct ssid_hotlist_param - param for SSID Hotlist
3201 * @ssid: SSID which is being hotlisted
3202 * @band: Band in which the given SSID should be scanned
3203 * @rssi_low: Low bound on RSSI
3204 * @rssi_high: High bound on RSSI
3205 */
3206struct ssid_hotlist_param {
3207 struct mac_ssid ssid;
3208 uint8_t band;
3209 int32_t rssi_low;
3210 int32_t rssi_high;
3211};
3212
3213/**
Himanshu Agarwal5f2d0482016-03-09 15:25:44 +05303214 * struct roam_scan_filter_params - Structure holding roaming scan
3215 * parameters
3216 * @len: length
3217 * @op_bitmap: bitmap to determine reason of roaming
3218 * @session_id: vdev id
3219 * @num_bssid_black_list: The number of BSSID's that we should
3220 * avoid connecting to. It is like a
3221 * blacklist of BSSID's.
3222 * @num_ssid_white_list: The number of SSID profiles that are
3223 * in the Whitelist. When roaming, we
3224 * consider the BSSID's with this SSID
3225 * also for roaming apart from the connected one's
3226 * @num_bssid_preferred_list: Number of BSSID's which have a preference over
3227 * others
3228 * @bssid_avoid_list: Blacklist SSID's
3229 * @ssid_allowed_list: Whitelist SSID's
3230 * @bssid_favored: Favorable BSSID's
3231 * @bssid_favored_factor: RSSI to be added to this BSSID to prefer it
3232 *
3233 * This structure holds all the key parameters related to
3234 * initial connection and roaming connections.
3235 */
3236
3237struct roam_scan_filter_params {
3238 uint32_t len;
3239 uint32_t op_bitmap;
3240 uint8_t session_id;
3241 uint32_t num_bssid_black_list;
3242 uint32_t num_ssid_white_list;
3243 uint32_t num_bssid_preferred_list;
3244 struct qdf_mac_addr bssid_avoid_list[MAX_BSSID_AVOID_LIST];
3245 struct mac_ssid ssid_allowed_list[MAX_SSID_ALLOWED_LIST];
3246 struct qdf_mac_addr bssid_favored[MAX_BSSID_FAVORED];
3247 uint8_t bssid_favored_factor[MAX_BSSID_FAVORED];
3248};
3249
3250/**
Govind Singhae855362016-03-07 14:24:22 +05303251 * struct ssid_hotlist_request_params - set SSID hotlist request struct
3252 * @request_id: ID of the request
3253 * @session_id: ID of the session
3254 * @lost_ssid_sample_size: Number of consecutive scans in which the SSID
3255 * must not be seen in order to consider the SSID "lost"
3256 * @ssid_count: Number of valid entries in the @ssids array
3257 * @ssids: Array that defines the SSIDs that are in the hotlist
3258 */
3259struct ssid_hotlist_request_params {
3260 uint32_t request_id;
3261 uint8_t session_id;
3262 uint32_t lost_ssid_sample_size;
3263 uint32_t ssid_count;
3264 struct ssid_hotlist_param ssids[WMI_EXTSCAN_MAX_HOTLIST_SSIDS];
3265};
3266
3267/**
3268 * struct wmi_unit_test_cmd - unit test command parameters
3269 * @vdev_id: vdev id
3270 * @module_id: module id
3271 * @num_args: number of arguments
3272 * @args: arguments
3273 */
3274struct wmi_unit_test_cmd {
3275 uint32_t vdev_id;
Govind Singh89727882016-04-15 13:58:27 +05303276 uint32_t module_id;
Govind Singhae855362016-03-07 14:24:22 +05303277 uint32_t num_args;
3278 uint32_t args[WMI_MAX_NUM_ARGS];
3279};
3280
3281/**
3282 * struct wmi_roam_invoke_cmd - roam invoke command
3283 * @vdev_id: vdev id
3284 * @bssid: mac address
3285 * @channel: channel
3286 */
3287struct wmi_roam_invoke_cmd {
3288 uint32_t vdev_id;
3289 uint8_t bssid[IEEE80211_ADDR_LEN];
3290 uint32_t channel;
3291};
3292
3293/**
3294 * struct ext_scan_setbssi_hotlist_params - set hotlist request
3295 * @requestId: request identifier
3296 * @sessionId: session identifier
3297 * @lost_ap_sample_size: number of samples to confirm AP loss
3298 * @numAp: Number of hotlist APs
3299 * @ap: hotlist APs
3300 */
3301struct ext_scan_setbssi_hotlist_params {
3302 uint32_t requestId;
3303 uint8_t sessionId;
3304
3305 uint32_t lost_ap_sample_size;
3306 uint32_t numAp;
3307 struct ap_threshold_params ap[WMI_WLAN_EXTSCAN_MAX_HOTLIST_APS];
3308};
Govind Singh89727882016-04-15 13:58:27 +05303309
3310/**
3311 * struct TARGET_HAL_REG_CAPABILITIES - This is replication of REG table
3312 * structure defined by target. This is added here to remove dependency
3313 * on FW headers so that host can be agnostic to different defintions in
3314 * both the targets.
3315 */
3316typedef struct {
3317 uint32_t eeprom_rd; /* regdomain value specified in EEPROM */
3318 uint32_t eeprom_rd_ext; /* regdomain */
3319 uint32_t regcap1; /* CAP1 capabilities bit map */
3320 uint32_t regcap2; /* REGDMN EEPROM CAP */
3321 uint32_t wireless_modes; /* REGDMN MODE */
3322 uint32_t low_2ghz_chan;
3323 uint32_t high_2ghz_chan;
3324 uint32_t low_5ghz_chan;
3325 uint32_t high_5ghz_chan;
3326} TARGET_HAL_REG_CAPABILITIES;
3327
3328/**
3329 * struct host_mem_req - Host memory request paramseters request by target
3330 * @req_id: Request id to identify the request.
3331 * @unit_size: Size of single unit requested.
3332 * @num_unit_info: Memory chunk info
3333 * @num_units: number of units requested.
3334 */
3335typedef struct {
3336 uint32_t req_id;
3337 uint32_t unit_size;
3338 uint32_t num_unit_info;
3339 uint32_t num_units;
3340} host_mem_req;
3341
3342#define WMI_HOST_DSCP_MAP_MAX (64)
3343
3344/**
3345 * struct wmi_host_ext_resource_config - Extended resource config
3346 * @host_platform_config: Host plaform configuration.
3347 * @fw_featuew_bitmap: FW feature requested bitmap.
3348 */
3349typedef struct {
3350 uint32_t host_platform_config;
3351
3352#define WMI_HOST_FW_FEATURE_LTEU_SUPPORT 0x0001
3353#define WMI_HOST_FW_FEATURE_COEX_GPIO_SUPPORT 0x0002
3354#define WMI_HOST_FW_FEATURE_AUX_RADIO_SPECTRAL_INTF 0x0004
3355#define WMI_HOST_FW_FEATURE_AUX_RADIO_CHAN_LOAD_INTF 0x0008
3356#define WMI_HOST_FW_FEATURE_BSS_CHANNEL_INFO_64 0x0010
3357#define WMI_HOST_FW_FEATURE_PEER_STATS 0x0020
3358#define WMI_HOST_FW_FEATURE_VDEV_STATS 0x0040
3359 /**
3360 * @brief fw_feature_bitmask - Enable/Disable features in FW
3361 * @details
3362 * The bits in fw_feature_bitmask are used as shown by the masks below:
3363 * 0x0001 - LTEU Config enable/disable
3364 * 0x0002 - COEX GPIO Config enable/disable
3365 * 0x0004 - Aux Radio enhancement for spectral scan enable/disable
3366 * 0x0008 - Aux Radio enhancement for chan load scan enable/disable
3367 * 0x0010 - BSS channel info stats enable/disable
3368 * The features in question are enabled by setting
3369 * the feature's bit to 1,
3370 * or disabled by setting the feature's bit to 0.
3371 */
3372 uint32_t fw_feature_bitmap;
3373
Sathish Kumar7e2eaed2016-11-14 17:44:29 +05303374 /* WLAN priority GPIO number
3375 * The target uses a GPIO pin to indicate when it is transmitting
3376 * high-priority traffic (e.g. beacon, management, or AC_VI) or
3377 * low-priority traffic (e.g. AC_BE, AC_BK). The HW uses this
3378 * WLAN GPIO pin to determine whether to abort WLAN tx in favor of
3379 * BT activity.
3380 * Which GPIO is used for this WLAN tx traffic priority specification
3381 * varies between platforms, so the host needs to indicate to the
3382 * target which GPIO to use.
3383 */
3384 uint32_t wlan_priority_gpio;
3385
Govind Singh89727882016-04-15 13:58:27 +05303386 /* add new members here */
3387} wmi_host_ext_resource_config;
3388
3389/**
3390 * struct set_neighbour_rx_params - Neighbour RX params
3391 * @vdev_id: vdev id
3392 * @idx: index of param
3393 * @action: action
3394 * @type: Type of param
3395 */
3396struct set_neighbour_rx_params {
3397 uint8_t vdev_id;
3398 uint32_t idx;
3399 uint32_t action;
3400 uint32_t type;
3401};
3402
3403/**
3404 * struct set_fwtest_params - FW test params
3405 * @arg: FW param id
3406 * @value: value
3407 */
3408struct set_fwtest_params {
3409 uint32_t arg;
3410 uint32_t value;
3411};
3412
3413/**
3414 * struct config_ratemask_params - ratemask config parameters
3415 * @vdev_id: vdev id
3416 * @type: Type
3417 * @lower32: Lower 32 bits
3418 * @higher32: Hogher 32 bits
3419 */
3420struct config_ratemask_params {
3421 uint8_t vdev_id;
3422 uint8_t type;
3423 uint32_t lower32;
3424 uint32_t higher32;
3425};
3426
3427/**
3428 * struct peer_add_wds_entry_params - WDS peer entry add params
3429 * @dest_addr: Pointer to destination macaddr
3430 * @peer_addr: Pointer to peer mac addr
3431 * @flags: flags
3432 */
3433struct peer_add_wds_entry_params {
3434 const uint8_t *dest_addr;
3435 uint8_t *peer_addr;
3436 uint32_t flags;
3437};
3438
3439/**
3440 * struct peer_del_wds_entry_params - WDS peer entry del params
3441 * @dest_addr: Pointer to destination macaddr
3442 */
3443struct peer_del_wds_entry_params {
3444 uint8_t *dest_addr;
3445};
3446
3447/**
3448 * struct peer_updatewds_entry_params - WDS peer entry update params
3449 * @wds_macaddr: Pointer to destination macaddr
3450 * @peer_add: Pointer to peer mac addr
3451 * @flags: flags
3452 */
3453struct peer_update_wds_entry_params {
3454 uint8_t *wds_macaddr;
3455 uint8_t *peer_macaddr;
3456 uint32_t flags;
3457};
3458
3459/**
3460 * struct set_ps_mode_params - PS mode params
3461 * @vdev_id: vdev id
3462 * @psmode: PS mode
3463 */
3464struct set_ps_mode_params {
3465 uint8_t vdev_id;
3466 uint8_t psmode;
3467};
3468
3469/**
3470 * @struct tt_level_config - Set Thermal throttlling config
3471 * @tmplwm: Temperature low water mark
3472 * @tmphwm: Temperature high water mark
3473 * @dcoffpercent: dc off percentage
3474 * @priority: priority
3475 */
3476typedef struct {
3477 uint32_t tmplwm;
3478 uint32_t tmphwm;
3479 uint32_t dcoffpercent;
3480 uint32_t priority;
3481} tt_level_config;
3482
3483/**
3484 * struct thermal_mitigation_params - Thermal mitigation params
3485 * @enable: Enable/Disable Thermal mitigation
3486 * @dc: DC
3487 * @dc_per_event: DC per event
3488 * @tt_level_config: TT level config params
3489 */
3490struct thermal_mitigation_params {
3491 uint32_t enable;
3492 uint32_t dc;
3493 uint32_t dc_per_event;
3494 tt_level_config levelconf[THERMAL_LEVELS];
3495};
3496
3497/**
3498 * struct smart_ant_enable_params - Smart antenna params
3499 * @enable: Enable/Disable
3500 * @mode: SA mode
3501 * @rx_antenna: RX antenna config
Govind Singh41da3152016-05-06 20:20:25 +05303502 * @gpio_pin : GPIO pin config
3503 * @gpio_func : GPIO function config
Govind Singh89727882016-04-15 13:58:27 +05303504 */
3505struct smart_ant_enable_params {
3506 uint32_t enable;
3507 uint32_t mode;
3508 uint32_t rx_antenna;
Govind Singh41da3152016-05-06 20:20:25 +05303509 uint32_t gpio_pin[WMI_HAL_MAX_SANTENNA];
3510 uint32_t gpio_func[WMI_HAL_MAX_SANTENNA];
Govind Singh89727882016-04-15 13:58:27 +05303511};
3512
3513/**
3514 * struct smart_ant_rx_ant_params - RX antenna params
3515 * @antenna: RX antenna
3516 */
3517struct smart_ant_rx_ant_params {
3518 uint32_t antenna;
3519};
3520
3521/**
3522 * struct smart_ant_tx_ant_params - TX antenna param
3523 * @antenna_array: Antenna arry
3524 * @vdev_id: VDEV id
3525 */
3526struct smart_ant_tx_ant_params {
3527 uint32_t *antenna_array;
3528 uint8_t vdev_id;
3529};
3530
3531/**
3532 * struct smart_ant_training_info_params - SA training params
3533 * @vdev_id: VDEV id
3534 * @rate_array: Rates array
3535 * @antenna_array: Antenna array
3536 * @numpkts: num packets for training
3537 */
3538struct smart_ant_training_info_params {
3539 uint8_t vdev_id;
3540 uint32_t *rate_array;
3541 uint32_t *antenna_array;
3542 uint32_t numpkts;
3543};
3544
3545/**
3546 * struct smart_ant_node_config_params - SA node config params
3547 * @vdev_id: VDEV id
3548 * @cmd_id: Command id
3549 * @args_count: Arguments count
3550 */
3551struct smart_ant_node_config_params {
3552 uint8_t vdev_id;
3553 uint32_t cmd_id;
3554 uint16_t args_count;
3555 uint32_t *args_arr;
3556};
3557/**
3558 * struct smart_ant_enable_tx_feedback_params - SA tx feeback params
3559 * @enable: Enable TX feedback for SA
3560 */
3561struct smart_ant_enable_tx_feedback_params {
3562 int enable;
3563};
3564
3565/**
3566 * struct vdev_spectral_configure_params - SPectral config params
3567 * @vdev_id: VDEV id
3568 * @count: count
3569 * @period: period
3570 * @spectral_pri: Spectral priority
3571 * @fft_size: FFT size
3572 * @gc_enable: GC enable
3573 * @restart_enable: restart enabled
3574 * @noise_floor_ref: Noise floor reference
3575 * @init_delay: Init delays
3576 * @nb_tone_thr: NB tone threshold
3577 * @str_bin_thr: STR BIN threshold
3578 * @wb_rpt_mode: WB BIN threshold
3579 * @rssi_rpt_mode: RSSI report mode
3580 * @rssi_thr: RSSI threshold
3581 * @pwr_format: Power format
3582 * @rpt_mode: Report mdoe
3583 * @bin_scale: BIN scale
3584 * @dBm_adj: DBM adjust
3585 * @chn_mask: chain mask
3586 */
3587struct vdev_spectral_configure_params {
3588 uint8_t vdev_id;
3589 uint16_t count;
3590 uint16_t period;
3591 uint16_t spectral_pri;
3592 uint16_t fft_size;
3593 uint16_t gc_enable;
3594 uint16_t restart_enable;
3595 uint16_t noise_floor_ref;
3596 uint16_t init_delay;
3597 uint16_t nb_tone_thr;
3598 uint16_t str_bin_thr;
3599 uint16_t wb_rpt_mode;
3600 uint16_t rssi_rpt_mode;
3601 uint16_t rssi_thr;
3602 uint16_t pwr_format;
3603 uint16_t rpt_mode;
3604 uint16_t bin_scale;
3605 uint16_t dBm_adj;
3606 uint16_t chn_mask;
3607};
3608
3609/**
3610 * struct vdev_spectral_enable_params - Spectral enabled params
3611 * @vdev_id: VDEV id
3612 * @active_valid: Active valid
3613 * @active: active
3614 * @enabled_valid: Enabled valid
3615 * @enabled: enabled
3616 */
3617struct vdev_spectral_enable_params {
3618 uint8_t vdev_id;
3619 uint8_t active_valid;
3620 uint8_t active;
3621 uint8_t enabled_valid;
3622 uint8_t enabled;
3623};
3624
3625/**
3626 * struct pdev_set_regdomain_params - PDEV set reg domain params
3627 * @currentRDinuse: Current Reg domain
3628 * @currentRD2G: Current Reg domain 2G
3629 * @currentRD5G: Current Reg domain 5G
3630 * @ctl_2G: CTL 2G
3631 * @ctl_5G: CTL 5G
3632 * @dfsDomain: DFS domain
3633 */
3634struct pdev_set_regdomain_params {
3635 uint16_t currentRDinuse;
3636 uint16_t currentRD2G;
3637 uint16_t currentRD5G;
3638 uint32_t ctl_2G;
3639 uint32_t ctl_5G;
3640 uint8_t dfsDomain;
3641};
3642
3643/**
3644 * struct set_quiet_mode_params - Set quiet mode params
3645 * @enabled: Enabled
3646 * @period: Quite period
3647 * @intval: Quite interval
3648 * @duration: Quite duration
3649 * @offset: offset
3650 */
3651struct set_quiet_mode_params {
3652 uint8_t enabled;
3653 uint8_t period;
3654 uint16_t intval;
3655 uint16_t duration;
3656 uint16_t offset;
3657};
3658
3659/**
3660 * struct set_beacon_filter_params - Set beacon filter params
3661 * @vdev_id: VDEV id
3662 * @ie: Pointer to IE fields
3663 */
3664struct set_beacon_filter_params {
3665 uint8_t vdev_id;
3666 uint32_t *ie;
3667};
3668
3669/**
3670 * struct remove_beacon_filter_params - Remove beacon filter params
3671 * @vdev_id: VDEV id
3672 */
3673struct remove_beacon_filter_params {
3674 uint8_t vdev_id;
3675};
3676
3677/**
3678 * struct mgmt_params - Mgmt params
3679 * @vdev_id: vdev id
3680 * @buf_len: lenght of frame buffer
3681 * @wbuf: frame buffer
3682 */
3683struct mgmt_params {
3684 int vdev_id;
3685 uint32_t buf_len;
3686 qdf_nbuf_t wbuf;
3687};
3688
3689/**
3690 * struct addba_clearresponse_params - Addba clear response params
3691 * @vdev_id: VDEV id
3692 */
3693struct addba_clearresponse_params {
3694 uint8_t vdev_id;
3695};
3696
3697/**
3698 * struct addba_send_params - ADDBA send params
3699 * @vdev_id: vdev id
3700 * @tidno: TID
3701 * @buffersize: buffer size
3702 */
3703struct addba_send_params {
3704 uint8_t vdev_id;
3705 uint8_t tidno;
3706 uint16_t buffersize;
3707};
3708
3709/**
3710 * struct delba_send_params - DELBA send params
3711 * @vdev_id: vdev id
3712 * @tidno: TID
3713 * @initiator: initiator
3714 * @reasoncode: reason code
3715 */
3716struct delba_send_params {
3717 uint8_t vdev_id;
3718 uint8_t tidno;
3719 uint8_t initiator;
3720 uint16_t reasoncode;
3721};
3722/**
3723 * struct addba_setresponse_arams - Set ADDBA response params
3724 * @vdev_id: vdev id
3725 * @tidno: TID
3726 * @statuscode: status code in response
3727 */
3728struct addba_setresponse_params {
3729 uint8_t vdev_id;
3730 uint8_t tidno;
3731 uint16_t statuscode;
3732};
3733
3734/**
3735 * struct singleamsdu_params - Single AMSDU params
3736 * @vdev_id: vdev is
3737 * @tidno: TID
3738 */
3739struct singleamsdu_params {
3740 uint8_t vdev_id;
3741 uint8_t tidno;
3742};
3743
3744/**
3745 * struct set_qbosst_params - Set QBOOST params
3746 * @vdev_id: vdev id
3747 * @value: value
3748 */
3749struct set_qboost_params {
3750 uint8_t vdev_id;
3751 uint32_t value;
3752};
3753
3754/**
3755 * struct mu_scan_params - MU scan params
3756 * @id: id
3757 * @type: type
3758 * @duration: Duration
3759 * @lteu_tx_power: LTEU tx power
3760 */
3761struct mu_scan_params {
3762 uint8_t id;
3763 uint8_t type;
3764 uint32_t duration;
3765 uint32_t lteu_tx_power;
Sathish Kumar7e2eaed2016-11-14 17:44:29 +05303766 uint32_t rssi_thr_bssid;
3767 uint32_t rssi_thr_sta;
3768 uint32_t rssi_thr_sc;
3769 uint32_t plmn_id;
3770 uint32_t alpha_num_bssid;
Govind Singh89727882016-04-15 13:58:27 +05303771};
3772
3773/**
3774 * struct lteu_config_params - LTEU config params
3775 * @lteu_gpio_start: start MU/AP scan after GPIO toggle
3776 * @lteu_num_bins: no. of elements in the following arrays
3777 * @use_actual_nf: whether to use the actual NF obtained or a hardcoded one
3778 * @lteu_weight: weights for MU algo
3779 * @lteu_thresh: thresholds for MU algo
3780 * @lteu_gamma: gamma's for MU algo
3781 * @lteu_scan_timeout: timeout in ms to gpio toggle
3782 * @alpha_num_ssid: alpha for num active bssid calculation
3783 * @wifi_tx_power: Wifi Tx power
3784 */
3785struct lteu_config_params {
3786 uint8_t lteu_gpio_start;
3787 uint8_t lteu_num_bins;
3788 uint8_t use_actual_nf;
3789 uint32_t lteu_weight[LTEU_MAX_BINS];
3790 uint32_t lteu_thresh[LTEU_MAX_BINS];
3791 uint32_t lteu_gamma[LTEU_MAX_BINS];
3792 uint32_t lteu_scan_timeout;
3793 uint32_t alpha_num_bssid;
3794 uint32_t wifi_tx_power;
Sathish Kumar7e2eaed2016-11-14 17:44:29 +05303795 uint32_t allow_err_packets;
Govind Singh89727882016-04-15 13:58:27 +05303796};
3797
3798struct wmi_macaddr_t {
3799 /** upper 4 bytes of MAC address */
3800 uint32_t mac_addr31to0;
3801 /** lower 2 bytes of MAC address */
3802 uint32_t mac_addr47to32;
3803};
3804
3805/**
3806 * struct atf_peer_info - ATF peer info params
3807 * @peer_macaddr: peer mac addr
3808 * @percentage_peer: percentage of air time for this peer
3809 */
3810typedef struct {
3811 struct wmi_macaddr_t peer_macaddr;
3812 uint32_t percentage_peer;
3813} atf_peer_info;
3814
3815/**
Sathish Kumar50232d72016-08-09 16:50:46 +05303816 * struct bwf_peer_info_t - BWF peer info params
3817 * @peer_macaddr: peer mac addr
3818 * @throughput: Throughput
3819 * @max_airtime: Max airtime
3820 * @priority: Priority level
3821 * @reserved: Reserved array
3822 */
3823typedef struct {
3824 struct wmi_macaddr_t peer_macaddr;
3825 uint32_t throughput;
3826 uint32_t max_airtime;
3827 uint32_t priority;
3828 uint32_t reserved[4];
3829} bwf_peer_info;
3830
3831/**
3832 * struct set_bwf_params - BWF params
3833 * @num_peers: number of peers
3834 * @atf_peer_info: BWF peer info
3835 */
3836struct set_bwf_params {
3837 uint32_t num_peers;
3838 bwf_peer_info peer_info[1];
3839};
3840
3841/**
Govind Singh89727882016-04-15 13:58:27 +05303842 * struct set_atf_params - ATF params
3843 * @num_peers: number of peers
3844 * @atf_peer_info: ATF peer info
3845 */
3846struct set_atf_params {
3847 uint32_t num_peers;
3848 atf_peer_info peer_info[ATF_ACTIVED_MAX_CLIENTS];
3849};
3850
3851/**
3852 * struct atf_peer_ext_info - ATF peer ext info params
3853 * @peer_macaddr: peer mac address
3854 * @group_index: group index
3855 * @atf_index_reserved: ATF index rsvd
3856 */
3857typedef struct {
3858 struct wmi_macaddr_t peer_macaddr;
3859 uint32_t group_index;
3860 uint32_t atf_index_reserved;
3861} atf_peer_ext_info;
3862
3863/**
3864 * struct atf_peer_request_params - ATF peer req params
3865 * @num_peers: number of peers
3866 * @atf_peer_ext_info: ATF peer ext info
3867 */
3868struct atf_peer_request_params {
3869 uint32_t num_peers;
3870 atf_peer_ext_info peer_ext_info[ATF_ACTIVED_MAX_CLIENTS];
3871};
3872
3873/**
3874 * struct atf_group_info - ATF group info params
3875 * @percentage_group: Percentage AT for group
3876 * @atf_group_units_reserved: ATF group information
3877 */
3878typedef struct {
3879 uint32_t percentage_group;
3880 uint32_t atf_group_units_reserved;
3881} atf_group_info;
3882
3883/**
3884 * struct atf_grouping_params - ATF grouping params
3885 * @num_groups: number of groups
3886 * @group_inf: Group informaition
3887 */
3888struct atf_grouping_params {
3889 uint32_t num_groups;
3890 atf_group_info group_info[ATF_ACTIVED_MAX_ATFGROUPS];
3891};
3892
3893/**
3894 * struct wlan_profile_params - WLAN profile params
3895 * @param_id: param id
3896 * @profile_id: profile id
3897 * @enable: enable
3898 */
3899struct wlan_profile_params {
3900 uint32_t param_id;
3901 uint32_t profile_id;
3902 uint32_t enable;
3903};
3904
3905/* struct ht_ie_params - HT IE params
3906 * @ie_len: IE length
3907 * @ie_data: pointer to IE data
3908 */
3909struct ht_ie_params {
3910 uint32_t ie_len;
3911 uint8_t *ie_data;
3912};
3913
3914/* struct vht_ie_params - VHT IE params
3915 * @ie_len: IE length
3916 * @ie_data: pointer to IE data
3917 */
3918struct vht_ie_params {
3919 uint32_t ie_len;
3920 uint8_t *ie_data;
3921};
3922
3923/**
3924 * struct wmi_host_wmeParams - WME params
3925 * @wmep_acm: ACM paramete
3926 * @wmep_aifsn: AIFSN parameters
3927 * @wmep_logcwmin: cwmin in exponential form
3928 * @wmep_logcwmax: cwmax in exponential form
3929 * @wmep_txopLimit: txopLimit
3930 * @wmep_noackPolicy: No-Ack Policy: 0=ack, 1=no-ack
3931 */
3932struct wmi_host_wmeParams {
3933 u_int8_t wmep_acm;
3934 u_int8_t wmep_aifsn;
3935 u_int8_t wmep_logcwmin;
3936 u_int8_t wmep_logcwmax;
3937 u_int16_t wmep_txopLimit;
3938 u_int8_t wmep_noackPolicy;
3939};
3940
3941/**
3942 * struct wmm_update_params - WMM update params
3943 * @wmep_array: WME params for each AC
3944 */
3945struct wmm_update_params {
3946 struct wmi_host_wmeParams *wmep_array;
3947};
3948
3949/**
3950 * struct ant_switch_tbl_params - Antenna switch table params
3951 * @ant_ctrl_common1: ANtenna control common param 1
3952 * @ant_ctrl_common2: Antenna control commn param 2
3953 */
3954struct ant_switch_tbl_params {
3955 uint32_t ant_ctrl_common1;
3956 uint32_t ant_ctrl_common2;
3957};
3958
3959/**
3960 * struct ratepwr_table_params - Rate power table params
3961 * @ratepwr_tbl: pointer to rate power table
3962 * @ratepwr_len: rate power table len
3963 */
3964struct ratepwr_table_params {
3965 uint8_t *ratepwr_tbl;
3966 uint16_t ratepwr_len;
3967};
3968
3969/**
3970 * struct ctl_table_params - Ctl table params
3971 * @ctl_array: pointer to ctl array
3972 * @ctl_len: ctl length
3973 * @is_acfg_ctl: is acfg_ctl table
3974 */
3975struct ctl_table_params {
3976 uint8_t *ctl_array;
3977 uint16_t ctl_len;
3978 bool is_acfg_ctl;
Nandha Kishore Easwaranda8e13c2016-10-14 15:22:05 +05303979 uint32_t target_type;
3980 bool is_2g;
Govind Singh89727882016-04-15 13:58:27 +05303981};
3982
3983/**
3984 * struct mimogain_table_params - MIMO gain table params
3985 * @array_gain: pointer to array gain table
3986 * @tbl_len: table length
3987 * @multichain_gain_bypass: bypass multichain gain
3988 */
3989struct mimogain_table_params {
3990 uint8_t *array_gain;
3991 uint16_t tbl_len;
3992 bool multichain_gain_bypass;
3993};
3994
3995/**
3996 * struct ratepwr_chainmask_params - Rate power chainmask params
3997 * @ratepwr_chain_tbl: pointer to ratepwr chain table
3998 * @num_rate: number of rate in table
3999 * @pream_type: preamble type
4000 * @ops: ops
4001 */
4002struct ratepwr_chainmsk_params {
4003 uint32_t *ratepwr_chain_tbl;
4004 uint16_t num_rate;
4005 uint8_t pream_type;
4006 uint8_t ops;
4007};
4008
4009struct macaddr_params {
4010 uint8_t *macaddr;
4011};
4012
4013/**
4014 * struct acparams_params - acparams config structure
4015 * @ac: AC to configure
4016 * @use_rts: Use rts for this AC
4017 * @aggrsize_scaling: Aggregrate size scaling for the AC
4018 * @min_kbps: min kbps req
4019 */
4020struct acparams_params {
4021 uint8_t ac;
4022 uint8_t use_rts;
4023 uint8_t aggrsize_scaling;
4024 uint32_t min_kbps;
4025};
4026
4027/**
4028 * struct vap_dscp_tid_map_params - DSCP tid map params
4029 * @vdev_id: vdev id
4030 * @dscp_to_tid_map: pointer to arry of tid to dscp map table
4031 */
4032struct vap_dscp_tid_map_params {
4033 uint8_t vdev_id;
4034 uint32_t *dscp_to_tid_map;
4035};
4036
4037/**
4038 * struct proxy_ast_reserve_params - Proxy AST reserve params
4039 * @macaddr: macaddr for proxy ast entry
4040 */
4041struct proxy_ast_reserve_params {
4042 uint8_t *macaddr;
4043};
4044
4045/**
4046 * struct fips_params - FIPS params config
4047 * @key: pointer to key
4048 * @key_len: length of key
4049 * @data: pointer data buf
4050 * @data_len: lenght of sata buf
4051 * @mode: mode
4052 * @op: operation
4053 */
4054struct fips_params {
4055 uint8_t *key;
4056 uint32_t key_len;
4057 uint8_t *data;
4058 uint32_t data_len;
4059 uint32_t mode;
4060 uint32_t op;
4061};
4062
4063/**
4064 * struct mcast_group_update_param - Mcast group table update to target
4065 * @action: Addition/deletion
4066 * @wildcard: iwldcard table entry?
4067 * @mcast_ip_addr: mcast ip address to be updated
4068 * @mcast_ip_addr_bytes: mcast ip addr bytes
4069 * @ucast_mac_addr: ucast peer mac subscribed to mcast ip
4070 * @filter_mode: filter mode
4071 * @nsrcs: number of entries in source list
4072 * @srcs: source mac accpted
4073 * @mask: mask
4074 * @vap_id: vdev id
4075 * @is_action_delete: is delete
4076 * @is_filter_mode_snoop:
4077 * @is_mcast_addr_len:
4078 */
4079struct mcast_group_update_params {
4080 int action;
4081 int wildcard;
4082 uint8_t *mcast_ip_addr;
4083 int mcast_ip_addr_bytes;
4084 uint8_t *ucast_mac_addr;
4085 uint8_t filter_mode;
4086 uint8_t nsrcs;
4087 uint8_t *srcs;
4088 uint8_t *mask;
4089 uint8_t vap_id;
4090 bool is_action_delete;
4091 bool is_filter_mode_snoop;
4092 bool is_mcast_addr_len;
4093};
4094
4095/**
4096 * struct periodic_chan_stats_param - periodic channel stats req param
4097 * @stats_period: stats period update
4098 * @enable: enable/disable
4099 */
4100struct periodic_chan_stats_params {
4101 uint32_t stats_period;
4102 bool enable;
4103};
4104
4105/**
4106 * struct packet_power_info_params - packet power info params
4107 * @rate_flags: rate flags
4108 * @nss: number of spatial streams
4109 * @preamble: preamble
4110 * @hw_rate:
4111 */
4112struct packet_power_info_params {
4113 uint16_t rate_flags;
4114 uint16_t nss;
4115 uint16_t preamble;
4116 uint16_t hw_rate;
4117};
4118
4119/**
4120 * WMI_GPIO_CONFIG_CMDID
4121 */
4122enum {
4123 WMI_HOST_GPIO_PULL_NONE,
4124 WMI_HOST_GPIO_PULL_UP,
4125 WMI_HOST_GPIO_PULL_DOWN,
4126};
4127
4128/**
4129 * WMI_GPIO_INTTYPE
4130 */
4131enum {
4132 WMI_HOST_GPIO_INTTYPE_DISABLE,
4133 WMI_HOST_GPIO_INTTYPE_RISING_EDGE,
4134 WMI_HOST_GPIO_INTTYPE_FALLING_EDGE,
4135 WMI_HOST_GPIO_INTTYPE_BOTH_EDGE,
4136 WMI_HOST_GPIO_INTTYPE_LEVEL_LOW,
4137 WMI_HOST_GPIO_INTTYPE_LEVEL_HIGH
4138};
4139
4140/**
4141 * struct wmi_host_gpio_input_event - GPIO input event structure
4142 * @gpio_num: GPIO number which changed state
4143 */
4144typedef struct {
4145 uint32_t gpio_num; /* GPIO number which changed state */
4146} wmi_host_gpio_input_event;
4147
4148/**
4149 * struct gpio_config_params - GPIO config params
4150 * @gpio_num: GPIO number to config
4151 * @input: input/output
4152 * @pull_type: pull type
4153 * @intr_mode: int mode
4154 */
4155struct gpio_config_params {
4156 uint32_t gpio_num;
4157 uint32_t input;
4158 uint32_t pull_type;
4159 uint32_t intr_mode;
4160};
4161
4162/**
4163 * struct gpio_output_params - GPIO output params
4164 * @gpio_num: GPIO number to configure
4165 * @set: set/reset
4166 */
4167struct gpio_output_params {
4168 uint32_t gpio_num;
4169 uint32_t set;
4170};
4171
Sathish Kumar7e566c52016-11-10 15:30:22 +05304172/* flags bit 0: to configure wlan priority bitmap */
4173#define WMI_HOST_BTCOEX_PARAM_FLAGS_WLAN_PRIORITY_BITMAP_BIT (1<<0)
4174/* flags bit 1: to configure both period and wlan duration */
4175#define WMI_HOST_BTCOEX_PARAM_FLAGS_DUTY_CYCLE_BIT (1<<1)
4176struct btcoex_cfg_params {
4177 /* WLAN priority bitmask for different frame types */
4178 uint32_t btcoex_wlan_priority_bitmap;
4179 /* This command is used to configure different btcoex params
4180 * in different situations.The host sets the appropriate bit(s)
4181 * in btcoex_param_flags to indicate which configuration parameters
4182 * are valid within a particular BT coex config message, so that one
4183 * BT configuration parameter can be configured without affecting
4184 * other BT configuration parameters.E.g. if the host wants to
4185 * configure only btcoex_wlan_priority_bitmap it sets only
4186 * WMI_BTCOEX_PARAM_FLAGS_WLAN_PRIORITY_BITMAP_BIT in
4187 * btcoex_param_flags so that firmware will not overwrite
4188 * other params with default value passed in the command.
4189 * Host can also set multiple bits in btcoex_param_flags
4190 * to configure more than one param in single message.
4191 */
4192 uint32_t btcoex_param_flags;
4193 /* period denotes the total time in milliseconds which WLAN and BT share
4194 * configured percentage for transmission and reception.
4195 */
4196 uint32_t period;
4197 /* wlan duration is the time in milliseconds given for wlan
4198 * in above period.
4199 */
4200 uint32_t wlan_duration;
4201};
4202
4203
Govind Singh89727882016-04-15 13:58:27 +05304204#define WMI_HOST_RTT_REPORT_CFR 0
4205#define WMI_HOST_RTT_NO_REPORT_CFR 1
4206#define WMI_HOST_RTT_AGGREGATE_REPORT_NON_CFR 2
4207/**
4208 * struct rtt_meas_req_test_params
4209 * @peer: peer mac address
4210 * @req_frame_type: RTT request frame type
4211 * @req_bw: requested bandwidth
4212 * @req_preamble: Preamble
4213 * @req_num_req: num of requests
4214 * @req_report_type: report type
4215 * @num_measurements: number of measurements
4216 * @asap_mode: priority
4217 * @lci_requested: LCI requested
4218 * @loc_civ_requested:
4219 * @channel_param: channel param
4220 * @req_id: requested id
4221 */
4222struct rtt_meas_req_test_params {
4223 uint8_t peer[IEEE80211_ADDR_LEN];
4224 int req_frame_type;
4225 int req_bw;
4226 int req_preamble;
4227 int req_num_req;
4228 int req_report_type;
4229 uint32_t num_measurements;
4230 uint32_t asap_mode;
4231 uint32_t lci_requested;
4232 uint32_t loc_civ_requested;
4233 struct channel_param channel;
4234 uint8_t req_id;
4235};
4236
4237/**
4238 * struct rtt_meas_req_params - RTT measurement request params
4239 * @req_id: Request id
4240 * @vdev_id: vdev id
4241 * @sta_mac_addr: pointer to station mac address
4242 * @spoof_mac_addr: pointer to spoof mac address
4243 * @is_mode_na: 11NA
4244 * @is_mode_ac: AC
4245 * @is_bw_20: 20
4246 * @is_bw_40: 40
4247 * @is_bw_80: 80
4248 * @num_probe_rqst: number of probe request
4249 * @channel_param: channel param
4250 */
4251struct rtt_meas_req_params {
4252 uint8_t req_id;
4253 uint8_t vdev_id;
4254 uint8_t *sta_mac_addr;
4255 uint8_t *spoof_mac_addr;
4256 bool is_mode_na;
4257 bool is_mode_ac;
4258 bool is_bw_20;
4259 bool is_bw_40;
4260 bool is_bw_80;
4261 uint32_t num_probe_rqst;
4262 struct channel_param channel;
4263};
4264
4265/**
4266 * struct lci_set_params - LCI params
4267 * @lci_data: pointer to LCI data
4268 * @latitude_unc: latitude
4269 * @latitude_0_12: bits 0 to 1 of latitude
4270 * @latitude_2_33: bits 2 to 33 of latitude
4271 * @longitude_unc: longitude
4272 * @longitude_0_1: bits 0 to 1 of longitude
4273 * @longitude_2_33: bits 2 to 33 of longitude
4274 * @altitude_type: altitude type
4275 * @altitude_unc_0_3: altitude bits 0 - 3
4276 * @altitude_unc_4_5: altitude bits 4 - 5
4277 * @altitude: altitude
4278 * @datum: dataum
4279 * @reg_loc_agmt:
4280 * @reg_loc_dse:
4281 * @dep_sta:
4282 * @version: version
4283 */
4284struct lci_set_params {
4285 void *lci_data;
4286 uint8_t latitude_unc:6,
4287 latitude_0_1:2;
4288 uint32_t latitude_2_33;
4289 uint8_t longitude_unc:6,
4290 longitude_0_1:2;
4291 uint32_t longitude_2_33;
4292 uint8_t altitude_type:4,
4293 altitude_unc_0_3:4;
4294 uint32_t altitude_unc_4_5:2,
4295 altitude:30;
4296 uint8_t datum:3,
4297 reg_loc_agmt:1,
4298 reg_loc_dse:1,
4299 dep_sta:1,
4300 version:2;
Sathish Kumar38bf0d82016-10-20 14:07:21 +05304301 uint8_t *colocated_bss;
4302 int msg_len;
Govind Singh89727882016-04-15 13:58:27 +05304303};
4304
4305/**
4306 * struct lcr_set_params - LCR params
4307 * @lcr_data: pointer to lcr data
4308 */
4309struct lcr_set_params {
4310 void *lcr_data;
Sathish Kumar38bf0d82016-10-20 14:07:21 +05304311 int msg_len;
Govind Singh89727882016-04-15 13:58:27 +05304312};
4313
4314/**
4315 * struct rtt_keepalive_req_params - RTT keepalive params
4316 * @macaddr: pointer to macaddress
4317 * @req_id: Request id
4318 * @vdev_id: vdev id
4319 * @stop: start/stop
4320 */
4321struct rtt_keepalive_req_params {
4322 uint8_t *macaddr;
4323 uint8_t req_id;
4324 uint8_t vdev_id;
4325 bool stop;
4326};
4327
4328/**
Leo Chang8184e9c2016-09-28 13:43:36 -07004329 * struct rx_reorder_queue_setup_params - Reorder queue setup params
4330 * @peer_mac_addr: Peer mac address
4331 * @tid: TID
4332 * @vdev_id: vdev id
4333 * @hw_qdesc_paddr_lo: lower 32 bits of queue desc adddress
4334 * @hw_qdesc_paddr_hi: upper 32 bits of queue desc adddress
4335 * @queue_no: 16-bit number assigned by host for queue
4336 */
4337struct rx_reorder_queue_setup_params {
4338 uint8_t *peer_macaddr;
4339 uint16_t tid;
4340 uint16_t vdev_id;
4341 uint32_t hw_qdesc_paddr_lo;
4342 uint32_t hw_qdesc_paddr_hi;
4343 uint16_t queue_no;
4344};
4345
4346/**
4347 * struct rx_reorder_queue_remove_params - Reorder queue setup params
4348 * @peer_mac_addr: Peer mac address
4349 * @vdev_id: vdev id
4350 * @peer_tid_bitmap: peer tid bitmap
4351 */
4352struct rx_reorder_queue_remove_params {
4353 uint8_t *peer_macaddr;
4354 uint16_t vdev_id;
4355 uint32_t peer_tid_bitmap;
4356};
4357
4358/**
Govind Singh89727882016-04-15 13:58:27 +05304359 * struct wmi_host_stats_event - Stats event params
4360 * @stats_id: stats id of type wmi_host_stats_event
4361 * @num_pdev_stats: number of pdev stats event structures 0 or 1
4362 * @num_pdev_ext_stats: number of pdev ext stats event structures
4363 * @num_vdev_stats: number of vdev stats
4364 * @num_peer_stats: number of peer stats event structures 0 or max peers
4365 * @num_bcnflt_stats: number of beacon filter stats
4366 * @num_chan_stats: number of channel stats
4367 */
4368typedef struct {
4369 wmi_host_stats_id stats_id;
4370 uint32_t num_pdev_stats;
4371 uint32_t num_pdev_ext_stats;
4372 uint32_t num_vdev_stats;
4373 uint32_t num_peer_stats;
4374 uint32_t num_bcnflt_stats;
4375 uint32_t num_chan_stats;
4376} wmi_host_stats_event;
4377
4378/**
Govind Singh89727882016-04-15 13:58:27 +05304379 * struct wmi_host_peer_extd_stats - peer extd stats event structure
4380 * @peer_macaddr: Peer mac address
4381 * @inactive_time: inactive time in secs
4382 * @peer_chain_rssi: peer rssi
4383 * @rx_duration: RX duration
4384 * @peer_tx_bytes: TX bytes
4385 * @peer_rx_bytes: RX bytes
4386 * @last_tx_rate_code: Tx rate code of last frame
4387 * @last_tx_power: Tx power latest
4388 * @atf_tokens_allocated: atf tokens allocated
4389 * @atf_tokens_utilized: atf tokens utilized
4390 * @reserved: for future use
4391 */
4392typedef struct {
4393 wmi_host_mac_addr peer_macaddr;
4394 uint32_t inactive_time;
4395 uint32_t peer_chain_rssi;
4396 uint32_t rx_duration;
4397 uint32_t peer_tx_bytes;
4398 uint32_t peer_rx_bytes;
4399 uint32_t last_tx_rate_code;
4400 uint32_t last_tx_power;
4401 uint32_t atf_tokens_allocated;
4402 uint32_t atf_tokens_utilized;
4403 uint32_t reserved[4];
4404} wmi_host_peer_extd_stats;
4405
4406/**
4407 * struct wmi_host_pdev_ext_stats - peer ext stats structure
4408 * @rx_rssi_comb: RX rssi
4409 * @rx_rssi_chain0: RX rssi chain 0
4410 * @rx_rssi_chain1: RX rssi chain 1
4411 * @rx_rssi_chain2: RX rssi chain 2
4412 * @rx_rssi_chain3: RX rssi chain 3
4413 * @rx_mcs: RX MCS array
4414 * @tx_mcs: TX MCS array
4415 * @ack_rssi: Ack rssi
4416 */
4417typedef struct {
4418 uint32_t rx_rssi_comb;
4419 uint32_t rx_rssi_chain0;
4420 uint32_t rx_rssi_chain1;
4421 uint32_t rx_rssi_chain2;
4422 uint32_t rx_rssi_chain3;
4423 uint32_t rx_mcs[10];
4424 uint32_t tx_mcs[10];
4425 uint32_t ack_rssi;
4426} wmi_host_pdev_ext_stats;
4427
4428/**
4429 * struct wmi_host_dbg_tx_stats - Debug stats
4430 * @comp_queued: Num HTT cookies queued to dispatch list
4431 * @comp_delivered: Num HTT cookies dispatched
4432 * @msdu_enqued: Num MSDU queued to WAL
4433 * @mpdu_enqued: Num MPDU queue to WAL
4434 * @wmm_drop: Num MSDUs dropped by WMM limit
4435 * @local_enqued: Num Local frames queued
4436 * @local_freed: Num Local frames done
4437 * @hw_queued: Num queued to HW
4438 * @hw_reaped: Num PPDU reaped from HW
4439 * @underrun: Num underruns
4440 * @hw_paused: HW Paused.
4441 * @tx_abort: Num PPDUs cleaned up in TX abort
4442 * @mpdus_requed: Num MPDUs requed by SW
4443 * @tx_ko: excessive retries
4444 * @tx_xretry:
4445 * @data_rc: data hw rate code
4446 * @self_triggers: Scheduler self triggers
4447 * @sw_retry_failure: frames dropped due to excessive sw retries
4448 * @illgl_rate_phy_err: illegal rate phy errors
4449 * @pdev_cont_xretry: wal pdev continous xretry
4450 * @pdev_tx_timeout: wal pdev continous xretry
4451 * @pdev_resets: wal pdev resets
4452 * @stateless_tid_alloc_failure: frames dropped due to non-availability of
4453 * stateless TIDs
4454 * @phy_underrun: PhY/BB underrun
4455 * @txop_ovf: MPDU is more than txop limit
4456 * @seq_posted: Number of Sequences posted
4457 * @seq_failed_queueing: Number of Sequences failed queueing
4458 * @seq_completed: Number of Sequences completed
4459 * @seq_restarted: Number of Sequences restarted
4460 * @mu_seq_posted: Number of MU Sequences posted
4461 * @mpdus_sw_flush: Num MPDUs flushed by SW, HWPAUSED, SW TXABORT
4462 * (Reset,channel change)
4463 * @mpdus_hw_filter: Num MPDUs filtered by HW, all filter condition
4464 * (TTL expired)
4465 * @mpdus_truncated: Num MPDUs truncated by PDG (TXOP, TBTT,
4466 * PPDU_duration based on rate, dyn_bw)
4467 * @mpdus_ack_failed: Num MPDUs that was tried but didn't receive ACK or BA
4468 * @mpdus_expired: Num MPDUs that was dropped du to expiry.
4469 * @mc_dropr: Num mc drops
4470 */
4471typedef struct {
4472 int32_t comp_queued;
4473 int32_t comp_delivered;
4474 int32_t msdu_enqued;
4475 int32_t mpdu_enqued;
4476 int32_t wmm_drop;
4477 int32_t local_enqued;
4478 int32_t local_freed;
4479 int32_t hw_queued;
4480 int32_t hw_reaped;
4481 int32_t underrun;
4482 uint32_t hw_paused;
4483 int32_t tx_abort;
4484 int32_t mpdus_requed;
4485 uint32_t tx_ko;
4486 uint32_t tx_xretry;
4487 uint32_t data_rc;
4488 uint32_t self_triggers;
4489 uint32_t sw_retry_failure;
4490 uint32_t illgl_rate_phy_err;
4491 uint32_t pdev_cont_xretry;
4492 uint32_t pdev_tx_timeout;
4493 uint32_t pdev_resets;
4494 uint32_t stateless_tid_alloc_failure;
4495 uint32_t phy_underrun;
4496 uint32_t txop_ovf;
4497 uint32_t seq_posted;
4498 uint32_t seq_failed_queueing;
4499 uint32_t seq_completed;
4500 uint32_t seq_restarted;
4501 uint32_t mu_seq_posted;
4502 int32_t mpdus_sw_flush;
4503 int32_t mpdus_hw_filter;
4504 int32_t mpdus_truncated;
4505 int32_t mpdus_ack_failed;
4506 int32_t mpdus_expired;
4507 uint32_t mc_drop;
4508} wmi_host_dbg_tx_stats;
4509
4510/**
4511 * struct wmi_host_dbg_rx_stats - RX Debug stats
4512 * @mid_ppdu_route_change: Cnts any change in ring routing mid-ppdu
4513 * @status_rcvd: Total number of statuses processed
4514 * @r0_frags: Extra frags on rings 0
4515 * @r1_frags: Extra frags on rings 1
4516 * @r2_frags: Extra frags on rings 2
4517 * @r3_frags: Extra frags on rings 3
4518 * @htt_msdus: MSDUs delivered to HTT
4519 * @htt_mpdus: MPDUs delivered to HTT
4520 * @loc_msdus: MSDUs delivered to local stack
4521 * @loc_mpdus: MPDUS delivered to local stack
4522 * @oversize_amsdu: AMSDUs that have more MSDUs than the status ring size
4523 * @phy_errs: Number of PHY errors
4524 * @phy_err_drop: Number of PHY errors drops
4525 * @mpdu_errs: Number of mpdu errors - FCS, MIC, ENC etc.
4526 * @pdev_rx_timeout: Number of rx inactivity timeouts
4527 * @rx_ovfl_errs: Number of rx overflow errors.
4528 */
4529typedef struct {
4530 int32_t mid_ppdu_route_change;
4531 int32_t status_rcvd;
4532 int32_t r0_frags;
4533 int32_t r1_frags;
4534 int32_t r2_frags;
4535 int32_t r3_frags;
4536 int32_t htt_msdus;
4537 int32_t htt_mpdus;
4538 int32_t loc_msdus;
4539 int32_t loc_mpdus;
4540 int32_t oversize_amsdu;
4541 int32_t phy_errs;
4542 int32_t phy_err_drop;
4543 int32_t mpdu_errs;
4544 uint32_t pdev_rx_timeout;
4545 int32_t rx_ovfl_errs;
4546} wmi_host_dbg_rx_stats;
4547
4548/** struct wmi_host_dbg_mem_stats - memory stats
4549 * @iram_free_size: IRAM free size on target
4550 * @dram_free_size: DRAM free size on target
4551 * @sram_free_size: SRAM free size on target
4552 */
4553typedef struct {
4554 uint32_t iram_free_size;
4555 uint32_t dram_free_size;
4556 /* Only Non-TLV */
4557 uint32_t sram_free_size;
4558} wmi_host_dbg_mem_stats;
4559
4560typedef struct {
4561 /* Only TLV */
4562 int32_t dummy;/* REMOVE THIS ONCE REAL PEER STAT COUNTERS ARE ADDED */
4563} wmi_host_dbg_peer_stats;
4564
4565/**
4566 * struct wmi_host_dbg_stats - host debug stats
4567 * @tx: TX stats of type wmi_host_dbg_tx_stats
4568 * @rx: RX stats of type wmi_host_dbg_rx_stats
4569 * @mem: Memory stats of type wmi_host_dbg_mem_stats
4570 * @peer: peer stats of type wmi_host_dbg_peer_stats
4571 */
4572typedef struct {
4573 wmi_host_dbg_tx_stats tx;
4574 wmi_host_dbg_rx_stats rx;
4575 wmi_host_dbg_mem_stats mem;
4576 wmi_host_dbg_peer_stats peer;
4577} wmi_host_dbg_stats;
4578
4579/**
4580 * struct wmi_host_pdev_stats - PDEV stats
4581 * @chan_nf: Channel noise floor
4582 * @tx_frame_count: TX frame count
4583 * @rx_frame_count: RX frame count
4584 * @rx_clear_count: rx clear count
4585 * @cycle_count: cycle count
4586 * @phy_err_count: Phy error count
4587 * @chan_tx_pwr: Channel Tx Power
4588 * @pdev_stats: WAL dbg stats
4589 * @ackRcvBad:
4590 * @rtsBad:
4591 * @rtsGood:
4592 * @fcsBad:
4593 * @noBeacons:
4594 * @mib_int_count:
4595 */
4596typedef struct {
4597 int32_t chan_nf;
4598 uint32_t tx_frame_count;
4599 uint32_t rx_frame_count;
4600 uint32_t rx_clear_count;
4601 uint32_t cycle_count;
4602 uint32_t phy_err_count;
4603 uint32_t chan_tx_pwr;
4604 wmi_host_dbg_stats pdev_stats;
4605 uint32_t ackRcvBad;
4606 uint32_t rtsBad;
4607 uint32_t rtsGood;
4608 uint32_t fcsBad;
4609 uint32_t noBeacons;
4610 uint32_t mib_int_count;
4611} wmi_host_pdev_stats;
4612
4613/**
4614 * struct wmi_host_snr_info - WMI host Signal to noise ration info
4615 * @bcn_snr: beacon SNR
4616 * @dat_snr: Data frames SNR
4617 */
4618typedef struct {
4619 int32_t bcn_snr;
4620 int32_t dat_snr;
4621} wmi_host_snr_info;
4622
4623#define WMI_HOST_MAX_TX_RATE_VALUES 10 /*Max Tx Rates */
4624#define WMI_HOST_MAX_RSSI_VALUES 10 /*Max Rssi values */
4625
4626/* The WLAN_MAX_AC macro cannot be changed without breaking
4627 * * WMI compatibility.
4628 * * The maximum value of access category
4629 * */
4630#define WMI_HOST_WLAN_MAX_AC 4
4631
4632/**
4633 * struct wmi_host_vdev_stats - vdev stats structure
4634 * @vdev_id: unique id identifying the VDEV, generated by the caller
4635 * Rest all Only TLV
4636 * @vdev_snr: wmi_host_snr_info
4637 * @tx_frm_cnt: Total number of packets(per AC) that were successfully
4638 * transmitted (with and without retries,
4639 * including multi-cast, broadcast)
4640 * @rx_frm_cnt: Total number of packets that were successfully received
4641 * (after appropriate filter rules including multi-cast, broadcast)
4642 * @multiple_retry_cnt: The number of MSDU packets and MMPDU frames per AC
4643 * that the 802.11 station successfully transmitted after
4644 * more than one retransmission attempt
4645 * @fail_cnt: Total number packets(per AC) failed to transmit
4646 * @rts_fail_cnt: Total number of RTS/CTS sequence failures for transmission
4647 * of a packet
4648 * @rts_succ_cnt: Total number of RTS/CTS sequence success for transmission
4649 * of a packet
4650 * @rx_err_cnt: The receive error count. HAL will provide the
4651 * RxP FCS error global
4652 * @rx_discard_cnt: The sum of the receive error count and
4653 * dropped-receive-buffer error count (FCS error)
4654 * @ack_fail_cnt: Total number packets failed transmit because of no
4655 * ACK from the remote entity
4656 * @tx_rate_history:History of last ten transmit rate, in units of 500 kbit/sec
4657 * @bcn_rssi_history: History of last ten Beacon rssi of the connected Bss
4658 */
4659typedef struct {
4660 uint32_t vdev_id;
4661 /* Rest all Only TLV */
4662 wmi_host_snr_info vdev_snr;
4663 uint32_t tx_frm_cnt[WMI_HOST_WLAN_MAX_AC];
4664 uint32_t rx_frm_cnt;
4665 uint32_t multiple_retry_cnt[WMI_HOST_WLAN_MAX_AC];
4666 uint32_t fail_cnt[WMI_HOST_WLAN_MAX_AC];
4667 uint32_t rts_fail_cnt;
4668 uint32_t rts_succ_cnt;
4669 uint32_t rx_err_cnt;
4670 uint32_t rx_discard_cnt;
4671 uint32_t ack_fail_cnt;
4672 uint32_t tx_rate_history[WMI_HOST_MAX_TX_RATE_VALUES];
4673 uint32_t bcn_rssi_history[WMI_HOST_MAX_RSSI_VALUES];
4674} wmi_host_vdev_stats;
4675
4676/**
4677 * struct wmi_host_vdev_extd_stats - VDEV extended stats
4678 * @vdev_id: unique id identifying the VDEV, generated by the caller
4679 * @ppdu_aggr_cnt: No of Aggrs Queued to HW
4680 * @ppdu_noack: No of PPDU's not Acked includes both aggr and nonaggr's
4681 * @mpdu_queued: No of MPDU/Subframes's queued to HW in Aggregates
4682 * @ppdu_nonaggr_cnt: No of NonAggr/MPDU/Subframes's queued to HW
4683 * in Legacy NonAggregates
4684 * @mpdu_sw_requed: No of MPDU/Subframes's SW requeued includes
4685 * both Aggr and NonAggr
4686 * @mpdu_suc_retry: No of MPDU/Subframes's transmitted Successfully
4687 * after Single/mul HW retry
4688 * @mpdu_suc_multitry: No of MPDU/Subframes's transmitted Success
4689 * after Multiple HW retry
4690 * @mpdu_fail_retry: No of MPDU/Subframes's failed transmission
4691 * after Multiple HW retry
4692 * @reserved[13]: for future extensions set to 0x0
4693 */
4694typedef struct {
4695 uint32_t vdev_id;
4696 uint32_t ppdu_aggr_cnt;
4697 uint32_t ppdu_noack;
4698 uint32_t mpdu_queued;
4699 uint32_t ppdu_nonaggr_cnt;
4700 uint32_t mpdu_sw_requed;
4701 uint32_t mpdu_suc_retry;
4702 uint32_t mpdu_suc_multitry;
4703 uint32_t mpdu_fail_retry;
4704 uint32_t reserved[13];
4705} wmi_host_vdev_extd_stats;
4706
4707/**
4708 * struct wmi_host_peer_stats - peer stats
4709 * @peer_macaddr: peer MAC address
4710 * @peer_rssi: rssi
4711 * @peer_rssi_seq_num: rssi sequence number
4712 * @peer_tx_rate: last tx data rate used for peer
4713 * @peer_rx_rate: last rx data rate used for peer
4714 * @currentper: Current PER
4715 * @retries: Retries happend during transmission
4716 * @txratecount: Maximum Aggregation Size
4717 * @max4msframelen: Max4msframelen of tx rates used
4718 * @totalsubframes: Total no of subframes
4719 * @txbytes: No of bytes transmitted to the client
4720 * @nobuffs[4]: Packet Loss due to buffer overflows
4721 * @excretries[4]: Packet Loss due to excessive retries
4722 * @peer_rssi_changed: how many times peer's RSSI changed by a
4723 * non-negligible amount
4724 */
4725typedef struct {
4726 wmi_host_mac_addr peer_macaddr;
4727 uint32_t peer_rssi;
4728 uint32_t peer_rssi_seq_num;
4729 uint32_t peer_tx_rate;
4730 uint32_t peer_rx_rate;
4731 uint32_t currentper;
4732 uint32_t retries;
4733 uint32_t txratecount;
4734 uint32_t max4msframelen;
4735 uint32_t totalsubframes;
4736 uint32_t txbytes;
4737 uint32_t nobuffs[4];
4738 uint32_t excretries[4];
4739 uint32_t peer_rssi_changed;
4740} wmi_host_peer_stats;
4741
4742typedef struct {
4743 uint32_t dummy;
4744} wmi_host_bcnflt_stats;
4745
4746/**
4747 * struct wmi_host_chan_stats - WMI chan stats
4748 * @chan_mhz: Primary channel freq of the channel for which stats are sent
4749 * @sampling_period_us: Time spent on the channel
4750 * @rx_clear_count: Aggregate duration over a sampling period for
4751 * which channel activity was observed
4752 * @tx_duration_us: Accumalation of the TX PPDU duration over a sampling period
4753 * @rx_duration_us: Accumalation of the RX PPDU duration over a sampling period
4754 */
4755typedef struct {
4756 uint32_t chan_mhz;
4757 uint32_t sampling_period_us;
4758 uint32_t rx_clear_count;
4759 uint32_t tx_duration_us;
4760 uint32_t rx_duration_us;
4761} wmi_host_chan_stats;
4762
4763#define WMI_EVENT_ID_INVALID 0
4764/**
4765 * Host based ENUM IDs for events to abstract target enums for event_id
4766 */
4767typedef enum {
4768 wmi_service_ready_event_id = 0,
4769 wmi_ready_event_id,
4770 wmi_dbg_msg_event_id,
4771 wmi_scan_event_id,
4772 wmi_echo_event_id,
4773 wmi_update_stats_event_id,
4774 wmi_inst_rssi_stats_event_id,
4775 wmi_vdev_start_resp_event_id,
4776 wmi_vdev_standby_req_event_id,
4777 wmi_vdev_resume_req_event_id,
4778 wmi_vdev_stopped_event_id,
4779 wmi_peer_sta_kickout_event_id,
4780 wmi_host_swba_event_id,
4781 wmi_tbttoffset_update_event_id,
4782 wmi_mgmt_rx_event_id,
4783 wmi_chan_info_event_id,
4784 wmi_phyerr_event_id,
4785 wmi_roam_event_id,
4786 wmi_profile_match,
4787 wmi_debug_print_event_id,
4788 wmi_pdev_qvit_event_id,
4789 wmi_wlan_profile_data_event_id,
4790 wmi_rtt_meas_report_event_id,
4791 wmi_tsf_meas_report_event_id,
4792 wmi_rtt_error_report_event_id,
4793 wmi_rtt_keepalive_event_id,
4794 wmi_oem_cap_event_id,
4795 wmi_oem_meas_report_event_id,
4796 wmi_oem_report_event_id,
4797 wmi_nan_event_id,
4798 wmi_wow_wakeup_host_event_id,
4799 wmi_gtk_offload_status_event_id,
4800 wmi_gtk_rekey_fail_event_id,
4801 wmi_dcs_interference_event_id,
4802 wmi_pdev_tpc_config_event_id,
4803 wmi_csa_handling_event_id,
4804 wmi_gpio_input_event_id,
4805 wmi_peer_ratecode_list_event_id,
4806 wmi_generic_buffer_event_id,
4807 wmi_mcast_buf_release_event_id,
4808 wmi_mcast_list_ageout_event_id,
4809 wmi_vdev_get_keepalive_event_id,
4810 wmi_wds_peer_event_id,
4811 wmi_peer_sta_ps_statechg_event_id,
4812 wmi_pdev_fips_event_id,
4813 wmi_tt_stats_event_id,
4814 wmi_pdev_channel_hopping_event_id,
4815 wmi_pdev_ani_cck_level_event_id,
4816 wmi_pdev_ani_ofdm_level_event_id,
4817 wmi_pdev_reserve_ast_entry_event_id,
4818 wmi_pdev_nfcal_power_event_id,
4819 wmi_pdev_tpc_event_id,
4820 wmi_pdev_get_ast_info_event_id,
4821 wmi_pdev_temperature_event_id,
4822 wmi_pdev_nfcal_power_all_channels_event_id,
4823 wmi_pdev_bss_chan_info_event_id,
4824 wmi_mu_report_event_id,
4825 wmi_pdev_utf_event_id,
4826 wmi_pdev_dump_event_id,
4827 wmi_tx_pause_event_id,
4828 wmi_dfs_radar_event_id,
4829 wmi_pdev_l1ss_track_event_id,
4830 wmi_service_ready_ext_event_id,
4831 wmi_vdev_install_key_complete_event_id,
4832 wmi_vdev_mcc_bcn_intvl_change_req_event_id,
4833 wmi_vdev_tsf_report_event_id,
4834 wmi_peer_info_event_id,
4835 wmi_peer_tx_fail_cnt_thr_event_id,
4836 wmi_peer_estimated_linkspeed_event_id,
4837 wmi_peer_state_event_id,
4838 wmi_offload_bcn_tx_status_event_id,
4839 wmi_offload_prob_resp_tx_status_event_id,
4840 wmi_mgmt_tx_completion_event_id,
4841 wmi_tx_delba_complete_event_id,
4842 wmi_tx_addba_complete_event_id,
4843 wmi_ba_rsp_ssn_event_id,
4844 wmi_aggr_state_trig_event_id,
4845 wmi_roam_synch_event_id,
4846 wmi_p2p_disc_event_id,
4847 wmi_p2p_noa_event_id,
4848 wmi_pdev_resume_event_id,
4849 wmi_do_wow_disable_ack_event_id,
4850 wmi_wow_initial_wakeup_event_id,
4851 wmi_stats_ext_event_id,
4852 wmi_iface_link_stats_event_id,
4853 wmi_peer_link_stats_event_id,
4854 wmi_radio_link_stats_link,
4855 wmi_update_fw_mem_dump_event_id,
4856 wmi_diag_event_id_log_supported_event_id,
4857 wmi_nlo_match_event_id,
4858 wmi_nlo_scan_complete_event_id,
4859 wmi_apfind_event_id,
4860 wmi_passpoint_match_event_id,
4861 wmi_chatter_pc_query_event_id,
4862 wmi_pdev_ftm_intg_event_id,
4863 wmi_wlan_freq_avoid_event_id,
4864 wmi_thermal_mgmt_event_id,
4865 wmi_diag_container_event_id,
4866 wmi_host_auto_shutdown_event_id,
4867 wmi_update_whal_mib_stats_event_id,
4868 wmi_update_vdev_rate_stats_event_id,
4869 wmi_diag_event_id,
4870 wmi_ocb_set_sched_event_id,
4871 wmi_dbg_mesg_flush_complete_event_id,
4872 wmi_rssi_breach_event_id,
4873 wmi_uploadh_event_id,
4874 wmi_captureh_event_id,
4875 wmi_rfkill_state_change_event_id,
4876 wmi_tdls_peer_event_id,
4877 wmi_batch_scan_enabled_event_id,
4878 wmi_batch_scan_result_event_id,
4879 wmi_lpi_result_event_id,
4880 wmi_lpi_status_event_id,
4881 wmi_lpi_handoff_event_id,
4882 wmi_extscan_start_stop_event_id,
4883 wmi_extscan_operation_event_id,
4884 wmi_extscan_table_usage_event_id,
4885 wmi_extscan_cached_results_event_id,
4886 wmi_extscan_wlan_change_results_event_id,
4887 wmi_extscan_hotlist_match_event_id,
4888 wmi_extscan_capabilities_event_id,
4889 wmi_extscan_hotlist_ssid_match_event_id,
4890 wmi_mdns_stats_event_id,
4891 wmi_sap_ofl_add_sta_event_id,
4892 wmi_sap_ofl_del_sta_event_id,
4893 wmi_ocb_set_config_resp_event_id,
4894 wmi_ocb_get_tsf_timer_resp_event_id,
4895 wmi_dcc_get_stats_resp_event_id,
4896 wmi_dcc_update_ndl_resp_event_id,
4897 wmi_dcc_stats_event_id,
4898 wmi_soc_set_hw_mode_resp_event_id,
4899 wmi_soc_hw_mode_transition_event_id,
4900 wmi_soc_set_dual_mac_config_resp_event_id,
4901 wmi_tx_data_traffic_ctrl_event_id,
Sathish Kumar7e2eaed2016-11-14 17:44:29 +05304902 wmi_peer_tx_mu_txmit_count_event_id,
4903 wmi_peer_gid_userpos_list_event_id,
4904 wmi_pdev_check_cal_version_event_id,
4905 wmi_atf_peer_stats_event_id,
Govind Singh89727882016-04-15 13:58:27 +05304906
4907 wmi_events_max,
4908} wmi_conv_event_id;
4909
4910#define WMI_UNAVAILABLE_PARAM 0
4911/**
4912 * Host based ENUM IDs for PDEV params to abstract target enums
4913 */
4914typedef enum {
4915 wmi_pdev_param_tx_chain_mask = 0,
4916 wmi_pdev_param_rx_chain_mask,
4917 wmi_pdev_param_txpower_limit2g,
4918 wmi_pdev_param_txpower_limit5g,
4919 wmi_pdev_param_txpower_scale,
4920 wmi_pdev_param_beacon_gen_mode,
4921 wmi_pdev_param_beacon_tx_mode,
4922 wmi_pdev_param_resmgr_offchan_mode,
4923 wmi_pdev_param_protection_mode,
4924 wmi_pdev_param_dynamic_bw,
4925 wmi_pdev_param_non_agg_sw_retry_th,
4926 wmi_pdev_param_agg_sw_retry_th,
4927 wmi_pdev_param_sta_kickout_th,
4928 wmi_pdev_param_ac_aggrsize_scaling,
4929 wmi_pdev_param_ltr_enable,
4930 wmi_pdev_param_ltr_ac_latency_be,
4931 wmi_pdev_param_ltr_ac_latency_bk,
4932 wmi_pdev_param_ltr_ac_latency_vi,
4933 wmi_pdev_param_ltr_ac_latency_vo,
4934 wmi_pdev_param_ltr_ac_latency_timeout,
4935 wmi_pdev_param_ltr_sleep_override,
4936 wmi_pdev_param_ltr_rx_override,
4937 wmi_pdev_param_ltr_tx_activity_timeout,
4938 wmi_pdev_param_l1ss_enable,
4939 wmi_pdev_param_dsleep_enable,
4940 wmi_pdev_param_pcielp_txbuf_flush,
4941 wmi_pdev_param_pcielp_txbuf_watermark,
4942 wmi_pdev_param_pcielp_txbuf_tmo_en,
4943 wmi_pdev_param_pcielp_txbuf_tmo_value,
4944 wmi_pdev_param_pdev_stats_update_period,
4945 wmi_pdev_param_vdev_stats_update_period,
4946 wmi_pdev_param_peer_stats_update_period,
4947 wmi_pdev_param_bcnflt_stats_update_period,
4948 wmi_pdev_param_pmf_qos,
4949 wmi_pdev_param_arp_ac_override,
4950 wmi_pdev_param_dcs,
4951 wmi_pdev_param_ani_enable,
4952 wmi_pdev_param_ani_poll_period,
4953 wmi_pdev_param_ani_listen_period,
4954 wmi_pdev_param_ani_ofdm_level,
4955 wmi_pdev_param_ani_cck_level,
4956 wmi_pdev_param_dyntxchain,
4957 wmi_pdev_param_proxy_sta,
4958 wmi_pdev_param_idle_ps_config,
4959 wmi_pdev_param_power_gating_sleep,
4960 wmi_pdev_param_aggr_burst,
4961 wmi_pdev_param_rx_decap_mode,
4962 wmi_pdev_param_fast_channel_reset,
4963 wmi_pdev_param_burst_dur,
4964 wmi_pdev_param_burst_enable,
4965 wmi_pdev_param_smart_antenna_default_antenna,
4966 wmi_pdev_param_igmpmld_override,
4967 wmi_pdev_param_igmpmld_tid,
4968 wmi_pdev_param_antenna_gain,
4969 wmi_pdev_param_rx_filter,
4970 wmi_pdev_set_mcast_to_ucast_tid,
4971 wmi_pdev_param_proxy_sta_mode,
4972 wmi_pdev_param_set_mcast2ucast_mode,
4973 wmi_pdev_param_set_mcast2ucast_buffer,
4974 wmi_pdev_param_remove_mcast2ucast_buffer,
4975 wmi_pdev_peer_sta_ps_statechg_enable,
4976 wmi_pdev_param_igmpmld_ac_override,
4977 wmi_pdev_param_block_interbss,
4978 wmi_pdev_param_set_disable_reset_cmdid,
4979 wmi_pdev_param_set_msdu_ttl_cmdid,
4980 wmi_pdev_param_set_ppdu_duration_cmdid,
4981 wmi_pdev_param_txbf_sound_period_cmdid,
4982 wmi_pdev_param_set_promisc_mode_cmdid,
4983 wmi_pdev_param_set_burst_mode_cmdid,
4984 wmi_pdev_param_en_stats,
4985 wmi_pdev_param_mu_group_policy,
4986 wmi_pdev_param_noise_detection,
4987 wmi_pdev_param_noise_threshold,
4988 wmi_pdev_param_dpd_enable,
4989 wmi_pdev_param_set_mcast_bcast_echo,
4990 wmi_pdev_param_atf_strict_sch,
4991 wmi_pdev_param_atf_sched_duration,
4992 wmi_pdev_param_ant_plzn,
4993 wmi_pdev_param_mgmt_retry_limit,
4994 wmi_pdev_param_sensitivity_level,
4995 wmi_pdev_param_signed_txpower_2g,
4996 wmi_pdev_param_signed_txpower_5g,
4997 wmi_pdev_param_enable_per_tid_amsdu,
4998 wmi_pdev_param_enable_per_tid_ampdu,
4999 wmi_pdev_param_cca_threshold,
5000 wmi_pdev_param_rts_fixed_rate,
5001 wmi_pdev_param_cal_period,
5002 wmi_pdev_param_pdev_reset,
5003 wmi_pdev_param_wapi_mbssid_offset,
5004 wmi_pdev_param_arp_srcaddr,
5005 wmi_pdev_param_arp_dstaddr,
5006 wmi_pdev_param_txpower_decr_db,
5007 wmi_pdev_param_rx_batchmode,
5008 wmi_pdev_param_packet_aggr_delay,
5009 wmi_pdev_param_atf_obss_noise_sch,
5010 wmi_pdev_param_atf_obss_noise_scaling_factor,
5011 wmi_pdev_param_cust_txpower_scale,
5012 wmi_pdev_param_atf_dynamic_enable,
5013 wmi_pdev_param_atf_ssid_group_policy,
5014 wmi_pdev_param_rfkill_enable,
5015 wmi_pdev_param_hw_rfkill_config,
5016 wmi_pdev_param_low_power_rf_enable,
5017 wmi_pdev_param_l1ss_track,
5018 wmi_pdev_param_hyst_en,
5019 wmi_pdev_param_power_collapse_enable,
5020 wmi_pdev_param_led_sys_state,
5021 wmi_pdev_param_led_enable,
5022 wmi_pdev_param_audio_over_wlan_latency,
5023 wmi_pdev_param_audio_over_wlan_enable,
5024 wmi_pdev_param_whal_mib_stats_update_enable,
5025 wmi_pdev_param_vdev_rate_stats_update_period,
5026 wmi_pdev_param_cts_cbw,
5027 wmi_pdev_param_wnts_config,
5028 wmi_pdev_param_adaptive_early_rx_enable,
5029 wmi_pdev_param_adaptive_early_rx_min_sleep_slop,
5030 wmi_pdev_param_adaptive_early_rx_inc_dec_step,
5031 wmi_pdev_param_early_rx_fix_sleep_slop,
5032 wmi_pdev_param_bmiss_based_adaptive_bto_enable,
5033 wmi_pdev_param_bmiss_bto_min_bcn_timeout,
5034 wmi_pdev_param_bmiss_bto_inc_dec_step,
5035 wmi_pdev_param_bto_fix_bcn_timeout,
5036 wmi_pdev_param_ce_based_adaptive_bto_enable,
5037 wmi_pdev_param_ce_bto_combo_ce_value,
5038 wmi_pdev_param_tx_chain_mask_2g,
5039 wmi_pdev_param_rx_chain_mask_2g,
5040 wmi_pdev_param_tx_chain_mask_5g,
5041 wmi_pdev_param_rx_chain_mask_5g,
5042 wmi_pdev_param_tx_chain_mask_cck,
5043 wmi_pdev_param_tx_chain_mask_1ss,
Sathish Kumar7e2eaed2016-11-14 17:44:29 +05305044 wmi_pdev_param_enable_btcoex,
5045 wmi_pdev_param_atf_peer_stats,
Govind Singh89727882016-04-15 13:58:27 +05305046
5047 wmi_pdev_param_max,
5048} wmi_conv_pdev_params_id;
5049
5050
5051/**
5052 * Host based ENUM IDs for VDEV params to abstract target enums
5053 */
5054typedef enum {
5055 wmi_vdev_param_rts_threshold = 0,
5056 wmi_vdev_param_fragmentation_threshold,
5057 wmi_vdev_param_beacon_interval,
5058 wmi_vdev_param_listen_interval,
5059 wmi_vdev_param_multicast_rate,
5060 wmi_vdev_param_mgmt_tx_rate,
5061 wmi_vdev_param_slot_time,
5062 wmi_vdev_param_preamble,
5063 wmi_vdev_param_swba_time,
5064 wmi_vdev_stats_update_period,
5065 wmi_vdev_pwrsave_ageout_time,
5066 wmi_vdev_host_swba_interval,
5067 wmi_vdev_param_dtim_period,
5068 wmi_vdev_oc_scheduler_air_time_limit,
5069 wmi_vdev_param_wds,
5070 wmi_vdev_param_atim_window,
5071 wmi_vdev_param_bmiss_count_max,
5072 wmi_vdev_param_bmiss_first_bcnt,
5073 wmi_vdev_param_bmiss_final_bcnt,
5074 wmi_vdev_param_feature_wmm,
5075 wmi_vdev_param_chwidth,
5076 wmi_vdev_param_chextoffset,
5077 wmi_vdev_param_disable_htprotection,
5078 wmi_vdev_param_sta_quickkickout,
5079 wmi_vdev_param_mgmt_rate,
5080 wmi_vdev_param_protection_mode,
5081 wmi_vdev_param_fixed_rate,
5082 wmi_vdev_param_sgi,
5083 wmi_vdev_param_ldpc,
5084 wmi_vdev_param_tx_stbc,
5085 wmi_vdev_param_rx_stbc,
5086 wmi_vdev_param_intra_bss_fwd,
5087 wmi_vdev_param_def_keyid,
5088 wmi_vdev_param_nss,
5089 wmi_vdev_param_bcast_data_rate,
5090 wmi_vdev_param_mcast_data_rate,
5091 wmi_vdev_param_mcast_indicate,
5092 wmi_vdev_param_dhcp_indicate,
5093 wmi_vdev_param_unknown_dest_indicate,
5094 wmi_vdev_param_ap_keepalive_min_idle_inactive_time_secs,
5095 wmi_vdev_param_ap_keepalive_max_idle_inactive_time_secs,
5096 wmi_vdev_param_ap_keepalive_max_unresponsive_time_secs,
5097 wmi_vdev_param_ap_enable_nawds,
5098 wmi_vdev_param_mcast2ucast_set,
5099 wmi_vdev_param_enable_rtscts,
5100 wmi_vdev_param_rc_num_retries,
5101 wmi_vdev_param_txbf,
5102 wmi_vdev_param_packet_powersave,
5103 wmi_vdev_param_drop_unencry,
5104 wmi_vdev_param_tx_encap_type,
5105 wmi_vdev_param_ap_detect_out_of_sync_sleeping_sta_time_secs,
5106 wmi_vdev_param_cabq_maxdur,
5107 wmi_vdev_param_mfptest_set,
5108 wmi_vdev_param_rts_fixed_rate,
5109 wmi_vdev_param_vht_sgimask,
5110 wmi_vdev_param_vht80_ratemask,
5111 wmi_vdev_param_early_rx_adjust_enable,
5112 wmi_vdev_param_early_rx_tgt_bmiss_num,
5113 wmi_vdev_param_early_rx_bmiss_sample_cycle,
5114 wmi_vdev_param_early_rx_slop_step,
5115 wmi_vdev_param_early_rx_init_slop,
5116 wmi_vdev_param_early_rx_adjust_pause,
5117 wmi_vdev_param_proxy_sta,
5118 wmi_vdev_param_meru_vc,
5119 wmi_vdev_param_rx_decap_type,
5120 wmi_vdev_param_bw_nss_ratemask,
5121 wmi_vdev_param_sensor_ap,
5122 wmi_vdev_param_beacon_rate,
5123 wmi_vdev_param_dtim_enable_cts,
5124 wmi_vdev_param_sta_kickout,
5125 wmi_vdev_param_tx_pwrlimit,
5126 wmi_vdev_param_snr_num_for_cal,
5127 wmi_vdev_param_roam_fw_offload,
5128 wmi_vdev_param_enable_rmc,
5129 wmi_vdev_param_ibss_max_bcn_lost_ms,
5130 wmi_vdev_param_max_rate,
5131 wmi_vdev_param_early_rx_drift_sample,
5132 wmi_vdev_param_set_ibss_tx_fail_cnt_thr,
5133 wmi_vdev_param_ebt_resync_timeout,
5134 wmi_vdev_param_aggr_trig_event_enable,
5135 wmi_vdev_param_is_ibss_power_save_allowed,
5136 wmi_vdev_param_is_power_collapse_allowed,
5137 wmi_vdev_param_is_awake_on_txrx_enabled,
5138 wmi_vdev_param_inactivity_cnt,
5139 wmi_vdev_param_txsp_end_inactivity_time_ms,
5140 wmi_vdev_param_dtim_policy,
5141 wmi_vdev_param_ibss_ps_warmup_time_secs,
5142 wmi_vdev_param_ibss_ps_1rx_chain_in_atim_window_enable,
5143 wmi_vdev_param_rx_leak_window,
5144 wmi_vdev_param_stats_avg_factor,
5145 wmi_vdev_param_disconnect_th,
5146 wmi_vdev_param_rtscts_rate,
5147 wmi_vdev_param_mcc_rtscts_protection_enable,
5148 wmi_vdev_param_mcc_broadcast_probe_enable,
Himanshu Agarwal56c292f2016-07-19 15:41:51 +05305149 wmi_vdev_param_capabilities,
Sathish Kumar7e2eaed2016-11-14 17:44:29 +05305150 wmi_vdev_param_mgmt_tx_power,
5151 wmi_vdev_param_atf_ssid_sched_policy,
5152 wmi_vdev_param_disable_dyn_bw_rts,
Govind Singh89727882016-04-15 13:58:27 +05305153
5154 wmi_vdev_param_max,
5155} wmi_conv_vdev_param_id;
5156
5157/**
5158 * Host based ENUM IDs for service bits to abstract target enums
5159 */
5160typedef enum {
5161 wmi_service_beacon_offload = 0,
5162 wmi_service_scan_offload,
5163 wmi_service_roam_offload,
5164 wmi_service_bcn_miss_offload,
5165 wmi_service_sta_pwrsave,
5166 wmi_service_sta_advanced_pwrsave,
5167 wmi_service_ap_uapsd,
5168 wmi_service_ap_dfs,
5169 wmi_service_11ac,
5170 wmi_service_blockack,
5171 wmi_service_phyerr,
5172 wmi_service_bcn_filter,
5173 wmi_service_rtt,
5174 wmi_service_ratectrl,
5175 wmi_service_wow,
5176 wmi_service_ratectrl_cache,
5177 wmi_service_iram_tids,
5178 wmi_service_burst,
5179 wmi_service_smart_antenna_sw_support,
5180 wmi_service_gtk_offload,
5181 wmi_service_scan_sch,
5182 wmi_service_csa_offload,
5183 wmi_service_chatter,
5184 wmi_service_coex_freqavoid,
5185 wmi_service_packet_power_save,
5186 wmi_service_force_fw_hang,
5187 wmi_service_smart_antenna_hw_support,
5188 wmi_service_gpio,
5189 wmi_sta_uapsd_basic_auto_trig,
5190 wmi_sta_uapsd_var_auto_trig,
5191 wmi_service_sta_keep_alive,
5192 wmi_service_tx_encap,
5193 wmi_service_ap_ps_detect_out_of_sync,
5194 wmi_service_early_rx,
5195 wmi_service_enhanced_proxy_sta,
5196 wmi_service_tt,
5197 wmi_service_atf,
5198 wmi_service_peer_caching,
5199 wmi_service_coex_gpio,
5200 wmi_service_aux_spectral_intf,
5201 wmi_service_aux_chan_load_intf,
5202 wmi_service_bss_channel_info_64,
5203 wmi_service_ext_res_cfg_support,
5204 wmi_service_mesh,
5205 wmi_service_restrt_chnl_support,
5206 wmi_service_roam_scan_offload,
5207 wmi_service_arpns_offload,
5208 wmi_service_nlo,
5209 wmi_service_sta_dtim_ps_modulated_dtim,
5210 wmi_service_sta_smps,
5211 wmi_service_fwtest,
5212 wmi_service_sta_wmmac,
5213 wmi_service_tdls,
5214 wmi_service_mcc_bcn_interval_change,
5215 wmi_service_adaptive_ocs,
5216 wmi_service_ba_ssn_support,
5217 wmi_service_filter_ipsec_natkeepalive,
5218 wmi_service_wlan_hb,
5219 wmi_service_lte_ant_share_support,
5220 wmi_service_batch_scan,
5221 wmi_service_qpower,
5222 wmi_service_plmreq,
5223 wmi_service_thermal_mgmt,
5224 wmi_service_rmc,
5225 wmi_service_mhf_offload,
5226 wmi_service_coex_sar,
5227 wmi_service_bcn_txrate_override,
5228 wmi_service_nan,
5229 wmi_service_l1ss_stat,
5230 wmi_service_estimate_linkspeed,
5231 wmi_service_obss_scan,
5232 wmi_service_tdls_offchan,
5233 wmi_service_tdls_uapsd_buffer_sta,
5234 wmi_service_tdls_uapsd_sleep_sta,
5235 wmi_service_ibss_pwrsave,
5236 wmi_service_lpass,
5237 wmi_service_extscan,
5238 wmi_service_d0wow,
5239 wmi_service_hsoffload,
5240 wmi_service_roam_ho_offload,
5241 wmi_service_rx_full_reorder,
5242 wmi_service_dhcp_offload,
5243 wmi_service_sta_rx_ipa_offload_support,
5244 wmi_service_mdns_offload,
5245 wmi_service_sap_auth_offload,
5246 wmi_service_dual_band_simultaneous_support,
5247 wmi_service_ocb,
5248 wmi_service_ap_arpns_offload,
5249 wmi_service_per_band_chainmask_support,
5250 wmi_service_packet_filter_offload,
5251 wmi_service_mgmt_tx_htt,
5252 wmi_service_mgmt_tx_wmi,
5253 wmi_service_ext_msg,
5254 wmi_service_mawc,
5255
5256 wmi_service_peer_stats,
5257 wmi_service_mesh_11s,
5258 wmi_service_periodic_chan_stat_support,
5259 wmi_service_tx_mode_push_only,
5260 wmi_service_tx_mode_push_pull,
5261 wmi_service_tx_mode_dynamic,
Sathish Kumar7e2eaed2016-11-14 17:44:29 +05305262 wmi_service_check_cal_version,
Sathish Kumar7e566c52016-11-10 15:30:22 +05305263 wmi_service_btcoex_duty_cycle,
Govind Singh89727882016-04-15 13:58:27 +05305264
5265 wmi_services_max,
5266} wmi_conv_service_ids;
5267#define WMI_SERVICE_UNAVAILABLE 0xFFFF
5268
5269/**
5270 * struct target_capability_info - Target capabilities in service ready
5271 * @phy_capability: PHY capabilities
5272 * @max_frag_entry: Maximum frag entries
5273 * @num_rf_chains: Number of RF chains supported
5274 * @ht_cap_info: HT cap info
5275 * @vht_cap_info: VHT cap info
5276 * @vht_supp_mcs: VHT Supported MCS
5277 * @hw_min_tx_power: HW minimum tx power
5278 * @hw_max_tx_power: HW maximum tx power
5279 * @sys_cap_info: sys capability info
5280 * @min_pkt_size_enable: Enterprise mode short pkt enable
5281 * @max_bcn_ie_size: Max beacon and probe rsp IE offload size
5282 * @max_num_scan_channels: Max scan channels
5283 * @max_supported_macs: max supported MCS
5284 * @wmi_fw_sub_feat_caps: FW sub feature capabilities
5285 * @txrx_chainmask: TXRX chain mask
5286 * @default_dbs_hw_mode_index: DBS hw mode index
5287 * @num_msdu_desc: number of msdu desc
5288 */
5289typedef struct {
5290 uint32_t phy_capability;
5291 uint32_t max_frag_entry;
5292 uint32_t num_rf_chains;
5293 uint32_t ht_cap_info;
5294 uint32_t vht_cap_info;
5295 uint32_t vht_supp_mcs;
5296 uint32_t hw_min_tx_power;
5297 uint32_t hw_max_tx_power;
5298 uint32_t sys_cap_info;
5299 uint32_t min_pkt_size_enable;
5300 uint32_t max_bcn_ie_size;
5301 uint32_t max_num_scan_channels;
5302 uint32_t max_supported_macs;
5303 uint32_t wmi_fw_sub_feat_caps;
5304 uint32_t txrx_chainmask;
5305 uint32_t default_dbs_hw_mode_index;
5306 uint32_t num_msdu_desc;
5307} target_capability_info;
5308
5309/**
5310 * struct wmi_host_fw_ver - FW version in non-tlv target
5311 * @sw_version: Versin info
5312 * @sw_version_1: Second dword of version
5313 */
5314struct wmi_host_fw_ver {
5315 uint32_t sw_version;
5316 uint32_t sw_version_1;
5317};
5318
5319/**
5320 * struct wmi_host_fw_abi_ver - FW version in non-tlv target
5321 * @sw_version: Versin info
5322 * @abi_version: ABI version
5323 */
5324struct wmi_host_fw_abi_ver {
5325 uint32_t sw_version;
5326 uint32_t abi_version;
5327};
5328
5329/**
5330 * struct target_resource_config - Resource config sent from host to target
5331 * abstracted out to include union of both configs
5332 * @num_vdevs: Number vdevs configured
5333 * @num_peers: Number of peers
5334 * @num_active_peers: Number of active peers for peer cache
5335 * @num_offload_peers: Number of offload peers
5336 * @num_offload_reorder_buffs: number of offload reorder buffs
5337 * @num_peer_keys: number of peer keys
5338 * @num_tids: number of tids
5339 * @ast_skid_limit: AST skid limit
5340 * @tx_chain_mask: TX chain mask
5341 * @rx_chain_mask: RX chain mask
5342 * @rx_timeout_pri: RX reorder timeout per AC
5343 * @rx_decap_mode: RX decap mode
5344 * @scan_max_pending_req: Scan mac pending req
5345 * @bmiss_offload_max_vdev: Beacom miss offload max vdevs
5346 * @roam_offload_max_vdev: Roam offload max vdevs
5347 * @roam_offload_max_ap_profiles: roam offload max ap profiles
5348 * @num_mcast_groups: num mcast groups
5349 * @num_mcast_table_elems: number of macst table elems
5350 * @mcast2ucast_mode: mcast enhance mode
5351 * @tx_dbg_log_size: DBG log buf size
5352 * @num_wds_entries: number of WDS entries
5353 * @dma_burst_size: DMA burst size.
5354 * @mac_aggr_delim: Mac aggr delim
5355 * @rx_skip_defrag_timeout_dup_detection_check: Defrag dup check in host?
5356 * @vow_config: vow configuration
5357 * @gtk_offload_max_vdev: Max vdevs for GTK offload
5358 * @num_msdu_desc: Number of msdu desc
5359 * @max_frag_entries: Max frag entries
5360 * End common
5361 * @max_peer_ext_stats: Max peer EXT stats
5362 * @smart_ant_cap: Smart antenna capabilities
5363 * @BK_Minfree: BIN configuration for BK traffic
5364 * @BE_Minfree: BIN configuration for BE traffic
5365 * @VI_Minfree: BIN configuration for VI traffic
5366 * @VO_Minfree: BIN configuration for VO traffic
5367 * @rx_batchmode: RX batch mode
5368 * @tt_support: Thermal throttling support
5369 * @atf_config: ATF config
5370 * @iphdr_pad_config: ipheader pad config
5371 * @qwrap_config: Qwrap configuration
5372 * @alloc_frag_desc_for_data_pkt: Frag desc for data
5373 * Added in MCL
5374 * @num_tdls_vdevs:
5375 * @num_tdls_conn_table_entries:
5376 * @beacon_tx_offload_max_vdev:
5377 * @num_multicast_filter_entries:
5378 * @num_wow_filters:
5379 * @num_keep_alive_pattern:
5380 * @keep_alive_pattern_size:
5381 * @max_tdls_concurrent_sleep_sta:
5382 * @max_tdls_concurrent_buffer_sta:
5383 * @wmi_send_separate:
5384 * @num_ocb_vdevs:
5385 * @num_ocb_channels:
5386 * @num_ocb_schedules:
5387 */
5388typedef struct {
5389 uint32_t num_vdevs;
5390 uint32_t num_peers;
5391 uint32_t num_active_peers;
5392 uint32_t num_offload_peers;
5393 uint32_t num_offload_reorder_buffs;
5394 uint32_t num_peer_keys;
5395 uint32_t num_tids;
5396 uint32_t ast_skid_limit;
5397 uint32_t tx_chain_mask;
5398 uint32_t rx_chain_mask;
5399 uint32_t rx_timeout_pri[4];
5400 uint32_t rx_decap_mode;
5401 uint32_t scan_max_pending_req;
5402 uint32_t bmiss_offload_max_vdev;
5403 uint32_t roam_offload_max_vdev;
5404 uint32_t roam_offload_max_ap_profiles;
5405 uint32_t num_mcast_groups;
5406 uint32_t num_mcast_table_elems;
5407 uint32_t mcast2ucast_mode;
5408 uint32_t tx_dbg_log_size;
5409 uint32_t num_wds_entries;
5410 uint32_t dma_burst_size;
5411 uint32_t mac_aggr_delim;
5412 uint32_t rx_skip_defrag_timeout_dup_detection_check;
5413 uint32_t vow_config;
5414 uint32_t gtk_offload_max_vdev;
5415 uint32_t num_msdu_desc; /* Number of msdu desc */
5416 uint32_t max_frag_entries;
5417 /* End common */
5418
5419 /* Added for Beeliner */
5420 uint32_t max_peer_ext_stats;
5421 uint32_t smart_ant_cap;
5422 uint32_t BK_Minfree;
5423 uint32_t BE_Minfree;
5424 uint32_t VI_Minfree;
5425 uint32_t VO_Minfree;
5426 uint32_t rx_batchmode;
5427 uint32_t tt_support;
5428 uint32_t atf_config;
5429 uint32_t iphdr_pad_config;
5430 uint32_t
5431 qwrap_config:16,
5432 alloc_frag_desc_for_data_pkt:16;
5433
5434 /* Added in MCL */
5435 uint32_t num_tdls_vdevs;
5436 uint32_t num_tdls_conn_table_entries;
5437 uint32_t beacon_tx_offload_max_vdev;
5438 uint32_t num_multicast_filter_entries;
5439 uint32_t num_wow_filters;
5440 uint32_t num_keep_alive_pattern;
5441 uint32_t keep_alive_pattern_size;
5442 uint32_t max_tdls_concurrent_sleep_sta;
5443 uint32_t max_tdls_concurrent_buffer_sta;
5444 uint32_t wmi_send_separate;
5445 uint32_t num_ocb_vdevs;
5446 uint32_t num_ocb_channels;
5447 uint32_t num_ocb_schedules;
5448} target_resource_config;
5449
5450/**
5451 * struct wds_addr_event - WDS addr event structure
5452 * @event_type: event type add/delete
5453 * @peer_mac: peer mac
5454 * @dest_mac: destination mac address
5455 */
5456typedef struct {
5457 uint32_t event_type[4];
5458 u_int8_t peer_mac[IEEE80211_ADDR_LEN];
5459 u_int8_t dest_mac[IEEE80211_ADDR_LEN];
5460} wds_addr_event_t;
5461/**
5462 * Enum replicated for host abstraction with FW
5463 */
5464typedef enum {
5465 /* Event respose of START CMD */
5466 WMI_HOST_VDEV_START_RESP_EVENT = 0,
5467 /* Event respose of RESTART CMD */
5468 WMI_HOST_VDEV_RESTART_RESP_EVENT,
5469} WMI_HOST_START_EVENT_PARAM;
5470
5471/**
5472 * struct wmi_host_vdev_start_resp - VDEV start response
5473 * @vdev_id: vdev id
5474 * @requestor_id: requestor id that requested the VDEV start request
5475 * @resp_type: Respose of Event type START/RESTART
5476 * @status: status of the response
5477 * @chain_mask: Vdev chain mask
5478 * @smps_mode: Vdev mimo power save mode
5479 * @mac_id: mac_id field contains the MAC identifier that the
5480 * VDEV is bound to. The valid range is 0 to (num_macs-1).
5481 * @cfgd_tx_streams: Configured Transmit Streams
5482 * @cfgd_rx_streams: Configured Receive Streams
5483 */
5484typedef struct {
5485 uint32_t vdev_id;
5486 uint32_t requestor_id;
5487 WMI_HOST_START_EVENT_PARAM resp_type;
5488 uint32_t status;
5489 uint32_t chain_mask;
5490 uint32_t smps_mode;
5491 uint32_t mac_id;
5492 uint32_t cfgd_tx_streams;
5493 uint32_t cfgd_rx_streams;
5494} wmi_host_vdev_start_resp;
5495
5496#define WMI_HOST_ATH_MAX_ANTENNA 4
5497/**
5498 * struct wmi_host_mgmt_rx_hdr - host mgmt header params
5499 * @channel: channel on which this frame is received
5500 * @snr: snr information used to cal rssi
5501 * @rssi_ctl[WMI_HOST_ATH_MAX_ANTENNA]: RSSI of PRI 20MHz for each chain.
5502 * @rate: Rate kbps
5503 * @phy_mode: rx phy mode WLAN_PHY_MODE
5504 * @buf_len: length of the frame
5505 * @status: rx status
5506 * @flags: information about the management frame e.g. can give a
5507 * scan source for a scan result mgmt frame
5508 * @rssi: combined RSSI, i.e. the sum of the snr + noise floor (dBm units)
5509 * @tsf_delta:
5510 */
5511typedef struct {
5512 uint32_t channel;
5513 uint32_t snr;
5514 uint8_t rssi_ctl[WMI_HOST_ATH_MAX_ANTENNA];
5515 uint32_t rate;
5516 uint32_t phy_mode;
5517 uint32_t buf_len;
5518 uint32_t status;
5519 uint32_t flags;
5520 int32_t rssi;
5521 uint32_t tsf_delta;
5522} wmi_host_mgmt_rx_hdr;
5523
5524/**
5525 * struct wmi_host_roam_event - host roam event param
5526 * @vdev_id: vdev id
5527 * @reason: roam reason
5528 * @rssi: RSSI
5529 */
5530typedef struct {
5531 uint32_t vdev_id;
5532 uint32_t reason;
5533 uint32_t rssi;
5534} wmi_host_roam_event;
5535
5536/**
5537 * ENUM wmi_host_scan_event_type - Scan event type
5538 */
5539enum wmi_host_scan_event_type {
5540 WMI_HOST_SCAN_EVENT_STARTED = 0x1,
5541 WMI_HOST_SCAN_EVENT_COMPLETED = 0x2,
5542 WMI_HOST_SCAN_EVENT_BSS_CHANNEL = 0x4,
5543 WMI_HOST_SCAN_EVENT_FOREIGN_CHANNEL = 0x8,
5544 WMI_HOST_SCAN_EVENT_DEQUEUED = 0x10,
5545 WMI_HOST_SCAN_EVENT_PREEMPTED = 0x20,
5546 WMI_HOST_SCAN_EVENT_START_FAILED = 0x40,
5547 WMI_HOST_SCAN_EVENT_RESTARTED = 0x80,
5548 WMI_HOST_SCAN_EVENT_FOREIGN_CHANNEL_EXIT = 0x100,
5549 WMI_HOST_SCAN_EVENT_INVALID = 0x200,
Sathish Kumar753eb7d2016-10-25 18:47:52 +05305550 WMI_HOST_SCAN_EVENT_GPIO_TIMEOUT = 0x400,
Govind Singh89727882016-04-15 13:58:27 +05305551 WMI_HOST_SCAN_EVENT_MAX = 0x8000
5552};
5553
5554/**
5555 * ENUM wmi_host_scan_completion_reason - Scan completion event type
5556 */
5557enum wmi_host_scan_completion_reason {
5558 /** scan related events */
5559 WMI_HOST_SCAN_REASON_NONE = 0xFF,
5560 WMI_HOST_SCAN_REASON_COMPLETED = 0,
5561 WMI_HOST_SCAN_REASON_CANCELLED = 1,
5562 WMI_HOST_SCAN_REASON_PREEMPTED = 2,
5563 WMI_HOST_SCAN_REASON_TIMEDOUT = 3,
5564 WMI_HOST_SCAN_REASON_INTERNAL_FAILURE = 4,
5565 WMI_HOST_SCAN_REASON_MAX,
5566};
5567
5568/**
5569 * struct wmi_host_scan_event - Scan event response from target
5570 * @event: event type
5571 * @reason: Reason for event
5572 * @channel_freq: channel frequency
5573 * @requestor: requestor id
5574 * @scan_id: scan id
5575 * @vdev_id: vdev id
5576 */
5577typedef struct {
5578 uint32_t event;
5579 uint32_t reason;
5580 uint32_t channel_freq;
5581 uint32_t requestor;
5582 uint32_t scan_id;
5583 uint32_t vdev_id;
5584} wmi_host_scan_event;
5585
5586/**
5587 * struct wmi_host_pdev_reserve_ast_entry_event - Reserve AST entry
5588 * @result: result
5589 */
5590typedef struct {
5591 uint32_t result;
5592} wmi_host_pdev_reserve_ast_entry_event;
5593
5594/**
5595 * struct wmi_host_mcast_ageout_entry - mcast aged-out entry
5596 * @grp_addr: IPv4/6 mcast group addr
5597 * @vdev_id: vdev id
5598 */
5599typedef struct {
5600 uint8_t grp_addr[16];
5601 uint32_t vdev_id;
5602} wmi_host_mcast_ageout_entry;
5603
5604/**
5605 * struct wmi_host_mcast_list_ageout_event - List of mcast entry aged-out
5606 * @num_entry: Number of mcast entries timed-out
5607 * @entry: List of wmi_host_mcast_ageout_entry
5608 */
5609typedef struct {
5610 uint32_t num_entry;
5611 wmi_host_mcast_ageout_entry entry[1];
5612} wmi_host_mcast_list_ageout_event;
5613
5614/**
5615 * struct wmi_host_pdev_nfcal_power_all_channels_event - NF cal event data
5616 * @nfdBr:
5617 * chan0: {NFCalPower_chain0, NFCalPower_chain1,
5618 * NFCalPower_chain2, NFCalPower_chain3},
5619 * chan1: {NFCalPower_chain0, NFCalPower_chain1,
5620 * NFCalPower_chain2, NFCalPower_chain3},
5621 * chan2: {NFCalPower_chain0, NFCalPower_chain1,
5622 * NFCalPower_chain2, NFCalPower_chain3},
5623 * chan3: {NFCalPower_chain0, NFCalPower_chain1,
5624 * NFCalPower_chain2, NFCalPower_chain3},
5625 * @nfdBr:
5626 * chan0: {NFCalPower_chain0, NFCalPower_chain1,
5627 * NFCalPower_chain2, NFCalPower_chain3},
5628 * chan1: {NFCalPower_chain0, NFCalPower_chain1,
5629 * NFCalPower_chain2, NFCalPower_chain3},
5630 * chan2: {NFCalPower_chain0, NFCalPower_chain1,
5631 * NFCalPower_chain2, NFCalPower_chain3},
5632 * chan3: {NFCalPower_chain0, NFCalPower_chain1,
5633 * NFCalPower_chain2, NFCalPower_chain3},
5634 * @freqNum: frequency number
5635 */
5636typedef struct {
5637 int8_t nfdBr[WMI_HOST_RXG_CAL_CHAN_MAX * WMI_HOST_MAX_NUM_CHAINS];
5638 int8_t nfdBm[WMI_HOST_RXG_CAL_CHAN_MAX * WMI_HOST_MAX_NUM_CHAINS];
5639 uint32_t freqNum[WMI_HOST_RXG_CAL_CHAN_MAX];
5640} wmi_host_pdev_nfcal_power_all_channels_event;
5641
5642/**
5643 * struct wmi_host_pdev_tpc_event - WMI host pdev TPC event
5644 * @tpc:
5645 */
5646typedef struct {
5647 uint32_t tpc[1];
5648} wmi_host_pdev_tpc_event;
5649
5650/**
5651 * struct wmi_host_pdev_generic_buffer_event
5652 * @buf_type: Buffer type
5653 * @frag_id: Frag id
5654 * @more_frag: more frags pending
5655 * @buf_len: buffer length
5656 * @buf_info: variable length buffer
5657 */
5658typedef struct {
5659 uint32_t buf_type;
5660 uint32_t frag_id;
5661 uint32_t more_frag;
5662 uint32_t buf_len;
5663 uint32_t buf_info[1];
5664} wmi_host_pdev_generic_buffer_event;
5665/**
5666 * Enum for host buffer event
5667 */
5668enum {
5669 WMI_HOST_BUFFER_TYPE_RATEPWR_TABLE,
5670 WMI_HOST_BUFFER_TYPE_CTL_TABLE,
5671};
5672
5673/**
5674 * struct wmi_host_pdev_tpc_config_event - host pdev tpc config event
5675 * @regDomain:
5676 * @chanFreq:
5677 * @phyMode:
5678 * @twiceAntennaReduction:
5679 * @twiceMaxRDPower:
5680 * @twiceAntennaGain:
5681 * @powerLimit:
5682 * @rateMax:
5683 * @numTxChain:
5684 * @ctl:
5685 * @flags:
5686 * @maxRegAllowedPower:
5687 * @maxRegAllowedPowerAGCDD:
5688 * @maxRegAllowedPowerAGSTBC:
5689 * @maxRegAllowedPowerAGTXBF:
5690 * @ratesArray:
5691 */
5692typedef struct {
5693 uint32_t regDomain;
5694 uint32_t chanFreq;
5695 uint32_t phyMode;
5696 uint32_t twiceAntennaReduction;
5697 uint32_t twiceMaxRDPower;
5698 int32_t twiceAntennaGain;
5699 uint32_t powerLimit;
5700 uint32_t rateMax;
5701 uint32_t numTxChain;
5702 uint32_t ctl;
5703 uint32_t flags;
5704 int8_t maxRegAllowedPower[WMI_HOST_TPC_TX_NUM_CHAIN];
5705 int8_t maxRegAllowedPowerAGCDD[WMI_HOST_TPC_TX_NUM_CHAIN][WMI_HOST_TPC_TX_NUM_CHAIN];
5706 int8_t maxRegAllowedPowerAGSTBC[WMI_HOST_TPC_TX_NUM_CHAIN][WMI_HOST_TPC_TX_NUM_CHAIN];
5707 int8_t maxRegAllowedPowerAGTXBF[WMI_HOST_TPC_TX_NUM_CHAIN][WMI_HOST_TPC_TX_NUM_CHAIN];
5708 uint8_t ratesArray[WMI_HOST_TPC_RATE_MAX];
5709} wmi_host_pdev_tpc_config_event;
5710/**
5711 * Enums for TPC event
5712 */
5713typedef enum {
5714 WMI_HOST_TPC_CONFIG_EVENT_FLAG_TABLE_CDD = 0x1,
5715 WMI_HOST_TPC_CONFIG_EVENT_FLAG_TABLE_STBC = 0x2,
5716 WMI_HOST_TPC_CONFIG_EVENT_FLAG_TABLE_TXBF = 0x4,
5717} WMI_HOST_TPC_CONFIG_EVENT_FLAG;
5718
5719/**
5720 * Medium Utilization evaluation algorithms
5721 * These algorithms can be complementary rather than exclusive.
5722 */
5723typedef enum {
5724 WMI_HOST_MU_BASIC_ALGO = 0x1,
5725 WMI_HOST_MU_PER_BSSID_ALGO = 0x2,
5726 WMI_HOST_MU_HIDDEN_NODE_ALGO = 0x4,
5727} WMI_HOST_MU_ALGO_TYPE;
5728/* max MU alg combinations supported by target */
5729#define WMI_HOST_MU_MAX_ALGO_TYPE 3
5730
5731/**
Sathish Kumar7e2eaed2016-11-14 17:44:29 +05305732 * struct wmi_host_mu_db_entry
5733 * @event_type: 0=AP, 1=STA, 2=Small Cell(SC)
5734 * @bssid_mac_addr: Transmitter MAC if entry is WiFi node. PLMNID if SC
5735 * @tx_addr: Transmitter MAC if entry is WiFi node. PLMNID if SC
5736 * @avg_duration_us: Avg. duration for which node was transmitting
5737 * @avg_rssi: Avg. RSSI of all TX packets by node. Unit dBm
5738 * @mu_percent: % medium utilization by node
5739 */
5740typedef struct {
5741 uint32_t entry_type;
5742 wmi_host_mac_addr bssid_mac_addr;
5743 wmi_host_mac_addr tx_addr;
5744 uint32_t avg_duration_us;
5745 uint32_t avg_rssi;
5746 uint32_t mu_percent;
5747} wmi_host_mu_db_entry;
5748
5749/**
Govind Singh89727882016-04-15 13:58:27 +05305750 * struct wmi_host_mu_report_event - WMI_MU_REPORT_EVENTID
5751 * @mu_request_id: request id
5752 * @status_reason: MU_STATUS_REASON
5753 * @total_mu: MU_ALG_TYPE combinations
5754 * @num_active_bssid: number of active bssid
Sathish Kumar7e2eaed2016-11-14 17:44:29 +05305755 * @hidden_node_mu : hidden node algo MU per bin
5756 * @num_TA_entries : No. of entries found in MU db report
Govind Singh89727882016-04-15 13:58:27 +05305757 */
5758typedef struct {
5759 uint32_t mu_request_id;
5760 uint32_t status_reason;
5761 uint32_t total_mu[WMI_HOST_MU_MAX_ALGO_TYPE];
5762 uint32_t num_active_bssid;
Sathish Kumar7e2eaed2016-11-14 17:44:29 +05305763 uint32_t hidden_node_mu[LTEU_MAX_BINS];
5764 uint32_t num_TA_entries;
Govind Singh89727882016-04-15 13:58:27 +05305765} wmi_host_mu_report_event;
5766
5767/**
5768 * struct wmi_host_mgmt_tx_compl_event - TX completion event
5769 * @desc_id: from tx_send_cmd
5770 * @status: WMI_MGMT_TX_COMP_STATUS_TYPE
5771 */
5772typedef struct {
5773 uint32_t desc_id;
5774 uint32_t status;
5775} wmi_host_mgmt_tx_compl_event;
5776
5777#define WMI_HOST_TIM_BITMAP_ARRAY_SIZE 17
5778
5779/**
5780 * struct wmi_host_tim_info - TIM info in SWBA event
5781 * @tim_len: TIM length
5782 * @tim_mcast:
5783 * @tim_bitmap: TIM bitmap
5784 * @tim_changed: TIM changed
5785 * @tim_num_ps_pending: TIM num PS sta pending
5786 */
5787typedef struct {
5788 uint32_t tim_len;
5789 uint32_t tim_mcast;
5790 uint32_t tim_bitmap[WMI_HOST_TIM_BITMAP_ARRAY_SIZE];
5791 uint32_t tim_changed;
5792 uint32_t tim_num_ps_pending;
5793} wmi_host_tim_info;
5794
5795/**
5796 * struct wmi_host_p2p_noa_descriptor - NoA desc in SWBA event
5797 * @type_count: Absence count
5798 * @duration: NoA duration
5799 * @interval: NoA interval
5800 * @start_time: start time
5801 */
5802typedef struct {
5803 uint32_t type_count;
5804 uint32_t duration;
5805 uint32_t interval;
5806 uint32_t start_time;
5807} wmi_host_p2p_noa_descriptor;
5808/* Maximum number of NOA Descriptors supported */
5809#define WMI_HOST_P2P_MAX_NOA_DESCRIPTORS 4
5810/**
5811 * struct wmi_host_p2p_noa_info - p2p noa information
5812 * @modified: NoA modified
5813 * @index: Index
5814 * @oppPS: Oppurtunstic ps
5815 * @ctwindow: CT window
5816 * @num_descriptors: number of descriptors
5817 * @noa_descriptors: noa descriptors
5818 */
5819typedef struct {
5820 uint8_t modified;
5821 uint8_t index;
5822 uint8_t oppPS;
5823 uint8_t ctwindow;
5824 uint8_t num_descriptors;
5825 wmi_host_p2p_noa_descriptor
5826 noa_descriptors[WMI_HOST_P2P_MAX_NOA_DESCRIPTORS];
5827} wmi_host_p2p_noa_info;
5828
5829/**
5830 * struct wmi_host_peer_sta_kickout_event
5831 * @peer_macaddr: peer mac address
5832 * @reason: kickout reason
5833 * @rssi: rssi
5834 */
5835typedef struct {
5836 uint8_t peer_macaddr[IEEE80211_ADDR_LEN];
5837 uint32_t reason;
5838 uint32_t rssi;
5839} wmi_host_peer_sta_kickout_event;
5840
5841/**
5842 * struct wmi_host_peer_sta_ps_statechange_event - ST ps state change event
5843 * @peer_macaddr: peer mac address
5844 * @peer_ps_stats: peer PS state
5845 */
5846typedef struct {
5847 uint8_t peer_macaddr[IEEE80211_ADDR_LEN];
5848 uint32_t peer_ps_state;
5849} wmi_host_peer_sta_ps_statechange_event;
5850
5851/* Maximum CCK, OFDM rates supported */
5852#define WMI_SA_MAX_CCK_OFDM_RATES 12
5853/* Maximum MCS rates supported; 4 rates in each dword */
5854#define WMI_SA_MAX_MCS_RATES 40
5855#define WMI_SA_MAX_RATE_COUNTERS 4
5856/* Maximum rate series used for transmission */
5857#define SA_MAX_RATE_SERIES 2
5858
5859#define SA_MAX_LEGACY_RATE_DWORDS 3
5860#define SA_MAX_HT_RATE_DWORDS 10
5861#define SA_BYTES_IN_DWORD 4
5862#define SA_MASK_BYTE 0xff
5863/* TODO: ratecode_160 needs to add for future chips */
5864/**
5865 * struct wmi_sa_rate_cap - smart antenna rat capabilities
5866 * @ratecode_legacy: Rate code array for CCK OFDM
5867 * @ratecode_20: Rate code array for 20MHz BW
5868 * @ratecode_40: Rate code array for 40MHz BW
5869 * @ratecode_80: Rate code array for 80MHz BW
5870 * @ratecount: Max Rate count for each mode
5871 */
5872typedef struct {
5873 uint8_t ratecode_legacy[WMI_SA_MAX_CCK_OFDM_RATES];
5874 uint8_t ratecode_20[WMI_SA_MAX_MCS_RATES];
5875 uint8_t ratecode_40[WMI_SA_MAX_MCS_RATES];
5876 uint8_t ratecode_80[WMI_SA_MAX_MCS_RATES];
5877 uint8_t ratecount[WMI_SA_MAX_RATE_COUNTERS];
5878} wmi_sa_rate_cap;
5879
5880/** Preamble types to be used with VDEV fixed rate configuration */
5881typedef enum {
5882 WMI_HOST_RATE_PREAMBLE_OFDM,
5883 WMI_HOST_RATE_PREAMBLE_CCK,
5884 WMI_HOST_RATE_PREAMBLE_HT,
5885 WMI_HOST_RATE_PREAMBLE_VHT,
5886} WMI_HOST_RATE_PREAMBLE;
5887
5888#define WMI_HOST_FIXED_RATE_NONE (0xff)
5889
5890/** slot time long */
5891#define WMI_HOST_VDEV_SLOT_TIME_LONG 0x1
5892/** slot time short */
5893#define WMI_HOST_VDEV_SLOT_TIME_SHORT 0x2
5894/** preablbe long */
5895#define WMI_HOST_VDEV_PREAMBLE_LONG 0x1
5896/** preablbe short */
5897#define WMI_HOST_VDEV_PREAMBLE_SHORT 0x2
5898/** found a better AP */
5899#define WMI_HOST_ROAM_REASON_BETTER_AP 0x1
5900/** beacon miss detected */
5901#define WMI_HOST_ROAM_REASON_BMISS 0x2
5902/** deauth/disassoc received */
5903#define WMI_HOST_ROAM_REASON_DEAUTH 0x2
5904/** connected AP's low rssi condition detected */
5905#define WMI_HOST_ROAM_REASON_LOW_RSSI 0x3
5906/** found another AP that matches SSID and Security profile in
5907 * WMI_ROAM_AP_PROFILE, found during scan triggered upon FINAL_BMISS
5908 */
5909#define WMI_HOST_ROAM_REASON_SUITABLE_AP 0x4
5910/** LFR3.0 roaming failed, indicate the disconnection to host */
5911#define WMI_HOST_ROAM_REASON_HO_FAILED 0x5
5912
5913/** values for vdev_type */
5914#define WMI_HOST_VDEV_TYPE_AP 0x1
5915#define WMI_HOST_VDEV_TYPE_STA 0x2
5916#define WMI_HOST_VDEV_TYPE_IBSS 0x3
5917#define WMI_HOST_VDEV_TYPE_MONITOR 0x4
5918
5919/** values for vdev_subtype */
5920#define WMI_HOST_VDEV_SUBTYPE_P2P_DEVICE 0x1
5921#define WMI_HOST_VDEV_SUBTYPE_P2P_CLIENT 0x2
5922#define WMI_HOST_VDEV_SUBTYPE_P2P_GO 0x3
5923#define WMI_HOST_VDEV_SUBTYPE_PROXY_STA 0x4
5924#define WMI_HOST_VDEV_SUBTYPE_MESH 0x5
5925
5926#define WMI_HOST_MGMT_TID 17
5927/* Disable aging & learning */
5928#define WMI_HOST_WDS_FLAG_STATIC 0x1
5929
5930/**
5931 * Peer param enum abstracted from target
5932 */
5933typedef enum {
5934 /** mimo powersave state */
5935 WMI_HOST_PEER_MIMO_PS_STATE = 0x1,
5936 /** enable/disable AMPDU . initial value (enabled) */
5937 WMI_HOST_PEER_AMPDU = 0x2,
5938 /** authorize/unauthorize peer. initial value is unauthorized (0) */
5939 WMI_HOST_PEER_AUTHORIZE = 0x3,
5940 /** peer channel bandwidth */
5941 WMI_HOST_PEER_CHWIDTH = 0x4,
5942 /** peer NSS */
5943 WMI_HOST_PEER_NSS = 0x5,
5944 /** USE 4 ADDR */
5945 WMI_HOST_PEER_USE_4ADDR = 0x6,
5946 /** Enable extended peer stats */
5947 WMI_HOST_PEER_EXT_STATS_ENABLE = 0x7,
5948 /*Use FIXED Pwr */
5949 WMI_HOST_PEER_USE_FIXED_PWR = 0x8,
5950 /* Set peer fixed rate */
5951 WMI_HOST_PEER_PARAM_FIXED_RATE = 0x9,
5952 /* Whitelist peer TIDs */
5953 WMI_HOST_PEER_SET_MU_WHITELIST = 0xa,
5954 /* set group membership status */
5955 WMI_HOST_PEER_MEMBERSHIP = 0xb,
5956 WMI_HOST_PEER_USERPOS = 0xc,
Kiran Venkatappa9da7e042016-08-09 22:52:35 +05305957 WMI_HOST_PEER_CRIT_PROTO_HINT_ENABLED = 0xd,
5958 WMI_HOST_PEER_TX_FAIL_CNT_THR = 0xe,
5959 WMI_HOST_PEER_SET_HW_RETRY_CTS2S = 0xf,
5960 WMI_HOST_PEER_IBSS_ATIM_WINDOW_LENGTH = 0x10,
5961 WMI_HOST_PEER_PHYMODE = 0x11,
5962 WMI_HOST_PEER_SET_MAC_TX_RATE = 0x12,
5963 /* Set default Rx routing */
5964 WMI_HOST_PEER_SET_DEFAULT_ROUTING = 0x13,
5965 WMI_HOST_PEER_SET_MIN_TX_RATE = 0x14,
Govind Singh89727882016-04-15 13:58:27 +05305966} PEER_PARAM_ENUM;
5967#define WMI_HOST_PEER_MIMO_PS_NONE 0x0
5968#define WMI_HOST_PEER_MIMO_PS_STATIC 0x1
5969#define WMI_HOST_PEER_MIMO_PS_DYNAMIC 0x2
5970typedef enum {
5971 HOST_PLATFORM_HIGH_PERF,
5972 HOST_PLATFORM_LOW_PERF,
Sathish Kumar41eca492016-09-16 16:55:35 +05305973 HOST_PLATFORM_LOW_PERF_NO_FETCH,
Govind Singh89727882016-04-15 13:58:27 +05305974} HOST_PLATFORM_TYPE;
5975
5976enum wmi_host_sta_ps_mode {
5977 /** enable power save for the given STA VDEV */
5978 WMI_HOST_STA_PS_MODE_DISABLED = 0,
5979 /** disable power save for a given STA VDEV */
5980 WMI_HOST_STA_PS_MODE_ENABLED = 1,
5981};
5982enum wmi_host_sta_powersave_param {
5983 /**
5984 * Controls how frames are retrievd from AP while STA is sleeping
5985 *
5986 * (see enum wmi_sta_ps_param_rx_wake_policy)
5987 */
5988 WMI_HOST_STA_PS_PARAM_RX_WAKE_POLICY = 0,
5989
5990 /**
5991 * The STA will go active after this many TX
5992 *
5993 * (see enum wmi_sta_ps_param_tx_wake_threshold)
5994 */
5995 WMI_HOST_STA_PS_PARAM_TX_WAKE_THRESHOLD = 1,
5996
5997 /**
5998 * Number of PS-Poll to send before STA wakes up
5999 *
6000 * (see enum wmi_sta_ps_param_pspoll_count)
6001 *
6002 */
6003 WMI_HOST_STA_PS_PARAM_PSPOLL_COUNT = 2,
6004
6005 /**
6006 * TX/RX inactivity time in msec before going to sleep.
6007 *
6008 * The power save SM will monitor tx/rx activity on the VDEV, if no
6009 * activity for the specified msec of the parameter
6010 * the Power save SM will go to sleep.
6011 */
6012 WMI_HOST_STA_PS_PARAM_INACTIVITY_TIME = 3,
6013
6014 /**
6015 * Set uapsd configuration.
6016 *
6017 * (see enum wmi_sta_ps_param_uapsd)
6018 */
6019 WMI_HOST_STA_PS_PARAM_UAPSD = 4,
6020};
6021/* prefix used by scan requestor ids on the host
6022 * replicated here form wmi_unified.h*/
6023#define WMI_HOST_P_SCAN_REQUESTOR_ID_PREFIX 0xA000
6024/* prefix used by scan request ids generated on the host */
6025/* host cycles through the lower 12 bits to generate ids */
6026#define WMI_HOST_P_SCAN_REQ_ID_PREFIX 0xA000
6027
6028#define WMI_HOST_RC_DS_FLAG 0x01 /* Dual stream flag */
6029#define WMI_HOST_RC_CW40_FLAG 0x02 /* CW 40 */
6030#define WMI_HOST_RC_SGI_FLAG 0x04 /* Short Guard Interval */
6031#define WMI_HOST_RC_HT_FLAG 0x08 /* HT */
6032#define WMI_HOST_RC_RTSCTS_FLAG 0x10 /* RTS-CTS */
6033#define WMI_HOST_RC_TX_STBC_FLAG 0x20 /* TX STBC */
6034#define WMI_HOST_RC_RX_STBC_FLAG 0xC0 /* RX STBC ,2 bits */
6035#define WMI_HOST_RC_RX_STBC_FLAG_S 6 /* RX STBC ,2 bits */
6036#define WMI_HOST_RC_WEP_TKIP_FLAG 0x100 /* WEP/TKIP encryption */
6037#define WMI_HOST_RC_TS_FLAG 0x200 /* Three stream flag */
6038#define WMI_HOST_RC_UAPSD_FLAG 0x400 /* UAPSD Rate Control */
6039
6040/** HT Capabilities*/
6041#define WMI_HOST_HT_CAP_ENABLED 0x0001 /* HT Enabled/ disabled */
6042/* Short Guard Interval with HT20 */
6043#define WMI_HOST_HT_CAP_HT20_SGI 0x0002
6044#define WMI_HOST_HT_CAP_DYNAMIC_SMPS 0x0004 /* Dynamic MIMO powersave */
6045#define WMI_HOST_HT_CAP_TX_STBC 0x0008 /* B3 TX STBC */
6046#define WMI_HOST_HT_CAP_TX_STBC_MASK_SHIFT 3
6047#define WMI_HOST_HT_CAP_RX_STBC 0x0030 /* B4-B5 RX STBC */
6048#define WMI_HOST_HT_CAP_RX_STBC_MASK_SHIFT 4
6049#define WMI_HOST_HT_CAP_LDPC 0x0040 /* LDPC supported */
6050#define WMI_HOST_HT_CAP_L_SIG_TXOP_PROT 0x0080 /* L-SIG TXOP Protection */
6051#define WMI_HOST_HT_CAP_MPDU_DENSITY 0x0700 /* MPDU Density */
6052#define WMI_HOST_HT_CAP_MPDU_DENSITY_MASK_SHIFT 8
6053#define WMI_HOST_HT_CAP_HT40_SGI 0x0800
6054#define WMI_HOST_HT_CAP_IBF_BFER 0x1000
6055
6056/* These macros should be used when we wish to advertise STBC support for
6057 * only 1SS or 2SS or 3SS. */
6058#define WMI_HOST_HT_CAP_RX_STBC_1SS 0x0010 /* B4-B5 RX STBC */
6059#define WMI_HOST_HT_CAP_RX_STBC_2SS 0x0020 /* B4-B5 RX STBC */
6060#define WMI_HOST_HT_CAP_RX_STBC_3SS 0x0030 /* B4-B5 RX STBC */
6061
6062
6063#define WMI_HOST_HT_CAP_DEFAULT_ALL (WMI_HOST_HT_CAP_ENABLED | \
6064 WMI_HOST_HT_CAP_HT20_SGI | \
6065 WMI_HOST_HT_CAP_HT40_SGI | \
6066 WMI_HOST_HT_CAP_TX_STBC | \
6067 WMI_HOST_HT_CAP_RX_STBC | \
6068 WMI_HOST_HT_CAP_LDPC)
6069
6070/* WMI_HOST_VHT_CAP_* these maps to ieee 802.11ac vht capability information
6071 field. The fields not defined here are not supported, or reserved.
6072 Do not change these masks and if you have to add new one follow the
6073 bitmask as specified by 802.11ac draft.
6074*/
6075
6076#define WMI_HOST_VHT_CAP_MAX_MPDU_LEN_MASK 0x00000003
6077#define WMI_HOST_VHT_CAP_RX_LDPC 0x00000010
6078#define WMI_HOST_VHT_CAP_SGI_80MHZ 0x00000020
6079#define WMI_HOST_VHT_CAP_SGI_160MHZ 0x00000040
6080#define WMI_HOST_VHT_CAP_TX_STBC 0x00000080
6081#define WMI_HOST_VHT_CAP_RX_STBC_MASK 0x00000300
6082#define WMI_HOST_VHT_CAP_RX_STBC_MASK_SHIFT 8
6083#define WMI_HOST_VHT_CAP_SU_BFER 0x00000800
6084#define WMI_HOST_VHT_CAP_SU_BFEE 0x00001000
6085#define WMI_HOST_VHT_CAP_MAX_CS_ANT_MASK 0x0000E000
6086#define WMI_HOST_VHT_CAP_MAX_CS_ANT_MASK_SHIFT 13
6087#define WMI_HOST_VHT_CAP_MAX_SND_DIM_MASK 0x00070000
6088#define WMI_HOST_VHT_CAP_MAX_SND_DIM_MASK_SHIFT 16
6089#define WMI_HOST_VHT_CAP_MU_BFER 0x00080000
6090#define WMI_HOST_VHT_CAP_MU_BFEE 0x00100000
6091#define WMI_HOST_VHT_CAP_MAX_AMPDU_LEN_EXP 0x03800000
6092#define WMI_HOST_VHT_CAP_MAX_AMPDU_LEN_EXP_SHIT 23
6093#define WMI_HOST_VHT_CAP_RX_FIXED_ANT 0x10000000
6094#define WMI_HOST_VHT_CAP_TX_FIXED_ANT 0x20000000
6095
6096#define WMI_HOST_VHT_CAP_MAX_MPDU_LEN_11454 0x00000002
6097
6098/* These macros should be used when we wish to advertise STBC support for
6099 * only 1SS or 2SS or 3SS. */
6100#define WMI_HOST_VHT_CAP_RX_STBC_1SS 0x00000100
6101#define WMI_HOST_VHT_CAP_RX_STBC_2SS 0x00000200
6102#define WMI_HOST_VHT_CAP_RX_STBC_3SS 0x00000300
6103
6104#define WMI_HOST_VHT_CAP_DEFAULT_ALL (WMI_HOST_VHT_CAP_MAX_MPDU_LEN_11454 | \
6105 WMI_HOST_VHT_CAP_SGI_80MHZ | \
6106 WMI_HOST_VHT_CAP_TX_STBC | \
6107 WMI_HOST_VHT_CAP_RX_STBC_MASK | \
6108 WMI_HOST_VHT_CAP_RX_LDPC | \
6109 WMI_HOST_VHT_CAP_MAX_AMPDU_LEN_EXP | \
6110 WMI_HOST_VHT_CAP_RX_FIXED_ANT | \
6111 WMI_HOST_VHT_CAP_TX_FIXED_ANT)
6112
6113/* Interested readers refer to Rx/Tx MCS Map definition as defined in
6114 802.11ac
6115*/
6116#define WMI_HOST_VHT_MAX_MCS_4_SS_MASK(r, ss) ((3 & (r)) << (((ss) - 1) << 1))
6117#define WMI_HOST_VHT_MAX_SUPP_RATE_MASK 0x1fff0000
6118#define WMI_HOST_VHT_MAX_SUPP_RATE_MASK_SHIFT 16
6119
6120/** U-APSD configuration of peer station from (re)assoc request and TSPECs */
6121enum wmi_host_ap_ps_param_uapsd {
6122 WMI_HOST_AP_PS_UAPSD_AC0_DELIVERY_EN = (1 << 0),
6123 WMI_HOST_AP_PS_UAPSD_AC0_TRIGGER_EN = (1 << 1),
6124 WMI_HOST_AP_PS_UAPSD_AC1_DELIVERY_EN = (1 << 2),
6125 WMI_HOST_AP_PS_UAPSD_AC1_TRIGGER_EN = (1 << 3),
6126 WMI_HOST_AP_PS_UAPSD_AC2_DELIVERY_EN = (1 << 4),
6127 WMI_HOST_AP_PS_UAPSD_AC2_TRIGGER_EN = (1 << 5),
6128 WMI_HOST_AP_PS_UAPSD_AC3_DELIVERY_EN = (1 << 6),
6129 WMI_HOST_AP_PS_UAPSD_AC3_TRIGGER_EN = (1 << 7),
6130};
6131/** U-APSD maximum service period of peer station */
6132enum wmi_host_ap_ps_peer_param_max_sp {
6133 WMI_HOST_AP_PS_PEER_PARAM_MAX_SP_UNLIMITED = 0,
6134 WMI_HOST_AP_PS_PEER_PARAM_MAX_SP_2 = 1,
6135 WMI_HOST_AP_PS_PEER_PARAM_MAX_SP_4 = 2,
6136 WMI_HOST_AP_PS_PEER_PARAM_MAX_SP_6 = 3,
6137
6138 /* keep last! */
6139 MAX_HOST_WMI_AP_PS_PEER_PARAM_MAX_SP,
6140};
6141
6142#define WMI_HOST_UAPSD_AC_TYPE_DELI 0
6143#define WMI_HOST_UAPSD_AC_TYPE_TRIG 1
6144
6145#define WMI_HOST_UAPSD_AC_BIT_MASK(ac, type) \
6146 ((type == WMI_HOST_UAPSD_AC_TYPE_DELI) ? (1<<(ac<<1)) :\
6147 (1<<((ac<<1)+1)))
6148
6149enum wmi_host_ap_ps_peer_param_wnm_sleep {
6150 WMI_HOST_AP_PS_PEER_PARAM_WNM_SLEEP_ENABLE,
6151 WMI_HOST_AP_PS_PEER_PARAM_WNM_SLEEP_DISABLE,
6152};
6153
6154enum wmi_host_ap_ps_peer_param {
6155 /** Set uapsd configuration for a given peer.
6156 *
6157 * This will include the delivery and trigger enabled state for every AC.
6158 * The host MLME needs to set this based on AP capability and stations
6159 * request Set in the association request received from the station.
6160 *
6161 * Lower 8 bits of the value specify the UAPSD configuration.
6162 *
6163 * (see enum wmi_ap_ps_param_uapsd)
6164 * The default value is 0.
6165 */
6166 WMI_HOST_AP_PS_PEER_PARAM_UAPSD = 0,
6167
6168 /**
6169 * Set the service period for a UAPSD capable station
6170 *
6171 * The service period from wme ie in the (re)assoc request frame.
6172 *
6173 * (see enum wmi_ap_ps_peer_param_max_sp)
6174 */
6175 WMI_HOST_AP_PS_PEER_PARAM_MAX_SP = 1,
6176
6177 /** Time in seconds for aging out buffered frames
6178 * for STA in power save */
6179 WMI_HOST_AP_PS_PEER_PARAM_AGEOUT_TIME = 2,
6180
6181 /** Specify frame types that are considered SIFS
6182 * RESP trigger frame */
6183 WMI_HOST_AP_PS_PEER_PARAM_SIFS_RESP_FRMTYPE = 3,
6184
6185 /** Specifies the trigger state of TID.
6186 * Valid only for UAPSD frame type */
6187 WMI_HOST_AP_PS_PEER_PARAM_SIFS_RESP_UAPSD = 4,
6188
6189 /** Specifies the WNM sleep state of a STA */
6190 WMI_HOST_AP_PS_PEER_PARAM_WNM_SLEEP = 5,
6191};
6192#define WMI_HOST_RXERR_CRC 0x01 /* CRC error on frame */
6193#define WMI_HOST_RXERR_DECRYPT 0x08 /* non-Michael decrypt error */
6194#define WMI_HOST_RXERR_MIC 0x10 /* Michael MIC decrypt error */
6195#define WMI_HOST_RXERR_KEY_CACHE_MISS 0x20 /* No/incorrect key matter in h/w */
6196
6197enum wmi_host_sta_ps_param_uapsd {
6198 WMI_HOST_STA_PS_UAPSD_AC0_DELIVERY_EN = (1 << 0),
6199 WMI_HOST_STA_PS_UAPSD_AC0_TRIGGER_EN = (1 << 1),
6200 WMI_HOST_STA_PS_UAPSD_AC1_DELIVERY_EN = (1 << 2),
6201 WMI_HOST_STA_PS_UAPSD_AC1_TRIGGER_EN = (1 << 3),
6202 WMI_HOST_STA_PS_UAPSD_AC2_DELIVERY_EN = (1 << 4),
6203 WMI_HOST_STA_PS_UAPSD_AC2_TRIGGER_EN = (1 << 5),
6204 WMI_HOST_STA_PS_UAPSD_AC3_DELIVERY_EN = (1 << 6),
6205 WMI_HOST_STA_PS_UAPSD_AC3_TRIGGER_EN = (1 << 7),
6206};
6207
6208enum wmi_host_sta_ps_param_rx_wake_policy {
6209 /* Wake up when ever there is an RX activity on the VDEV. In this mode
6210 * the Power save SM(state machine) will come out of sleep by either
6211 * sending null frame (or) a data frame (with PS==0) in response to TIM
6212 * bit set in the received beacon frame from AP.
6213 */
6214 WMI_HOST_STA_PS_RX_WAKE_POLICY_WAKE = 0,
6215
6216 /* Here the power save state machine will not wakeup in response to TIM
6217 * bit, instead it will send a PSPOLL (or) UASPD trigger based on UAPSD
6218 * configuration setup by WMISET_PS_SET_UAPSD WMI command. When all
6219 * access categories are delivery-enabled, the station will send a UAPSD
6220 * trigger frame, otherwise it will send a PS-Poll.
6221 */
6222 WMI_HOST_STA_PS_RX_WAKE_POLICY_POLL_UAPSD = 1,
6223};
6224enum wmi_host_sta_ps_param_pspoll_count {
6225 WMI_HOST_STA_PS_PSPOLL_COUNT_NO_MAX = 0,
6226 /* Values greater than 0 indicate the maximum numer of PS-Poll frames FW
6227 * will send before waking up.
6228 */
6229};
6230/** Number of tx frames/beacon that cause the power save SM to wake up.
6231 *
6232 * Value 1 causes the SM to wake up for every TX. Value 0 has a special
6233 * meaning, It will cause the SM to never wake up. This is useful if you want
6234 * to keep the system to sleep all the time for some kind of test mode . host
6235 * can change this parameter any time. It will affect at the next tx frame.
6236 */
6237enum wmi_host_sta_ps_param_tx_wake_threshold {
6238 WMI_HOST_STA_PS_TX_WAKE_THRESHOLD_NEVER = 0,
6239 WMI_HOST_STA_PS_TX_WAKE_THRESHOLD_ALWAYS = 1,
6240
6241 /* Values greater than one indicate that many TX attempts per beacon
6242 * interval before the STA will wake up
6243 */
6244};
6245/*
6246 * Transmit power scale factor.
6247 *
6248 */
6249typedef enum {
6250 WMI_HOST_TP_SCALE_MAX = 0, /* no scaling (default) */
6251 WMI_HOST_TP_SCALE_50 = 1, /* 50% of max (-3 dBm) */
6252 WMI_HOST_TP_SCALE_25 = 2, /* 25% of max (-6 dBm) */
6253 WMI_HOST_TP_SCALE_12 = 3, /* 12% of max (-9 dBm) */
6254 WMI_HOST_TP_SCALE_MIN = 4, /* min, but still on */
6255 WMI_HOST_TP_SCALE_SIZE = 5, /* max num of enum */
6256} WMI_HOST_TP_SCALE;
6257enum {
6258 WMI_HOST_RATEPWR_TABLE_OPS_SET,
6259 WMI_HOST_RATEPWR_TABLE_OPS_GET,
6260};
6261/* reserved up through 0xF */
6262/**
6263 * struct wmi_host_dcs_mib_stats - WLAN IM stats from target to host
6264 * Below statistics are sent from target to host periodically.
6265 * These are collected at target as long as target is running
6266 * and target chip is not in sleep.
6267 * @listen_time:
6268 * @reg_tx_frame_cnt:
6269 * @reg_rx_frame_cnt:
6270 * @reg_rxclr_cnt:
6271 * @reg_cycle_cnt: delta cycle count
6272 * @reg_rxclr_ext_cnt:
6273 * @reg_ofdm_phyerr_cnt:
6274 * @reg_cck_phyerr_cnt: CCK err count since last reset, read from register
6275 */
6276typedef struct _hp_dcs_mib_stats {
6277 int32_t listen_time;
6278 uint32_t reg_tx_frame_cnt;
6279 uint32_t reg_rx_frame_cnt;
6280 uint32_t reg_rxclr_cnt;
6281 uint32_t reg_cycle_cnt;
6282 uint32_t reg_rxclr_ext_cnt;
6283 uint32_t reg_ofdm_phyerr_cnt;
6284 uint32_t reg_cck_phyerr_cnt;
6285} wmi_host_dcs_mib_stats_t;
6286
6287/**
6288 * struct wmi_host_dcs_im_tgt_stats - DCS IM target stats
6289 * @reg_tsf32: current running TSF from the TSF-1
6290 * @last_ack_rssi: Known last frame rssi, in case of multiple stations, if
6291 * and at different ranges, this would not gaurantee that
6292 * this is the least rssi.
6293 * @tx_waste_time: Sum of all the failed durations in the last
6294 * one second interval.
6295 * @rx_time: count how many times the hal_rxerr_phy is marked, in this
6296 * time period
6297 * @phyerr_cnt:
6298 * @mib_stats: wmi_host_dcs_mib_stats_t - collected mib stats as explained
6299 * in mib structure
Sathish Kumarba2b5da2016-11-08 14:58:29 +05306300 * @chan_nf: Channel noise floor (Units are in dBm)
6301 * @my_bss_rx_cycle_count: BSS rx cycle count
Govind Singh89727882016-04-15 13:58:27 +05306302 */
6303typedef struct _wmi_host_dcs_im_tgt_stats {
6304 uint32_t reg_tsf32;
6305 uint32_t last_ack_rssi;
6306 uint32_t tx_waste_time;
6307 uint32_t rx_time;
6308 uint32_t phyerr_cnt;
6309 wmi_host_dcs_mib_stats_t mib_stats;
Sathish Kumarba2b5da2016-11-08 14:58:29 +05306310 uint32_t chan_nf;
6311 uint32_t my_bss_rx_cycle_count;
Govind Singh89727882016-04-15 13:58:27 +05306312} wmi_host_dcs_im_tgt_stats_t;
6313
6314/**
6315 * Enum for pktlog req
6316 */
6317typedef enum {
6318 WMI_HOST_PKTLOG_EVENT_RX = 0x1,
6319 WMI_HOST_PKTLOG_EVENT_TX = 0x2,
6320 WMI_HOST_PKTLOG_EVENT_RCF = 0x4, /* Rate Control Find */
6321 WMI_HOST_PKTLOG_EVENT_RCU = 0x8, /* Rate Control Update */
6322 WMI_HOST_PKTLOG_EVENT_DBG_PRINT = 0x10, /* DEBUG prints */
6323 /* To support Smart Antenna */
6324 WMI_HOST_PKTLOG_EVENT_SMART_ANTENNA = 0x20,
6325 WMI_HOST_PKTLOG_EVENT_H_INFO = 0x40,
6326 WMI_HOST_PKTLOG_EVENT_STEERING = 0x80,
Sathish Kumar657402a2016-09-26 14:48:09 +05306327 /* To support Tx data Capture */
6328 WMI_HOST_PKTLOG_EVENT_TX_DATA_CAPTURE = 0x100,
Govind Singh89727882016-04-15 13:58:27 +05306329} WMI_HOST_PKTLOG_EVENT;
6330
6331/**
6332 * wmi_host_phyerr
6333 *
6334 */
6335#define WMI_HOST_PHY_ERROR_SPECTRAL_SCAN 0x26
6336#define WMI_HOST_PHY_ERROR_FALSE_RADAR_EXT 0x24
6337
6338#define WMI_HOST_AR900B_DFS_PHYERR_MASK 0x4
6339#define WMI_HOST_AR900B_SPECTRAL_PHYERR_MASK 0x4000000
6340
6341/**
6342 * struct wmi_host_perchain_rssi_info - per chain RSSI info
6343 * @rssi_pri20: RSSI on primary 20
6344 * @rssi_sec20: RSSI on secomdary 20
6345 * @rssi_sec40: RSSI secondary 40
6346 * @rssi_sec80: RSSI secondary 80
6347 */
6348typedef struct wmi_host_perchain_rssi_info {
6349 int8_t rssi_pri20;
6350 int8_t rssi_sec20;
6351 int8_t rssi_sec40;
6352 int8_t rssi_sec80;
6353} wmi_host_perchain_rssi_info_t;
6354
6355/**
6356 * struct _wmi_host_rf_info - RF measurement information
6357 * @rssi_comb: RSSI Information
6358 * @pc_rssi_info[4]: For now, we know we are getting information
6359 * for only 4 chains at max. For future extensions
6360 * use a define
6361 * @noise_floor: Noise floor information
6362 */
6363typedef struct _wmi_host_rf_info {
6364 int8_t rssi_comb;
6365 wmi_host_perchain_rssi_info_t pc_rssi_info[4];
6366 int16_t noise_floor[4];
6367} wmi_host_rf_info_t;
6368
6369/**
6370 * struct _wmi_host_chan_info
6371 * @center_freq1: center frequency 1 in MHz
6372 * @center_freq2: center frequency 2 in MHz -valid only for
6373 * 11ACVHT 80PLUS80 mode
6374 * @chan_width: channel width in MHz
6375 */
6376typedef struct _wmi_host_chan_info {
6377 u_int16_t center_freq1;
6378 u_int16_t center_freq2;
6379 u_int8_t chan_width;
6380} wmi_host_chan_info_t;
6381
6382/**
6383 * struct wmi_host_phyerr
6384 * @rf_info:
6385 * @chan_info:
6386 * @tsf64:
6387 * @phy_err_code:
6388 * @tsf_timestamp:
6389 * @bufp:
6390 * @buf_len:
6391 * @phy_err_mask0:
6392 * @phy_err_mask1:
6393 */
6394typedef struct _wmi_host_phyerr {
6395 wmi_host_rf_info_t rf_info;
6396 wmi_host_chan_info_t chan_info;
6397 uint64_t tsf64;
6398 int32_t phy_err_code;
6399 uint32_t tsf_timestamp;
6400 uint8_t *bufp;
6401 uint32_t buf_len;
6402 uint32_t phy_err_mask0;
6403 uint32_t phy_err_mask1;
6404} wmi_host_phyerr_t;
6405
6406/**
6407 * struct wmi_host_rtt_event_hdr
6408 * @req_id: request id
6409 * @status: status
6410 * @meas_done: measurement done flag
6411 * @meas_type: measurement type
6412 * @report_type: report type
6413 * @v3_status: v2 status
6414 * @v3_finish:
6415 * @v3_tm_start:
6416 * @num_ap: number of AP
6417 * @result: resuult
6418 * @dest_mac: destination mac
6419 */
6420typedef struct {
6421 uint16_t req_id;
6422 uint16_t status:1,
6423 meas_done:1,
6424 meas_type:3,
6425 report_type:3,
6426 v3_status:2,
6427 v3_finish:1,
6428 v3_tm_start:1,
6429 num_ap:4;
6430 uint16_t result;
6431 uint8_t dest_mac[IEEE80211_ADDR_LEN];
6432} wmi_host_rtt_event_hdr;
6433
6434/**
6435 * struct wmi_host_rtt_meas_event - RTT measurement event
6436 * @chain_mask:
6437 * @bw:
6438 * @rsvd:
6439 * @txrxchain_mask: Bit:0-3:chain mask
6440 * Bit 4-5: band width info
6441 * 00 --Legacy 20, 01 --HT/VHT20
6442 * 10 --HT/VHT40, 11 -- VHT80
6443 * @tod: resolution of 0.1ns
6444 * @toa: resolution of 0.1ns
6445 * @t3:
6446 * @t4:
6447 * @rssi0:
6448 * @rssi1:
6449 * @rssi2:
6450 * @rssi3:
6451 */
6452typedef struct {
6453 uint32_t chain_mask:3,
6454 bw:2,
6455 rsvd:27;
6456 uint32_t txrxchain_mask;
6457 uint64_t tod;
6458 uint64_t toa;
6459 uint64_t t3;
6460 uint64_t t4;
6461 uint32_t rssi0;
6462 uint32_t rssi1;
6463 uint32_t rssi2;
6464 uint32_t rssi3;
6465} wmi_host_rtt_meas_event;
6466
6467/*----RTT Report event definition ----*/
6468typedef enum {
6469 /* rtt cmd header parsing error --terminate */
6470 WMI_HOST_RTT_COMMAND_HEADER_ERROR = 0,
6471 /* rtt body parsing error -- skip current STA REQ */
6472 WMI_HOST_RTT_COMMAND_ERROR,
6473 /* rtt no resource -- terminate */
6474 WMI_HOST_RTT_MODULE_BUSY,
6475 /* STA exceed the support limit -- only server the first n STA */
6476 WMI_HOST_RTT_TOO_MANY_STA,
6477 /* any allocate failure */
6478 WMI_HOST_RTT_NO_RESOURCE,
6479 /* can not find vdev with vdev ID - skip current STA REQ */
6480 WMI_HOST_RTT_VDEV_ERROR,
6481 /* Tx failure -- continiue and measure number */
6482 WMI_HOST_RTT_TRANSIMISSION_ERROR,
6483 /* wait for first TM timer expire-terminate current STA measurement */
6484 WMI_HOST_RTT_TM_TIMER_EXPIRE,
6485 /* we do not support RTT measurement with this type of frame */
6486 WMI_HOST_RTT_FRAME_TYPE_NOSUPPORT,
6487 /* whole RTT measurement timer expire-terminate
6488 ** current STA measurement */
6489 WMI_HOST_RTT_TIMER_EXPIRE,
6490 /* channel swicth failed */
6491 WMI_HOST_RTT_CHAN_SWITCH_ERROR,
6492 /* TMR trans error, this dest peer will be skipped */
6493 WMI_HOST_RTT_TMR_TRANS_ERROR,
6494 /* V3 only. If both CFR and Token mismatch, do not report */
6495 WMI_HOST_RTT_NO_REPORT_BAD_CFR_TOKEN,
6496 /* For First TM, if CFR is bad, then do not report */
6497 WMI_HOST_RTT_NO_REPORT_FIRST_TM_BAD_CFR,
6498 /* do not allow report type2 mix with type 0, 1 */
6499 WMI_HOST_RTT_REPORT_TYPE2_MIX,
6500 /* LCI Configuration OK. - Responder only */
6501 WMI_HOST_RTT_LCI_CFG_OK,
6502 /* LCR configuration OK. - Responder only */
6503 WMI_HOST_RTT_LCR_CFG_OK,
6504 /* Bad configuration LCI (or) LCR request - Responder only */
6505 WMI_HOST_RTT_CFG_ERROR,
6506 WMI_HOST_WMI_RTT_REJECT_MAX,
6507} WMI_HOST_RTT_ERROR_INDICATOR;
6508typedef struct {
6509 wmi_host_rtt_event_hdr hdr;
6510 WMI_HOST_RTT_ERROR_INDICATOR reject_reason;
6511} wmi_host_rtt_error_report_event;
6512
6513#if defined(AR9888)
6514typedef enum {
6515 WMI_HOST_PROF_CPU_IDLE,
6516 WMI_HOST_PROF_PPDU_PROC,
6517 WMI_HOST_PROF_PPDU_POST,
6518 WMI_HOST_PROF_HTT_TX_INPUT,
6519 WMI_HOST_PROF_MSDU_ENQ,
6520 WMI_HOST_PROF_PPDU_POST_HAL,
6521 WMI_HOST_PROF_COMPUTE_TX_TIME,
6522
6523 /* Add new ID's above this. */
6524 WMI_HOST_PROF_MAX_ID,
6525} wmi_host_profile_id_t;
6526#endif
6527
6528#define WMI_HOST_WLAN_PROFILE_MAX_HIST 3
6529#define WMI_HOST_WLAN_PROFILE_MAX_BIN_CNT 32
6530
6531#if defined(AR9888)
6532#define WMI_HOST_MAX_PROFILE WMI_HOST_PROF_MAX_ID
6533#else
6534#define WMI_HOST_MAX_PROFILE WMI_HOST_WLAN_PROFILE_MAX_BIN_CNT
6535#endif
6536
6537/**
6538 * struct wmi_host_wlan_profile - Host profile param
6539 * @id: profile id
6540 * @cnt: Count
6541 * @tot:
6542 * @min: minimum
6543 * @max: Mac
6544 * @hist_intvl: history interval
6545 * @hist: profile data history
6546 */
6547typedef struct {
6548 uint32_t id;
6549 uint32_t cnt;
6550 uint32_t tot;
6551 uint32_t min;
6552 uint32_t max;
6553 uint32_t hist_intvl;
6554 uint32_t hist[WMI_HOST_WLAN_PROFILE_MAX_HIST];
6555} wmi_host_wlan_profile_t;
6556
6557/**
6558 * struct wmi_host_wlan_profile_ctx_t - profile context
6559 * @tot: time in us
6560 * @tx_msdu_cnt: MSDU TX count
6561 * @tx_mpdu_cnt: MPDU tx count
6562 * @tx_ppdu_cnt: PPDU tx count
6563 * @rx_msdu_cnt: MSDU RX count
6564 * @rx_mpdu_cnt: MPDU RXcount
6565 * @bin_count: Bin count
6566 */
6567typedef struct {
6568 uint32_t tot;
6569 uint32_t tx_msdu_cnt;
6570 uint32_t tx_mpdu_cnt;
6571 uint32_t tx_ppdu_cnt;
6572 uint32_t rx_msdu_cnt;
6573 uint32_t rx_mpdu_cnt;
6574 uint32_t bin_count;
6575} wmi_host_wlan_profile_ctx_t;
6576
6577/**
Govind Singh89727882016-04-15 13:58:27 +05306578 * struct wmi_host_chan_info_event - Channel info WMI event
6579 * @err_code: Error code
6580 * @freq: Channel freq
6581 * @cmd_flags: Read flags
6582 * @noise_floor: Noise Floor value
6583 * @rx_clear_count: rx clear count
6584 * @cycle_count: cycle count
6585 * @chan_tx_pwr_range: channel tx power per range
6586 * @chan_tx_pwr_tp: channel tx power per throughput
6587 * @rx_frame_count: rx frame count
6588 * @rx_11b_mode_data_duration: 11b mode data duration
6589 */
6590typedef struct {
6591 uint32_t err_code;
6592 uint32_t freq;
6593 uint32_t cmd_flags;
6594 uint32_t noise_floor;
6595 uint32_t rx_clear_count;
6596 uint32_t cycle_count;
6597 uint32_t chan_tx_pwr_range;
6598 uint32_t chan_tx_pwr_tp;
6599 uint32_t rx_frame_count;
6600 uint32_t rx_11b_mode_data_duration;
6601} wmi_host_chan_info_event;
6602
6603/**
6604 * struct wmi_host_pdev_channel_hopping_event
6605 * @noise_floor_report_iter: Noise threshold iterations with high values
6606 * @noise_floor_total_iter: Total noise threshold iterations
6607 */
6608typedef struct {
6609 uint32_t noise_floor_report_iter;
6610 uint32_t noise_floor_total_iter;
6611} wmi_host_pdev_channel_hopping_event;
6612
6613/**
6614 * struct wmi_host_pdev_bss_chan_info_event
6615 * @freq: Units in MHz
6616 * @noise_floor: units are dBm
6617 * @rx_clear_count_low:
6618 * @rx_clear_count_high:
6619 * @cycle_count_low:
6620 * @cycle_count_high:
6621 * @tx_cycle_count_low:
6622 * @tx_cycle_count_high:
6623 * @rx_cycle_count_low:
6624 * @rx_cycle_count_high:
6625 * @rx_bss_cycle_count_low:
6626 * @rx_bss_cycle_count_high:
6627 * @reserved:
6628 */
6629typedef struct {
6630 uint32_t freq;
6631 uint32_t noise_floor;
6632 uint32_t rx_clear_count_low;
6633 uint32_t rx_clear_count_high;
6634 uint32_t cycle_count_low;
6635 uint32_t cycle_count_high;
6636 uint32_t tx_cycle_count_low;
6637 uint32_t tx_cycle_count_high;
6638 uint32_t rx_cycle_count_low;
6639 uint32_t rx_cycle_count_high;
6640 uint32_t rx_bss_cycle_count_low;
6641 uint32_t rx_bss_cycle_count_high;
6642 uint32_t reserved;
6643} wmi_host_pdev_bss_chan_info_event;
6644
6645#define WMI_HOST_INST_STATS_INVALID_RSSI 0
6646/**
6647 * struct wmi_host_inst_stats_resp
6648 * @iRSSI: Instantaneous RSSI
6649 * @peer_macaddr: peer mac address
6650 */
6651typedef struct {
6652 uint32_t iRSSI;
6653 wmi_host_mac_addr peer_macaddr;
6654} wmi_host_inst_stats_resp;
6655
6656/* Event definition and new structure addition to send event
6657 * to host to block/unblock tx data traffic based on peer_ast_idx or vdev id
6658 */
6659#define WMI_HOST_INVALID_PEER_AST_INDEX 0xffff
6660#define WMI_HOST_TX_DATA_TRAFFIC_CTRL_BLOCK 0x1
6661#define WMI_HOST_TX_DATA_TRAFFIC_CTRL_UNBLOCK 0x2
6662/**
6663 * struct wmi_host_tx_data_traffic_ctrl_event
6664 * @peer_ast_idx: For vdev based control, peer_ast_idx will be
6665 * WMI_INVALID_PEER_AST_INDEX
6666 * @vdev_id: only applies if peer_ast_idx == INVALID
6667 * @ctrl_cmd: WMI_TX_DATA_TRAFFIC_CTRL_BLOCK or
6668 * WMI_TX_DATA_TRAFFIC_CTRL_UNBLOCK
6669 */
6670typedef struct {
6671 uint32_t peer_ast_idx;
6672 uint32_t vdev_id;
6673 uint32_t ctrl_cmd;
6674} wmi_host_tx_data_traffic_ctrl_event;
6675
Sathish Kumar7e2eaed2016-11-14 17:44:29 +05306676enum {
6677 WMI_HOST_ATF_PEER_STATS_DISABLED = 0,
6678 WMI_HOST_ATF_PEER_STATS_ENABLED = 1,
6679};
6680
6681#define WMI_HOST_ATF_PEER_STATS_GET_PEER_AST_IDX(token_info) \
6682 (token_info.field1 & 0xffff)
6683
6684#define WMI_HOST_ATF_PEER_STATS_GET_USED_TOKENS(token_info) \
6685 ((token_info.field2 & 0xffff0000) >> 16)
6686
6687#define WMI_HOST_ATF_PEER_STATS_GET_UNUSED_TOKENS(token_info) \
6688 (token_info.field2 & 0xffff)
6689
6690#define WMI_HOST_ATF_PEER_STATS_SET_PEER_AST_IDX(token_info, peer_ast_idx) \
6691 do { \
6692 token_info.field1 &= 0xffff0000; \
6693 token_info.field1 |= ((peer_ast_idx) & 0xffff); \
6694 } while (0)
6695
6696#define WMI_HOST_ATF_PEER_STATS_SET_USED_TOKENS(token_info, used_token) \
6697 do { \
6698 token_info.field2 &= 0x0000ffff; \
6699 token_info.field2 |= (((used_token) & 0xffff) << 16); \
6700 } while (0)
6701
6702#define WMI_HOST_ATF_PEER_STATS_SET_UNUSED_TOKENS(token_info, unused_token) \
6703 do { \
6704 token_info.field2 &= 0xffff0000; \
6705 token_info.field2 |= ((unused_token) & 0xffff); \
6706 } while (0)
6707
6708typedef struct {
6709 /**
6710 * field1 contains:
6711 * bits 15:0 peer_ast_index WMI_ATF_PEER_STATS_GET_PEER_AST_IDX
6712 * WMI_ATF_PEER_STATS_SET_PEER_AST_IDX
6713 * bits 31:16 reserved
6714 *
6715 * field2 contains:
6716 * bits 15:0 used tokens WMI_ATF_PEER_STATS_GET_USED_TOKENS
6717 * WMI_ATF_PEER_STATS_SET_USED_TOKENS
6718 * bits 31:16 unused tokens WMI_ATF_PEER_STATS_GET_UNUSED_TOKENS
6719 * WMI_ATF_PEER_STATS_SET_UNUSED_TOKENS
6720 *
6721 * field3 for future use
6722 */
6723 uint32_t field1;
6724 uint32_t field2;
6725 uint32_t field3;
6726} wmi_host_atf_peer_stats_info;
6727
6728typedef struct {
6729 uint32_t num_atf_peers; /** number of peers in token_info_list */
6730 uint32_t comp_usable_airtime; /** computed usable airtime in tokens */
6731 uint32_t reserved[4]; /** reserved for future use */
6732 wmi_host_atf_peer_stats_info token_info_list[1/*num_atf_peers*/];
6733} wmi_host_atf_peer_stats_event;
6734
Govind Singh89727882016-04-15 13:58:27 +05306735/**
6736 * struct wmi_host_ath_dcs_cw_int
6737 * @channel: either number or freq in mhz
6738 */
6739typedef struct {
6740 uint32_t channel;
6741} wmi_host_ath_dcs_cw_int;
Govind Singhc10bde82016-05-02 17:59:24 +05306742
6743#define WMI_MAX_POWER_DBG_ARGS 8
6744
6745/**
6746 * struct wmi_power_dbg_params - power debug command parameter
6747 * @pdev_id: subsystem identifier
6748 * @module_id: parameter id
6749 * @num_arg: no of arguments
6750 * @args: arguments
6751 */
6752struct wmi_power_dbg_params {
6753 uint32_t pdev_id;
6754 uint32_t module_id;
6755 uint32_t num_args;
6756 uint32_t args[WMI_MAX_POWER_DBG_ARGS];
6757};
6758
Gupta, Kapil7b768002016-04-25 19:14:19 +05306759/**
6760 * struct wmi_adaptive_dwelltime_params - the adaptive dwelltime params
6761 * @vdev_id: vdev id
6762 * @is_enabled: Adaptive dwell time is enabled/disabled
6763 * @dwelltime_mode: global default adaptive dwell mode
6764 * @lpf_weight: weight to calculate the average low pass
6765 * filter for channel congestion
6766 * @passive_mon_intval: intval to monitor wifi activity in passive scan in msec
6767 * @wifi_act_threshold: % of wifi activity used in passive scan 0-100
6768 *
6769 */
6770struct wmi_adaptive_dwelltime_params {
6771 uint32_t vdev_id;
6772 bool is_enabled;
6773 enum wmi_dwelltime_adaptive_mode dwelltime_mode;
6774 uint8_t lpf_weight;
6775 uint8_t passive_mon_intval;
6776 uint8_t wifi_act_threshold;
6777};
Govind Singhc7cd2d62016-06-21 14:33:26 +05306778
6779/**
6780 * struct wmi_fw_dump_seg_req - individual segment details
6781 * @seg_id - segment id.
6782 * @seg_start_addr_lo - lower address of the segment.
6783 * @seg_start_addr_hi - higher address of the segment.
6784 * @seg_length - length of the segment.
6785 * @dst_addr_lo - lower address of the destination buffer.
6786 * @dst_addr_hi - higher address of the destination buffer.
6787 *
6788 * This structure carries the information to firmware about the
6789 * individual segments. This structure is part of firmware memory
6790 * dump request.
6791 */
6792struct wmi_fw_dump_seg_req {
6793 uint8_t seg_id;
6794 uint32_t seg_start_addr_lo;
6795 uint32_t seg_start_addr_hi;
6796 uint32_t seg_length;
6797 uint32_t dst_addr_lo;
6798 uint32_t dst_addr_hi;
6799};
6800
6801/**
6802 * enum wmi_userspace_log_level - Log level at userspace
6803 * @WMI_LOG_LEVEL_NO_COLLECTION: verbose_level 0 corresponds to no collection
6804 * @WMI_LOG_LEVEL_NORMAL_COLLECT: verbose_level 1 correspond to normal log
6805 * level with minimal user impact. This is the default value.
6806 * @WMI_LOG_LEVEL_ISSUE_REPRO: verbose_level 2 are enabled when user is lazily
6807 * trying to reproduce a problem, wifi performances and power can be impacted
6808 * but device should not otherwise be significantly impacted
6809 * @WMI_LOG_LEVEL_ACTIVE: verbose_level 3+ are used when trying to
6810 * actively debug a problem
6811 *
6812 * Various log levels defined in the userspace for logging applications
6813 */
6814enum wmi_userspace_log_level {
6815 WMI_LOG_LEVEL_NO_COLLECTION,
6816 WMI_LOG_LEVEL_NORMAL_COLLECT,
6817 WMI_LOG_LEVEL_ISSUE_REPRO,
6818 WMI_LOG_LEVEL_ACTIVE,
6819};
6820
Padma, Santhosh Kumar73524052016-09-11 18:24:59 +05306821/**
6822 * struct encrypt_decrypt_req_params - encrypt/decrypt params
6823 * @vdev_id: virtual device id
6824 * @key_flag: This indicates firmware to encrypt/decrypt payload
6825 * see ENCRYPT_DECRYPT_FLAG
6826 * @key_idx: Index used in storing key
6827 * @key_cipher: cipher used for encryption/decryption
6828 * Eg: see WMI_CIPHER_AES_CCM for CCMP
6829 * @key_len: length of key data
6830 * @key_txmic_len: length of Tx MIC
6831 * @key_rxmic_len: length of Rx MIC
6832 * @key_data: Key
6833 * @pn: packet number
6834 * @mac_header: MAC header
6835 * @data_len: length of data
6836 * @data: pointer to payload
6837 */
6838struct encrypt_decrypt_req_params {
6839 uint32_t vdev_id;
6840 uint8_t key_flag;
6841 uint32_t key_idx;
6842 uint32_t key_cipher;
6843 uint32_t key_len;
6844 uint32_t key_txmic_len;
6845 uint32_t key_rxmic_len;
6846 uint8_t key_data[MAC_MAX_KEY_LENGTH];
6847 uint8_t pn[MAC_PN_LENGTH];
6848 uint8_t mac_header[MAX_MAC_HEADER_LEN];
6849 uint32_t data_len;
6850 uint8_t *data;
6851};
6852
Kiran Venkatappa9c71b362016-08-10 23:55:40 +05306853/**
6854 * struct wmi_host_ppe_threshold -PPE threshold
6855 * @numss_m1: NSS - 1
6856 * @ru_count: Max RU count
6857 * @ppet16_ppet8_ru3_ru0: ppet8 and ppet16 for max num ss
6858 */
6859#define WMI_HOST_MAX_NUM_SS 8
6860struct wmi_host_ppe_threshold {
6861 uint32_t numss_m1;
6862 uint32_t ru_count;
6863 uint32_t ppet16_ppet8_ru3_ru0[WMI_HOST_MAX_NUM_SS];
6864};
6865
6866/**
6867 * struct wmi_host_service_ext_param - EXT service base params in event
6868 * @default_conc_scan_config_bits: Default concurrenct scan config
6869 * @default_fw_config_bits: Default HW config bits
6870 * @wmi_host_ppe_threshold ppet: Host PPE threshold struct
6871 * @he_cap_info: HE capabality info
6872 * @mpdu_density: units are microseconds
6873 * @max_bssid_rx_filters: Maximum no of BSSID based RX filters host can program
6874 * Value 0 means FW hasn't given any limit to host.
6875 * @num_hw_modes: Number of HW modes in event
6876 * @num_phy: Number of Phy mode.
6877 */
6878struct wmi_host_service_ext_param {
6879 uint32_t default_conc_scan_config_bits;
6880 uint32_t default_fw_config_bits;
6881 struct wmi_host_ppe_threshold ppet;
6882 uint32_t he_cap_info;
6883 uint32_t mpdu_density;
6884 uint32_t max_bssid_rx_filters;
6885 uint32_t num_hw_modes;
6886 uint32_t num_phy;
6887};
6888
6889/**
6890 * struct wmi_host_hw_mode_caps - HW mode capabilities in EXT event
6891 * @hw_mode_id: identify a particular set of HW characteristics,
6892 * as specified by the subsequent fields
6893 * @phy_id_map: BIT0 represents phy_id 0, BIT1 represent phy_id 1 and so on
6894 */
6895struct wmi_host_hw_mode_caps {
6896 uint32_t hw_mode_id;
6897 uint32_t phy_id_map;
6898};
6899
6900/**
6901 * struct wmi_host_mac_phy_caps - Phy caps recvd in EXT service
6902 * @hw_mode_id: identify a particular set of HW characteristics,
6903 * as specified by the subsequent fields. WMI_MAC_PHY_CAPABILITIES
6904 * element must be mapped to its parent WMI_HW_MODE_CAPABILITIES
6905 * element using hw_mode_id. No particular ordering of
6906 * WMI_MAC_PHY_CAPABILITIES elements should be
6907 * assumed, though in practice the elements may always be ordered
6908 * by hw_mode_id.
6909 * @pdev_id: pdev_id starts with 1. pdev_id 1 => phy_id 0, pdev_id 2 => phy_id 1
6910 * @phy_id: Starts with 0
6911 * @union of supported modulations
6912 * @supported_bands: supported bands, enum WLAN_BAND_CAPABILITY
6913 * @ampdu_density: ampdu density 0 for no restriction, 1 for 1/4 us,
6914 * 2 for 1/2 us, 3 for 1 us,4 for 2 us, 5 for 4 us,
6915 * 6 for 8 us,7 for 16 us
6916 * @max_bw_supported_2G: max bw supported 2G, enum wmi_channel_width
6917 * @ht_cap_info_2G: WMI HT Capability, WMI_HT_CAP defines
6918 * @vht_cap_info_2G: VHT capability info field of 802.11ac, WMI_VHT_CAP defines
6919 * @vht_supp_mcs_2G: VHT Supported MCS Set field Rx/Tx same
6920 * The max VHT-MCS for n SS subfield (where n = 1,...,8) is encoded as
6921 * follows
6922 * - 0 indicates support for VHT-MCS 0-7 for n spatial streams
6923 * - 1 indicates support for VHT-MCS 0-8 for n spatial streams
6924 * - 2 indicates support for VHT-MCS 0-9 for n spatial streams
6925 * - 3 indicates that n spatial streams is not supported
6926 * @he_cap_info_2G: HE capability info field of 802.11ax, WMI_HE_CAP defines
6927 * @he_supp_mcs_2G: HE Supported MCS Set field Rx/Tx same
6928 * @tx_chain_mask_2G: Valid Transmit chain mask
6929 * @rx_chain_mask_2G: Valid Receive chain mask
6930 * @max_bw_supported_5G: max bw supported 5G, enum wmi_channel_width
6931 * @ht_cap_info_5G: WMI HT Capability, WMI_HT_CAP defines
6932 * @vht_cap_info_5G: VHT capability info field of 802.11ac, WMI_VHT_CAP defines
6933 * @vht_supp_mcs_5G: VHT Supported MCS Set field Rx/Tx same
6934 * The max VHT-MCS for n SS subfield (where n = 1,...,8) is encoded as
6935 * follows
6936 * - 0 indicates support for VHT-MCS 0-7 for n spatial streams
6937 * - 1 indicates support for VHT-MCS 0-8 for n spatial streams
6938 * - 2 indicates support for VHT-MCS 0-9 for n spatial streams
6939 * - 3 indicates that n spatial streams is not supported
6940 * @he_cap_info_5G: HE capability info field of 802.11ax, WMI_HE_CAP defines
6941 * @he_supp_mcs_5G: HE Supported MCS Set field Rx/Tx same
6942 * @tx_chain_mask_5G: Valid Transmit chain mask
6943 * @rx_chain_mask_5G: Valid Receive chain mask
6944 */
6945struct wmi_host_mac_phy_caps {
6946 uint32_t hw_mode_id;
6947 uint32_t pdev_id;
6948 uint32_t phy_id;
6949 union {
6950 uint32_t supports_11b:1,
6951 supports_11g:1,
6952 supports_11a:1,
6953 supports_11n:1,
6954 supports_11ac:1,
6955 supports_11ax:1;
6956 uint32_t supported_flags;
6957 };
6958 uint32_t supported_bands;
6959 uint32_t ampdu_density;
6960 uint32_t max_bw_supported_2G;
6961 uint32_t ht_cap_info_2G;
6962 uint32_t vht_cap_info_2G;
6963 uint32_t vht_supp_mcs_2G;
6964 uint32_t he_cap_info_2G;
6965 uint32_t he_supp_mcs_2G;
6966 uint32_t tx_chain_mask_2G;
6967 uint32_t rx_chain_mask_2G;
6968 uint32_t max_bw_supported_5G;
6969 uint32_t ht_cap_info_5G;
6970 uint32_t vht_cap_info_5G;
6971 uint32_t vht_supp_mcs_5G;
6972 uint32_t he_cap_info_5G;
6973 uint32_t he_supp_mcs_5G;
6974 uint32_t tx_chain_mask_5G;
6975 uint32_t rx_chain_mask_5G;
6976};
6977
6978/**
6979 * struct WMI_HOST_HAL_REG_CAPABILITIES_EXT: Below are Reg caps per PHY.
6980 * Please note PHY ID starts with 0.
6981 * @phy_id: phy id starts with 0.
6982 * @eeprom_reg_domain: regdomain value specified in EEPROM
6983 * @eeprom_reg_domain_ext: regdomain
6984 * @regcap1: CAP1 capabilities bit map, see REGDMN_CAP1_ defines
6985 * @regcap2: REGDMN EEPROM CAP, see REGDMN_EEPROM_EEREGCAP_ defines
6986 * @wireless_modes: REGDMN MODE, see REGDMN_MODE_ enum
6987 * @low_2ghz_chan: 2G channel low
6988 * @high_2ghz_chan: 2G channel High
6989 * @low_5ghz_chan: 5G channel low
6990 * @high_5ghz_chan: 5G channel High
6991 */
6992struct WMI_HOST_HAL_REG_CAPABILITIES_EXT {
6993 uint32_t phy_id;
6994 uint32_t eeprom_reg_domain;
6995 uint32_t eeprom_reg_domain_ext;
6996 uint32_t regcap1;
6997 uint32_t regcap2;
6998 uint32_t wireless_modes;
6999 uint32_t low_2ghz_chan;
7000 uint32_t high_2ghz_chan;
7001 uint32_t low_5ghz_chan;
7002 uint32_t high_5ghz_chan;
7003};
Govind Singh3ddda1f2016-03-09 11:34:12 +05307004
Sathish Kumar7e2eaed2016-11-14 17:44:29 +05307005/*
7006 * struct wmi_host_peer_txmu_cnt_event
7007 * @tx_mu_transmitted - MU-MIMO tx count
7008 */
7009typedef struct {
7010 uint32_t tx_mu_transmitted;
7011} wmi_host_peer_txmu_cnt_event;
7012
Manikandan Mohan7e5ad482016-12-13 13:14:06 -08007013#define MAX_SAR_LIMIT_ROWS_SUPPORTED 64
7014/**
7015 * struct sar_limit_cmd_row - sar limts row
7016 * @band_id: Optional param for frequency band
7017 * @chain_id: Optional param for antenna chain id
7018 * @mod_id: Optional param for modulation scheme
7019 * @limit_value: Mandatory param providing power limits in steps of 0.5 dbm
7020 * @validity_bitmap: bitmap of valid optional params in sar_limit_cmd_row struct
7021 */
7022struct sar_limit_cmd_row {
7023 uint32_t band_id;
7024 uint32_t chain_id;
7025 uint32_t mod_id;
7026 uint32_t limit_value;
7027 uint32_t validity_bitmap;
7028};
7029
7030/**
7031 * struct sar_limit_cmd_params - sar limts params
7032 * @sar_enable: flag to enable SAR
7033 * @num_limit_rows: number of items in sar_limits
7034 * @commit_limits: indicates firmware to start apply new SAR values
7035 * @sar_limit_row_list: pointer to array of sar limit rows
7036 */
7037struct sar_limit_cmd_params {
7038 uint32_t sar_enable;
7039 uint32_t num_limit_rows;
7040 uint32_t commit_limits;
7041 struct sar_limit_cmd_row *sar_limit_row_list;
7042};
7043
Sathish Kumar7e2eaed2016-11-14 17:44:29 +05307044/*
7045 * struct wmi_peer_gid_userpos_list_event
7046 * @usr_list - User list
7047 */
7048#define GID_OVERLOAD_GROUP_COUNT 15
7049typedef struct {
7050 uint32_t usr_list[GID_OVERLOAD_GROUP_COUNT];
7051} wmi_host_peer_gid_userpos_list_event;
7052
7053#define WMI_HOST_BOARD_MCN_STRING_MAX_SIZE 19
7054#define WMI_HOST_BOARD_MCN_STRING_BUF_SIZE \
7055 (WMI_HOST_BOARD_MCN_STRING_MAX_SIZE+1) /* null-terminator */
7056
7057typedef struct {
7058 uint32_t software_cal_version;
7059 uint32_t board_cal_version;
7060 /* board_mcn_detail:
7061 * Provide a calibration message string for the host to display.
7062 * Note: on a big-endian host, the 4 bytes within each A_UINT32 portion
7063 * of a WMI message will be automatically byteswapped by the copy engine
7064 * as the messages are transferred between host and target, to convert
7065 * between the target's little-endianness and the host's big-endianness.
7066 * Consequently, a big-endian host should manually unswap the bytes
7067 * within the board_mcn_detail string buffer to get the bytes back into
7068 * the desired natural order.
7069 */
7070 uint8_t board_mcn_detail[WMI_HOST_BOARD_MCN_STRING_BUF_SIZE];
7071 uint32_t cal_ok; /* filled with CALIBRATION_STATUS enum value */
7072} wmi_host_pdev_check_cal_version_event;
7073
7074#endif /* _WMI_UNIFIED_PARAM_H_ */