1 /*
2  * Copyright (c) 2013 Eugene Krasnikov <k.eugene.e@gmail.com>
3  *
4  * Permission to use, copy, modify, and/or distribute this software for any
5  * purpose with or without fee is hereby granted, provided that the above
6  * copyright notice and this permission notice appear in all copies.
7  *
8  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
9  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
10  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
11  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
12  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
13  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
14  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
15  */
16 
17 #ifndef _HAL_H_
18 #define _HAL_H_
19 
20 /*---------------------------------------------------------------------------
21   API VERSIONING INFORMATION
22 
23   The RIVA API is versioned as MAJOR.MINOR.VERSION.REVISION
24   The MAJOR is incremented for major product/architecture changes
25       (and then MINOR/VERSION/REVISION are zeroed)
26   The MINOR is incremented for minor product/architecture changes
27       (and then VERSION/REVISION are zeroed)
28   The VERSION is incremented if a significant API change occurs
29       (and then REVISION is zeroed)
30   The REVISION is incremented if an insignificant API change occurs
31       or if a new API is added
32   All values are in the range 0..255 (ie they are 8-bit values)
33  ---------------------------------------------------------------------------*/
34 #define WCN36XX_HAL_VER_MAJOR 1
35 #define WCN36XX_HAL_VER_MINOR 4
36 #define WCN36XX_HAL_VER_VERSION 1
37 #define WCN36XX_HAL_VER_REVISION 2
38 
39 /* This is to force compiler to use the maximum of an int ( 4 bytes ) */
40 #define WCN36XX_HAL_MAX_ENUM_SIZE    0x7FFFFFFF
41 #define WCN36XX_HAL_MSG_TYPE_MAX_ENUM_SIZE    0x7FFF
42 
43 /* Max no. of transmit categories */
44 #define STACFG_MAX_TC    8
45 
46 /* The maximum value of access category */
47 #define WCN36XX_HAL_MAX_AC  4
48 
49 #define WCN36XX_HAL_IPV4_ADDR_LEN       4
50 
51 #define WCN36XX_HAL_STA_INVALID_IDX 0xFF
52 #define WCN36XX_HAL_BSS_INVALID_IDX 0xFF
53 
54 /* Default Beacon template size */
55 #define BEACON_TEMPLATE_SIZE 0x180
56 
57 /* Minimum PVM size that the FW expects. See comment in smd.c for details. */
58 #define TIM_MIN_PVM_SIZE 6
59 
60 /* Param Change Bitmap sent to HAL */
61 #define PARAM_BCN_INTERVAL_CHANGED                      (1 << 0)
62 #define PARAM_SHORT_PREAMBLE_CHANGED                 (1 << 1)
63 #define PARAM_SHORT_SLOT_TIME_CHANGED                 (1 << 2)
64 #define PARAM_llACOEXIST_CHANGED                            (1 << 3)
65 #define PARAM_llBCOEXIST_CHANGED                            (1 << 4)
66 #define PARAM_llGCOEXIST_CHANGED                            (1 << 5)
67 #define PARAM_HT20MHZCOEXIST_CHANGED                  (1<<6)
68 #define PARAM_NON_GF_DEVICES_PRESENT_CHANGED (1<<7)
69 #define PARAM_RIFS_MODE_CHANGED                            (1<<8)
70 #define PARAM_LSIG_TXOP_FULL_SUPPORT_CHANGED   (1<<9)
71 #define PARAM_OBSS_MODE_CHANGED                               (1<<10)
72 #define PARAM_BEACON_UPDATE_MASK \
73 	(PARAM_BCN_INTERVAL_CHANGED |					\
74 	 PARAM_SHORT_PREAMBLE_CHANGED |					\
75 	 PARAM_SHORT_SLOT_TIME_CHANGED |				\
76 	 PARAM_llACOEXIST_CHANGED |					\
77 	 PARAM_llBCOEXIST_CHANGED |					\
78 	 PARAM_llGCOEXIST_CHANGED |					\
79 	 PARAM_HT20MHZCOEXIST_CHANGED |					\
80 	 PARAM_NON_GF_DEVICES_PRESENT_CHANGED |				\
81 	 PARAM_RIFS_MODE_CHANGED |					\
82 	 PARAM_LSIG_TXOP_FULL_SUPPORT_CHANGED |				\
83 	 PARAM_OBSS_MODE_CHANGED)
84 
85 /* dump command response Buffer size */
86 #define DUMPCMD_RSP_BUFFER 100
87 
88 /* version string max length (including NULL) */
89 #define WCN36XX_HAL_VERSION_LENGTH  64
90 
91 /* message types for messages exchanged between WDI and HAL */
92 enum wcn36xx_hal_host_msg_type {
93 	/* Init/De-Init */
94 	WCN36XX_HAL_START_REQ = 0,
95 	WCN36XX_HAL_START_RSP = 1,
96 	WCN36XX_HAL_STOP_REQ = 2,
97 	WCN36XX_HAL_STOP_RSP = 3,
98 
99 	/* Scan */
100 	WCN36XX_HAL_INIT_SCAN_REQ = 4,
101 	WCN36XX_HAL_INIT_SCAN_RSP = 5,
102 	WCN36XX_HAL_START_SCAN_REQ = 6,
103 	WCN36XX_HAL_START_SCAN_RSP = 7,
104 	WCN36XX_HAL_END_SCAN_REQ = 8,
105 	WCN36XX_HAL_END_SCAN_RSP = 9,
106 	WCN36XX_HAL_FINISH_SCAN_REQ = 10,
107 	WCN36XX_HAL_FINISH_SCAN_RSP = 11,
108 
109 	/* HW STA configuration/deconfiguration */
110 	WCN36XX_HAL_CONFIG_STA_REQ = 12,
111 	WCN36XX_HAL_CONFIG_STA_RSP = 13,
112 	WCN36XX_HAL_DELETE_STA_REQ = 14,
113 	WCN36XX_HAL_DELETE_STA_RSP = 15,
114 	WCN36XX_HAL_CONFIG_BSS_REQ = 16,
115 	WCN36XX_HAL_CONFIG_BSS_RSP = 17,
116 	WCN36XX_HAL_DELETE_BSS_REQ = 18,
117 	WCN36XX_HAL_DELETE_BSS_RSP = 19,
118 
119 	/* Infra STA asscoiation */
120 	WCN36XX_HAL_JOIN_REQ = 20,
121 	WCN36XX_HAL_JOIN_RSP = 21,
122 	WCN36XX_HAL_POST_ASSOC_REQ = 22,
123 	WCN36XX_HAL_POST_ASSOC_RSP = 23,
124 
125 	/* Security */
126 	WCN36XX_HAL_SET_BSSKEY_REQ = 24,
127 	WCN36XX_HAL_SET_BSSKEY_RSP = 25,
128 	WCN36XX_HAL_SET_STAKEY_REQ = 26,
129 	WCN36XX_HAL_SET_STAKEY_RSP = 27,
130 	WCN36XX_HAL_RMV_BSSKEY_REQ = 28,
131 	WCN36XX_HAL_RMV_BSSKEY_RSP = 29,
132 	WCN36XX_HAL_RMV_STAKEY_REQ = 30,
133 	WCN36XX_HAL_RMV_STAKEY_RSP = 31,
134 
135 	/* Qos Related */
136 	WCN36XX_HAL_ADD_TS_REQ = 32,
137 	WCN36XX_HAL_ADD_TS_RSP = 33,
138 	WCN36XX_HAL_DEL_TS_REQ = 34,
139 	WCN36XX_HAL_DEL_TS_RSP = 35,
140 	WCN36XX_HAL_UPD_EDCA_PARAMS_REQ = 36,
141 	WCN36XX_HAL_UPD_EDCA_PARAMS_RSP = 37,
142 	WCN36XX_HAL_ADD_BA_REQ = 38,
143 	WCN36XX_HAL_ADD_BA_RSP = 39,
144 	WCN36XX_HAL_DEL_BA_REQ = 40,
145 	WCN36XX_HAL_DEL_BA_RSP = 41,
146 
147 	WCN36XX_HAL_CH_SWITCH_REQ = 42,
148 	WCN36XX_HAL_CH_SWITCH_RSP = 43,
149 	WCN36XX_HAL_SET_LINK_ST_REQ = 44,
150 	WCN36XX_HAL_SET_LINK_ST_RSP = 45,
151 	WCN36XX_HAL_GET_STATS_REQ = 46,
152 	WCN36XX_HAL_GET_STATS_RSP = 47,
153 	WCN36XX_HAL_UPDATE_CFG_REQ = 48,
154 	WCN36XX_HAL_UPDATE_CFG_RSP = 49,
155 
156 	WCN36XX_HAL_MISSED_BEACON_IND = 50,
157 	WCN36XX_HAL_UNKNOWN_ADDR2_FRAME_RX_IND = 51,
158 	WCN36XX_HAL_MIC_FAILURE_IND = 52,
159 	WCN36XX_HAL_FATAL_ERROR_IND = 53,
160 	WCN36XX_HAL_SET_KEYDONE_MSG = 54,
161 
162 	/* NV Interface */
163 	WCN36XX_HAL_DOWNLOAD_NV_REQ = 55,
164 	WCN36XX_HAL_DOWNLOAD_NV_RSP = 56,
165 
166 	WCN36XX_HAL_ADD_BA_SESSION_REQ = 57,
167 	WCN36XX_HAL_ADD_BA_SESSION_RSP = 58,
168 	WCN36XX_HAL_TRIGGER_BA_REQ = 59,
169 	WCN36XX_HAL_TRIGGER_BA_RSP = 60,
170 	WCN36XX_HAL_UPDATE_BEACON_REQ = 61,
171 	WCN36XX_HAL_UPDATE_BEACON_RSP = 62,
172 	WCN36XX_HAL_SEND_BEACON_REQ = 63,
173 	WCN36XX_HAL_SEND_BEACON_RSP = 64,
174 
175 	WCN36XX_HAL_SET_BCASTKEY_REQ = 65,
176 	WCN36XX_HAL_SET_BCASTKEY_RSP = 66,
177 	WCN36XX_HAL_DELETE_STA_CONTEXT_IND = 67,
178 	WCN36XX_HAL_UPDATE_PROBE_RSP_TEMPLATE_REQ = 68,
179 	WCN36XX_HAL_UPDATE_PROBE_RSP_TEMPLATE_RSP = 69,
180 
181 	/* PTT interface support */
182 	WCN36XX_HAL_PROCESS_PTT_REQ = 70,
183 	WCN36XX_HAL_PROCESS_PTT_RSP = 71,
184 
185 	/* BTAMP related events */
186 	WCN36XX_HAL_SIGNAL_BTAMP_EVENT_REQ = 72,
187 	WCN36XX_HAL_SIGNAL_BTAMP_EVENT_RSP = 73,
188 	WCN36XX_HAL_TL_HAL_FLUSH_AC_REQ = 74,
189 	WCN36XX_HAL_TL_HAL_FLUSH_AC_RSP = 75,
190 
191 	WCN36XX_HAL_ENTER_IMPS_REQ = 76,
192 	WCN36XX_HAL_EXIT_IMPS_REQ = 77,
193 	WCN36XX_HAL_ENTER_BMPS_REQ = 78,
194 	WCN36XX_HAL_EXIT_BMPS_REQ = 79,
195 	WCN36XX_HAL_ENTER_UAPSD_REQ = 80,
196 	WCN36XX_HAL_EXIT_UAPSD_REQ = 81,
197 	WCN36XX_HAL_UPDATE_UAPSD_PARAM_REQ = 82,
198 	WCN36XX_HAL_CONFIGURE_RXP_FILTER_REQ = 83,
199 	WCN36XX_HAL_ADD_BCN_FILTER_REQ = 84,
200 	WCN36XX_HAL_REM_BCN_FILTER_REQ = 85,
201 	WCN36XX_HAL_ADD_WOWL_BCAST_PTRN = 86,
202 	WCN36XX_HAL_DEL_WOWL_BCAST_PTRN = 87,
203 	WCN36XX_HAL_ENTER_WOWL_REQ = 88,
204 	WCN36XX_HAL_EXIT_WOWL_REQ = 89,
205 	WCN36XX_HAL_HOST_OFFLOAD_REQ = 90,
206 	WCN36XX_HAL_SET_RSSI_THRESH_REQ = 91,
207 	WCN36XX_HAL_GET_RSSI_REQ = 92,
208 	WCN36XX_HAL_SET_UAPSD_AC_PARAMS_REQ = 93,
209 	WCN36XX_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ = 94,
210 
211 	WCN36XX_HAL_ENTER_IMPS_RSP = 95,
212 	WCN36XX_HAL_EXIT_IMPS_RSP = 96,
213 	WCN36XX_HAL_ENTER_BMPS_RSP = 97,
214 	WCN36XX_HAL_EXIT_BMPS_RSP = 98,
215 	WCN36XX_HAL_ENTER_UAPSD_RSP = 99,
216 	WCN36XX_HAL_EXIT_UAPSD_RSP = 100,
217 	WCN36XX_HAL_SET_UAPSD_AC_PARAMS_RSP = 101,
218 	WCN36XX_HAL_UPDATE_UAPSD_PARAM_RSP = 102,
219 	WCN36XX_HAL_CONFIGURE_RXP_FILTER_RSP = 103,
220 	WCN36XX_HAL_ADD_BCN_FILTER_RSP = 104,
221 	WCN36XX_HAL_REM_BCN_FILTER_RSP = 105,
222 	WCN36XX_HAL_SET_RSSI_THRESH_RSP = 106,
223 	WCN36XX_HAL_HOST_OFFLOAD_RSP = 107,
224 	WCN36XX_HAL_ADD_WOWL_BCAST_PTRN_RSP = 108,
225 	WCN36XX_HAL_DEL_WOWL_BCAST_PTRN_RSP = 109,
226 	WCN36XX_HAL_ENTER_WOWL_RSP = 110,
227 	WCN36XX_HAL_EXIT_WOWL_RSP = 111,
228 	WCN36XX_HAL_RSSI_NOTIFICATION_IND = 112,
229 	WCN36XX_HAL_GET_RSSI_RSP = 113,
230 	WCN36XX_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_RSP = 114,
231 
232 	/* 11k related events */
233 	WCN36XX_HAL_SET_MAX_TX_POWER_REQ = 115,
234 	WCN36XX_HAL_SET_MAX_TX_POWER_RSP = 116,
235 
236 	/* 11R related msgs */
237 	WCN36XX_HAL_AGGR_ADD_TS_REQ = 117,
238 	WCN36XX_HAL_AGGR_ADD_TS_RSP = 118,
239 
240 	/* P2P  WLAN_FEATURE_P2P */
241 	WCN36XX_HAL_SET_P2P_GONOA_REQ = 119,
242 	WCN36XX_HAL_SET_P2P_GONOA_RSP = 120,
243 
244 	/* WLAN Dump commands */
245 	WCN36XX_HAL_DUMP_COMMAND_REQ = 121,
246 	WCN36XX_HAL_DUMP_COMMAND_RSP = 122,
247 
248 	/* OEM_DATA FEATURE SUPPORT */
249 	WCN36XX_HAL_START_OEM_DATA_REQ = 123,
250 	WCN36XX_HAL_START_OEM_DATA_RSP = 124,
251 
252 	/* ADD SELF STA REQ and RSP */
253 	WCN36XX_HAL_ADD_STA_SELF_REQ = 125,
254 	WCN36XX_HAL_ADD_STA_SELF_RSP = 126,
255 
256 	/* DEL SELF STA SUPPORT */
257 	WCN36XX_HAL_DEL_STA_SELF_REQ = 127,
258 	WCN36XX_HAL_DEL_STA_SELF_RSP = 128,
259 
260 	/* Coex Indication */
261 	WCN36XX_HAL_COEX_IND = 129,
262 
263 	/* Tx Complete Indication */
264 	WCN36XX_HAL_OTA_TX_COMPL_IND = 130,
265 
266 	/* Host Suspend/resume messages */
267 	WCN36XX_HAL_HOST_SUSPEND_IND = 131,
268 	WCN36XX_HAL_HOST_RESUME_REQ = 132,
269 	WCN36XX_HAL_HOST_RESUME_RSP = 133,
270 
271 	WCN36XX_HAL_SET_TX_POWER_REQ = 134,
272 	WCN36XX_HAL_SET_TX_POWER_RSP = 135,
273 	WCN36XX_HAL_GET_TX_POWER_REQ = 136,
274 	WCN36XX_HAL_GET_TX_POWER_RSP = 137,
275 
276 	WCN36XX_HAL_P2P_NOA_ATTR_IND = 138,
277 
278 	WCN36XX_HAL_ENABLE_RADAR_DETECT_REQ = 139,
279 	WCN36XX_HAL_ENABLE_RADAR_DETECT_RSP = 140,
280 	WCN36XX_HAL_GET_TPC_REPORT_REQ = 141,
281 	WCN36XX_HAL_GET_TPC_REPORT_RSP = 142,
282 	WCN36XX_HAL_RADAR_DETECT_IND = 143,
283 	WCN36XX_HAL_RADAR_DETECT_INTR_IND = 144,
284 	WCN36XX_HAL_KEEP_ALIVE_REQ = 145,
285 	WCN36XX_HAL_KEEP_ALIVE_RSP = 146,
286 
287 	/* PNO messages */
288 	WCN36XX_HAL_SET_PREF_NETWORK_REQ = 147,
289 	WCN36XX_HAL_SET_PREF_NETWORK_RSP = 148,
290 	WCN36XX_HAL_SET_RSSI_FILTER_REQ = 149,
291 	WCN36XX_HAL_SET_RSSI_FILTER_RSP = 150,
292 	WCN36XX_HAL_UPDATE_SCAN_PARAM_REQ = 151,
293 	WCN36XX_HAL_UPDATE_SCAN_PARAM_RSP = 152,
294 	WCN36XX_HAL_PREF_NETW_FOUND_IND = 153,
295 
296 	WCN36XX_HAL_SET_TX_PER_TRACKING_REQ = 154,
297 	WCN36XX_HAL_SET_TX_PER_TRACKING_RSP = 155,
298 	WCN36XX_HAL_TX_PER_HIT_IND = 156,
299 
300 	WCN36XX_HAL_8023_MULTICAST_LIST_REQ = 157,
301 	WCN36XX_HAL_8023_MULTICAST_LIST_RSP = 158,
302 
303 	WCN36XX_HAL_SET_PACKET_FILTER_REQ = 159,
304 	WCN36XX_HAL_SET_PACKET_FILTER_RSP = 160,
305 	WCN36XX_HAL_PACKET_FILTER_MATCH_COUNT_REQ = 161,
306 	WCN36XX_HAL_PACKET_FILTER_MATCH_COUNT_RSP = 162,
307 	WCN36XX_HAL_CLEAR_PACKET_FILTER_REQ = 163,
308 	WCN36XX_HAL_CLEAR_PACKET_FILTER_RSP = 164,
309 
310 	/*
311 	 * This is temp fix. Should be removed once Host and Riva code is
312 	 * in sync.
313 	 */
314 	WCN36XX_HAL_INIT_SCAN_CON_REQ = 165,
315 
316 	WCN36XX_HAL_SET_POWER_PARAMS_REQ = 166,
317 	WCN36XX_HAL_SET_POWER_PARAMS_RSP = 167,
318 
319 	WCN36XX_HAL_TSM_STATS_REQ = 168,
320 	WCN36XX_HAL_TSM_STATS_RSP = 169,
321 
322 	/* wake reason indication (WOW) */
323 	WCN36XX_HAL_WAKE_REASON_IND = 170,
324 
325 	/* GTK offload support */
326 	WCN36XX_HAL_GTK_OFFLOAD_REQ = 171,
327 	WCN36XX_HAL_GTK_OFFLOAD_RSP = 172,
328 	WCN36XX_HAL_GTK_OFFLOAD_GETINFO_REQ = 173,
329 	WCN36XX_HAL_GTK_OFFLOAD_GETINFO_RSP = 174,
330 
331 	WCN36XX_HAL_FEATURE_CAPS_EXCHANGE_REQ = 175,
332 	WCN36XX_HAL_FEATURE_CAPS_EXCHANGE_RSP = 176,
333 	WCN36XX_HAL_EXCLUDE_UNENCRYPTED_IND = 177,
334 
335 	WCN36XX_HAL_SET_THERMAL_MITIGATION_REQ = 178,
336 	WCN36XX_HAL_SET_THERMAL_MITIGATION_RSP = 179,
337 
338 	WCN36XX_HAL_UPDATE_VHT_OP_MODE_REQ = 182,
339 	WCN36XX_HAL_UPDATE_VHT_OP_MODE_RSP = 183,
340 
341 	WCN36XX_HAL_P2P_NOA_START_IND = 184,
342 
343 	WCN36XX_HAL_GET_ROAM_RSSI_REQ = 185,
344 	WCN36XX_HAL_GET_ROAM_RSSI_RSP = 186,
345 
346 	WCN36XX_HAL_CLASS_B_STATS_IND = 187,
347 	WCN36XX_HAL_DEL_BA_IND = 188,
348 	WCN36XX_HAL_DHCP_START_IND = 189,
349 	WCN36XX_HAL_DHCP_STOP_IND = 190,
350 
351 	WCN36XX_HAL_AVOID_FREQ_RANGE_IND = 233,
352 
353 	WCN36XX_HAL_MSG_MAX = WCN36XX_HAL_MSG_TYPE_MAX_ENUM_SIZE
354 };
355 
356 /* Enumeration for Version */
357 enum wcn36xx_hal_host_msg_version {
358 	WCN36XX_HAL_MSG_VERSION0 = 0,
359 	WCN36XX_HAL_MSG_VERSION1 = 1,
360 	/* define as 2 bytes data */
361 	WCN36XX_HAL_MSG_WCNSS_CTRL_VERSION = 0x7FFF,
362 	WCN36XX_HAL_MSG_VERSION_MAX_FIELD = WCN36XX_HAL_MSG_WCNSS_CTRL_VERSION
363 };
364 
365 enum driver_type {
366 	DRIVER_TYPE_PRODUCTION = 0,
367 	DRIVER_TYPE_MFG = 1,
368 	DRIVER_TYPE_DVT = 2,
369 	DRIVER_TYPE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
370 };
371 
372 enum wcn36xx_hal_stop_type {
373 	HAL_STOP_TYPE_SYS_RESET,
374 	HAL_STOP_TYPE_SYS_DEEP_SLEEP,
375 	HAL_STOP_TYPE_RF_KILL,
376 	HAL_STOP_TYPE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
377 };
378 
379 enum wcn36xx_hal_sys_mode {
380 	HAL_SYS_MODE_NORMAL,
381 	HAL_SYS_MODE_LEARN,
382 	HAL_SYS_MODE_SCAN,
383 	HAL_SYS_MODE_PROMISC,
384 	HAL_SYS_MODE_SUSPEND_LINK,
385 	HAL_SYS_MODE_ROAM_SCAN,
386 	HAL_SYS_MODE_ROAM_SUSPEND_LINK,
387 	HAL_SYS_MODE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
388 };
389 
390 enum phy_chan_bond_state {
391 	/* 20MHz IF bandwidth centered on IF carrier */
392 	PHY_SINGLE_CHANNEL_CENTERED = 0,
393 
394 	/* 40MHz IF bandwidth with lower 20MHz supporting the primary channel */
395 	PHY_DOUBLE_CHANNEL_LOW_PRIMARY = 1,
396 
397 	/* 40MHz IF bandwidth centered on IF carrier */
398 	PHY_DOUBLE_CHANNEL_CENTERED = 2,
399 
400 	/* 40MHz IF bandwidth with higher 20MHz supporting the primary ch */
401 	PHY_DOUBLE_CHANNEL_HIGH_PRIMARY = 3,
402 
403 	/* 20/40MHZ offset LOW 40/80MHZ offset CENTERED */
404 	PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED = 4,
405 
406 	/* 20/40MHZ offset CENTERED 40/80MHZ offset CENTERED */
407 	PHY_QUADRUPLE_CHANNEL_20MHZ_CENTERED_40MHZ_CENTERED = 5,
408 
409 	/* 20/40MHZ offset HIGH 40/80MHZ offset CENTERED */
410 	PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED = 6,
411 
412 	/* 20/40MHZ offset LOW 40/80MHZ offset LOW */
413 	PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW = 7,
414 
415 	/* 20/40MHZ offset HIGH 40/80MHZ offset LOW */
416 	PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW = 8,
417 
418 	/* 20/40MHZ offset LOW 40/80MHZ offset HIGH */
419 	PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH = 9,
420 
421 	/* 20/40MHZ offset-HIGH 40/80MHZ offset HIGH */
422 	PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH = 10,
423 
424 	PHY_CHANNEL_BONDING_STATE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
425 };
426 
427 /* Spatial Multiplexing(SM) Power Save mode */
428 enum wcn36xx_hal_ht_mimo_state {
429 	/* Static SM Power Save mode */
430 	WCN36XX_HAL_HT_MIMO_PS_STATIC = 0,
431 
432 	/* Dynamic SM Power Save mode */
433 	WCN36XX_HAL_HT_MIMO_PS_DYNAMIC = 1,
434 
435 	/* reserved */
436 	WCN36XX_HAL_HT_MIMO_PS_NA = 2,
437 
438 	/* SM Power Save disabled */
439 	WCN36XX_HAL_HT_MIMO_PS_NO_LIMIT = 3,
440 
441 	WCN36XX_HAL_HT_MIMO_PS_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
442 };
443 
444 /* each station added has a rate mode which specifies the sta attributes */
445 enum sta_rate_mode {
446 	STA_TAURUS = 0,
447 	STA_TITAN,
448 	STA_POLARIS,
449 	STA_11b,
450 	STA_11bg,
451 	STA_11a,
452 	STA_11n,
453 	STA_11ac,
454 	STA_INVALID_RATE_MODE = WCN36XX_HAL_MAX_ENUM_SIZE
455 };
456 
457 /* 1,2,5.5,11 */
458 #define WCN36XX_HAL_NUM_DSSS_RATES           4
459 
460 /* 6,9,12,18,24,36,48,54 */
461 #define WCN36XX_HAL_NUM_OFDM_RATES           8
462 
463 /* 72,96,108 */
464 #define WCN36XX_HAL_NUM_POLARIS_RATES       3
465 
466 #define WCN36XX_HAL_MAC_MAX_SUPPORTED_MCS_SET    16
467 
468 enum wcn36xx_hal_bss_type {
469 	WCN36XX_HAL_INFRASTRUCTURE_MODE,
470 
471 	/* Added for softAP support */
472 	WCN36XX_HAL_INFRA_AP_MODE,
473 
474 	WCN36XX_HAL_IBSS_MODE,
475 
476 	/* Added for BT-AMP support */
477 	WCN36XX_HAL_BTAMP_STA_MODE,
478 
479 	/* Added for BT-AMP support */
480 	WCN36XX_HAL_BTAMP_AP_MODE,
481 
482 	WCN36XX_HAL_AUTO_MODE,
483 
484 	WCN36XX_HAL_DONOT_USE_BSS_TYPE = WCN36XX_HAL_MAX_ENUM_SIZE
485 };
486 
487 enum wcn36xx_hal_nw_type {
488 	WCN36XX_HAL_11A_NW_TYPE,
489 	WCN36XX_HAL_11B_NW_TYPE,
490 	WCN36XX_HAL_11G_NW_TYPE,
491 	WCN36XX_HAL_11N_NW_TYPE,
492 	WCN36XX_HAL_DONOT_USE_NW_TYPE = WCN36XX_HAL_MAX_ENUM_SIZE
493 };
494 
495 #define WCN36XX_HAL_MAC_RATESET_EID_MAX            12
496 
497 enum wcn36xx_hal_ht_operating_mode {
498 	/* No Protection */
499 	WCN36XX_HAL_HT_OP_MODE_PURE,
500 
501 	/* Overlap Legacy device present, protection is optional */
502 	WCN36XX_HAL_HT_OP_MODE_OVERLAP_LEGACY,
503 
504 	/* No legacy device, but 20 MHz HT present */
505 	WCN36XX_HAL_HT_OP_MODE_NO_LEGACY_20MHZ_HT,
506 
507 	/* Protection is required */
508 	WCN36XX_HAL_HT_OP_MODE_MIXED,
509 
510 	WCN36XX_HAL_HT_OP_MODE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
511 };
512 
513 /* Encryption type enum used with peer */
514 enum ani_ed_type {
515 	WCN36XX_HAL_ED_NONE,
516 	WCN36XX_HAL_ED_WEP40,
517 	WCN36XX_HAL_ED_WEP104,
518 	WCN36XX_HAL_ED_TKIP,
519 	WCN36XX_HAL_ED_CCMP,
520 	WCN36XX_HAL_ED_WPI,
521 	WCN36XX_HAL_ED_AES_128_CMAC,
522 	WCN36XX_HAL_ED_NOT_IMPLEMENTED = WCN36XX_HAL_MAX_ENUM_SIZE
523 };
524 
525 #define WLAN_MAX_KEY_RSC_LEN                16
526 #define WLAN_WAPI_KEY_RSC_LEN               16
527 
528 /* MAX key length when ULA is used */
529 #define WCN36XX_HAL_MAC_MAX_KEY_LENGTH              32
530 #define WCN36XX_HAL_MAC_MAX_NUM_OF_DEFAULT_KEYS     4
531 
532 /*
533  * Enum to specify whether key is used for TX only, RX only or both.
534  */
535 enum ani_key_direction {
536 	WCN36XX_HAL_TX_ONLY,
537 	WCN36XX_HAL_RX_ONLY,
538 	WCN36XX_HAL_TX_RX,
539 	WCN36XX_HAL_TX_DEFAULT,
540 	WCN36XX_HAL_DONOT_USE_KEY_DIRECTION = WCN36XX_HAL_MAX_ENUM_SIZE
541 };
542 
543 enum ani_wep_type {
544 	WCN36XX_HAL_WEP_STATIC,
545 	WCN36XX_HAL_WEP_DYNAMIC,
546 	WCN36XX_HAL_WEP_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
547 };
548 
549 enum wcn36xx_hal_link_state {
550 
551 	WCN36XX_HAL_LINK_IDLE_STATE = 0,
552 	WCN36XX_HAL_LINK_PREASSOC_STATE = 1,
553 	WCN36XX_HAL_LINK_POSTASSOC_STATE = 2,
554 	WCN36XX_HAL_LINK_AP_STATE = 3,
555 	WCN36XX_HAL_LINK_IBSS_STATE = 4,
556 
557 	/* BT-AMP Case */
558 	WCN36XX_HAL_LINK_BTAMP_PREASSOC_STATE = 5,
559 	WCN36XX_HAL_LINK_BTAMP_POSTASSOC_STATE = 6,
560 	WCN36XX_HAL_LINK_BTAMP_AP_STATE = 7,
561 	WCN36XX_HAL_LINK_BTAMP_STA_STATE = 8,
562 
563 	/* Reserved for HAL Internal Use */
564 	WCN36XX_HAL_LINK_LEARN_STATE = 9,
565 	WCN36XX_HAL_LINK_SCAN_STATE = 10,
566 	WCN36XX_HAL_LINK_FINISH_SCAN_STATE = 11,
567 	WCN36XX_HAL_LINK_INIT_CAL_STATE = 12,
568 	WCN36XX_HAL_LINK_FINISH_CAL_STATE = 13,
569 	WCN36XX_HAL_LINK_LISTEN_STATE = 14,
570 
571 	WCN36XX_HAL_LINK_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
572 };
573 
574 enum wcn36xx_hal_stats_mask {
575 	HAL_SUMMARY_STATS_INFO = 0x00000001,
576 	HAL_GLOBAL_CLASS_A_STATS_INFO = 0x00000002,
577 	HAL_GLOBAL_CLASS_B_STATS_INFO = 0x00000004,
578 	HAL_GLOBAL_CLASS_C_STATS_INFO = 0x00000008,
579 	HAL_GLOBAL_CLASS_D_STATS_INFO = 0x00000010,
580 	HAL_PER_STA_STATS_INFO = 0x00000020
581 };
582 
583 /* BT-AMP events type */
584 enum bt_amp_event_type {
585 	BTAMP_EVENT_CONNECTION_START,
586 	BTAMP_EVENT_CONNECTION_STOP,
587 	BTAMP_EVENT_CONNECTION_TERMINATED,
588 
589 	/* This and beyond are invalid values */
590 	BTAMP_EVENT_TYPE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE,
591 };
592 
593 /* PE Statistics */
594 enum pe_stats_mask {
595 	PE_SUMMARY_STATS_INFO = 0x00000001,
596 	PE_GLOBAL_CLASS_A_STATS_INFO = 0x00000002,
597 	PE_GLOBAL_CLASS_B_STATS_INFO = 0x00000004,
598 	PE_GLOBAL_CLASS_C_STATS_INFO = 0x00000008,
599 	PE_GLOBAL_CLASS_D_STATS_INFO = 0x00000010,
600 	PE_PER_STA_STATS_INFO = 0x00000020,
601 
602 	/* This and beyond are invalid values */
603 	PE_STATS_TYPE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
604 };
605 
606 /*
607  * Configuration Parameter IDs
608  */
609 #define WCN36XX_HAL_CFG_STA_ID				0
610 #define WCN36XX_HAL_CFG_CURRENT_TX_ANTENNA		1
611 #define WCN36XX_HAL_CFG_CURRENT_RX_ANTENNA		2
612 #define WCN36XX_HAL_CFG_LOW_GAIN_OVERRIDE		3
613 #define WCN36XX_HAL_CFG_POWER_STATE_PER_CHAIN		4
614 #define WCN36XX_HAL_CFG_CAL_PERIOD			5
615 #define WCN36XX_HAL_CFG_CAL_CONTROL			6
616 #define WCN36XX_HAL_CFG_PROXIMITY			7
617 #define WCN36XX_HAL_CFG_NETWORK_DENSITY			8
618 #define WCN36XX_HAL_CFG_MAX_MEDIUM_TIME			9
619 #define WCN36XX_HAL_CFG_MAX_MPDUS_IN_AMPDU		10
620 #define WCN36XX_HAL_CFG_RTS_THRESHOLD			11
621 #define WCN36XX_HAL_CFG_SHORT_RETRY_LIMIT		12
622 #define WCN36XX_HAL_CFG_LONG_RETRY_LIMIT		13
623 #define WCN36XX_HAL_CFG_FRAGMENTATION_THRESHOLD		14
624 #define WCN36XX_HAL_CFG_DYNAMIC_THRESHOLD_ZERO		15
625 #define WCN36XX_HAL_CFG_DYNAMIC_THRESHOLD_ONE		16
626 #define WCN36XX_HAL_CFG_DYNAMIC_THRESHOLD_TWO		17
627 #define WCN36XX_HAL_CFG_FIXED_RATE			18
628 #define WCN36XX_HAL_CFG_RETRYRATE_POLICY		19
629 #define WCN36XX_HAL_CFG_RETRYRATE_SECONDARY		20
630 #define WCN36XX_HAL_CFG_RETRYRATE_TERTIARY		21
631 #define WCN36XX_HAL_CFG_FORCE_POLICY_PROTECTION		22
632 #define WCN36XX_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ	23
633 #define WCN36XX_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ	24
634 #define WCN36XX_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ	25
635 #define WCN36XX_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ		26
636 #define WCN36XX_HAL_CFG_MAX_BA_SESSIONS			27
637 #define WCN36XX_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT	28
638 #define WCN36XX_HAL_CFG_PS_ENABLE_BCN_FILTER		29
639 #define WCN36XX_HAL_CFG_PS_ENABLE_RSSI_MONITOR		30
640 #define WCN36XX_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE	31
641 #define WCN36XX_HAL_CFG_STATS_PERIOD			32
642 #define WCN36XX_HAL_CFG_CFP_MAX_DURATION		33
643 #define WCN36XX_HAL_CFG_FRAME_TRANS_ENABLED		34
644 #define WCN36XX_HAL_CFG_DTIM_PERIOD			35
645 #define WCN36XX_HAL_CFG_EDCA_WMM_ACBK			36
646 #define WCN36XX_HAL_CFG_EDCA_WMM_ACBE			37
647 #define WCN36XX_HAL_CFG_EDCA_WMM_ACVO			38
648 #define WCN36XX_HAL_CFG_EDCA_WMM_ACVI			39
649 #define WCN36XX_HAL_CFG_BA_THRESHOLD_HIGH		40
650 #define WCN36XX_HAL_CFG_MAX_BA_BUFFERS			41
651 #define WCN36XX_HAL_CFG_RPE_POLLING_THRESHOLD		42
652 #define WCN36XX_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG	43
653 #define WCN36XX_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG	44
654 #define WCN36XX_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG	45
655 #define WCN36XX_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG	46
656 #define WCN36XX_HAL_CFG_NO_OF_ONCHIP_REORDER_SESSIONS	47
657 #define WCN36XX_HAL_CFG_PS_LISTEN_INTERVAL		48
658 #define WCN36XX_HAL_CFG_PS_HEART_BEAT_THRESHOLD		49
659 #define WCN36XX_HAL_CFG_PS_NTH_BEACON_FILTER		50
660 #define WCN36XX_HAL_CFG_PS_MAX_PS_POLL			51
661 #define WCN36XX_HAL_CFG_PS_MIN_RSSI_THRESHOLD		52
662 #define WCN36XX_HAL_CFG_PS_RSSI_FILTER_PERIOD		53
663 #define WCN36XX_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE 54
664 #define WCN36XX_HAL_CFG_PS_IGNORE_DTIM			55
665 #define WCN36XX_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM	56
666 #define WCN36XX_HAL_CFG_DYNAMIC_PS_POLL_VALUE		57
667 #define WCN36XX_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT	58
668 #define WCN36XX_HAL_CFG_TELE_BCN_WAKEUP_EN		59
669 #define WCN36XX_HAL_CFG_TELE_BCN_TRANS_LI		60
670 #define WCN36XX_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS	61
671 #define WCN36XX_HAL_CFG_TELE_BCN_MAX_LI			62
672 #define WCN36XX_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS	63
673 #define WCN36XX_HAL_CFG_TX_PWR_CTRL_ENABLE		64
674 #define WCN36XX_HAL_CFG_VALID_RADAR_CHANNEL_LIST	65
675 #define WCN36XX_HAL_CFG_TX_POWER_24_20			66
676 #define WCN36XX_HAL_CFG_TX_POWER_24_40			67
677 #define WCN36XX_HAL_CFG_TX_POWER_50_20			68
678 #define WCN36XX_HAL_CFG_TX_POWER_50_40			69
679 #define WCN36XX_HAL_CFG_MCAST_BCAST_FILTER_SETTING	70
680 #define WCN36XX_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL	71
681 #define WCN36XX_HAL_CFG_MAX_TX_POWER_2_4		72
682 #define WCN36XX_HAL_CFG_MAX_TX_POWER_5			73
683 #define WCN36XX_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD	74
684 #define WCN36XX_HAL_CFG_ENABLE_CLOSE_LOOP		75
685 #define WCN36XX_HAL_CFG_BTC_EXECUTION_MODE		76
686 #define WCN36XX_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK	77
687 #define WCN36XX_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS	78
688 #define WCN36XX_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT	79
689 #define WCN36XX_HAL_CFG_WCNSS_API_VERSION		80
690 #define WCN36XX_HAL_CFG_AP_KEEPALIVE_TIMEOUT		81
691 #define WCN36XX_HAL_CFG_GO_KEEPALIVE_TIMEOUT		82
692 #define WCN36XX_HAL_CFG_ENABLE_MC_ADDR_LIST		83
693 #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_INQ_BT		84
694 #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_PAGE_BT		85
695 #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_CONN_BT		86
696 #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_LE_BT		87
697 #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN		88
698 #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN	89
699 #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN	90
700 #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_LE_WLAN		91
701 #define WCN36XX_HAL_CFG_BTC_DYN_MAX_LEN_BT		92
702 #define WCN36XX_HAL_CFG_BTC_DYN_MAX_LEN_WLAN		93
703 #define WCN36XX_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC		94
704 #define WCN36XX_HAL_CFG_BTC_DHCP_PROT_ON_A2DP		95
705 #define WCN36XX_HAL_CFG_BTC_DHCP_PROT_ON_SCO		96
706 #define WCN36XX_HAL_CFG_ENABLE_UNICAST_FILTER		97
707 #define WCN36XX_HAL_CFG_MAX_ASSOC_LIMIT			98
708 #define WCN36XX_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION	99
709 #define WCN36XX_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER	100
710 #define WCN36XX_HAL_CFG_ENABLE_DETECT_PS_SUPPORT	101
711 #define WCN36XX_HAL_CFG_AP_LINK_MONITOR_TIMEOUT		102
712 #define WCN36XX_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER	103
713 #define WCN36XX_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE		104
714 #define WCN36XX_HAL_CFG_MAX_PARAMS			105
715 
716 /* Message definitons - All the messages below need to be packed */
717 
718 /* Definition for HAL API Version. */
719 struct wcnss_wlan_version {
720 	u8 revision;
721 	u8 version;
722 	u8 minor;
723 	u8 major;
724 } __packed;
725 
726 /* Definition for Encryption Keys */
727 struct wcn36xx_hal_keys {
728 	u8 id;
729 
730 	/* 0 for multicast */
731 	u8 unicast;
732 
733 	enum ani_key_direction direction;
734 
735 	/* Usage is unknown */
736 	u8 rsc[WLAN_MAX_KEY_RSC_LEN];
737 
738 	/* =1 for authenticator,=0 for supplicant */
739 	u8 pae_role;
740 
741 	u16 length;
742 	u8 key[WCN36XX_HAL_MAC_MAX_KEY_LENGTH];
743 } __packed;
744 
745 /*
746  * set_sta_key_params Moving here since it is shared by
747  * configbss/setstakey msgs
748  */
749 struct wcn36xx_hal_set_sta_key_params {
750 	/* STA Index */
751 	u16 sta_index;
752 
753 	/* Encryption Type used with peer */
754 	enum ani_ed_type enc_type;
755 
756 	/* STATIC/DYNAMIC - valid only for WEP */
757 	enum ani_wep_type wep_type;
758 
759 	/* Default WEP key, valid only for static WEP, must between 0 and 3. */
760 	u8 def_wep_idx;
761 
762 	/* valid only for non-static WEP encyrptions */
763 	struct wcn36xx_hal_keys key[WCN36XX_HAL_MAC_MAX_NUM_OF_DEFAULT_KEYS];
764 
765 	/*
766 	 * Control for Replay Count, 1= Single TID based replay count on Tx
767 	 * 0 = Per TID based replay count on TX
768 	 */
769 	u8 single_tid_rc;
770 
771 } __packed;
772 
773 /* 4-byte control message header used by HAL*/
774 struct wcn36xx_hal_msg_header {
775 	enum wcn36xx_hal_host_msg_type msg_type:16;
776 	enum wcn36xx_hal_host_msg_version msg_version:16;
777 	u32 len;
778 } __packed;
779 
780 /* Config format required by HAL for each CFG item*/
781 struct wcn36xx_hal_cfg {
782 	/* Cfg Id. The Id required by HAL is exported by HAL
783 	 * in shared header file between UMAC and HAL.*/
784 	u16 id;
785 
786 	/* Length of the Cfg. This parameter is used to go to next cfg
787 	 * in the TLV format.*/
788 	u16 len;
789 
790 	/* Padding bytes for unaligned address's */
791 	u16 pad_bytes;
792 
793 	/* Reserve bytes for making cfgVal to align address */
794 	u16 reserve;
795 
796 	/* Following the uCfgLen field there should be a 'uCfgLen' bytes
797 	 * containing the uCfgValue ; u8 uCfgValue[uCfgLen] */
798 } __packed;
799 
800 struct wcn36xx_hal_mac_start_parameters {
801 	/* Drive Type - Production or FTM etc */
802 	enum driver_type type;
803 
804 	/* Length of the config buffer */
805 	u32 len;
806 
807 	/* Following this there is a TLV formatted buffer of length
808 	 * "len" bytes containing all config values.
809 	 * The TLV is expected to be formatted like this:
810 	 * 0           15            31           31+CFG_LEN-1        length-1
811 	 * |   CFG_ID   |   CFG_LEN   |   CFG_BODY    |  CFG_ID  |......|
812 	 */
813 } __packed;
814 
815 struct wcn36xx_hal_mac_start_req_msg {
816 	/* config buffer must start in TLV format just here */
817 	struct wcn36xx_hal_msg_header header;
818 	struct wcn36xx_hal_mac_start_parameters params;
819 } __packed;
820 
821 struct wcn36xx_hal_mac_start_rsp_params {
822 	/* success or failure */
823 	u16 status;
824 
825 	/* Max number of STA supported by the device */
826 	u8 stations;
827 
828 	/* Max number of BSS supported by the device */
829 	u8 bssids;
830 
831 	/* API Version */
832 	struct wcnss_wlan_version version;
833 
834 	/* CRM build information */
835 	u8 crm_version[WCN36XX_HAL_VERSION_LENGTH];
836 
837 	/* hardware/chipset/misc version information */
838 	u8 wlan_version[WCN36XX_HAL_VERSION_LENGTH];
839 
840 } __packed;
841 
842 struct wcn36xx_hal_mac_start_rsp_msg {
843 	struct wcn36xx_hal_msg_header header;
844 	struct wcn36xx_hal_mac_start_rsp_params start_rsp_params;
845 } __packed;
846 
847 struct wcn36xx_hal_mac_stop_req_params {
848 	/* The reason for which the device is being stopped */
849 	enum wcn36xx_hal_stop_type reason;
850 
851 } __packed;
852 
853 struct wcn36xx_hal_mac_stop_req_msg {
854 	struct wcn36xx_hal_msg_header header;
855 	struct wcn36xx_hal_mac_stop_req_params stop_req_params;
856 } __packed;
857 
858 struct wcn36xx_hal_mac_stop_rsp_msg {
859 	struct wcn36xx_hal_msg_header header;
860 
861 	/* success or failure */
862 	u32 status;
863 } __packed;
864 
865 struct wcn36xx_hal_update_cfg_req_msg {
866 	/*
867 	 * Note: The length specified in tHalUpdateCfgReqMsg messages should be
868 	 * header.msgLen = sizeof(tHalUpdateCfgReqMsg) + uConfigBufferLen
869 	 */
870 	struct wcn36xx_hal_msg_header header;
871 
872 	/* Length of the config buffer. Allows UMAC to update multiple CFGs */
873 	u32 len;
874 
875 	/*
876 	 * Following this there is a TLV formatted buffer of length
877 	 * "uConfigBufferLen" bytes containing all config values.
878 	 * The TLV is expected to be formatted like this:
879 	 * 0           15            31           31+CFG_LEN-1        length-1
880 	 * |   CFG_ID   |   CFG_LEN   |   CFG_BODY    |  CFG_ID  |......|
881 	 */
882 
883 } __packed;
884 
885 struct wcn36xx_hal_update_cfg_rsp_msg {
886 	struct wcn36xx_hal_msg_header header;
887 
888 	/* success or failure */
889 	u32 status;
890 
891 } __packed;
892 
893 /* Frame control field format (2 bytes) */
894 struct wcn36xx_hal_mac_frame_ctl {
895 
896 #ifndef ANI_LITTLE_BIT_ENDIAN
897 
898 	u8 subType:4;
899 	u8 type:2;
900 	u8 protVer:2;
901 
902 	u8 order:1;
903 	u8 wep:1;
904 	u8 moreData:1;
905 	u8 powerMgmt:1;
906 	u8 retry:1;
907 	u8 moreFrag:1;
908 	u8 fromDS:1;
909 	u8 toDS:1;
910 
911 #else
912 
913 	u8 protVer:2;
914 	u8 type:2;
915 	u8 subType:4;
916 
917 	u8 toDS:1;
918 	u8 fromDS:1;
919 	u8 moreFrag:1;
920 	u8 retry:1;
921 	u8 powerMgmt:1;
922 	u8 moreData:1;
923 	u8 wep:1;
924 	u8 order:1;
925 
926 #endif
927 
928 };
929 
930 /* Sequence control field */
931 struct wcn36xx_hal_mac_seq_ctl {
932 	u8 fragNum:4;
933 	u8 seqNumLo:4;
934 	u8 seqNumHi:8;
935 };
936 
937 /* Management header format */
938 struct wcn36xx_hal_mac_mgmt_hdr {
939 	struct wcn36xx_hal_mac_frame_ctl fc;
940 	u8 durationLo;
941 	u8 durationHi;
942 	u8 da[6];
943 	u8 sa[6];
944 	u8 bssId[6];
945 	struct wcn36xx_hal_mac_seq_ctl seqControl;
946 };
947 
948 /* FIXME: pronto v1 apparently has 4 */
949 #define WCN36XX_HAL_NUM_BSSID               2
950 
951 /* Scan Entry to hold active BSS idx's */
952 struct wcn36xx_hal_scan_entry {
953 	u8 bss_index[WCN36XX_HAL_NUM_BSSID];
954 	u8 active_bss_count;
955 };
956 
957 struct wcn36xx_hal_init_scan_req_msg {
958 	struct wcn36xx_hal_msg_header header;
959 
960 	/* LEARN - AP Role
961 	   SCAN - STA Role */
962 	enum wcn36xx_hal_sys_mode mode;
963 
964 	/* BSSID of the BSS */
965 	u8 bssid[ETH_ALEN];
966 
967 	/* Whether BSS needs to be notified */
968 	u8 notify;
969 
970 	/* Kind of frame to be used for notifying the BSS (Data Null, QoS
971 	 * Null, or CTS to Self). Must always be a valid frame type. */
972 	u8 frame_type;
973 
974 	/* UMAC has the option of passing the MAC frame to be used for
975 	 * notifying the BSS. If non-zero, HAL will use the MAC frame
976 	 * buffer pointed to by macMgmtHdr. If zero, HAL will generate the
977 	 * appropriate MAC frame based on frameType. */
978 	u8 frame_len;
979 
980 	/* Following the framelength there is a MAC frame buffer if
981 	 * frameLength is non-zero. */
982 	struct wcn36xx_hal_mac_mgmt_hdr mac_mgmt_hdr;
983 
984 	/* Entry to hold number of active BSS idx's */
985 	struct wcn36xx_hal_scan_entry scan_entry;
986 };
987 
988 struct wcn36xx_hal_init_scan_con_req_msg {
989 	struct wcn36xx_hal_msg_header header;
990 
991 	/* LEARN - AP Role
992 	   SCAN - STA Role */
993 	enum wcn36xx_hal_sys_mode mode;
994 
995 	/* BSSID of the BSS */
996 	u8 bssid[ETH_ALEN];
997 
998 	/* Whether BSS needs to be notified */
999 	u8 notify;
1000 
1001 	/* Kind of frame to be used for notifying the BSS (Data Null, QoS
1002 	 * Null, or CTS to Self). Must always be a valid frame type. */
1003 	u8 frame_type;
1004 
1005 	/* UMAC has the option of passing the MAC frame to be used for
1006 	 * notifying the BSS. If non-zero, HAL will use the MAC frame
1007 	 * buffer pointed to by macMgmtHdr. If zero, HAL will generate the
1008 	 * appropriate MAC frame based on frameType. */
1009 	u8 frame_length;
1010 
1011 	/* Following the framelength there is a MAC frame buffer if
1012 	 * frameLength is non-zero. */
1013 	struct wcn36xx_hal_mac_mgmt_hdr mac_mgmt_hdr;
1014 
1015 	/* Entry to hold number of active BSS idx's */
1016 	struct wcn36xx_hal_scan_entry scan_entry;
1017 
1018 	/* Single NoA usage in Scanning */
1019 	u8 use_noa;
1020 
1021 	/* Indicates the scan duration (in ms) */
1022 	u16 scan_duration;
1023 
1024 };
1025 
1026 struct wcn36xx_hal_init_scan_rsp_msg {
1027 	struct wcn36xx_hal_msg_header header;
1028 
1029 	/* success or failure */
1030 	u32 status;
1031 
1032 } __packed;
1033 
1034 struct wcn36xx_hal_start_scan_req_msg {
1035 	struct wcn36xx_hal_msg_header header;
1036 
1037 	/* Indicates the channel to scan */
1038 	u8 scan_channel;
1039 } __packed;
1040 
1041 struct wcn36xx_hal_start_rsp_msg {
1042 	struct wcn36xx_hal_msg_header header;
1043 
1044 	/* success or failure */
1045 	u32 status;
1046 
1047 	u32 start_tsf[2];
1048 	u8 tx_mgmt_power;
1049 
1050 } __packed;
1051 
1052 struct wcn36xx_hal_end_scan_req_msg {
1053 	struct wcn36xx_hal_msg_header header;
1054 
1055 	/* Indicates the channel to stop scanning. Not used really. But
1056 	 * retained for symmetry with "start Scan" message. It can also
1057 	 * help in error check if needed. */
1058 	u8 scan_channel;
1059 } __packed;
1060 
1061 struct wcn36xx_hal_end_scan_rsp_msg {
1062 	struct wcn36xx_hal_msg_header header;
1063 
1064 	/* success or failure */
1065 	u32 status;
1066 } __packed;
1067 
1068 struct wcn36xx_hal_finish_scan_req_msg {
1069 	struct wcn36xx_hal_msg_header header;
1070 
1071 	/* Identifies the operational state of the AP/STA
1072 	 * LEARN - AP Role SCAN - STA Role */
1073 	enum wcn36xx_hal_sys_mode mode;
1074 
1075 	/* Operating channel to tune to. */
1076 	u8 oper_channel;
1077 
1078 	/* Channel Bonding state If 20/40 MHz is operational, this will
1079 	 * indicate the 40 MHz extension channel in combination with the
1080 	 * control channel */
1081 	enum phy_chan_bond_state cb_state;
1082 
1083 	/* BSSID of the BSS */
1084 	u8 bssid[ETH_ALEN];
1085 
1086 	/* Whether BSS needs to be notified */
1087 	u8 notify;
1088 
1089 	/* Kind of frame to be used for notifying the BSS (Data Null, QoS
1090 	 * Null, or CTS to Self). Must always be a valid frame type. */
1091 	u8 frame_type;
1092 
1093 	/* UMAC has the option of passing the MAC frame to be used for
1094 	 * notifying the BSS. If non-zero, HAL will use the MAC frame
1095 	 * buffer pointed to by macMgmtHdr. If zero, HAL will generate the
1096 	 * appropriate MAC frame based on frameType. */
1097 	u8 frame_length;
1098 
1099 	/* Following the framelength there is a MAC frame buffer if
1100 	 * frameLength is non-zero. */
1101 	struct wcn36xx_hal_mac_mgmt_hdr mac_mgmt_hdr;
1102 
1103 	/* Entry to hold number of active BSS idx's */
1104 	struct wcn36xx_hal_scan_entry scan_entry;
1105 
1106 } __packed;
1107 
1108 struct wcn36xx_hal_finish_scan_rsp_msg {
1109 	struct wcn36xx_hal_msg_header header;
1110 
1111 	/* success or failure */
1112 	u32 status;
1113 
1114 } __packed;
1115 
1116 enum wcn36xx_hal_rate_index {
1117 	HW_RATE_INDEX_1MBPS	= 0x82,
1118 	HW_RATE_INDEX_2MBPS	= 0x84,
1119 	HW_RATE_INDEX_5_5MBPS	= 0x8B,
1120 	HW_RATE_INDEX_6MBPS	= 0x0C,
1121 	HW_RATE_INDEX_9MBPS	= 0x12,
1122 	HW_RATE_INDEX_11MBPS	= 0x96,
1123 	HW_RATE_INDEX_12MBPS	= 0x18,
1124 	HW_RATE_INDEX_18MBPS	= 0x24,
1125 	HW_RATE_INDEX_24MBPS	= 0x30,
1126 	HW_RATE_INDEX_36MBPS	= 0x48,
1127 	HW_RATE_INDEX_48MBPS	= 0x60,
1128 	HW_RATE_INDEX_54MBPS	= 0x6C
1129 };
1130 
1131 struct wcn36xx_hal_supported_rates {
1132 	/*
1133 	 * For Self STA Entry: this represents Self Mode.
1134 	 * For Peer Stations, this represents the mode of the peer.
1135 	 * On Station:
1136 	 *
1137 	 * --this mode is updated when PE adds the Self Entry.
1138 	 *
1139 	 * -- OR when PE sends 'ADD_BSS' message and station context in BSS
1140 	 *    is used to indicate the mode of the AP.
1141 	 *
1142 	 * ON AP:
1143 	 *
1144 	 * -- this mode is updated when PE sends 'ADD_BSS' and Sta entry
1145 	 *     for that BSS is used to indicate the self mode of the AP.
1146 	 *
1147 	 * -- OR when a station is associated, PE sends 'ADD_STA' message
1148 	 *    with this mode updated.
1149 	 */
1150 
1151 	enum sta_rate_mode op_rate_mode;
1152 
1153 	/* 11b, 11a and aniLegacyRates are IE rates which gives rate in
1154 	 * unit of 500Kbps */
1155 	u16 dsss_rates[WCN36XX_HAL_NUM_DSSS_RATES];
1156 	u16 ofdm_rates[WCN36XX_HAL_NUM_OFDM_RATES];
1157 	u16 legacy_rates[WCN36XX_HAL_NUM_POLARIS_RATES];
1158 	u16 reserved;
1159 
1160 	/* Taurus only supports 26 Titan Rates(no ESF/concat Rates will be
1161 	 * supported) First 26 bits are reserved for those Titan rates and
1162 	 * the last 4 bits(bit28-31) for Taurus, 2(bit26-27) bits are
1163 	 * reserved. */
1164 	/* Titan and Taurus Rates */
1165 	u32 enhanced_rate_bitmap;
1166 
1167 	/*
1168 	 * 0-76 bits used, remaining reserved
1169 	 * bits 0-15 and 32 should be set.
1170 	 */
1171 	u8 supported_mcs_set[WCN36XX_HAL_MAC_MAX_SUPPORTED_MCS_SET];
1172 
1173 	/*
1174 	 * RX Highest Supported Data Rate defines the highest data
1175 	 * rate that the STA is able to receive, in unites of 1Mbps.
1176 	 * This value is derived from "Supported MCS Set field" inside
1177 	 * the HT capability element.
1178 	 */
1179 	u16 rx_highest_data_rate;
1180 
1181 } __packed;
1182 
1183 struct wcn36xx_hal_config_sta_params {
1184 	/* BSSID of STA */
1185 	u8 bssid[ETH_ALEN];
1186 
1187 	/* ASSOC ID, as assigned by UMAC */
1188 	u16 aid;
1189 
1190 	/* STA entry Type: 0 - Self, 1 - Other/Peer, 2 - BSSID, 3 - BCAST */
1191 	u8 type;
1192 
1193 	/* Short Preamble Supported. */
1194 	u8 short_preamble_supported;
1195 
1196 	/* MAC Address of STA */
1197 	u8 mac[ETH_ALEN];
1198 
1199 	/* Listen interval of the STA */
1200 	u16 listen_interval;
1201 
1202 	/* Support for 11e/WMM */
1203 	u8 wmm_enabled;
1204 
1205 	/* 11n HT capable STA */
1206 	u8 ht_capable;
1207 
1208 	/* TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz */
1209 	u8 tx_channel_width_set;
1210 
1211 	/* RIFS mode 0 - NA, 1 - Allowed */
1212 	u8 rifs_mode;
1213 
1214 	/* L-SIG TXOP Protection mechanism
1215 	   0 - No Support, 1 - Supported
1216 	   SG - there is global field */
1217 	u8 lsig_txop_protection;
1218 
1219 	/* Max Ampdu Size supported by STA. TPE programming.
1220 	   0 : 8k , 1 : 16k, 2 : 32k, 3 : 64k */
1221 	u8 max_ampdu_size;
1222 
1223 	/* Max Ampdu density. Used by RA.  3 : 0~7 : 2^(11nAMPDUdensity -4) */
1224 	u8 max_ampdu_density;
1225 
1226 	/* Max AMSDU size 1 : 3839 bytes, 0 : 7935 bytes */
1227 	u8 max_amsdu_size;
1228 
1229 	/* Short GI support for 40Mhz packets */
1230 	u8 sgi_40mhz;
1231 
1232 	/* Short GI support for 20Mhz packets */
1233 	u8 sgi_20Mhz;
1234 
1235 	/* TODO move this parameter to the end for 3680 */
1236 	/* These rates are the intersection of peer and self capabilities. */
1237 	struct wcn36xx_hal_supported_rates supported_rates;
1238 
1239 	/* Robust Management Frame (RMF) enabled/disabled */
1240 	u8 rmf;
1241 
1242 	/* The unicast encryption type in the association */
1243 	u32 encrypt_type;
1244 
1245 	/* HAL should update the existing STA entry, if this flag is set. UMAC
1246 	   will set this flag in case of RE-ASSOC, where we want to reuse the
1247 	   old STA ID. 0 = Add, 1 = Update */
1248 	u8 action;
1249 
1250 	/* U-APSD Flags: 1b per AC.  Encoded as follows:
1251 	   b7 b6 b5 b4 b3 b2 b1 b0 =
1252 	   X  X  X  X  BE BK VI VO */
1253 	u8 uapsd;
1254 
1255 	/* Max SP Length */
1256 	u8 max_sp_len;
1257 
1258 	/* 11n Green Field preamble support
1259 	   0 - Not supported, 1 - Supported */
1260 	u8 green_field_capable;
1261 
1262 	/* MIMO Power Save mode */
1263 	enum wcn36xx_hal_ht_mimo_state mimo_ps;
1264 
1265 	/* Delayed BA Support */
1266 	u8 delayed_ba_support;
1267 
1268 	/* Max AMPDU duration in 32us */
1269 	u8 max_ampdu_duration;
1270 
1271 	/* HT STA should set it to 1 if it is enabled in BSS. HT STA should
1272 	 * set it to 0 if AP does not support it. This indication is sent
1273 	 * to HAL and HAL uses this flag to pickup up appropriate 40Mhz
1274 	 * rates. */
1275 	u8 dsss_cck_mode_40mhz;
1276 
1277 	/* Valid STA Idx when action=Update. Set to 0xFF when invalid!
1278 	 * Retained for backward compalibity with existing HAL code */
1279 	u8 sta_index;
1280 
1281 	/* BSSID of BSS to which station is associated. Set to 0xFF when
1282 	 * invalid. Retained for backward compalibity with existing HAL
1283 	 * code */
1284 	u8 bssid_index;
1285 
1286 	u8 p2p;
1287 
1288 	/* TODO add this parameter for 3680. */
1289 	/* Reserved to align next field on a dword boundary */
1290 	/* u8 reserved; */
1291 } __packed;
1292 
1293 struct wcn36xx_hal_config_sta_req_msg {
1294 	struct wcn36xx_hal_msg_header header;
1295 	struct wcn36xx_hal_config_sta_params sta_params;
1296 } __packed;
1297 
1298 struct wcn36xx_hal_config_sta_params_v1 {
1299 	/* BSSID of STA */
1300 	u8 bssid[ETH_ALEN];
1301 
1302 	/* ASSOC ID, as assigned by UMAC */
1303 	u16 aid;
1304 
1305 	/* STA entry Type: 0 - Self, 1 - Other/Peer, 2 - BSSID, 3 - BCAST */
1306 	u8 type;
1307 
1308 	/* Short Preamble Supported. */
1309 	u8 short_preamble_supported;
1310 
1311 	/* MAC Address of STA */
1312 	u8 mac[ETH_ALEN];
1313 
1314 	/* Listen interval of the STA */
1315 	u16 listen_interval;
1316 
1317 	/* Support for 11e/WMM */
1318 	u8 wmm_enabled;
1319 
1320 	/* 11n HT capable STA */
1321 	u8 ht_capable;
1322 
1323 	/* TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz */
1324 	u8 tx_channel_width_set;
1325 
1326 	/* RIFS mode 0 - NA, 1 - Allowed */
1327 	u8 rifs_mode;
1328 
1329 	/* L-SIG TXOP Protection mechanism
1330 	   0 - No Support, 1 - Supported
1331 	   SG - there is global field */
1332 	u8 lsig_txop_protection;
1333 
1334 	/* Max Ampdu Size supported by STA. TPE programming.
1335 	   0 : 8k , 1 : 16k, 2 : 32k, 3 : 64k */
1336 	u8 max_ampdu_size;
1337 
1338 	/* Max Ampdu density. Used by RA.  3 : 0~7 : 2^(11nAMPDUdensity -4) */
1339 	u8 max_ampdu_density;
1340 
1341 	/* Max AMSDU size 1 : 3839 bytes, 0 : 7935 bytes */
1342 	u8 max_amsdu_size;
1343 
1344 	/* Short GI support for 40Mhz packets */
1345 	u8 sgi_40mhz;
1346 
1347 	/* Short GI support for 20Mhz packets */
1348 	u8 sgi_20Mhz;
1349 
1350 	/* Robust Management Frame (RMF) enabled/disabled */
1351 	u8 rmf;
1352 
1353 	/* The unicast encryption type in the association */
1354 	u32 encrypt_type;
1355 
1356 	/* HAL should update the existing STA entry, if this flag is set. UMAC
1357 	   will set this flag in case of RE-ASSOC, where we want to reuse the
1358 	   old STA ID. 0 = Add, 1 = Update */
1359 	u8 action;
1360 
1361 	/* U-APSD Flags: 1b per AC.  Encoded as follows:
1362 	   b7 b6 b5 b4 b3 b2 b1 b0 =
1363 	   X  X  X  X  BE BK VI VO */
1364 	u8 uapsd;
1365 
1366 	/* Max SP Length */
1367 	u8 max_sp_len;
1368 
1369 	/* 11n Green Field preamble support
1370 	   0 - Not supported, 1 - Supported */
1371 	u8 green_field_capable;
1372 
1373 	/* MIMO Power Save mode */
1374 	enum wcn36xx_hal_ht_mimo_state mimo_ps;
1375 
1376 	/* Delayed BA Support */
1377 	u8 delayed_ba_support;
1378 
1379 	/* Max AMPDU duration in 32us */
1380 	u8 max_ampdu_duration;
1381 
1382 	/* HT STA should set it to 1 if it is enabled in BSS. HT STA should
1383 	 * set it to 0 if AP does not support it. This indication is sent
1384 	 * to HAL and HAL uses this flag to pickup up appropriate 40Mhz
1385 	 * rates. */
1386 	u8 dsss_cck_mode_40mhz;
1387 
1388 	/* Valid STA Idx when action=Update. Set to 0xFF when invalid!
1389 	 * Retained for backward compalibity with existing HAL code */
1390 	u8 sta_index;
1391 
1392 	/* BSSID of BSS to which station is associated. Set to 0xFF when
1393 	 * invalid. Retained for backward compalibity with existing HAL
1394 	 * code */
1395 	u8 bssid_index;
1396 
1397 	u8 p2p;
1398 
1399 	/* Reserved to align next field on a dword boundary */
1400 	u8 reserved;
1401 
1402 	/* These rates are the intersection of peer and self capabilities. */
1403 	struct wcn36xx_hal_supported_rates supported_rates;
1404 } __packed;
1405 
1406 struct wcn36xx_hal_config_sta_req_msg_v1 {
1407 	struct wcn36xx_hal_msg_header header;
1408 	struct wcn36xx_hal_config_sta_params_v1 sta_params;
1409 } __packed;
1410 
1411 struct config_sta_rsp_params {
1412 	/* success or failure */
1413 	u32 status;
1414 
1415 	/* Station index; valid only when 'status' field value SUCCESS */
1416 	u8 sta_index;
1417 
1418 	/* BSSID Index of BSS to which the station is associated */
1419 	u8 bssid_index;
1420 
1421 	/* DPU Index for PTK */
1422 	u8 dpu_index;
1423 
1424 	/* DPU Index for GTK */
1425 	u8 bcast_dpu_index;
1426 
1427 	/* DPU Index for IGTK  */
1428 	u8 bcast_mgmt_dpu_idx;
1429 
1430 	/* PTK DPU signature */
1431 	u8 uc_ucast_sig;
1432 
1433 	/* GTK DPU isignature */
1434 	u8 uc_bcast_sig;
1435 
1436 	/* IGTK DPU signature */
1437 	u8 uc_mgmt_sig;
1438 
1439 	u8 p2p;
1440 
1441 } __packed;
1442 
1443 struct wcn36xx_hal_config_sta_rsp_msg {
1444 	struct wcn36xx_hal_msg_header header;
1445 
1446 	struct config_sta_rsp_params params;
1447 } __packed;
1448 
1449 /* Delete STA Request message */
1450 struct wcn36xx_hal_delete_sta_req_msg {
1451 	struct wcn36xx_hal_msg_header header;
1452 
1453 	/* Index of STA to delete */
1454 	u8 sta_index;
1455 
1456 } __packed;
1457 
1458 /* Delete STA Response message */
1459 struct wcn36xx_hal_delete_sta_rsp_msg {
1460 	struct wcn36xx_hal_msg_header header;
1461 
1462 	/* success or failure */
1463 	u32 status;
1464 
1465 	/* Index of STA deleted */
1466 	u8 sta_id;
1467 } __packed;
1468 
1469 /* 12 Bytes long because this structure can be used to represent rate and
1470  * extended rate set IEs. The parser assume this to be at least 12 */
1471 struct wcn36xx_hal_rate_set {
1472 	u8 num_rates;
1473 	u8 rate[WCN36XX_HAL_MAC_RATESET_EID_MAX];
1474 } __packed;
1475 
1476 /* access category record */
1477 struct wcn36xx_hal_aci_aifsn {
1478 #ifndef ANI_LITTLE_BIT_ENDIAN
1479 	u8 rsvd:1;
1480 	u8 aci:2;
1481 	u8 acm:1;
1482 	u8 aifsn:4;
1483 #else
1484 	u8 aifsn:4;
1485 	u8 acm:1;
1486 	u8 aci:2;
1487 	u8 rsvd:1;
1488 #endif
1489 } __packed;
1490 
1491 /* contention window size */
1492 struct wcn36xx_hal_mac_cw {
1493 #ifndef ANI_LITTLE_BIT_ENDIAN
1494 	u8 max:4;
1495 	u8 min:4;
1496 #else
1497 	u8 min:4;
1498 	u8 max:4;
1499 #endif
1500 } __packed;
1501 
1502 struct wcn36xx_hal_edca_param_record {
1503 	struct wcn36xx_hal_aci_aifsn aci;
1504 	struct wcn36xx_hal_mac_cw cw;
1505 	u16 txop_limit;
1506 } __packed;
1507 
1508 struct wcn36xx_hal_mac_ssid {
1509 	u8 length;
1510 	u8 ssid[32];
1511 } __packed;
1512 
1513 /* Concurrency role. These are generic IDs that identify the various roles
1514  *  in the software system. */
1515 enum wcn36xx_hal_con_mode {
1516 	WCN36XX_HAL_STA_MODE = 0,
1517 
1518 	/* to support softAp mode . This is misleading.
1519 	   It means AP MODE only. */
1520 	WCN36XX_HAL_STA_SAP_MODE = 1,
1521 
1522 	WCN36XX_HAL_P2P_CLIENT_MODE,
1523 	WCN36XX_HAL_P2P_GO_MODE,
1524 	WCN36XX_HAL_MONITOR_MODE,
1525 };
1526 
1527 /* This is a bit pattern to be set for each mode
1528  * bit 0 - sta mode
1529  * bit 1 - ap mode
1530  * bit 2 - p2p client mode
1531  * bit 3 - p2p go mode */
1532 enum wcn36xx_hal_concurrency_mode {
1533 	HAL_STA = 1,
1534 	HAL_SAP = 2,
1535 
1536 	/* to support sta, softAp  mode . This means STA+AP mode */
1537 	HAL_STA_SAP = 3,
1538 
1539 	HAL_P2P_CLIENT = 4,
1540 	HAL_P2P_GO = 8,
1541 	HAL_MAX_CONCURRENCY_PERSONA = 4
1542 };
1543 
1544 struct wcn36xx_hal_config_bss_params {
1545 	/* BSSID */
1546 	u8 bssid[ETH_ALEN];
1547 
1548 	/* Self Mac Address */
1549 	u8 self_mac_addr[ETH_ALEN];
1550 
1551 	/* BSS type */
1552 	enum wcn36xx_hal_bss_type bss_type;
1553 
1554 	/* Operational Mode: AP =0, STA = 1 */
1555 	u8 oper_mode;
1556 
1557 	/* Network Type */
1558 	enum wcn36xx_hal_nw_type nw_type;
1559 
1560 	/* Used to classify PURE_11G/11G_MIXED to program MTU */
1561 	u8 short_slot_time_supported;
1562 
1563 	/* Co-exist with 11a STA */
1564 	u8 lla_coexist;
1565 
1566 	/* Co-exist with 11b STA */
1567 	u8 llb_coexist;
1568 
1569 	/* Co-exist with 11g STA */
1570 	u8 llg_coexist;
1571 
1572 	/* Coexistence with 11n STA */
1573 	u8 ht20_coexist;
1574 
1575 	/* Non GF coexist flag */
1576 	u8 lln_non_gf_coexist;
1577 
1578 	/* TXOP protection support */
1579 	u8 lsig_tx_op_protection_full_support;
1580 
1581 	/* RIFS mode */
1582 	u8 rifs_mode;
1583 
1584 	/* Beacon Interval in TU */
1585 	u16 beacon_interval;
1586 
1587 	/* DTIM period */
1588 	u8 dtim_period;
1589 
1590 	/* TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz */
1591 	u8 tx_channel_width_set;
1592 
1593 	/* Operating channel */
1594 	u8 oper_channel;
1595 
1596 	/* Extension channel for channel bonding */
1597 	u8 ext_channel;
1598 
1599 	/* Reserved to align next field on a dword boundary */
1600 	u8 reserved;
1601 
1602 	/* TODO move sta to the end for 3680 */
1603 	/* Context of the station being added in HW
1604 	 *  Add a STA entry for "itself" -
1605 	 *
1606 	 *  On AP  - Add the AP itself in an "STA context"
1607 	 *
1608 	 *  On STA - Add the AP to which this STA is joining in an
1609 	 *  "STA context"
1610 	 */
1611 	struct wcn36xx_hal_config_sta_params sta;
1612 	/* SSID of the BSS */
1613 	struct wcn36xx_hal_mac_ssid ssid;
1614 
1615 	/* HAL should update the existing BSS entry, if this flag is set.
1616 	 * UMAC will set this flag in case of reassoc, where we want to
1617 	 * resue the the old BSSID and still return success 0 = Add, 1 =
1618 	 * Update */
1619 	u8 action;
1620 
1621 	/* MAC Rate Set */
1622 	struct wcn36xx_hal_rate_set rateset;
1623 
1624 	/* Enable/Disable HT capabilities of the BSS */
1625 	u8 ht;
1626 
1627 	/* Enable/Disable OBSS protection */
1628 	u8 obss_prot_enabled;
1629 
1630 	/* RMF enabled/disabled */
1631 	u8 rmf;
1632 
1633 	/* HT Operating Mode operating mode of the 802.11n STA */
1634 	enum wcn36xx_hal_ht_operating_mode ht_oper_mode;
1635 
1636 	/* Dual CTS Protection: 0 - Unused, 1 - Used */
1637 	u8 dual_cts_protection;
1638 
1639 	/* Probe Response Max retries */
1640 	u8 max_probe_resp_retry_limit;
1641 
1642 	/* To Enable Hidden ssid */
1643 	u8 hidden_ssid;
1644 
1645 	/* To Enable Disable FW Proxy Probe Resp */
1646 	u8 proxy_probe_resp;
1647 
1648 	/* Boolean to indicate if EDCA params are valid. UMAC might not
1649 	 * have valid EDCA params or might not desire to apply EDCA params
1650 	 * during config BSS. 0 implies Not Valid ; Non-Zero implies
1651 	 * valid */
1652 	u8 edca_params_valid;
1653 
1654 	/* EDCA Parameters for Best Effort Access Category */
1655 	struct wcn36xx_hal_edca_param_record acbe;
1656 
1657 	/* EDCA Parameters forBackground Access Category */
1658 	struct wcn36xx_hal_edca_param_record acbk;
1659 
1660 	/* EDCA Parameters for Video Access Category */
1661 	struct wcn36xx_hal_edca_param_record acvi;
1662 
1663 	/* EDCA Parameters for Voice Access Category */
1664 	struct wcn36xx_hal_edca_param_record acvo;
1665 
1666 	/* Ext Bss Config Msg if set */
1667 	u8 ext_set_sta_key_param_valid;
1668 
1669 	/* SetStaKeyParams for ext bss msg */
1670 	struct wcn36xx_hal_set_sta_key_params ext_set_sta_key_param;
1671 
1672 	/* Persona for the BSS can be STA,AP,GO,CLIENT value same as enum
1673 	 * wcn36xx_hal_con_mode */
1674 	u8 wcn36xx_hal_persona;
1675 
1676 	u8 spectrum_mgt_enable;
1677 
1678 	/* HAL fills in the tx power used for mgmt frames in txMgmtPower */
1679 	s8 tx_mgmt_power;
1680 
1681 	/* maxTxPower has max power to be used after applying the power
1682 	 * constraint if any */
1683 	s8 max_tx_power;
1684 } __packed;
1685 
1686 struct wcn36xx_hal_config_bss_req_msg {
1687 	struct wcn36xx_hal_msg_header header;
1688 	struct wcn36xx_hal_config_bss_params bss_params;
1689 } __packed;
1690 
1691 struct wcn36xx_hal_config_bss_params_v1 {
1692 	/* BSSID */
1693 	u8 bssid[ETH_ALEN];
1694 
1695 	/* Self Mac Address */
1696 	u8 self_mac_addr[ETH_ALEN];
1697 
1698 	/* BSS type */
1699 	enum wcn36xx_hal_bss_type bss_type;
1700 
1701 	/* Operational Mode: AP =0, STA = 1 */
1702 	u8 oper_mode;
1703 
1704 	/* Network Type */
1705 	enum wcn36xx_hal_nw_type nw_type;
1706 
1707 	/* Used to classify PURE_11G/11G_MIXED to program MTU */
1708 	u8 short_slot_time_supported;
1709 
1710 	/* Co-exist with 11a STA */
1711 	u8 lla_coexist;
1712 
1713 	/* Co-exist with 11b STA */
1714 	u8 llb_coexist;
1715 
1716 	/* Co-exist with 11g STA */
1717 	u8 llg_coexist;
1718 
1719 	/* Coexistence with 11n STA */
1720 	u8 ht20_coexist;
1721 
1722 	/* Non GF coexist flag */
1723 	u8 lln_non_gf_coexist;
1724 
1725 	/* TXOP protection support */
1726 	u8 lsig_tx_op_protection_full_support;
1727 
1728 	/* RIFS mode */
1729 	u8 rifs_mode;
1730 
1731 	/* Beacon Interval in TU */
1732 	u16 beacon_interval;
1733 
1734 	/* DTIM period */
1735 	u8 dtim_period;
1736 
1737 	/* TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz */
1738 	u8 tx_channel_width_set;
1739 
1740 	/* Operating channel */
1741 	u8 oper_channel;
1742 
1743 	/* Extension channel for channel bonding */
1744 	u8 ext_channel;
1745 
1746 	/* Reserved to align next field on a dword boundary */
1747 	u8 reserved;
1748 
1749 	/* SSID of the BSS */
1750 	struct wcn36xx_hal_mac_ssid ssid;
1751 
1752 	/* HAL should update the existing BSS entry, if this flag is set.
1753 	 * UMAC will set this flag in case of reassoc, where we want to
1754 	 * resue the the old BSSID and still return success 0 = Add, 1 =
1755 	 * Update */
1756 	u8 action;
1757 
1758 	/* MAC Rate Set */
1759 	struct wcn36xx_hal_rate_set rateset;
1760 
1761 	/* Enable/Disable HT capabilities of the BSS */
1762 	u8 ht;
1763 
1764 	/* Enable/Disable OBSS protection */
1765 	u8 obss_prot_enabled;
1766 
1767 	/* RMF enabled/disabled */
1768 	u8 rmf;
1769 
1770 	/* HT Operating Mode operating mode of the 802.11n STA */
1771 	enum wcn36xx_hal_ht_operating_mode ht_oper_mode;
1772 
1773 	/* Dual CTS Protection: 0 - Unused, 1 - Used */
1774 	u8 dual_cts_protection;
1775 
1776 	/* Probe Response Max retries */
1777 	u8 max_probe_resp_retry_limit;
1778 
1779 	/* To Enable Hidden ssid */
1780 	u8 hidden_ssid;
1781 
1782 	/* To Enable Disable FW Proxy Probe Resp */
1783 	u8 proxy_probe_resp;
1784 
1785 	/* Boolean to indicate if EDCA params are valid. UMAC might not
1786 	 * have valid EDCA params or might not desire to apply EDCA params
1787 	 * during config BSS. 0 implies Not Valid ; Non-Zero implies
1788 	 * valid */
1789 	u8 edca_params_valid;
1790 
1791 	/* EDCA Parameters for Best Effort Access Category */
1792 	struct wcn36xx_hal_edca_param_record acbe;
1793 
1794 	/* EDCA Parameters forBackground Access Category */
1795 	struct wcn36xx_hal_edca_param_record acbk;
1796 
1797 	/* EDCA Parameters for Video Access Category */
1798 	struct wcn36xx_hal_edca_param_record acvi;
1799 
1800 	/* EDCA Parameters for Voice Access Category */
1801 	struct wcn36xx_hal_edca_param_record acvo;
1802 
1803 	/* Ext Bss Config Msg if set */
1804 	u8 ext_set_sta_key_param_valid;
1805 
1806 	/* SetStaKeyParams for ext bss msg */
1807 	struct wcn36xx_hal_set_sta_key_params ext_set_sta_key_param;
1808 
1809 	/* Persona for the BSS can be STA,AP,GO,CLIENT value same as enum
1810 	 * wcn36xx_hal_con_mode */
1811 	u8 wcn36xx_hal_persona;
1812 
1813 	u8 spectrum_mgt_enable;
1814 
1815 	/* HAL fills in the tx power used for mgmt frames in txMgmtPower */
1816 	s8 tx_mgmt_power;
1817 
1818 	/* maxTxPower has max power to be used after applying the power
1819 	 * constraint if any */
1820 	s8 max_tx_power;
1821 
1822 	/* Context of the station being added in HW
1823 	 *  Add a STA entry for "itself" -
1824 	 *
1825 	 *  On AP  - Add the AP itself in an "STA context"
1826 	 *
1827 	 *  On STA - Add the AP to which this STA is joining in an
1828 	 *  "STA context"
1829 	 */
1830 	struct wcn36xx_hal_config_sta_params_v1 sta;
1831 } __packed;
1832 
1833 struct wcn36xx_hal_config_bss_req_msg_v1 {
1834 	struct wcn36xx_hal_msg_header header;
1835 	struct wcn36xx_hal_config_bss_params_v1 bss_params;
1836 } __packed;
1837 
1838 struct wcn36xx_hal_config_bss_rsp_params {
1839 	/* Success or Failure */
1840 	u32 status;
1841 
1842 	/* BSS index allocated by HAL */
1843 	u8 bss_index;
1844 
1845 	/* DPU descriptor index for PTK */
1846 	u8 dpu_desc_index;
1847 
1848 	/* PTK DPU signature */
1849 	u8 ucast_dpu_signature;
1850 
1851 	/* DPU descriptor index for GTK */
1852 	u8 bcast_dpu_desc_indx;
1853 
1854 	/* GTK DPU signature */
1855 	u8 bcast_dpu_signature;
1856 
1857 	/* DPU descriptor for IGTK */
1858 	u8 mgmt_dpu_desc_index;
1859 
1860 	/* IGTK DPU signature */
1861 	u8 mgmt_dpu_signature;
1862 
1863 	/* Station Index for BSS entry */
1864 	u8 bss_sta_index;
1865 
1866 	/* Self station index for this BSS */
1867 	u8 bss_self_sta_index;
1868 
1869 	/* Bcast station for buffering bcast frames in AP role */
1870 	u8 bss_bcast_sta_idx;
1871 
1872 	/* MAC Address of STA(PEER/SELF) in staContext of configBSSReq */
1873 	u8 mac[ETH_ALEN];
1874 
1875 	/* HAL fills in the tx power used for mgmt frames in this field. */
1876 	s8 tx_mgmt_power;
1877 
1878 } __packed;
1879 
1880 struct wcn36xx_hal_config_bss_rsp_msg {
1881 	struct wcn36xx_hal_msg_header header;
1882 	struct wcn36xx_hal_config_bss_rsp_params bss_rsp_params;
1883 } __packed;
1884 
1885 struct wcn36xx_hal_delete_bss_req_msg {
1886 	struct wcn36xx_hal_msg_header header;
1887 
1888 	/* BSS index to be deleted */
1889 	u8 bss_index;
1890 
1891 } __packed;
1892 
1893 struct wcn36xx_hal_delete_bss_rsp_msg {
1894 	struct wcn36xx_hal_msg_header header;
1895 
1896 	/* Success or Failure */
1897 	u32 status;
1898 
1899 	/* BSS index that has been deleted */
1900 	u8 bss_index;
1901 
1902 } __packed;
1903 
1904 struct wcn36xx_hal_join_req_msg {
1905 	struct wcn36xx_hal_msg_header header;
1906 
1907 	/* Indicates the BSSID to which STA is going to associate */
1908 	u8 bssid[ETH_ALEN];
1909 
1910 	/* Indicates the channel to switch to. */
1911 	u8 channel;
1912 
1913 	/* Self STA MAC */
1914 	u8 self_sta_mac_addr[ETH_ALEN];
1915 
1916 	/* Local power constraint */
1917 	u8 local_power_constraint;
1918 
1919 	/* Secondary channel offset */
1920 	enum phy_chan_bond_state secondary_channel_offset;
1921 
1922 	/* link State */
1923 	enum wcn36xx_hal_link_state link_state;
1924 
1925 	/* Max TX power */
1926 	s8 max_tx_power;
1927 } __packed;
1928 
1929 struct wcn36xx_hal_join_rsp_msg {
1930 	struct wcn36xx_hal_msg_header header;
1931 
1932 	/* success or failure */
1933 	u32 status;
1934 
1935 	/* HAL fills in the tx power used for mgmt frames in this field */
1936 	u8 tx_mgmt_power;
1937 } __packed;
1938 
1939 struct post_assoc_req_msg {
1940 	struct wcn36xx_hal_msg_header header;
1941 
1942 	struct wcn36xx_hal_config_sta_params sta_params;
1943 	struct wcn36xx_hal_config_bss_params bss_params;
1944 };
1945 
1946 struct post_assoc_rsp_msg {
1947 	struct wcn36xx_hal_msg_header header;
1948 	struct config_sta_rsp_params sta_rsp_params;
1949 	struct wcn36xx_hal_config_bss_rsp_params bss_rsp_params;
1950 };
1951 
1952 /* This is used to create a set of WEP keys for a given BSS. */
1953 struct wcn36xx_hal_set_bss_key_req_msg {
1954 	struct wcn36xx_hal_msg_header header;
1955 
1956 	/* BSS Index of the BSS */
1957 	u8 bss_idx;
1958 
1959 	/* Encryption Type used with peer */
1960 	enum ani_ed_type enc_type;
1961 
1962 	/* Number of keys */
1963 	u8 num_keys;
1964 
1965 	/* Array of keys. */
1966 	struct wcn36xx_hal_keys keys[WCN36XX_HAL_MAC_MAX_NUM_OF_DEFAULT_KEYS];
1967 
1968 	/* Control for Replay Count, 1= Single TID based replay count on Tx
1969 	 * 0 = Per TID based replay count on TX */
1970 	u8 single_tid_rc;
1971 } __packed;
1972 
1973 /* tagged version of set bss key */
1974 struct wcn36xx_hal_set_bss_key_req_msg_tagged {
1975 	struct wcn36xx_hal_set_bss_key_req_msg Msg;
1976 	u32 tag;
1977 } __packed;
1978 
1979 struct wcn36xx_hal_set_bss_key_rsp_msg {
1980 	struct wcn36xx_hal_msg_header header;
1981 
1982 	/* success or failure */
1983 	u32 status;
1984 } __packed;
1985 
1986 /*
1987  * This is used  configure the key information on a given station.
1988  * When the sec_type is WEP40 or WEP104, the def_wep_idx is used to locate
1989  * a preconfigured key from a BSS the station assoicated with; otherwise
1990  * a new key descriptor is created based on the key field.
1991  */
1992 struct wcn36xx_hal_set_sta_key_req_msg {
1993 	struct wcn36xx_hal_msg_header header;
1994 	struct wcn36xx_hal_set_sta_key_params set_sta_key_params;
1995 } __packed;
1996 
1997 struct wcn36xx_hal_set_sta_key_rsp_msg {
1998 	struct wcn36xx_hal_msg_header header;
1999 
2000 	/* success or failure */
2001 	u32 status;
2002 } __packed;
2003 
2004 struct wcn36xx_hal_remove_bss_key_req_msg {
2005 	struct wcn36xx_hal_msg_header header;
2006 
2007 	/* BSS Index of the BSS */
2008 	u8 bss_idx;
2009 
2010 	/* Encryption Type used with peer */
2011 	enum ani_ed_type enc_type;
2012 
2013 	/* Key Id */
2014 	u8 key_id;
2015 
2016 	/* STATIC/DYNAMIC. Used in Nullifying in Key Descriptors for
2017 	 * Static/Dynamic keys */
2018 	enum ani_wep_type wep_type;
2019 } __packed;
2020 
2021 struct wcn36xx_hal_remove_bss_key_rsp_msg {
2022 	struct wcn36xx_hal_msg_header header;
2023 
2024 	/* success or failure */
2025 	u32 status;
2026 } __packed;
2027 
2028 /*
2029  * This is used by PE to Remove the key information on a given station.
2030  */
2031 struct wcn36xx_hal_remove_sta_key_req_msg {
2032 	struct wcn36xx_hal_msg_header header;
2033 
2034 	/* STA Index */
2035 	u16 sta_idx;
2036 
2037 	/* Encryption Type used with peer */
2038 	enum ani_ed_type enc_type;
2039 
2040 	/* Key Id */
2041 	u8 key_id;
2042 
2043 	/* Whether to invalidate the Broadcast key or Unicast key. In case
2044 	 * of WEP, the same key is used for both broadcast and unicast. */
2045 	u8 unicast;
2046 
2047 } __packed;
2048 
2049 struct wcn36xx_hal_remove_sta_key_rsp_msg {
2050 	struct wcn36xx_hal_msg_header header;
2051 
2052 	/*success or failure */
2053 	u32 status;
2054 
2055 } __packed;
2056 
2057 #ifdef FEATURE_OEM_DATA_SUPPORT
2058 
2059 #ifndef OEM_DATA_REQ_SIZE
2060 #define OEM_DATA_REQ_SIZE 134
2061 #endif
2062 
2063 #ifndef OEM_DATA_RSP_SIZE
2064 #define OEM_DATA_RSP_SIZE 1968
2065 #endif
2066 
2067 struct start_oem_data_req_msg {
2068 	struct wcn36xx_hal_msg_header header;
2069 
2070 	u32 status;
2071 	tSirMacAddr self_mac_addr;
2072 	u8 oem_data_req[OEM_DATA_REQ_SIZE];
2073 
2074 };
2075 
2076 struct start_oem_data_rsp_msg {
2077 	struct wcn36xx_hal_msg_header header;
2078 
2079 	u8 oem_data_rsp[OEM_DATA_RSP_SIZE];
2080 };
2081 
2082 #endif
2083 
2084 struct wcn36xx_hal_switch_channel_req_msg {
2085 	struct wcn36xx_hal_msg_header header;
2086 
2087 	/* Channel number */
2088 	u8 channel_number;
2089 
2090 	/* Local power constraint */
2091 	u8 local_power_constraint;
2092 
2093 	/* Secondary channel offset */
2094 	enum phy_chan_bond_state secondary_channel_offset;
2095 
2096 	/* HAL fills in the tx power used for mgmt frames in this field. */
2097 	u8 tx_mgmt_power;
2098 
2099 	/* Max TX power */
2100 	u8 max_tx_power;
2101 
2102 	/* Self STA MAC */
2103 	u8 self_sta_mac_addr[ETH_ALEN];
2104 
2105 	/* VO WIFI comment: BSSID needed to identify session. As the
2106 	 * request has power constraints, this should be applied only to
2107 	 * that session Since MTU timing and EDCA are sessionized, this
2108 	 * struct needs to be sessionized and bssid needs to be out of the
2109 	 * VOWifi feature flag V IMP: Keep bssId field at the end of this
2110 	 * msg. It is used to mantain backward compatbility by way of
2111 	 * ignoring if using new host/old FW or old host/new FW since it is
2112 	 * at the end of this struct
2113 	 */
2114 	u8 bssid[ETH_ALEN];
2115 } __packed;
2116 
2117 struct wcn36xx_hal_switch_channel_rsp_msg {
2118 	struct wcn36xx_hal_msg_header header;
2119 
2120 	/* Status */
2121 	u32 status;
2122 
2123 	/* Channel number - same as in request */
2124 	u8 channel_number;
2125 
2126 	/* HAL fills in the tx power used for mgmt frames in this field */
2127 	u8 tx_mgmt_power;
2128 
2129 	/* BSSID needed to identify session - same as in request */
2130 	u8 bssid[ETH_ALEN];
2131 
2132 } __packed;
2133 
2134 struct update_edca_params_req_msg {
2135 	struct wcn36xx_hal_msg_header header;
2136 
2137 	/*BSS Index */
2138 	u16 bss_index;
2139 
2140 	/* Best Effort */
2141 	struct wcn36xx_hal_edca_param_record acbe;
2142 
2143 	/* Background */
2144 	struct wcn36xx_hal_edca_param_record acbk;
2145 
2146 	/* Video */
2147 	struct wcn36xx_hal_edca_param_record acvi;
2148 
2149 	/* Voice */
2150 	struct wcn36xx_hal_edca_param_record acvo;
2151 };
2152 
2153 struct update_edca_params_rsp_msg {
2154 	struct wcn36xx_hal_msg_header header;
2155 
2156 	/* success or failure */
2157 	u32 status;
2158 };
2159 
2160 struct dpu_stats_params {
2161 	/* Index of STA to which the statistics */
2162 	u16 sta_index;
2163 
2164 	/* Encryption mode */
2165 	u8 enc_mode;
2166 
2167 	/* status */
2168 	u32 status;
2169 
2170 	/* Statistics */
2171 	u32 send_blocks;
2172 	u32 recv_blocks;
2173 	u32 replays;
2174 	u8 mic_error_cnt;
2175 	u32 prot_excl_cnt;
2176 	u16 format_err_cnt;
2177 	u16 un_decryptable_cnt;
2178 	u32 decrypt_err_cnt;
2179 	u32 decrypt_ok_cnt;
2180 };
2181 
2182 struct wcn36xx_hal_stats_req_msg {
2183 	struct wcn36xx_hal_msg_header header;
2184 
2185 	/* Valid STA Idx for per STA stats request */
2186 	u32 sta_id;
2187 
2188 	/* Categories of stats requested as specified in eHalStatsMask */
2189 	u32 stats_mask;
2190 };
2191 
2192 struct ani_summary_stats_info {
2193 	/* Total number of packets(per AC) that were successfully
2194 	 * transmitted with retries */
2195 	u32 retry_cnt[4];
2196 
2197 	/* The number of MSDU packets and MMPDU frames per AC that the
2198 	 * 802.11 station successfully transmitted after more than one
2199 	 * retransmission attempt */
2200 	u32 multiple_retry_cnt[4];
2201 
2202 	/* Total number of packets(per AC) that were successfully
2203 	 * transmitted (with and without retries, including multi-cast,
2204 	 * broadcast) */
2205 	u32 tx_frm_cnt[4];
2206 
2207 	/* Total number of packets that were successfully received (after
2208 	 * appropriate filter rules including multi-cast, broadcast) */
2209 	u32 rx_frm_cnt;
2210 
2211 	/* Total number of duplicate frames received successfully */
2212 	u32 frm_dup_cnt;
2213 
2214 	/* Total number packets(per AC) failed to transmit */
2215 	u32 fail_cnt[4];
2216 
2217 	/* Total number of RTS/CTS sequence failures for transmission of a
2218 	 * packet */
2219 	u32 rts_fail_cnt;
2220 
2221 	/* Total number packets failed transmit because of no ACK from the
2222 	 * remote entity */
2223 	u32 ack_fail_cnt;
2224 
2225 	/* Total number of RTS/CTS sequence success for transmission of a
2226 	 * packet */
2227 	u32 rts_succ_cnt;
2228 
2229 	/* The sum of the receive error count and dropped-receive-buffer
2230 	 * error count. HAL will provide this as a sum of (FCS error) +
2231 	 * (Fail get BD/PDU in HW) */
2232 	u32 rx_discard_cnt;
2233 
2234 	/*
2235 	 * The receive error count. HAL will provide the RxP FCS error
2236 	 * global counter. */
2237 	u32 rx_error_cnt;
2238 
2239 	/* The sum of the transmit-directed byte count, transmit-multicast
2240 	 * byte count and transmit-broadcast byte count. HAL will sum TPE
2241 	 * UC/MC/BCAST global counters to provide this. */
2242 	u32 tx_byte_cnt;
2243 };
2244 
2245 /* defines tx_rate_flags */
2246 enum tx_rate_info {
2247 	/* Legacy rates */
2248 	HAL_TX_RATE_LEGACY = 0x1,
2249 
2250 	/* HT20 rates */
2251 	HAL_TX_RATE_HT20 = 0x2,
2252 
2253 	/* HT40 rates */
2254 	HAL_TX_RATE_HT40 = 0x4,
2255 
2256 	/* Rate with Short guard interval */
2257 	HAL_TX_RATE_SGI = 0x8,
2258 
2259 	/* Rate with Long guard interval */
2260 	HAL_TX_RATE_LGI = 0x10
2261 };
2262 
2263 struct ani_global_class_a_stats_info {
2264 	/* The number of MPDU frames received by the 802.11 station for
2265 	 * MSDU packets or MMPDU frames */
2266 	u32 rx_frag_cnt;
2267 
2268 	/* The number of MPDU frames received by the 802.11 station for
2269 	 * MSDU packets or MMPDU frames when a promiscuous packet filter
2270 	 * was enabled */
2271 	u32 promiscuous_rx_frag_cnt;
2272 
2273 	/* The receiver input sensitivity referenced to a FER of 8% at an
2274 	 * MPDU length of 1024 bytes at the antenna connector. Each element
2275 	 * of the array shall correspond to a supported rate and the order
2276 	 * shall be the same as the supporteRates parameter. */
2277 	u32 rx_input_sensitivity;
2278 
2279 	/* The maximum transmit power in dBm upto one decimal. for eg: if
2280 	 * it is 10.5dBm, the value would be 105 */
2281 	u32 max_pwr;
2282 
2283 	/* Number of times the receiver failed to synchronize with the
2284 	 * incoming signal after detecting the sync in the preamble of the
2285 	 * transmitted PLCP protocol data unit. */
2286 	u32 sync_fail_cnt;
2287 
2288 	/* Legacy transmit rate, in units of 500 kbit/sec, for the most
2289 	 * recently transmitted frame */
2290 	u32 tx_rate;
2291 
2292 	/* mcs index for HT20 and HT40 rates */
2293 	u32 mcs_index;
2294 
2295 	/* to differentiate between HT20 and HT40 rates; short and long
2296 	 * guard interval */
2297 	u32 tx_rate_flags;
2298 };
2299 
2300 struct ani_global_security_stats {
2301 	/* The number of unencrypted received MPDU frames that the MAC
2302 	 * layer discarded when the IEEE 802.11 dot11ExcludeUnencrypted
2303 	 * management information base (MIB) object is enabled */
2304 	u32 rx_wep_unencrypted_frm_cnt;
2305 
2306 	/* The number of received MSDU packets that that the 802.11 station
2307 	 * discarded because of MIC failures */
2308 	u32 rx_mic_fail_cnt;
2309 
2310 	/* The number of encrypted MPDU frames that the 802.11 station
2311 	 * failed to decrypt because of a TKIP ICV error */
2312 	u32 tkip_icv_err;
2313 
2314 	/* The number of received MPDU frames that the 802.11 discarded
2315 	 * because of an invalid AES-CCMP format */
2316 	u32 aes_ccmp_format_err;
2317 
2318 	/* The number of received MPDU frames that the 802.11 station
2319 	 * discarded because of the AES-CCMP replay protection procedure */
2320 	u32 aes_ccmp_replay_cnt;
2321 
2322 	/* The number of received MPDU frames that the 802.11 station
2323 	 * discarded because of errors detected by the AES-CCMP decryption
2324 	 * algorithm */
2325 	u32 aes_ccmp_decrpt_err;
2326 
2327 	/* The number of encrypted MPDU frames received for which a WEP
2328 	 * decryption key was not available on the 802.11 station */
2329 	u32 wep_undecryptable_cnt;
2330 
2331 	/* The number of encrypted MPDU frames that the 802.11 station
2332 	 * failed to decrypt because of a WEP ICV error */
2333 	u32 wep_icv_err;
2334 
2335 	/* The number of received encrypted packets that the 802.11 station
2336 	 * successfully decrypted */
2337 	u32 rx_decrypt_succ_cnt;
2338 
2339 	/* The number of encrypted packets that the 802.11 station failed
2340 	 * to decrypt */
2341 	u32 rx_decrypt_fail_cnt;
2342 };
2343 
2344 struct ani_global_class_b_stats_info {
2345 	struct ani_global_security_stats uc_stats;
2346 	struct ani_global_security_stats mc_bc_stats;
2347 };
2348 
2349 struct ani_global_class_c_stats_info {
2350 	/* This counter shall be incremented for a received A-MSDU frame
2351 	 * with the stations MAC address in the address 1 field or an
2352 	 * A-MSDU frame with a group address in the address 1 field */
2353 	u32 rx_amsdu_cnt;
2354 
2355 	/* This counter shall be incremented when the MAC receives an AMPDU
2356 	 * from the PHY */
2357 	u32 rx_ampdu_cnt;
2358 
2359 	/* This counter shall be incremented when a Frame is transmitted
2360 	 * only on the primary channel */
2361 	u32 tx_20_frm_cnt;
2362 
2363 	/* This counter shall be incremented when a Frame is received only
2364 	 * on the primary channel */
2365 	u32 rx_20_frm_cnt;
2366 
2367 	/* This counter shall be incremented by the number of MPDUs
2368 	 * received in the A-MPDU when an A-MPDU is received */
2369 	u32 rx_mpdu_in_ampdu_cnt;
2370 
2371 	/* This counter shall be incremented when an MPDU delimiter has a
2372 	 * CRC error when this is the first CRC error in the received AMPDU
2373 	 * or when the previous delimiter has been decoded correctly */
2374 	u32 ampdu_delimiter_crc_err;
2375 };
2376 
2377 struct ani_per_sta_stats_info {
2378 	/* The number of MPDU frames that the 802.11 station transmitted
2379 	 * and acknowledged through a received 802.11 ACK frame */
2380 	u32 tx_frag_cnt[4];
2381 
2382 	/* This counter shall be incremented when an A-MPDU is transmitted */
2383 	u32 tx_ampdu_cnt;
2384 
2385 	/* This counter shall increment by the number of MPDUs in the AMPDU
2386 	 * when an A-MPDU is transmitted */
2387 	u32 tx_mpdu_in_ampdu_cnt;
2388 };
2389 
2390 struct wcn36xx_hal_stats_rsp_msg {
2391 	struct wcn36xx_hal_msg_header header;
2392 
2393 	/* Success or Failure */
2394 	u32 status;
2395 
2396 	/* STA Idx */
2397 	u32 sta_index;
2398 
2399 	/* Categories of STATS being returned as per eHalStatsMask */
2400 	u32 stats_mask;
2401 
2402 	/* message type is same as the request type */
2403 	u16 msg_type;
2404 
2405 	/* length of the entire request, includes the pStatsBuf length too */
2406 	u16 msg_len;
2407 };
2408 
2409 struct wcn36xx_hal_set_link_state_req_msg {
2410 	struct wcn36xx_hal_msg_header header;
2411 
2412 	u8 bssid[ETH_ALEN];
2413 	enum wcn36xx_hal_link_state state;
2414 	u8 self_mac_addr[ETH_ALEN];
2415 
2416 } __packed;
2417 
2418 struct set_link_state_rsp_msg {
2419 	struct wcn36xx_hal_msg_header header;
2420 
2421 	/* success or failure */
2422 	u32 status;
2423 };
2424 
2425 /* TSPEC Params */
2426 struct wcn36xx_hal_ts_info_tfc {
2427 #ifndef ANI_LITTLE_BIT_ENDIAN
2428 	u16 ackPolicy:2;
2429 	u16 userPrio:3;
2430 	u16 psb:1;
2431 	u16 aggregation:1;
2432 	u16 accessPolicy:2;
2433 	u16 direction:2;
2434 	u16 tsid:4;
2435 	u16 trafficType:1;
2436 #else
2437 	u16 trafficType:1;
2438 	u16 tsid:4;
2439 	u16 direction:2;
2440 	u16 accessPolicy:2;
2441 	u16 aggregation:1;
2442 	u16 psb:1;
2443 	u16 userPrio:3;
2444 	u16 ackPolicy:2;
2445 #endif
2446 };
2447 
2448 /* Flag to schedule the traffic type */
2449 struct wcn36xx_hal_ts_info_sch {
2450 #ifndef ANI_LITTLE_BIT_ENDIAN
2451 	u8 rsvd:7;
2452 	u8 schedule:1;
2453 #else
2454 	u8 schedule:1;
2455 	u8 rsvd:7;
2456 #endif
2457 };
2458 
2459 /* Traffic and scheduling info */
2460 struct wcn36xx_hal_ts_info {
2461 	struct wcn36xx_hal_ts_info_tfc traffic;
2462 	struct wcn36xx_hal_ts_info_sch schedule;
2463 };
2464 
2465 /* Information elements */
2466 struct wcn36xx_hal_tspec_ie {
2467 	u8 type;
2468 	u8 length;
2469 	struct wcn36xx_hal_ts_info ts_info;
2470 	u16 nom_msdu_size;
2471 	u16 max_msdu_size;
2472 	u32 min_svc_interval;
2473 	u32 max_svc_interval;
2474 	u32 inact_interval;
2475 	u32 suspend_interval;
2476 	u32 svc_start_time;
2477 	u32 min_data_rate;
2478 	u32 mean_data_rate;
2479 	u32 peak_data_rate;
2480 	u32 max_burst_sz;
2481 	u32 delay_bound;
2482 	u32 min_phy_rate;
2483 	u16 surplus_bw;
2484 	u16 medium_time;
2485 };
2486 
2487 struct add_ts_req_msg {
2488 	struct wcn36xx_hal_msg_header header;
2489 
2490 	/* Station Index */
2491 	u16 sta_index;
2492 
2493 	/* TSPEC handler uniquely identifying a TSPEC for a STA in a BSS */
2494 	u16 tspec_index;
2495 
2496 	/* To program TPE with required parameters */
2497 	struct wcn36xx_hal_tspec_ie tspec;
2498 
2499 	/* U-APSD Flags: 1b per AC.  Encoded as follows:
2500 	   b7 b6 b5 b4 b3 b2 b1 b0 =
2501 	   X  X  X  X  BE BK VI VO */
2502 	u8 uapsd;
2503 
2504 	/* These parameters are for all the access categories */
2505 
2506 	/* Service Interval */
2507 	u32 service_interval[WCN36XX_HAL_MAX_AC];
2508 
2509 	/* Suspend Interval */
2510 	u32 suspend_interval[WCN36XX_HAL_MAX_AC];
2511 
2512 	/* Delay Interval */
2513 	u32 delay_interval[WCN36XX_HAL_MAX_AC];
2514 };
2515 
2516 struct add_rs_rsp_msg {
2517 	struct wcn36xx_hal_msg_header header;
2518 
2519 	/* success or failure */
2520 	u32 status;
2521 };
2522 
2523 struct del_ts_req_msg {
2524 	struct wcn36xx_hal_msg_header header;
2525 
2526 	/* Station Index */
2527 	u16 sta_index;
2528 
2529 	/* TSPEC identifier uniquely identifying a TSPEC for a STA in a BSS */
2530 	u16 tspec_index;
2531 
2532 	/* To lookup station id using the mac address */
2533 	u8 bssid[ETH_ALEN];
2534 };
2535 
2536 struct del_ts_rsp_msg {
2537 	struct wcn36xx_hal_msg_header header;
2538 
2539 	/* success or failure */
2540 	u32 status;
2541 };
2542 
2543 /* End of TSpec Parameters */
2544 
2545 /* Start of BLOCK ACK related Parameters */
2546 
2547 struct wcn36xx_hal_add_ba_session_req_msg {
2548 	struct wcn36xx_hal_msg_header header;
2549 
2550 	/* Station Index */
2551 	u16 sta_index;
2552 
2553 	/* Peer MAC Address */
2554 	u8 mac_addr[ETH_ALEN];
2555 
2556 	/* ADDBA Action Frame dialog token
2557 	   HAL will not interpret this object */
2558 	u8 dialog_token;
2559 
2560 	/* TID for which the BA is being setup
2561 	   This identifies the TC or TS of interest */
2562 	u8 tid;
2563 
2564 	/* 0 - Delayed BA (Not supported)
2565 	   1 - Immediate BA */
2566 	u8 policy;
2567 
2568 	/* Indicates the number of buffers for this TID (baTID)
2569 	   NOTE - This is the requested buffer size. When this
2570 	   is processed by HAL and subsequently by HDD, it is
2571 	   possible that HDD may change this buffer size. Any
2572 	   change in the buffer size should be noted by PE and
2573 	   advertized appropriately in the ADDBA response */
2574 	u16 buffer_size;
2575 
2576 	/* BA timeout in TU's 0 means no timeout will occur */
2577 	u16 timeout;
2578 
2579 	/* b0..b3 - Fragment Number - Always set to 0
2580 	   b4..b15 - Starting Sequence Number of first MSDU
2581 	   for which this BA is setup */
2582 	u16 ssn;
2583 
2584 	/* ADDBA direction
2585 	   1 - Originator
2586 	   0 - Recipient */
2587 	u8 direction;
2588 } __packed;
2589 
2590 struct wcn36xx_hal_add_ba_session_rsp_msg {
2591 	struct wcn36xx_hal_msg_header header;
2592 
2593 	/* success or failure */
2594 	u32 status;
2595 
2596 	/* Dialog token */
2597 	u8 dialog_token;
2598 
2599 	/* TID for which the BA session has been setup */
2600 	u8 ba_tid;
2601 
2602 	/* BA Buffer Size allocated for the current BA session */
2603 	u8 ba_buffer_size;
2604 
2605 	u8 ba_session_id;
2606 
2607 	/* Reordering Window buffer */
2608 	u8 win_size;
2609 
2610 	/* Station Index to id the sta */
2611 	u8 sta_index;
2612 
2613 	/* Starting Sequence Number */
2614 	u16 ssn;
2615 } __packed;
2616 
2617 struct wcn36xx_hal_add_ba_req_msg {
2618 	struct wcn36xx_hal_msg_header header;
2619 
2620 	/* Session Id */
2621 	u8 session_id;
2622 
2623 	/* Reorder Window Size */
2624 	u8 win_size;
2625 /* Old FW 1.2.2.4 does not support this*/
2626 #ifdef FEATURE_ON_CHIP_REORDERING
2627 	u8 reordering_done_on_chip;
2628 #endif
2629 } __packed;
2630 
2631 struct wcn36xx_hal_add_ba_rsp_msg {
2632 	struct wcn36xx_hal_msg_header header;
2633 
2634 	/* success or failure */
2635 	u32 status;
2636 
2637 	/* Dialog token */
2638 	u8 dialog_token;
2639 } __packed;
2640 
2641 struct add_ba_info {
2642 	u16 ba_enable:1;
2643 	u16 starting_seq_num:12;
2644 	u16 reserved:3;
2645 };
2646 
2647 struct wcn36xx_hal_trigger_ba_rsp_candidate {
2648 	u8 sta_addr[ETH_ALEN];
2649 	struct add_ba_info ba_info[STACFG_MAX_TC];
2650 } __packed;
2651 
2652 struct wcn36xx_hal_trigger_ba_req_candidate {
2653 	u8 sta_index;
2654 	u8 tid_bitmap;
2655 } __packed;
2656 
2657 struct wcn36xx_hal_trigger_ba_req_msg {
2658 	struct wcn36xx_hal_msg_header header;
2659 
2660 	/* Session Id */
2661 	u8 session_id;
2662 
2663 	/* baCandidateCnt is followed by trigger BA
2664 	 * Candidate List(tTriggerBaCandidate)
2665 	 */
2666 	u16 candidate_cnt;
2667 
2668 } __packed;
2669 
2670 struct wcn36xx_hal_trigger_ba_rsp_msg {
2671 	struct wcn36xx_hal_msg_header header;
2672 
2673 	/* TO SUPPORT BT-AMP */
2674 	u8 bssid[ETH_ALEN];
2675 
2676 	/* success or failure */
2677 	u32 status;
2678 
2679 	/* baCandidateCnt is followed by trigger BA
2680 	 * Rsp Candidate List(tTriggerRspBaCandidate)
2681 	 */
2682 	u16 candidate_cnt;
2683 } __packed;
2684 
2685 struct wcn36xx_hal_del_ba_req_msg {
2686 	struct wcn36xx_hal_msg_header header;
2687 
2688 	/* Station Index */
2689 	u16 sta_index;
2690 
2691 	/* TID for which the BA session is being deleted */
2692 	u8 tid;
2693 
2694 	/* DELBA direction
2695 	   1 - Originator
2696 	   0 - Recipient */
2697 	u8 direction;
2698 } __packed;
2699 
2700 struct wcn36xx_hal_del_ba_rsp_msg {
2701 	struct wcn36xx_hal_msg_header header;
2702 
2703 	/* success or failure */
2704 	u32 status;
2705 } __packed;
2706 
2707 struct tsm_stats_req_msg {
2708 	struct wcn36xx_hal_msg_header header;
2709 
2710 	/* Traffic Id */
2711 	u8 tid;
2712 
2713 	u8 bssid[ETH_ALEN];
2714 };
2715 
2716 struct tsm_stats_rsp_msg {
2717 	struct wcn36xx_hal_msg_header header;
2718 
2719 	/*success or failure */
2720 	u32 status;
2721 
2722 	/* Uplink Packet Queue delay */
2723 	u16 uplink_pkt_queue_delay;
2724 
2725 	/* Uplink Packet Queue delay histogram */
2726 	u16 uplink_pkt_queue_delay_hist[4];
2727 
2728 	/* Uplink Packet Transmit delay */
2729 	u32 uplink_pkt_tx_delay;
2730 
2731 	/* Uplink Packet loss */
2732 	u16 uplink_pkt_loss;
2733 
2734 	/* Uplink Packet count */
2735 	u16 uplink_pkt_count;
2736 
2737 	/* Roaming count */
2738 	u8 roaming_count;
2739 
2740 	/* Roaming Delay */
2741 	u16 roaming_delay;
2742 };
2743 
2744 struct set_key_done_msg {
2745 	struct wcn36xx_hal_msg_header header;
2746 
2747 	/*bssid of the keys */
2748 	u8 bssidx;
2749 	u8 enc_type;
2750 };
2751 
2752 struct wcn36xx_hal_nv_img_download_req_msg {
2753 	/* Note: The length specified in wcn36xx_hal_nv_img_download_req_msg
2754 	 * messages should be
2755 	 * header.len = sizeof(wcn36xx_hal_nv_img_download_req_msg) +
2756 	 * nv_img_buffer_size */
2757 	struct wcn36xx_hal_msg_header header;
2758 
2759 	/* Fragment sequence number of the NV Image. Note that NV Image
2760 	 * might not fit into one message due to size limitation of the SMD
2761 	 * channel FIFO. UMAC can hence choose to chop the NV blob into
2762 	 * multiple fragments starting with seqeunce number 0, 1, 2 etc.
2763 	 * The last fragment MUST be indicated by marking the
2764 	 * isLastFragment field to 1. Note that all the NV blobs would be
2765 	 * concatenated together by HAL without any padding bytes in
2766 	 * between.*/
2767 	u16 frag_number;
2768 
2769 	/* Is this the last fragment? When set to 1 it indicates that no
2770 	 * more fragments will be sent by UMAC and HAL can concatenate all
2771 	 * the NV blobs rcvd & proceed with the parsing. HAL would generate
2772 	 * a WCN36XX_HAL_DOWNLOAD_NV_RSP to the WCN36XX_HAL_DOWNLOAD_NV_REQ
2773 	 * after it receives each fragment */
2774 	u16 last_fragment;
2775 
2776 	/* NV Image size (number of bytes) */
2777 	u32 nv_img_buffer_size;
2778 
2779 	/* Following the 'nv_img_buffer_size', there should be
2780 	 * nv_img_buffer_size bytes of NV Image i.e.
2781 	 * u8[nv_img_buffer_size] */
2782 } __packed;
2783 
2784 struct wcn36xx_hal_nv_img_download_rsp_msg {
2785 	struct wcn36xx_hal_msg_header header;
2786 
2787 	/* Success or Failure. HAL would generate a
2788 	 * WCN36XX_HAL_DOWNLOAD_NV_RSP after each fragment */
2789 	u32 status;
2790 } __packed;
2791 
2792 struct wcn36xx_hal_nv_store_ind {
2793 	/* Note: The length specified in tHalNvStoreInd messages should be
2794 	 * header.msgLen = sizeof(tHalNvStoreInd) + nvBlobSize */
2795 	struct wcn36xx_hal_msg_header header;
2796 
2797 	/* NV Item */
2798 	u32 table_id;
2799 
2800 	/* Size of NV Blob */
2801 	u32 nv_blob_size;
2802 
2803 	/* Following the 'nvBlobSize', there should be nvBlobSize bytes of
2804 	 * NV blob i.e. u8[nvBlobSize] */
2805 };
2806 
2807 /* End of Block Ack Related Parameters */
2808 
2809 #define WCN36XX_HAL_CIPHER_SEQ_CTR_SIZE 6
2810 
2811 /* Definition for MIC failure indication MAC reports this each time a MIC
2812  * failure occures on Rx TKIP packet
2813  */
2814 struct mic_failure_ind_msg {
2815 	struct wcn36xx_hal_msg_header header;
2816 
2817 	u8 bssid[ETH_ALEN];
2818 
2819 	/* address used to compute MIC */
2820 	u8 src_addr[ETH_ALEN];
2821 
2822 	/* transmitter address */
2823 	u8 ta_addr[ETH_ALEN];
2824 
2825 	u8 dst_addr[ETH_ALEN];
2826 
2827 	u8 multicast;
2828 
2829 	/* first byte of IV */
2830 	u8 iv1;
2831 
2832 	/* second byte of IV */
2833 	u8 key_id;
2834 
2835 	/* sequence number */
2836 	u8 tsc[WCN36XX_HAL_CIPHER_SEQ_CTR_SIZE];
2837 
2838 	/* receive address */
2839 	u8 rx_addr[ETH_ALEN];
2840 };
2841 
2842 struct update_vht_op_mode_req_msg {
2843 	struct wcn36xx_hal_msg_header header;
2844 
2845 	u16 op_mode;
2846 	u16 sta_id;
2847 };
2848 
2849 struct update_vht_op_mode_params_rsp_msg {
2850 	struct wcn36xx_hal_msg_header header;
2851 
2852 	u32 status;
2853 };
2854 
2855 struct update_beacon_req_msg {
2856 	struct wcn36xx_hal_msg_header header;
2857 
2858 	u8 bss_index;
2859 
2860 	/* shortPreamble mode. HAL should update all the STA rates when it
2861 	 * receives this message */
2862 	u8 short_preamble;
2863 
2864 	/* short Slot time. */
2865 	u8 short_slot_time;
2866 
2867 	/* Beacon Interval */
2868 	u16 beacon_interval;
2869 
2870 	/* Protection related */
2871 	u8 lla_coexist;
2872 	u8 llb_coexist;
2873 	u8 llg_coexist;
2874 	u8 ht20_coexist;
2875 	u8 lln_non_gf_coexist;
2876 	u8 lsig_tx_op_protection_full_support;
2877 	u8 rifs_mode;
2878 
2879 	u16 param_change_bitmap;
2880 };
2881 
2882 struct update_beacon_rsp_msg {
2883 	struct wcn36xx_hal_msg_header header;
2884 	u32 status;
2885 };
2886 
2887 struct wcn36xx_hal_send_beacon_req_msg {
2888 	struct wcn36xx_hal_msg_header header;
2889 
2890 	/* length of the template + 6. Only qcom knows why */
2891 	u32 beacon_length6;
2892 
2893 	/* length of the template. */
2894 	u32 beacon_length;
2895 
2896 	/* Beacon data. */
2897 	u8 beacon[BEACON_TEMPLATE_SIZE - sizeof(u32)];
2898 
2899 	u8 bssid[ETH_ALEN];
2900 
2901 	/* TIM IE offset from the beginning of the template. */
2902 	u32 tim_ie_offset;
2903 
2904 	/* P2P IE offset from the begining of the template */
2905 	u16 p2p_ie_offset;
2906 } __packed;
2907 
2908 struct send_beacon_rsp_msg {
2909 	struct wcn36xx_hal_msg_header header;
2910 	u32 status;
2911 } __packed;
2912 
2913 struct enable_radar_req_msg {
2914 	struct wcn36xx_hal_msg_header header;
2915 
2916 	u8 bssid[ETH_ALEN];
2917 	u8 channel;
2918 };
2919 
2920 struct enable_radar_rsp_msg {
2921 	struct wcn36xx_hal_msg_header header;
2922 
2923 	/* Link Parameters */
2924 	u8 bssid[ETH_ALEN];
2925 
2926 	/* success or failure */
2927 	u32 status;
2928 };
2929 
2930 struct radar_detect_intr_ind_msg {
2931 	struct wcn36xx_hal_msg_header header;
2932 
2933 	u8 radar_det_channel;
2934 };
2935 
2936 struct radar_detect_ind_msg {
2937 	struct wcn36xx_hal_msg_header header;
2938 
2939 	/* channel number in which the RADAR detected */
2940 	u8 channel_number;
2941 
2942 	/* RADAR pulse width in usecond */
2943 	u16 radar_pulse_width;
2944 
2945 	/* Number of RADAR pulses */
2946 	u16 num_radar_pulse;
2947 };
2948 
2949 struct wcn36xx_hal_get_tpc_report_req_msg {
2950 	struct wcn36xx_hal_msg_header header;
2951 
2952 	u8 sta[ETH_ALEN];
2953 	u8 dialog_token;
2954 	u8 txpower;
2955 };
2956 
2957 struct wcn36xx_hal_get_tpc_report_rsp_msg {
2958 	struct wcn36xx_hal_msg_header header;
2959 
2960 	/* success or failure */
2961 	u32 status;
2962 };
2963 
2964 struct wcn36xx_hal_send_probe_resp_req_msg {
2965 	struct wcn36xx_hal_msg_header header;
2966 
2967 	u8 probe_resp_template[BEACON_TEMPLATE_SIZE];
2968 	u32 probe_resp_template_len;
2969 	u32 proxy_probe_req_valid_ie_bmap[8];
2970 	u8 bssid[ETH_ALEN];
2971 };
2972 
2973 struct send_probe_resp_rsp_msg {
2974 	struct wcn36xx_hal_msg_header header;
2975 
2976 	/* success or failure */
2977 	u32 status;
2978 };
2979 
2980 struct send_unknown_frame_rx_ind_msg {
2981 	struct wcn36xx_hal_msg_header header;
2982 
2983 	/* success or failure */
2984 	u32 status;
2985 };
2986 
2987 struct wcn36xx_hal_delete_sta_context_ind_msg {
2988 	struct wcn36xx_hal_msg_header header;
2989 
2990 	u16 aid;
2991 	u16 sta_id;
2992 
2993 	/* TO SUPPORT BT-AMP */
2994 	u8 bssid[ETH_ALEN];
2995 
2996 	/* HAL copies bssid from the sta table. */
2997 	u8 addr2[ETH_ALEN];
2998 
2999 	/* To unify the keepalive / unknown A2 / tim-based disa */
3000 	u16 reason_code;
3001 } __packed;
3002 
3003 struct indicate_del_sta {
3004 	struct wcn36xx_hal_msg_header header;
3005 	u8 aid;
3006 	u8 sta_index;
3007 	u8 bss_index;
3008 	u8 reason_code;
3009 	u32 status;
3010 };
3011 
3012 struct bt_amp_event_msg {
3013 	struct wcn36xx_hal_msg_header header;
3014 
3015 	enum bt_amp_event_type btAmpEventType;
3016 };
3017 
3018 struct bt_amp_event_rsp {
3019 	struct wcn36xx_hal_msg_header header;
3020 
3021 	/* success or failure */
3022 	u32 status;
3023 };
3024 
3025 struct tl_hal_flush_ac_req_msg {
3026 	struct wcn36xx_hal_msg_header header;
3027 
3028 	/* Station Index. originates from HAL */
3029 	u8 sta_id;
3030 
3031 	/* TID for which the transmit queue is being flushed */
3032 	u8 tid;
3033 };
3034 
3035 struct tl_hal_flush_ac_rsp_msg {
3036 	struct wcn36xx_hal_msg_header header;
3037 
3038 	/* Station Index. originates from HAL */
3039 	u8 sta_id;
3040 
3041 	/* TID for which the transmit queue is being flushed */
3042 	u8 tid;
3043 
3044 	/* success or failure */
3045 	u32 status;
3046 };
3047 
3048 struct wcn36xx_hal_enter_imps_req_msg {
3049 	struct wcn36xx_hal_msg_header header;
3050 };
3051 
3052 struct wcn36xx_hal_exit_imps_req {
3053 	struct wcn36xx_hal_msg_header header;
3054 };
3055 
3056 struct wcn36xx_hal_enter_bmps_req_msg {
3057 	struct wcn36xx_hal_msg_header header;
3058 
3059 	u8 bss_index;
3060 
3061 	/* TBTT value derived from the last beacon */
3062 #ifndef BUILD_QWPTTSTATIC
3063 	u64 tbtt;
3064 #endif
3065 	u8 dtim_count;
3066 
3067 	/* DTIM period given to HAL during association may not be valid, if
3068 	 * association is based on ProbeRsp instead of beacon. */
3069 	u8 dtim_period;
3070 
3071 	/* For CCX and 11R Roaming */
3072 	u32 rssi_filter_period;
3073 
3074 	u32 num_beacon_per_rssi_average;
3075 	u8 rssi_filter_enable;
3076 } __packed;
3077 
3078 struct wcn36xx_hal_exit_bmps_req_msg {
3079 	struct wcn36xx_hal_msg_header header;
3080 
3081 	u8 send_data_null;
3082 	u8 bss_index;
3083 } __packed;
3084 
3085 struct wcn36xx_hal_missed_beacon_ind_msg {
3086 	struct wcn36xx_hal_msg_header header;
3087 
3088 	u8 bss_index;
3089 } __packed;
3090 
3091 /* Beacon Filtering data structures */
3092 
3093 /* The above structure would be followed by multiple of below mentioned
3094  * structure
3095  */
3096 struct beacon_filter_ie {
3097 	u8 element_id;
3098 	u8 check_ie_presence;
3099 	u8 offset;
3100 	u8 value;
3101 	u8 bitmask;
3102 	u8 ref;
3103 };
3104 
3105 struct wcn36xx_hal_add_bcn_filter_req_msg {
3106 	struct wcn36xx_hal_msg_header header;
3107 
3108 	u16 capability_info;
3109 	u16 capability_mask;
3110 	u16 beacon_interval;
3111 	u16 ie_num;
3112 	u8 bss_index;
3113 	u8 reserved;
3114 };
3115 
3116 struct wcn36xx_hal_rem_bcn_filter_req {
3117 	struct wcn36xx_hal_msg_header header;
3118 
3119 	u8 ie_Count;
3120 	u8 rem_ie_id[1];
3121 };
3122 
3123 #define WCN36XX_HAL_IPV4_ARP_REPLY_OFFLOAD                  0
3124 #define WCN36XX_HAL_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD         1
3125 #define WCN36XX_HAL_IPV6_NS_OFFLOAD                         2
3126 #define WCN36XX_HAL_IPV6_ADDR_LEN                           16
3127 #define WCN36XX_HAL_OFFLOAD_DISABLE                         0
3128 #define WCN36XX_HAL_OFFLOAD_ENABLE                          1
3129 #define WCN36XX_HAL_OFFLOAD_BCAST_FILTER_ENABLE             0x2
3130 #define WCN36XX_HAL_OFFLOAD_ARP_AND_BCAST_FILTER_ENABLE	\
3131 	(HAL_OFFLOAD_ENABLE|HAL_OFFLOAD_BCAST_FILTER_ENABLE)
3132 
3133 struct wcn36xx_hal_ns_offload_params {
3134 	u8 src_ipv6_addr[WCN36XX_HAL_IPV6_ADDR_LEN];
3135 	u8 self_ipv6_addr[WCN36XX_HAL_IPV6_ADDR_LEN];
3136 
3137 	/* Only support 2 possible Network Advertisement IPv6 address */
3138 	u8 target_ipv6_addr1[WCN36XX_HAL_IPV6_ADDR_LEN];
3139 	u8 target_ipv6_addr2[WCN36XX_HAL_IPV6_ADDR_LEN];
3140 
3141 	u8 self_addr[ETH_ALEN];
3142 	u8 src_ipv6_addr_valid:1;
3143 	u8 target_ipv6_addr1_valid:1;
3144 	u8 target_ipv6_addr2_valid:1;
3145 	u8 reserved1:5;
3146 
3147 	/* make it DWORD aligned */
3148 	u8 reserved2;
3149 
3150 	/* slot index for this offload */
3151 	u32 slot_index;
3152 	u8 bss_index;
3153 };
3154 
3155 struct wcn36xx_hal_host_offload_req {
3156 	u8 offload_Type;
3157 
3158 	/* enable or disable */
3159 	u8 enable;
3160 
3161 	union {
3162 		u8 host_ipv4_addr[4];
3163 		u8 host_ipv6_addr[WCN36XX_HAL_IPV6_ADDR_LEN];
3164 	} u;
3165 };
3166 
3167 struct wcn36xx_hal_host_offload_req_msg {
3168 	struct wcn36xx_hal_msg_header header;
3169 	struct wcn36xx_hal_host_offload_req host_offload_params;
3170 	struct wcn36xx_hal_ns_offload_params ns_offload_params;
3171 };
3172 
3173 /* Packet Types. */
3174 #define WCN36XX_HAL_KEEP_ALIVE_NULL_PKT              1
3175 #define WCN36XX_HAL_KEEP_ALIVE_UNSOLICIT_ARP_RSP     2
3176 
3177 /* Enable or disable keep alive */
3178 #define WCN36XX_HAL_KEEP_ALIVE_DISABLE   0
3179 #define WCN36XX_HAL_KEEP_ALIVE_ENABLE    1
3180 #define WCN36XX_KEEP_ALIVE_TIME_PERIOD	 30 /* unit: s */
3181 
3182 /* Keep Alive request. */
3183 struct wcn36xx_hal_keep_alive_req_msg {
3184 	struct wcn36xx_hal_msg_header header;
3185 
3186 	u8 packet_type;
3187 	u32 time_period;
3188 	u8 host_ipv4_addr[WCN36XX_HAL_IPV4_ADDR_LEN];
3189 	u8 dest_ipv4_addr[WCN36XX_HAL_IPV4_ADDR_LEN];
3190 	u8 dest_addr[ETH_ALEN];
3191 	u8 bss_index;
3192 } __packed;
3193 
3194 struct wcn36xx_hal_rssi_threshold_req_msg {
3195 	struct wcn36xx_hal_msg_header header;
3196 
3197 	s8 threshold1:8;
3198 	s8 threshold2:8;
3199 	s8 threshold3:8;
3200 	u8 thres1_pos_notify:1;
3201 	u8 thres1_neg_notify:1;
3202 	u8 thres2_pos_notify:1;
3203 	u8 thres2_neg_notify:1;
3204 	u8 thres3_pos_notify:1;
3205 	u8 thres3_neg_notify:1;
3206 	u8 reserved10:2;
3207 };
3208 
3209 struct wcn36xx_hal_enter_uapsd_req_msg {
3210 	struct wcn36xx_hal_msg_header header;
3211 
3212 	u8 bk_delivery:1;
3213 	u8 be_delivery:1;
3214 	u8 vi_delivery:1;
3215 	u8 vo_delivery:1;
3216 	u8 bk_trigger:1;
3217 	u8 be_trigger:1;
3218 	u8 vi_trigger:1;
3219 	u8 vo_trigger:1;
3220 	u8 bss_index;
3221 };
3222 
3223 struct wcn36xx_hal_exit_uapsd_req_msg {
3224 	struct wcn36xx_hal_msg_header header;
3225 	u8 bss_index;
3226 };
3227 
3228 #define WCN36XX_HAL_WOWL_BCAST_PATTERN_MAX_SIZE 128
3229 #define WCN36XX_HAL_WOWL_BCAST_MAX_NUM_PATTERNS 16
3230 
3231 struct wcn36xx_hal_wowl_add_bcast_ptrn_req_msg {
3232 	struct wcn36xx_hal_msg_header header;
3233 
3234 	/* Pattern ID */
3235 	u8 id;
3236 
3237 	/* Pattern byte offset from beginning of the 802.11 packet to start
3238 	 * of the wake-up pattern */
3239 	u8 byte_Offset;
3240 
3241 	/* Non-Zero Pattern size */
3242 	u8 size;
3243 
3244 	/* Pattern */
3245 	u8 pattern[WCN36XX_HAL_WOWL_BCAST_PATTERN_MAX_SIZE];
3246 
3247 	/* Non-zero pattern mask size */
3248 	u8 mask_size;
3249 
3250 	/* Pattern mask */
3251 	u8 mask[WCN36XX_HAL_WOWL_BCAST_PATTERN_MAX_SIZE];
3252 
3253 	/* Extra pattern */
3254 	u8 extra[WCN36XX_HAL_WOWL_BCAST_PATTERN_MAX_SIZE];
3255 
3256 	/* Extra pattern mask */
3257 	u8 mask_extra[WCN36XX_HAL_WOWL_BCAST_PATTERN_MAX_SIZE];
3258 
3259 	u8 bss_index;
3260 };
3261 
3262 struct wcn36xx_hal_wow_del_bcast_ptrn_req_msg {
3263 	struct wcn36xx_hal_msg_header header;
3264 
3265 	/* Pattern ID of the wakeup pattern to be deleted */
3266 	u8 id;
3267 	u8 bss_index;
3268 };
3269 
3270 struct wcn36xx_hal_wowl_enter_req_msg {
3271 	struct wcn36xx_hal_msg_header header;
3272 
3273 	/* Enables/disables magic packet filtering */
3274 	u8 magic_packet_enable;
3275 
3276 	/* Magic pattern */
3277 	u8 magic_pattern[ETH_ALEN];
3278 
3279 	/* Enables/disables packet pattern filtering in firmware. Enabling
3280 	 * this flag enables broadcast pattern matching in Firmware. If
3281 	 * unicast pattern matching is also desired,
3282 	 * ucUcastPatternFilteringEnable flag must be set tot true as well
3283 	 */
3284 	u8 pattern_filtering_enable;
3285 
3286 	/* Enables/disables unicast packet pattern filtering. This flag
3287 	 * specifies whether we want to do pattern match on unicast packets
3288 	 * as well and not just broadcast packets. This flag has no effect
3289 	 * if the ucPatternFilteringEnable (main controlling flag) is set
3290 	 * to false
3291 	 */
3292 	u8 ucast_pattern_filtering_enable;
3293 
3294 	/* This configuration is valid only when magicPktEnable=1. It
3295 	 * requests hardware to wake up when it receives the Channel Switch
3296 	 * Action Frame.
3297 	 */
3298 	u8 wow_channel_switch_receive;
3299 
3300 	/* This configuration is valid only when magicPktEnable=1. It
3301 	 * requests hardware to wake up when it receives the
3302 	 * Deauthentication Frame.
3303 	 */
3304 	u8 wow_deauth_receive;
3305 
3306 	/* This configuration is valid only when magicPktEnable=1. It
3307 	 * requests hardware to wake up when it receives the Disassociation
3308 	 * Frame.
3309 	 */
3310 	u8 wow_disassoc_receive;
3311 
3312 	/* This configuration is valid only when magicPktEnable=1. It
3313 	 * requests hardware to wake up when it has missed consecutive
3314 	 * beacons. This is a hardware register configuration (NOT a
3315 	 * firmware configuration).
3316 	 */
3317 	u8 wow_max_missed_beacons;
3318 
3319 	/* This configuration is valid only when magicPktEnable=1. This is
3320 	 * a timeout value in units of microsec. It requests hardware to
3321 	 * unconditionally wake up after it has stayed in WoWLAN mode for
3322 	 * some time. Set 0 to disable this feature.
3323 	 */
3324 	u8 wow_max_sleep;
3325 
3326 	/* This configuration directs the WoW packet filtering to look for
3327 	 * EAP-ID requests embedded in EAPOL frames and use this as a wake
3328 	 * source.
3329 	 */
3330 	u8 wow_eap_id_request_enable;
3331 
3332 	/* This configuration directs the WoW packet filtering to look for
3333 	 * EAPOL-4WAY requests and use this as a wake source.
3334 	 */
3335 	u8 wow_eapol_4way_enable;
3336 
3337 	/* This configuration allows a host wakeup on an network scan
3338 	 * offload match.
3339 	 */
3340 	u8 wow_net_scan_offload_match;
3341 
3342 	/* This configuration allows a host wakeup on any GTK rekeying
3343 	 * error.
3344 	 */
3345 	u8 wow_gtk_rekey_error;
3346 
3347 	/* This configuration allows a host wakeup on BSS connection loss.
3348 	 */
3349 	u8 wow_bss_connection_loss;
3350 
3351 	u8 bss_index;
3352 };
3353 
3354 struct wcn36xx_hal_wowl_exit_req_msg {
3355 	struct wcn36xx_hal_msg_header header;
3356 
3357 	u8 bss_index;
3358 };
3359 
3360 struct wcn36xx_hal_get_rssi_req_msg {
3361 	struct wcn36xx_hal_msg_header header;
3362 };
3363 
3364 struct wcn36xx_hal_get_roam_rssi_req_msg {
3365 	struct wcn36xx_hal_msg_header header;
3366 
3367 	/* Valid STA Idx for per STA stats request */
3368 	u32 sta_id;
3369 };
3370 
3371 struct wcn36xx_hal_set_uapsd_ac_params_req_msg {
3372 	struct wcn36xx_hal_msg_header header;
3373 
3374 	/* STA index */
3375 	u8 sta_idx;
3376 
3377 	/* Access Category */
3378 	u8 ac;
3379 
3380 	/* User Priority */
3381 	u8 up;
3382 
3383 	/* Service Interval */
3384 	u32 service_interval;
3385 
3386 	/* Suspend Interval */
3387 	u32 suspend_interval;
3388 
3389 	/* Delay Interval */
3390 	u32 delay_interval;
3391 };
3392 
3393 struct wcn36xx_hal_configure_rxp_filter_req_msg {
3394 	struct wcn36xx_hal_msg_header header;
3395 
3396 	u8 set_mcst_bcst_filter_setting;
3397 	u8 set_mcst_bcst_filter;
3398 };
3399 
3400 struct wcn36xx_hal_enter_imps_rsp_msg {
3401 	struct wcn36xx_hal_msg_header header;
3402 
3403 	/* success or failure */
3404 	u32 status;
3405 };
3406 
3407 struct wcn36xx_hal_exit_imps_rsp_msg {
3408 	struct wcn36xx_hal_msg_header header;
3409 
3410 	/* success or failure */
3411 	u32 status;
3412 };
3413 
3414 struct wcn36xx_hal_enter_bmps_rsp_msg {
3415 	struct wcn36xx_hal_msg_header header;
3416 
3417 	/* success or failure */
3418 	u32 status;
3419 
3420 	u8 bss_index;
3421 } __packed;
3422 
3423 struct wcn36xx_hal_exit_bmps_rsp_msg {
3424 	struct wcn36xx_hal_msg_header header;
3425 
3426 	/* success or failure */
3427 	u32 status;
3428 
3429 	u8 bss_index;
3430 } __packed;
3431 
3432 struct wcn36xx_hal_enter_uapsd_rsp_msg {
3433 	struct wcn36xx_hal_msg_header header;
3434 
3435 	/* success or failure */
3436 	u32 status;
3437 
3438 	u8 bss_index;
3439 };
3440 
3441 struct wcn36xx_hal_exit_uapsd_rsp_msg {
3442 	struct wcn36xx_hal_msg_header header;
3443 
3444 	/* success or failure */
3445 	u32 status;
3446 
3447 	u8 bss_index;
3448 };
3449 
3450 struct wcn36xx_hal_rssi_notification_ind_msg {
3451 	struct wcn36xx_hal_msg_header header;
3452 
3453 	u32 rssi_thres1_pos_cross:1;
3454 	u32 rssi_thres1_neg_cross:1;
3455 	u32 rssi_thres2_pos_cross:1;
3456 	u32 rssi_thres2_neg_cross:1;
3457 	u32 rssi_thres3_pos_cross:1;
3458 	u32 rssi_thres3_neg_cross:1;
3459 	u32 avg_rssi:8;
3460 	u32 reserved:18;
3461 
3462 };
3463 
3464 struct wcn36xx_hal_get_rssio_rsp_msg {
3465 	struct wcn36xx_hal_msg_header header;
3466 
3467 	/* success or failure */
3468 	u32 status;
3469 	s8 rssi;
3470 
3471 };
3472 
3473 struct wcn36xx_hal_get_roam_rssi_rsp_msg {
3474 	struct wcn36xx_hal_msg_header header;
3475 
3476 	/* success or failure */
3477 	u32 status;
3478 
3479 	u8 sta_id;
3480 	s8 rssi;
3481 };
3482 
3483 struct wcn36xx_hal_wowl_enter_rsp_msg {
3484 	struct wcn36xx_hal_msg_header header;
3485 
3486 	/* success or failure */
3487 	u32 status;
3488 	u8 bss_index;
3489 };
3490 
3491 struct wcn36xx_hal_wowl_exit_rsp_msg {
3492 	struct wcn36xx_hal_msg_header header;
3493 
3494 	/* success or failure */
3495 	u32 status;
3496 	u8 bss_index;
3497 };
3498 
3499 struct wcn36xx_hal_add_bcn_filter_rsp_msg {
3500 	struct wcn36xx_hal_msg_header header;
3501 
3502 	/* success or failure */
3503 	u32 status;
3504 };
3505 
3506 struct wcn36xx_hal_rem_bcn_filter_rsp_msg {
3507 	struct wcn36xx_hal_msg_header header;
3508 
3509 	/* success or failure */
3510 	u32 status;
3511 };
3512 
3513 struct wcn36xx_hal_add_wowl_bcast_ptrn_rsp_msg {
3514 	struct wcn36xx_hal_msg_header header;
3515 
3516 	/* success or failure */
3517 	u32 status;
3518 	u8 bss_index;
3519 };
3520 
3521 struct wcn36xx_hal_del_wowl_bcast_ptrn_rsp_msg {
3522 	struct wcn36xx_hal_msg_header header;
3523 
3524 	/* success or failure */
3525 	u32 status;
3526 	u8 bss_index;
3527 };
3528 
3529 struct wcn36xx_hal_host_offload_rsp_msg {
3530 	struct wcn36xx_hal_msg_header header;
3531 
3532 	/* success or failure */
3533 	u32 status;
3534 };
3535 
3536 struct wcn36xx_hal_keep_alive_rsp_msg {
3537 	struct wcn36xx_hal_msg_header header;
3538 
3539 	/* success or failure */
3540 	u32 status;
3541 };
3542 
3543 struct wcn36xx_hal_set_rssi_thresh_rsp_msg {
3544 	struct wcn36xx_hal_msg_header header;
3545 
3546 	/* success or failure */
3547 	u32 status;
3548 };
3549 
3550 struct wcn36xx_hal_set_uapsd_ac_params_rsp_msg {
3551 	struct wcn36xx_hal_msg_header header;
3552 
3553 	/* success or failure */
3554 	u32 status;
3555 };
3556 
3557 struct wcn36xx_hal_configure_rxp_filter_rsp_msg {
3558 	struct wcn36xx_hal_msg_header header;
3559 
3560 	/* success or failure */
3561 	u32 status;
3562 };
3563 
3564 struct set_max_tx_pwr_req {
3565 	struct wcn36xx_hal_msg_header header;
3566 
3567 	/* BSSID is needed to identify which session issued this request.
3568 	 * As the request has power constraints, this should be applied
3569 	 * only to that session */
3570 	u8 bssid[ETH_ALEN];
3571 
3572 	u8 self_addr[ETH_ALEN];
3573 
3574 	/* In request, power == MaxTx power to be used. */
3575 	u8 power;
3576 };
3577 
3578 struct set_max_tx_pwr_rsp_msg {
3579 	struct wcn36xx_hal_msg_header header;
3580 
3581 	/* power == tx power used for management frames */
3582 	u8 power;
3583 
3584 	/* success or failure */
3585 	u32 status;
3586 };
3587 
3588 struct set_tx_pwr_req_msg {
3589 	struct wcn36xx_hal_msg_header header;
3590 
3591 	/* TX Power in milli watts */
3592 	u32 tx_power;
3593 
3594 	u8 bss_index;
3595 };
3596 
3597 struct set_tx_pwr_rsp_msg {
3598 	struct wcn36xx_hal_msg_header header;
3599 
3600 	/* success or failure */
3601 	u32 status;
3602 };
3603 
3604 struct get_tx_pwr_req_msg {
3605 	struct wcn36xx_hal_msg_header header;
3606 
3607 	u8 sta_id;
3608 };
3609 
3610 struct get_tx_pwr_rsp_msg {
3611 	struct wcn36xx_hal_msg_header header;
3612 
3613 	/* success or failure */
3614 	u32 status;
3615 
3616 	/* TX Power in milli watts */
3617 	u32 tx_power;
3618 };
3619 
3620 struct set_p2p_gonoa_req_msg {
3621 	struct wcn36xx_hal_msg_header header;
3622 
3623 	u8 opp_ps;
3624 	u32 ct_window;
3625 	u8 count;
3626 	u32 duration;
3627 	u32 interval;
3628 	u32 single_noa_duration;
3629 	u8 ps_selection;
3630 };
3631 
3632 struct set_p2p_gonoa_rsp_msg {
3633 	struct wcn36xx_hal_msg_header header;
3634 
3635 	/* success or failure */
3636 	u32 status;
3637 };
3638 
3639 struct wcn36xx_hal_add_sta_self_req {
3640 	struct wcn36xx_hal_msg_header header;
3641 
3642 	u8 self_addr[ETH_ALEN];
3643 	u32 status;
3644 } __packed;
3645 
3646 struct wcn36xx_hal_add_sta_self_rsp_msg {
3647 	struct wcn36xx_hal_msg_header header;
3648 
3649 	/* success or failure */
3650 	u32 status;
3651 
3652 	/* Self STA Index */
3653 	u8 self_sta_index;
3654 
3655 	/* DPU Index (IGTK, PTK, GTK all same) */
3656 	u8 dpu_index;
3657 
3658 	/* DPU Signature */
3659 	u8 dpu_signature;
3660 } __packed;
3661 
3662 struct wcn36xx_hal_del_sta_self_req_msg {
3663 	struct wcn36xx_hal_msg_header header;
3664 
3665 	u8 self_addr[ETH_ALEN];
3666 } __packed;
3667 
3668 struct wcn36xx_hal_del_sta_self_rsp_msg {
3669 	struct wcn36xx_hal_msg_header header;
3670 
3671 	/*success or failure */
3672 	u32 status;
3673 
3674 	u8 self_addr[ETH_ALEN];
3675 } __packed;
3676 
3677 struct aggr_add_ts_req {
3678 	struct wcn36xx_hal_msg_header header;
3679 
3680 	/* Station Index */
3681 	u16 sta_idx;
3682 
3683 	/* TSPEC handler uniquely identifying a TSPEC for a STA in a BSS.
3684 	 * This will carry the bitmap with the bit positions representing
3685 	 * different AC.s */
3686 	u16 tspec_index;
3687 
3688 	/* Tspec info per AC To program TPE with required parameters */
3689 	struct wcn36xx_hal_tspec_ie tspec[WCN36XX_HAL_MAX_AC];
3690 
3691 	/* U-APSD Flags: 1b per AC.  Encoded as follows:
3692 	   b7 b6 b5 b4 b3 b2 b1 b0 =
3693 	   X  X  X  X  BE BK VI VO */
3694 	u8 uapsd;
3695 
3696 	/* These parameters are for all the access categories */
3697 
3698 	/* Service Interval */
3699 	u32 service_interval[WCN36XX_HAL_MAX_AC];
3700 
3701 	/* Suspend Interval */
3702 	u32 suspend_interval[WCN36XX_HAL_MAX_AC];
3703 
3704 	/* Delay Interval */
3705 	u32 delay_interval[WCN36XX_HAL_MAX_AC];
3706 };
3707 
3708 struct aggr_add_ts_rsp_msg {
3709 	struct wcn36xx_hal_msg_header header;
3710 
3711 	/* success or failure */
3712 	u32 status0;
3713 
3714 	/* FIXME PRIMA for future use for 11R */
3715 	u32 status1;
3716 };
3717 
3718 struct wcn36xx_hal_configure_apps_cpu_wakeup_state_req_msg {
3719 	struct wcn36xx_hal_msg_header header;
3720 
3721 	u8 is_apps_cpu_awake;
3722 };
3723 
3724 struct wcn36xx_hal_configure_apps_cpu_wakeup_state_rsp_msg {
3725 	struct wcn36xx_hal_msg_header header;
3726 
3727 	/* success or failure */
3728 	u32 status;
3729 };
3730 
3731 struct wcn36xx_hal_dump_cmd_req_msg {
3732 	struct wcn36xx_hal_msg_header header;
3733 
3734 	u32 arg1;
3735 	u32 arg2;
3736 	u32 arg3;
3737 	u32 arg4;
3738 	u32 arg5;
3739 } __packed;
3740 
3741 struct wcn36xx_hal_dump_cmd_rsp_msg {
3742 	struct wcn36xx_hal_msg_header header;
3743 
3744 	/* success or failure */
3745 	u32 status;
3746 
3747 	/* Length of the responce message */
3748 	u32 rsp_length;
3749 
3750 	/* FIXME: Currently considering the the responce will be less than
3751 	 * 100bytes */
3752 	u8 rsp_buffer[DUMPCMD_RSP_BUFFER];
3753 } __packed;
3754 
3755 #define WLAN_COEX_IND_DATA_SIZE (4)
3756 #define WLAN_COEX_IND_TYPE_DISABLE_HB_MONITOR (0)
3757 #define WLAN_COEX_IND_TYPE_ENABLE_HB_MONITOR (1)
3758 
3759 struct coex_ind_msg {
3760 	struct wcn36xx_hal_msg_header header;
3761 
3762 	/* Coex Indication Type */
3763 	u32 type;
3764 
3765 	/* Coex Indication Data */
3766 	u32 data[WLAN_COEX_IND_DATA_SIZE];
3767 };
3768 
3769 struct wcn36xx_hal_tx_compl_ind_msg {
3770 	struct wcn36xx_hal_msg_header header;
3771 
3772 	/* Tx Complete Indication Success or Failure */
3773 	u32 status;
3774 };
3775 
3776 struct wcn36xx_hal_wlan_host_suspend_ind_msg {
3777 	struct wcn36xx_hal_msg_header header;
3778 
3779 	u32 configured_mcst_bcst_filter_setting;
3780 	u32 active_session_count;
3781 };
3782 
3783 struct wcn36xx_hal_wlan_exclude_unencrpted_ind_msg {
3784 	struct wcn36xx_hal_msg_header header;
3785 
3786 	u8 dot11_exclude_unencrypted;
3787 	u8 bssid[ETH_ALEN];
3788 };
3789 
3790 struct noa_attr_ind_msg {
3791 	struct wcn36xx_hal_msg_header header;
3792 
3793 	u8 index;
3794 	u8 opp_ps_flag;
3795 	u16 ctwin;
3796 
3797 	u16 noa1_interval_count;
3798 	u16 bss_index;
3799 	u32 noa1_duration;
3800 	u32 noa1_interval;
3801 	u32 noa1_starttime;
3802 
3803 	u16 noa2_interval_count;
3804 	u16 reserved2;
3805 	u32 noa2_duration;
3806 	u32 noa2_interval;
3807 	u32 noa2_start_time;
3808 
3809 	u32 status;
3810 };
3811 
3812 struct noa_start_ind_msg {
3813 	struct wcn36xx_hal_msg_header header;
3814 
3815 	u32 status;
3816 	u32 bss_index;
3817 };
3818 
3819 struct wcn36xx_hal_wlan_host_resume_req_msg {
3820 	struct wcn36xx_hal_msg_header header;
3821 
3822 	u8 configured_mcst_bcst_filter_setting;
3823 };
3824 
3825 struct wcn36xx_hal_host_resume_rsp_msg {
3826 	struct wcn36xx_hal_msg_header header;
3827 
3828 	/* success or failure */
3829 	u32 status;
3830 };
3831 
3832 struct wcn36xx_hal_del_ba_ind_msg {
3833 	struct wcn36xx_hal_msg_header header;
3834 
3835 	u16 sta_idx;
3836 
3837 	/* Peer MAC Address, whose BA session has timed out */
3838 	u8 peer_addr[ETH_ALEN];
3839 
3840 	/* TID for which a BA session timeout is being triggered */
3841 	u8 ba_tid;
3842 
3843 	/* DELBA direction
3844 	 * 1 - Originator
3845 	 * 0 - Recipient
3846 	 */
3847 	u8 direction;
3848 
3849 	u32 reason_code;
3850 
3851 	/* TO SUPPORT BT-AMP */
3852 	u8 bssid[ETH_ALEN];
3853 };
3854 
3855 /* PNO Messages */
3856 
3857 /* Max number of channels that a network can be found on */
3858 #define WCN36XX_HAL_PNO_MAX_NETW_CHANNELS  26
3859 
3860 /* Max number of channels that a network can be found on */
3861 #define WCN36XX_HAL_PNO_MAX_NETW_CHANNELS_EX  60
3862 
3863 /* Maximum numbers of networks supported by PNO */
3864 #define WCN36XX_HAL_PNO_MAX_SUPP_NETWORKS  16
3865 
3866 /* The number of scan time intervals that can be programmed into PNO */
3867 #define WCN36XX_HAL_PNO_MAX_SCAN_TIMERS    10
3868 
3869 /* Maximum size of the probe template */
3870 #define WCN36XX_HAL_PNO_MAX_PROBE_SIZE     450
3871 
3872 /* Type of PNO enabling:
3873  *
3874  * Immediate - scanning will start immediately and PNO procedure will be
3875  * repeated based on timer
3876  *
3877  * Suspend - scanning will start at suspend
3878  *
3879  * Resume - scanning will start on system resume
3880  */
3881 enum pno_mode {
3882 	PNO_MODE_IMMEDIATE,
3883 	PNO_MODE_ON_SUSPEND,
3884 	PNO_MODE_ON_RESUME,
3885 	PNO_MODE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
3886 };
3887 
3888 /* Authentication type */
3889 enum auth_type {
3890 	AUTH_TYPE_ANY = 0,
3891 	AUTH_TYPE_OPEN_SYSTEM = 1,
3892 
3893 	/* Upper layer authentication types */
3894 	AUTH_TYPE_WPA = 2,
3895 	AUTH_TYPE_WPA_PSK = 3,
3896 
3897 	AUTH_TYPE_RSN = 4,
3898 	AUTH_TYPE_RSN_PSK = 5,
3899 	AUTH_TYPE_FT_RSN = 6,
3900 	AUTH_TYPE_FT_RSN_PSK = 7,
3901 	AUTH_TYPE_WAPI_WAI_CERTIFICATE = 8,
3902 	AUTH_TYPE_WAPI_WAI_PSK = 9,
3903 
3904 	AUTH_TYPE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
3905 };
3906 
3907 /* Encryption type */
3908 enum ed_type {
3909 	ED_ANY = 0,
3910 	ED_NONE = 1,
3911 	ED_WEP = 2,
3912 	ED_TKIP = 3,
3913 	ED_CCMP = 4,
3914 	ED_WPI = 5,
3915 
3916 	ED_TYPE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
3917 };
3918 
3919 /* SSID broadcast  type */
3920 enum ssid_bcast_type {
3921 	BCAST_UNKNOWN = 0,
3922 	BCAST_NORMAL = 1,
3923 	BCAST_HIDDEN = 2,
3924 
3925 	BCAST_TYPE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
3926 };
3927 
3928 /* The network description for which PNO will have to look for */
3929 struct network_type {
3930 	/* SSID of the BSS */
3931 	struct wcn36xx_hal_mac_ssid ssid;
3932 
3933 	/* Authentication type for the network */
3934 	enum auth_type authentication;
3935 
3936 	/* Encryption type for the network */
3937 	enum ed_type encryption;
3938 
3939 	/* Indicate the channel on which the Network can be found 0 - if
3940 	 * all channels */
3941 	u8 channel_count;
3942 	u8 channels[WCN36XX_HAL_PNO_MAX_NETW_CHANNELS];
3943 
3944 	/* Indicates the RSSI threshold for the network to be considered */
3945 	u8 rssi_threshold;
3946 };
3947 
3948 struct scan_timer {
3949 	/* How much it should wait */
3950 	u32 value;
3951 
3952 	/* How many times it should repeat that wait value 0 - keep using
3953 	 * this timer until PNO is disabled */
3954 	u32 repeat;
3955 
3956 	/* e.g: 2 3 4 0 - it will wait 2s between consecutive scans for 3
3957 	 * times - after that it will wait 4s between consecutive scans
3958 	 * until disabled */
3959 };
3960 
3961 /* The network parameters to be sent to the PNO algorithm */
3962 struct scan_timers_type {
3963 	/* set to 0 if you wish for PNO to use its default telescopic timer */
3964 	u8 count;
3965 
3966 	/* A set value represents the amount of time that PNO will wait
3967 	 * between two consecutive scan procedures If the desired is for a
3968 	 * uniform timer that fires always at the exact same interval - one
3969 	 * single value is to be set If there is a desire for a more
3970 	 * complex - telescopic like timer multiple values can be set -
3971 	 * once PNO reaches the end of the array it will continue scanning
3972 	 * at intervals presented by the last value */
3973 	struct scan_timer values[WCN36XX_HAL_PNO_MAX_SCAN_TIMERS];
3974 };
3975 
3976 /* Preferred network list request */
3977 struct set_pref_netw_list_req {
3978 	struct wcn36xx_hal_msg_header header;
3979 
3980 	/* Enable PNO */
3981 	u32 enable;
3982 
3983 	/* Immediate,  On Suspend,   On Resume */
3984 	enum pno_mode mode;
3985 
3986 	/* Number of networks sent for PNO */
3987 	u32 networks_count;
3988 
3989 	/* The networks that PNO needs to look for */
3990 	struct network_type networks[WCN36XX_HAL_PNO_MAX_SUPP_NETWORKS];
3991 
3992 	/* The scan timers required for PNO */
3993 	struct scan_timers_type scan_timers;
3994 
3995 	/* Probe template for 2.4GHz band */
3996 	u16 band_24g_probe_size;
3997 	u8 band_24g_probe_template[WCN36XX_HAL_PNO_MAX_PROBE_SIZE];
3998 
3999 	/* Probe template for 5GHz band */
4000 	u16 band_5g_probe_size;
4001 	u8 band_5g_probe_template[WCN36XX_HAL_PNO_MAX_PROBE_SIZE];
4002 };
4003 
4004 /* The network description for which PNO will have to look for */
4005 struct network_type_new {
4006 	/* SSID of the BSS */
4007 	struct wcn36xx_hal_mac_ssid ssid;
4008 
4009 	/* Authentication type for the network */
4010 	enum auth_type authentication;
4011 
4012 	/* Encryption type for the network */
4013 	enum ed_type encryption;
4014 
4015 	/* SSID broadcast type, normal, hidden or unknown */
4016 	enum ssid_bcast_type bcast_network_type;
4017 
4018 	/* Indicate the channel on which the Network can be found 0 - if
4019 	 * all channels */
4020 	u8 channel_count;
4021 	u8 channels[WCN36XX_HAL_PNO_MAX_NETW_CHANNELS];
4022 
4023 	/* Indicates the RSSI threshold for the network to be considered */
4024 	u8 rssi_threshold;
4025 };
4026 
4027 /* Preferred network list request new */
4028 struct set_pref_netw_list_req_new {
4029 	struct wcn36xx_hal_msg_header header;
4030 
4031 	/* Enable PNO */
4032 	u32 enable;
4033 
4034 	/* Immediate,  On Suspend,   On Resume */
4035 	enum pno_mode mode;
4036 
4037 	/* Number of networks sent for PNO */
4038 	u32 networks_count;
4039 
4040 	/* The networks that PNO needs to look for */
4041 	struct network_type_new networks[WCN36XX_HAL_PNO_MAX_SUPP_NETWORKS];
4042 
4043 	/* The scan timers required for PNO */
4044 	struct scan_timers_type scan_timers;
4045 
4046 	/* Probe template for 2.4GHz band */
4047 	u16 band_24g_probe_size;
4048 	u8 band_24g_probe_template[WCN36XX_HAL_PNO_MAX_PROBE_SIZE];
4049 
4050 	/* Probe template for 5GHz band */
4051 	u16 band_5g_probe_size;
4052 	u8 band_5g_probe_template[WCN36XX_HAL_PNO_MAX_PROBE_SIZE];
4053 };
4054 
4055 /* Preferred network list response */
4056 struct set_pref_netw_list_resp {
4057 	struct wcn36xx_hal_msg_header header;
4058 
4059 	/* status of the request - just to indicate that PNO has
4060 	 * acknowledged the request and will start scanning */
4061 	u32 status;
4062 };
4063 
4064 /* Preferred network found indication */
4065 struct pref_netw_found_ind {
4066 
4067 	struct wcn36xx_hal_msg_header header;
4068 
4069 	/* Network that was found with the highest RSSI */
4070 	struct wcn36xx_hal_mac_ssid ssid;
4071 
4072 	/* Indicates the RSSI */
4073 	u8 rssi;
4074 };
4075 
4076 /* RSSI Filter request */
4077 struct set_rssi_filter_req {
4078 	struct wcn36xx_hal_msg_header header;
4079 
4080 	/* RSSI Threshold */
4081 	u8 rssi_threshold;
4082 };
4083 
4084 /* Set RSSI filter resp */
4085 struct set_rssi_filter_resp {
4086 	struct wcn36xx_hal_msg_header header;
4087 
4088 	/* status of the request */
4089 	u32 status;
4090 };
4091 
4092 /* Update scan params - sent from host to PNO to be used during PNO
4093  * scanningx */
4094 struct wcn36xx_hal_update_scan_params_req {
4095 
4096 	struct wcn36xx_hal_msg_header header;
4097 
4098 	/* Host setting for 11d */
4099 	u8 dot11d_enabled;
4100 
4101 	/* Lets PNO know that host has determined the regulatory domain */
4102 	u8 dot11d_resolved;
4103 
4104 	/* Channels on which PNO is allowed to scan */
4105 	u8 channel_count;
4106 	u8 channels[WCN36XX_HAL_PNO_MAX_NETW_CHANNELS];
4107 
4108 	/* Minimum channel time */
4109 	u16 active_min_ch_time;
4110 
4111 	/* Maximum channel time */
4112 	u16 active_max_ch_time;
4113 
4114 	/* Minimum channel time */
4115 	u16 passive_min_ch_time;
4116 
4117 	/* Maximum channel time */
4118 	u16 passive_max_ch_time;
4119 
4120 	/* Cb State */
4121 	enum phy_chan_bond_state state;
4122 } __packed;
4123 
4124 /* Update scan params - sent from host to PNO to be used during PNO
4125  * scanningx */
4126 struct wcn36xx_hal_update_scan_params_req_ex {
4127 
4128 	struct wcn36xx_hal_msg_header header;
4129 
4130 	/* Host setting for 11d */
4131 	u8 dot11d_enabled;
4132 
4133 	/* Lets PNO know that host has determined the regulatory domain */
4134 	u8 dot11d_resolved;
4135 
4136 	/* Channels on which PNO is allowed to scan */
4137 	u8 channel_count;
4138 	u8 channels[WCN36XX_HAL_PNO_MAX_NETW_CHANNELS_EX];
4139 
4140 	/* Minimum channel time */
4141 	u16 active_min_ch_time;
4142 
4143 	/* Maximum channel time */
4144 	u16 active_max_ch_time;
4145 
4146 	/* Minimum channel time */
4147 	u16 passive_min_ch_time;
4148 
4149 	/* Maximum channel time */
4150 	u16 passive_max_ch_time;
4151 
4152 	/* Cb State */
4153 	enum phy_chan_bond_state state;
4154 } __packed;
4155 
4156 /* Update scan params - sent from host to PNO to be used during PNO
4157  * scanningx */
4158 struct wcn36xx_hal_update_scan_params_resp {
4159 
4160 	struct wcn36xx_hal_msg_header header;
4161 
4162 	/* status of the request */
4163 	u32 status;
4164 } __packed;
4165 
4166 struct wcn36xx_hal_set_tx_per_tracking_req_msg {
4167 	struct wcn36xx_hal_msg_header header;
4168 
4169 	/* 0: disable, 1:enable */
4170 	u8 tx_per_tracking_enable;
4171 
4172 	/* Check period, unit is sec. */
4173 	u8 tx_per_tracking_period;
4174 
4175 	/* (Fail TX packet)/(Total TX packet) ratio, the unit is 10%. */
4176 	u8 tx_per_tracking_ratio;
4177 
4178 	/* A watermark of check number, once the tx packet exceed this
4179 	 * number, we do the check, default is 5 */
4180 	u32 tx_per_tracking_watermark;
4181 };
4182 
4183 struct wcn36xx_hal_set_tx_per_tracking_rsp_msg {
4184 	struct wcn36xx_hal_msg_header header;
4185 
4186 	/* success or failure */
4187 	u32 status;
4188 
4189 };
4190 
4191 struct tx_per_hit_ind_msg {
4192 	struct wcn36xx_hal_msg_header header;
4193 };
4194 
4195 /* Packet Filtering Definitions Begin */
4196 #define    WCN36XX_HAL_PROTOCOL_DATA_LEN                  8
4197 #define    WCN36XX_HAL_MAX_NUM_MULTICAST_ADDRESS        240
4198 #define    WCN36XX_HAL_MAX_NUM_FILTERS                   20
4199 #define    WCN36XX_HAL_MAX_CMP_PER_FILTER                10
4200 
4201 enum wcn36xx_hal_receive_packet_filter_type {
4202 	HAL_RCV_FILTER_TYPE_INVALID,
4203 	HAL_RCV_FILTER_TYPE_FILTER_PKT,
4204 	HAL_RCV_FILTER_TYPE_BUFFER_PKT,
4205 	HAL_RCV_FILTER_TYPE_MAX_ENUM_SIZE
4206 };
4207 
4208 enum wcn36xx_hal_rcv_pkt_flt_protocol_type {
4209 	HAL_FILTER_PROTO_TYPE_INVALID,
4210 	HAL_FILTER_PROTO_TYPE_MAC,
4211 	HAL_FILTER_PROTO_TYPE_ARP,
4212 	HAL_FILTER_PROTO_TYPE_IPV4,
4213 	HAL_FILTER_PROTO_TYPE_IPV6,
4214 	HAL_FILTER_PROTO_TYPE_UDP,
4215 	HAL_FILTER_PROTO_TYPE_MAX
4216 };
4217 
4218 enum wcn36xx_hal_rcv_pkt_flt_cmp_flag_type {
4219 	HAL_FILTER_CMP_TYPE_INVALID,
4220 	HAL_FILTER_CMP_TYPE_EQUAL,
4221 	HAL_FILTER_CMP_TYPE_MASK_EQUAL,
4222 	HAL_FILTER_CMP_TYPE_NOT_EQUAL,
4223 	HAL_FILTER_CMP_TYPE_MAX
4224 };
4225 
4226 struct wcn36xx_hal_rcv_pkt_filter_params {
4227 	u8 protocol_layer;
4228 	u8 cmp_flag;
4229 
4230 	/* Length of the data to compare */
4231 	u16 data_length;
4232 
4233 	/* from start of the respective frame header */
4234 	u8 data_offset;
4235 
4236 	/* Reserved field */
4237 	u8 reserved;
4238 
4239 	/* Data to compare */
4240 	u8 compare_data[WCN36XX_HAL_PROTOCOL_DATA_LEN];
4241 
4242 	/* Mask to be applied on the received packet data before compare */
4243 	u8 data_mask[WCN36XX_HAL_PROTOCOL_DATA_LEN];
4244 };
4245 
4246 struct wcn36xx_hal_sessionized_rcv_pkt_filter_cfg_type {
4247 	u8 id;
4248 	u8 type;
4249 	u8 params_count;
4250 	u32 coleasce_time;
4251 	u8 bss_index;
4252 	struct wcn36xx_hal_rcv_pkt_filter_params params[1];
4253 };
4254 
4255 struct wcn36xx_hal_set_rcv_pkt_filter_req_msg {
4256 	struct wcn36xx_hal_msg_header header;
4257 
4258 	u8 id;
4259 	u8 type;
4260 	u8 params_count;
4261 	u32 coalesce_time;
4262 	struct wcn36xx_hal_rcv_pkt_filter_params params[1];
4263 };
4264 
4265 struct wcn36xx_hal_rcv_flt_mc_addr_list_type {
4266 	/* from start of the respective frame header */
4267 	u8 data_offset;
4268 
4269 	u32 mc_addr_count;
4270 	u8 mc_addr[WCN36XX_HAL_MAX_NUM_MULTICAST_ADDRESS][ETH_ALEN];
4271 	u8 bss_index;
4272 } __packed;
4273 
4274 struct wcn36xx_hal_set_pkt_filter_rsp_msg {
4275 	struct wcn36xx_hal_msg_header header;
4276 
4277 	/* success or failure */
4278 	u32 status;
4279 
4280 	u8 bss_index;
4281 };
4282 
4283 struct wcn36xx_hal_rcv_flt_pkt_match_cnt_req_msg {
4284 	struct wcn36xx_hal_msg_header header;
4285 
4286 	u8 bss_index;
4287 };
4288 
4289 struct wcn36xx_hal_rcv_flt_pkt_match_cnt {
4290 	u8 id;
4291 	u32 match_cnt;
4292 };
4293 
4294 struct wcn36xx_hal_rcv_flt_pkt_match_cnt_rsp_msg {
4295 	struct wcn36xx_hal_msg_header header;
4296 
4297 	/* Success or Failure */
4298 	u32 status;
4299 
4300 	u32 match_count;
4301 	struct wcn36xx_hal_rcv_flt_pkt_match_cnt
4302 		matches[WCN36XX_HAL_MAX_NUM_FILTERS];
4303 	u8 bss_index;
4304 };
4305 
4306 struct wcn36xx_hal_rcv_flt_pkt_clear_param {
4307 	/* only valid for response message */
4308 	u32 status;
4309 	u8 id;
4310 	u8 bss_index;
4311 };
4312 
4313 struct wcn36xx_hal_rcv_flt_pkt_clear_req_msg {
4314 	struct wcn36xx_hal_msg_header header;
4315 	struct wcn36xx_hal_rcv_flt_pkt_clear_param param;
4316 };
4317 
4318 struct wcn36xx_hal_rcv_flt_pkt_clear_rsp_msg {
4319 	struct wcn36xx_hal_msg_header header;
4320 	struct wcn36xx_hal_rcv_flt_pkt_clear_param param;
4321 };
4322 
4323 struct wcn36xx_hal_rcv_flt_pkt_set_mc_list_req_msg {
4324 	struct wcn36xx_hal_msg_header header;
4325 	struct wcn36xx_hal_rcv_flt_mc_addr_list_type mc_addr_list;
4326 } __packed;
4327 
4328 struct wcn36xx_hal_rcv_flt_pkt_set_mc_list_rsp_msg {
4329 	struct wcn36xx_hal_msg_header header;
4330 	u32 status;
4331 	u8 bss_index;
4332 };
4333 
4334 /* Packet Filtering Definitions End */
4335 
4336 struct wcn36xx_hal_set_power_params_req_msg {
4337 	struct wcn36xx_hal_msg_header header;
4338 
4339 	/*  Ignore DTIM */
4340 	u32 ignore_dtim;
4341 
4342 	/* DTIM Period */
4343 	u32 dtim_period;
4344 
4345 	/* Listen Interval */
4346 	u32 listen_interval;
4347 
4348 	/* Broadcast Multicast Filter  */
4349 	u32 bcast_mcast_filter;
4350 
4351 	/* Beacon Early Termination */
4352 	u32 enable_bet;
4353 
4354 	/* Beacon Early Termination Interval */
4355 	u32 bet_interval;
4356 } __packed;
4357 
4358 struct wcn36xx_hal_set_power_params_resp {
4359 
4360 	struct wcn36xx_hal_msg_header header;
4361 
4362 	/* status of the request */
4363 	u32 status;
4364 } __packed;
4365 
4366 /* Capability bitmap exchange definitions and macros starts */
4367 
4368 enum place_holder_in_cap_bitmap {
4369 	MCC = 0,
4370 	P2P = 1,
4371 	DOT11AC = 2,
4372 	SLM_SESSIONIZATION = 3,
4373 	DOT11AC_OPMODE = 4,
4374 	SAP32STA = 5,
4375 	TDLS = 6,
4376 	P2P_GO_NOA_DECOUPLE_INIT_SCAN = 7,
4377 	WLANACTIVE_OFFLOAD = 8,
4378 	BEACON_OFFLOAD = 9,
4379 	SCAN_OFFLOAD = 10,
4380 	ROAM_OFFLOAD = 11,
4381 	BCN_MISS_OFFLOAD = 12,
4382 	STA_POWERSAVE = 13,
4383 	STA_ADVANCED_PWRSAVE = 14,
4384 	AP_UAPSD = 15,
4385 	AP_DFS = 16,
4386 	BLOCKACK = 17,
4387 	PHY_ERR = 18,
4388 	BCN_FILTER = 19,
4389 	RTT = 20,
4390 	RATECTRL = 21,
4391 	WOW = 22,
4392 	WLAN_ROAM_SCAN_OFFLOAD = 23,
4393 	SPECULATIVE_PS_POLL = 24,
4394 	SCAN_SCH = 25,
4395 	IBSS_HEARTBEAT_OFFLOAD = 26,
4396 	WLAN_SCAN_OFFLOAD = 27,
4397 	WLAN_PERIODIC_TX_PTRN = 28,
4398 	ADVANCE_TDLS = 29,
4399 	BATCH_SCAN = 30,
4400 	FW_IN_TX_PATH = 31,
4401 	EXTENDED_NSOFFLOAD_SLOT = 32,
4402 	CH_SWITCH_V1 = 33,
4403 	HT40_OBSS_SCAN = 34,
4404 	UPDATE_CHANNEL_LIST = 35,
4405 	WLAN_MCADDR_FLT = 36,
4406 	WLAN_CH144 = 37,
4407 	NAN = 38,
4408 	TDLS_SCAN_COEXISTENCE = 39,
4409 	LINK_LAYER_STATS_MEAS = 40,
4410 	MU_MIMO = 41,
4411 	EXTENDED_SCAN = 42,
4412 	DYNAMIC_WMM_PS = 43,
4413 	MAC_SPOOFED_SCAN = 44,
4414 	BMU_ERROR_GENERIC_RECOVERY = 45,
4415 	DISA = 46,
4416 	FW_STATS = 47,
4417 	WPS_PRBRSP_TMPL = 48,
4418 	BCN_IE_FLT_DELTA = 49,
4419 	TDLS_OFF_CHANNEL = 51,
4420 	RTT3 = 52,
4421 	MGMT_FRAME_LOGGING = 53,
4422 	ENHANCED_TXBD_COMPLETION = 54,
4423 	LOGGING_ENHANCEMENT = 55,
4424 	EXT_SCAN_ENHANCED = 56,
4425 	MEMORY_DUMP_SUPPORTED = 57,
4426 	PER_PKT_STATS_SUPPORTED = 58,
4427 	EXT_LL_STAT = 60,
4428 	WIFI_CONFIG = 61,
4429 	ANTENNA_DIVERSITY_SELECTION = 62,
4430 
4431 	MAX_FEATURE_SUPPORTED = 128,
4432 };
4433 
4434 #define WCN36XX_HAL_CAPS_SIZE 4
4435 
4436 struct wcn36xx_hal_feat_caps_msg {
4437 
4438 	struct wcn36xx_hal_msg_header header;
4439 
4440 	u32 feat_caps[WCN36XX_HAL_CAPS_SIZE];
4441 } __packed;
4442 
4443 /* status codes to help debug rekey failures */
4444 enum gtk_rekey_status {
4445 	WCN36XX_HAL_GTK_REKEY_STATUS_SUCCESS = 0,
4446 
4447 	/* rekey detected, but not handled */
4448 	WCN36XX_HAL_GTK_REKEY_STATUS_NOT_HANDLED = 1,
4449 
4450 	/* MIC check error on M1 */
4451 	WCN36XX_HAL_GTK_REKEY_STATUS_MIC_ERROR = 2,
4452 
4453 	/* decryption error on M1  */
4454 	WCN36XX_HAL_GTK_REKEY_STATUS_DECRYPT_ERROR = 3,
4455 
4456 	/* M1 replay detected */
4457 	WCN36XX_HAL_GTK_REKEY_STATUS_REPLAY_ERROR = 4,
4458 
4459 	/* missing GTK key descriptor in M1 */
4460 	WCN36XX_HAL_GTK_REKEY_STATUS_MISSING_KDE = 5,
4461 
4462 	/* missing iGTK key descriptor in M1 */
4463 	WCN36XX_HAL_GTK_REKEY_STATUS_MISSING_IGTK_KDE = 6,
4464 
4465 	/* key installation error */
4466 	WCN36XX_HAL_GTK_REKEY_STATUS_INSTALL_ERROR = 7,
4467 
4468 	/* iGTK key installation error */
4469 	WCN36XX_HAL_GTK_REKEY_STATUS_IGTK_INSTALL_ERROR = 8,
4470 
4471 	/* GTK rekey M2 response TX error */
4472 	WCN36XX_HAL_GTK_REKEY_STATUS_RESP_TX_ERROR = 9,
4473 
4474 	/* non-specific general error */
4475 	WCN36XX_HAL_GTK_REKEY_STATUS_GEN_ERROR = 255
4476 };
4477 
4478 /* wake reason types */
4479 enum wake_reason_type {
4480 	WCN36XX_HAL_WAKE_REASON_NONE = 0,
4481 
4482 	/* magic packet match */
4483 	WCN36XX_HAL_WAKE_REASON_MAGIC_PACKET = 1,
4484 
4485 	/* host defined pattern match */
4486 	WCN36XX_HAL_WAKE_REASON_PATTERN_MATCH = 2,
4487 
4488 	/* EAP-ID frame detected */
4489 	WCN36XX_HAL_WAKE_REASON_EAPID_PACKET = 3,
4490 
4491 	/* start of EAPOL 4-way handshake detected */
4492 	WCN36XX_HAL_WAKE_REASON_EAPOL4WAY_PACKET = 4,
4493 
4494 	/* network scan offload match */
4495 	WCN36XX_HAL_WAKE_REASON_NETSCAN_OFFL_MATCH = 5,
4496 
4497 	/* GTK rekey status wakeup (see status) */
4498 	WCN36XX_HAL_WAKE_REASON_GTK_REKEY_STATUS = 6,
4499 
4500 	/* BSS connection lost */
4501 	WCN36XX_HAL_WAKE_REASON_BSS_CONN_LOST = 7,
4502 };
4503 
4504 /*
4505   Wake Packet which is saved at tWakeReasonParams.DataStart
4506   This data is sent for any wake reasons that involve a packet-based wakeup :
4507 
4508   WCN36XX_HAL_WAKE_REASON_TYPE_MAGIC_PACKET
4509   WCN36XX_HAL_WAKE_REASON_TYPE_PATTERN_MATCH
4510   WCN36XX_HAL_WAKE_REASON_TYPE_EAPID_PACKET
4511   WCN36XX_HAL_WAKE_REASON_TYPE_EAPOL4WAY_PACKET
4512   WCN36XX_HAL_WAKE_REASON_TYPE_GTK_REKEY_STATUS
4513 
4514   The information is provided to the host for auditing and debug purposes
4515 
4516 */
4517 
4518 /* Wake reason indication */
4519 struct wcn36xx_hal_wake_reason_ind {
4520 	struct wcn36xx_hal_msg_header header;
4521 
4522 	/* see tWakeReasonType */
4523 	u32 reason;
4524 
4525 	/* argument specific to the reason type */
4526 	u32 reason_arg;
4527 
4528 	/* length of optional data stored in this message, in case HAL
4529 	 * truncates the data (i.e. data packets) this length will be less
4530 	 * than the actual length */
4531 	u32 stored_data_len;
4532 
4533 	/* actual length of data */
4534 	u32 actual_data_len;
4535 
4536 	/* variable length start of data (length == storedDataLen) see
4537 	 * specific wake type */
4538 	u8 data_start[1];
4539 
4540 	u32 bss_index:8;
4541 	u32 reserved:24;
4542 };
4543 
4544 #define WCN36XX_HAL_GTK_KEK_BYTES 16
4545 #define WCN36XX_HAL_GTK_KCK_BYTES 16
4546 
4547 #define WCN36XX_HAL_GTK_OFFLOAD_FLAGS_DISABLE (1 << 0)
4548 
4549 #define GTK_SET_BSS_KEY_TAG  0x1234AA55
4550 
4551 struct wcn36xx_hal_gtk_offload_req_msg {
4552 	struct wcn36xx_hal_msg_header header;
4553 
4554 	/* optional flags */
4555 	u32 flags;
4556 
4557 	/* Key confirmation key */
4558 	u8 kck[WCN36XX_HAL_GTK_KCK_BYTES];
4559 
4560 	/* key encryption key */
4561 	u8 kek[WCN36XX_HAL_GTK_KEK_BYTES];
4562 
4563 	/* replay counter */
4564 	u64 key_replay_counter;
4565 
4566 	u8 bss_index;
4567 };
4568 
4569 struct wcn36xx_hal_gtk_offload_rsp_msg {
4570 	struct wcn36xx_hal_msg_header header;
4571 
4572 	/* success or failure */
4573 	u32 status;
4574 
4575 	u8 bss_index;
4576 };
4577 
4578 struct wcn36xx_hal_gtk_offload_get_info_req_msg {
4579 	struct wcn36xx_hal_msg_header header;
4580 	u8 bss_index;
4581 };
4582 
4583 struct wcn36xx_hal_gtk_offload_get_info_rsp_msg {
4584 	struct wcn36xx_hal_msg_header header;
4585 
4586 	/* success or failure */
4587 	u32 status;
4588 
4589 	/* last rekey status when the rekey was offloaded */
4590 	u32 last_rekey_status;
4591 
4592 	/* current replay counter value */
4593 	u64 key_replay_counter;
4594 
4595 	/* total rekey attempts */
4596 	u32 total_rekey_count;
4597 
4598 	/* successful GTK rekeys */
4599 	u32 gtk_rekey_count;
4600 
4601 	/* successful iGTK rekeys */
4602 	u32 igtk_rekey_count;
4603 
4604 	u8 bss_index;
4605 };
4606 
4607 struct dhcp_info {
4608 	/* Indicates the device mode which indicates about the DHCP activity */
4609 	u8 device_mode;
4610 
4611 	u8 addr[ETH_ALEN];
4612 };
4613 
4614 struct dhcp_ind_status {
4615 	struct wcn36xx_hal_msg_header header;
4616 
4617 	/* success or failure */
4618 	u32 status;
4619 };
4620 
4621 /*
4622  *   Thermal Mitigation mode of operation.
4623  *
4624  *  WCN36XX_HAL_THERMAL_MITIGATION_MODE_0 - Based on AMPDU disabling aggregation
4625  *
4626  *  WCN36XX_HAL_THERMAL_MITIGATION_MODE_1 - Based on AMPDU disabling aggregation
4627  *  and reducing transmit power
4628  *
4629  *  WCN36XX_HAL_THERMAL_MITIGATION_MODE_2 - Not supported */
4630 enum wcn36xx_hal_thermal_mitigation_mode_type {
4631 	HAL_THERMAL_MITIGATION_MODE_INVALID = -1,
4632 	HAL_THERMAL_MITIGATION_MODE_0,
4633 	HAL_THERMAL_MITIGATION_MODE_1,
4634 	HAL_THERMAL_MITIGATION_MODE_2,
4635 	HAL_THERMAL_MITIGATION_MODE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE,
4636 };
4637 
4638 
4639 /*
4640  *   Thermal Mitigation level.
4641  * Note the levels are incremental i.e WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_2 =
4642  * WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_0 +
4643  * WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_1
4644  *
4645  * WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_0 - lowest level of thermal mitigation.
4646  * This level indicates normal mode of operation
4647  *
4648  * WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_1 - 1st level of thermal mitigation
4649  *
4650  * WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_2 - 2nd level of thermal mitigation
4651  *
4652  * WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_3 - 3rd level of thermal mitigation
4653  *
4654  * WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_4 - 4th level of thermal mitigation
4655  */
4656 enum wcn36xx_hal_thermal_mitigation_level_type {
4657 	HAL_THERMAL_MITIGATION_LEVEL_INVALID = -1,
4658 	HAL_THERMAL_MITIGATION_LEVEL_0,
4659 	HAL_THERMAL_MITIGATION_LEVEL_1,
4660 	HAL_THERMAL_MITIGATION_LEVEL_2,
4661 	HAL_THERMAL_MITIGATION_LEVEL_3,
4662 	HAL_THERMAL_MITIGATION_LEVEL_4,
4663 	HAL_THERMAL_MITIGATION_LEVEL_MAX = WCN36XX_HAL_MAX_ENUM_SIZE,
4664 };
4665 
4666 
4667 /* WCN36XX_HAL_SET_THERMAL_MITIGATION_REQ */
4668 struct set_thermal_mitigation_req_msg {
4669 	struct wcn36xx_hal_msg_header header;
4670 
4671 	/* Thermal Mitigation Operation Mode */
4672 	enum wcn36xx_hal_thermal_mitigation_mode_type mode;
4673 
4674 	/* Thermal Mitigation Level */
4675 	enum wcn36xx_hal_thermal_mitigation_level_type level;
4676 };
4677 
4678 struct set_thermal_mitigation_resp {
4679 
4680 	struct wcn36xx_hal_msg_header header;
4681 
4682 	/* status of the request */
4683 	u32 status;
4684 };
4685 
4686 /* Per STA Class B Statistics. Class B statistics are STA TX/RX stats
4687  * provided to FW from Host via periodic messages */
4688 struct stats_class_b_ind {
4689 	struct wcn36xx_hal_msg_header header;
4690 
4691 	/* Duration over which this stats was collected */
4692 	u32 duration;
4693 
4694 	/* Per STA Stats */
4695 
4696 	/* TX stats */
4697 	u32 tx_bytes_pushed;
4698 	u32 tx_packets_pushed;
4699 
4700 	/* RX stats */
4701 	u32 rx_bytes_rcvd;
4702 	u32 rx_packets_rcvd;
4703 	u32 rx_time_total;
4704 };
4705 
4706 #endif /* _HAL_H_ */
4707