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