18e84c258SEugene Krasnikov /*
28e84c258SEugene Krasnikov  * Copyright (c) 2013 Eugene Krasnikov <k.eugene.e@gmail.com>
38e84c258SEugene Krasnikov  *
48e84c258SEugene Krasnikov  * Permission to use, copy, modify, and/or distribute this software for any
58e84c258SEugene Krasnikov  * purpose with or without fee is hereby granted, provided that the above
68e84c258SEugene Krasnikov  * copyright notice and this permission notice appear in all copies.
78e84c258SEugene Krasnikov  *
88e84c258SEugene Krasnikov  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
98e84c258SEugene Krasnikov  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
108e84c258SEugene Krasnikov  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
118e84c258SEugene Krasnikov  * SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
128e84c258SEugene Krasnikov  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION
138e84c258SEugene Krasnikov  * OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
148e84c258SEugene Krasnikov  * CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
158e84c258SEugene Krasnikov  */
168e84c258SEugene Krasnikov 
178e84c258SEugene Krasnikov #ifndef _HAL_H_
188e84c258SEugene Krasnikov #define _HAL_H_
198e84c258SEugene Krasnikov 
208e84c258SEugene Krasnikov /*---------------------------------------------------------------------------
218e84c258SEugene Krasnikov   API VERSIONING INFORMATION
228e84c258SEugene Krasnikov 
238e84c258SEugene Krasnikov   The RIVA API is versioned as MAJOR.MINOR.VERSION.REVISION
248e84c258SEugene Krasnikov   The MAJOR is incremented for major product/architecture changes
258e84c258SEugene Krasnikov       (and then MINOR/VERSION/REVISION are zeroed)
268e84c258SEugene Krasnikov   The MINOR is incremented for minor product/architecture changes
278e84c258SEugene Krasnikov       (and then VERSION/REVISION are zeroed)
288e84c258SEugene Krasnikov   The VERSION is incremented if a significant API change occurs
298e84c258SEugene Krasnikov       (and then REVISION is zeroed)
308e84c258SEugene Krasnikov   The REVISION is incremented if an insignificant API change occurs
318e84c258SEugene Krasnikov       or if a new API is added
328e84c258SEugene Krasnikov   All values are in the range 0..255 (ie they are 8-bit values)
338e84c258SEugene Krasnikov  ---------------------------------------------------------------------------*/
348e84c258SEugene Krasnikov #define WCN36XX_HAL_VER_MAJOR 1
358e84c258SEugene Krasnikov #define WCN36XX_HAL_VER_MINOR 4
368e84c258SEugene Krasnikov #define WCN36XX_HAL_VER_VERSION 1
378e84c258SEugene Krasnikov #define WCN36XX_HAL_VER_REVISION 2
388e84c258SEugene Krasnikov 
398e84c258SEugene Krasnikov /* This is to force compiler to use the maximum of an int ( 4 bytes ) */
408e84c258SEugene Krasnikov #define WCN36XX_HAL_MAX_ENUM_SIZE    0x7FFFFFFF
418e84c258SEugene Krasnikov #define WCN36XX_HAL_MSG_TYPE_MAX_ENUM_SIZE    0x7FFF
428e84c258SEugene Krasnikov 
438e84c258SEugene Krasnikov /* Max no. of transmit categories */
448e84c258SEugene Krasnikov #define STACFG_MAX_TC    8
458e84c258SEugene Krasnikov 
468e84c258SEugene Krasnikov /* The maximum value of access category */
478e84c258SEugene Krasnikov #define WCN36XX_HAL_MAX_AC  4
488e84c258SEugene Krasnikov 
498e84c258SEugene Krasnikov #define WCN36XX_HAL_IPV4_ADDR_LEN       4
508e84c258SEugene Krasnikov 
5190023c03SPontus Fuchs #define WCN36XX_HAL_STA_INVALID_IDX 0xFF
528e84c258SEugene Krasnikov #define WCN36XX_HAL_BSS_INVALID_IDX 0xFF
538e84c258SEugene Krasnikov 
548e84c258SEugene Krasnikov /* Default Beacon template size */
558e84c258SEugene Krasnikov #define BEACON_TEMPLATE_SIZE 0x180
568e84c258SEugene Krasnikov 
5791c3eebaSPontus Fuchs /* Minimum PVM size that the FW expects. See comment in smd.c for details. */
5891c3eebaSPontus Fuchs #define TIM_MIN_PVM_SIZE 6
5991c3eebaSPontus Fuchs 
608e84c258SEugene Krasnikov /* Param Change Bitmap sent to HAL */
618e84c258SEugene Krasnikov #define PARAM_BCN_INTERVAL_CHANGED                      (1 << 0)
628e84c258SEugene Krasnikov #define PARAM_SHORT_PREAMBLE_CHANGED                 (1 << 1)
638e84c258SEugene Krasnikov #define PARAM_SHORT_SLOT_TIME_CHANGED                 (1 << 2)
648e84c258SEugene Krasnikov #define PARAM_llACOEXIST_CHANGED                            (1 << 3)
658e84c258SEugene Krasnikov #define PARAM_llBCOEXIST_CHANGED                            (1 << 4)
668e84c258SEugene Krasnikov #define PARAM_llGCOEXIST_CHANGED                            (1 << 5)
678e84c258SEugene Krasnikov #define PARAM_HT20MHZCOEXIST_CHANGED                  (1<<6)
688e84c258SEugene Krasnikov #define PARAM_NON_GF_DEVICES_PRESENT_CHANGED (1<<7)
698e84c258SEugene Krasnikov #define PARAM_RIFS_MODE_CHANGED                            (1<<8)
708e84c258SEugene Krasnikov #define PARAM_LSIG_TXOP_FULL_SUPPORT_CHANGED   (1<<9)
718e84c258SEugene Krasnikov #define PARAM_OBSS_MODE_CHANGED                               (1<<10)
728e84c258SEugene Krasnikov #define PARAM_BEACON_UPDATE_MASK \
738e84c258SEugene Krasnikov 	(PARAM_BCN_INTERVAL_CHANGED |					\
748e84c258SEugene Krasnikov 	 PARAM_SHORT_PREAMBLE_CHANGED |					\
758e84c258SEugene Krasnikov 	 PARAM_SHORT_SLOT_TIME_CHANGED |				\
768e84c258SEugene Krasnikov 	 PARAM_llACOEXIST_CHANGED |					\
778e84c258SEugene Krasnikov 	 PARAM_llBCOEXIST_CHANGED |					\
788e84c258SEugene Krasnikov 	 PARAM_llGCOEXIST_CHANGED |					\
798e84c258SEugene Krasnikov 	 PARAM_HT20MHZCOEXIST_CHANGED |					\
808e84c258SEugene Krasnikov 	 PARAM_NON_GF_DEVICES_PRESENT_CHANGED |				\
818e84c258SEugene Krasnikov 	 PARAM_RIFS_MODE_CHANGED |					\
828e84c258SEugene Krasnikov 	 PARAM_LSIG_TXOP_FULL_SUPPORT_CHANGED |				\
838e84c258SEugene Krasnikov 	 PARAM_OBSS_MODE_CHANGED)
848e84c258SEugene Krasnikov 
858e84c258SEugene Krasnikov /* dump command response Buffer size */
868e84c258SEugene Krasnikov #define DUMPCMD_RSP_BUFFER 100
878e84c258SEugene Krasnikov 
888e84c258SEugene Krasnikov /* version string max length (including NULL) */
898e84c258SEugene Krasnikov #define WCN36XX_HAL_VERSION_LENGTH  64
908e84c258SEugene Krasnikov 
918e84c258SEugene Krasnikov /* message types for messages exchanged between WDI and HAL */
928e84c258SEugene Krasnikov enum wcn36xx_hal_host_msg_type {
938e84c258SEugene Krasnikov 	/* Init/De-Init */
948e84c258SEugene Krasnikov 	WCN36XX_HAL_START_REQ = 0,
958e84c258SEugene Krasnikov 	WCN36XX_HAL_START_RSP = 1,
968e84c258SEugene Krasnikov 	WCN36XX_HAL_STOP_REQ = 2,
978e84c258SEugene Krasnikov 	WCN36XX_HAL_STOP_RSP = 3,
988e84c258SEugene Krasnikov 
998e84c258SEugene Krasnikov 	/* Scan */
1008e84c258SEugene Krasnikov 	WCN36XX_HAL_INIT_SCAN_REQ = 4,
1018e84c258SEugene Krasnikov 	WCN36XX_HAL_INIT_SCAN_RSP = 5,
1028e84c258SEugene Krasnikov 	WCN36XX_HAL_START_SCAN_REQ = 6,
1038e84c258SEugene Krasnikov 	WCN36XX_HAL_START_SCAN_RSP = 7,
1048e84c258SEugene Krasnikov 	WCN36XX_HAL_END_SCAN_REQ = 8,
1058e84c258SEugene Krasnikov 	WCN36XX_HAL_END_SCAN_RSP = 9,
1068e84c258SEugene Krasnikov 	WCN36XX_HAL_FINISH_SCAN_REQ = 10,
1078e84c258SEugene Krasnikov 	WCN36XX_HAL_FINISH_SCAN_RSP = 11,
1088e84c258SEugene Krasnikov 
1098e84c258SEugene Krasnikov 	/* HW STA configuration/deconfiguration */
1108e84c258SEugene Krasnikov 	WCN36XX_HAL_CONFIG_STA_REQ = 12,
1118e84c258SEugene Krasnikov 	WCN36XX_HAL_CONFIG_STA_RSP = 13,
1128e84c258SEugene Krasnikov 	WCN36XX_HAL_DELETE_STA_REQ = 14,
1138e84c258SEugene Krasnikov 	WCN36XX_HAL_DELETE_STA_RSP = 15,
1148e84c258SEugene Krasnikov 	WCN36XX_HAL_CONFIG_BSS_REQ = 16,
1158e84c258SEugene Krasnikov 	WCN36XX_HAL_CONFIG_BSS_RSP = 17,
1168e84c258SEugene Krasnikov 	WCN36XX_HAL_DELETE_BSS_REQ = 18,
1178e84c258SEugene Krasnikov 	WCN36XX_HAL_DELETE_BSS_RSP = 19,
1188e84c258SEugene Krasnikov 
1198e84c258SEugene Krasnikov 	/* Infra STA asscoiation */
1208e84c258SEugene Krasnikov 	WCN36XX_HAL_JOIN_REQ = 20,
1218e84c258SEugene Krasnikov 	WCN36XX_HAL_JOIN_RSP = 21,
1228e84c258SEugene Krasnikov 	WCN36XX_HAL_POST_ASSOC_REQ = 22,
1238e84c258SEugene Krasnikov 	WCN36XX_HAL_POST_ASSOC_RSP = 23,
1248e84c258SEugene Krasnikov 
1258e84c258SEugene Krasnikov 	/* Security */
1268e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_BSSKEY_REQ = 24,
1278e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_BSSKEY_RSP = 25,
1288e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_STAKEY_REQ = 26,
1298e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_STAKEY_RSP = 27,
1308e84c258SEugene Krasnikov 	WCN36XX_HAL_RMV_BSSKEY_REQ = 28,
1318e84c258SEugene Krasnikov 	WCN36XX_HAL_RMV_BSSKEY_RSP = 29,
1328e84c258SEugene Krasnikov 	WCN36XX_HAL_RMV_STAKEY_REQ = 30,
1338e84c258SEugene Krasnikov 	WCN36XX_HAL_RMV_STAKEY_RSP = 31,
1348e84c258SEugene Krasnikov 
1358e84c258SEugene Krasnikov 	/* Qos Related */
1368e84c258SEugene Krasnikov 	WCN36XX_HAL_ADD_TS_REQ = 32,
1378e84c258SEugene Krasnikov 	WCN36XX_HAL_ADD_TS_RSP = 33,
1388e84c258SEugene Krasnikov 	WCN36XX_HAL_DEL_TS_REQ = 34,
1398e84c258SEugene Krasnikov 	WCN36XX_HAL_DEL_TS_RSP = 35,
1408e84c258SEugene Krasnikov 	WCN36XX_HAL_UPD_EDCA_PARAMS_REQ = 36,
1418e84c258SEugene Krasnikov 	WCN36XX_HAL_UPD_EDCA_PARAMS_RSP = 37,
1428e84c258SEugene Krasnikov 	WCN36XX_HAL_ADD_BA_REQ = 38,
1438e84c258SEugene Krasnikov 	WCN36XX_HAL_ADD_BA_RSP = 39,
1448e84c258SEugene Krasnikov 	WCN36XX_HAL_DEL_BA_REQ = 40,
1458e84c258SEugene Krasnikov 	WCN36XX_HAL_DEL_BA_RSP = 41,
1468e84c258SEugene Krasnikov 
1478e84c258SEugene Krasnikov 	WCN36XX_HAL_CH_SWITCH_REQ = 42,
1488e84c258SEugene Krasnikov 	WCN36XX_HAL_CH_SWITCH_RSP = 43,
1498e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_LINK_ST_REQ = 44,
1508e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_LINK_ST_RSP = 45,
1518e84c258SEugene Krasnikov 	WCN36XX_HAL_GET_STATS_REQ = 46,
1528e84c258SEugene Krasnikov 	WCN36XX_HAL_GET_STATS_RSP = 47,
1538e84c258SEugene Krasnikov 	WCN36XX_HAL_UPDATE_CFG_REQ = 48,
1548e84c258SEugene Krasnikov 	WCN36XX_HAL_UPDATE_CFG_RSP = 49,
1558e84c258SEugene Krasnikov 
1568e84c258SEugene Krasnikov 	WCN36XX_HAL_MISSED_BEACON_IND = 50,
1578e84c258SEugene Krasnikov 	WCN36XX_HAL_UNKNOWN_ADDR2_FRAME_RX_IND = 51,
1588e84c258SEugene Krasnikov 	WCN36XX_HAL_MIC_FAILURE_IND = 52,
1598e84c258SEugene Krasnikov 	WCN36XX_HAL_FATAL_ERROR_IND = 53,
1608e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_KEYDONE_MSG = 54,
1618e84c258SEugene Krasnikov 
1628e84c258SEugene Krasnikov 	/* NV Interface */
1638e84c258SEugene Krasnikov 	WCN36XX_HAL_DOWNLOAD_NV_REQ = 55,
1648e84c258SEugene Krasnikov 	WCN36XX_HAL_DOWNLOAD_NV_RSP = 56,
1658e84c258SEugene Krasnikov 
1668e84c258SEugene Krasnikov 	WCN36XX_HAL_ADD_BA_SESSION_REQ = 57,
1678e84c258SEugene Krasnikov 	WCN36XX_HAL_ADD_BA_SESSION_RSP = 58,
1688e84c258SEugene Krasnikov 	WCN36XX_HAL_TRIGGER_BA_REQ = 59,
1698e84c258SEugene Krasnikov 	WCN36XX_HAL_TRIGGER_BA_RSP = 60,
1708e84c258SEugene Krasnikov 	WCN36XX_HAL_UPDATE_BEACON_REQ = 61,
1718e84c258SEugene Krasnikov 	WCN36XX_HAL_UPDATE_BEACON_RSP = 62,
1728e84c258SEugene Krasnikov 	WCN36XX_HAL_SEND_BEACON_REQ = 63,
1738e84c258SEugene Krasnikov 	WCN36XX_HAL_SEND_BEACON_RSP = 64,
1748e84c258SEugene Krasnikov 
1758e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_BCASTKEY_REQ = 65,
1768e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_BCASTKEY_RSP = 66,
1778e84c258SEugene Krasnikov 	WCN36XX_HAL_DELETE_STA_CONTEXT_IND = 67,
1788e84c258SEugene Krasnikov 	WCN36XX_HAL_UPDATE_PROBE_RSP_TEMPLATE_REQ = 68,
1798e84c258SEugene Krasnikov 	WCN36XX_HAL_UPDATE_PROBE_RSP_TEMPLATE_RSP = 69,
1808e84c258SEugene Krasnikov 
1818e84c258SEugene Krasnikov 	/* PTT interface support */
1828e84c258SEugene Krasnikov 	WCN36XX_HAL_PROCESS_PTT_REQ = 70,
1838e84c258SEugene Krasnikov 	WCN36XX_HAL_PROCESS_PTT_RSP = 71,
1848e84c258SEugene Krasnikov 
1858e84c258SEugene Krasnikov 	/* BTAMP related events */
1868e84c258SEugene Krasnikov 	WCN36XX_HAL_SIGNAL_BTAMP_EVENT_REQ = 72,
1878e84c258SEugene Krasnikov 	WCN36XX_HAL_SIGNAL_BTAMP_EVENT_RSP = 73,
1888e84c258SEugene Krasnikov 	WCN36XX_HAL_TL_HAL_FLUSH_AC_REQ = 74,
1898e84c258SEugene Krasnikov 	WCN36XX_HAL_TL_HAL_FLUSH_AC_RSP = 75,
1908e84c258SEugene Krasnikov 
1918e84c258SEugene Krasnikov 	WCN36XX_HAL_ENTER_IMPS_REQ = 76,
1928e84c258SEugene Krasnikov 	WCN36XX_HAL_EXIT_IMPS_REQ = 77,
1938e84c258SEugene Krasnikov 	WCN36XX_HAL_ENTER_BMPS_REQ = 78,
1948e84c258SEugene Krasnikov 	WCN36XX_HAL_EXIT_BMPS_REQ = 79,
1958e84c258SEugene Krasnikov 	WCN36XX_HAL_ENTER_UAPSD_REQ = 80,
1968e84c258SEugene Krasnikov 	WCN36XX_HAL_EXIT_UAPSD_REQ = 81,
1978e84c258SEugene Krasnikov 	WCN36XX_HAL_UPDATE_UAPSD_PARAM_REQ = 82,
1988e84c258SEugene Krasnikov 	WCN36XX_HAL_CONFIGURE_RXP_FILTER_REQ = 83,
1998e84c258SEugene Krasnikov 	WCN36XX_HAL_ADD_BCN_FILTER_REQ = 84,
2008e84c258SEugene Krasnikov 	WCN36XX_HAL_REM_BCN_FILTER_REQ = 85,
2018e84c258SEugene Krasnikov 	WCN36XX_HAL_ADD_WOWL_BCAST_PTRN = 86,
2028e84c258SEugene Krasnikov 	WCN36XX_HAL_DEL_WOWL_BCAST_PTRN = 87,
2038e84c258SEugene Krasnikov 	WCN36XX_HAL_ENTER_WOWL_REQ = 88,
2048e84c258SEugene Krasnikov 	WCN36XX_HAL_EXIT_WOWL_REQ = 89,
2058e84c258SEugene Krasnikov 	WCN36XX_HAL_HOST_OFFLOAD_REQ = 90,
2068e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_RSSI_THRESH_REQ = 91,
2078e84c258SEugene Krasnikov 	WCN36XX_HAL_GET_RSSI_REQ = 92,
2088e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_UAPSD_AC_PARAMS_REQ = 93,
2098e84c258SEugene Krasnikov 	WCN36XX_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_REQ = 94,
2108e84c258SEugene Krasnikov 
2118e84c258SEugene Krasnikov 	WCN36XX_HAL_ENTER_IMPS_RSP = 95,
2128e84c258SEugene Krasnikov 	WCN36XX_HAL_EXIT_IMPS_RSP = 96,
2138e84c258SEugene Krasnikov 	WCN36XX_HAL_ENTER_BMPS_RSP = 97,
2148e84c258SEugene Krasnikov 	WCN36XX_HAL_EXIT_BMPS_RSP = 98,
2158e84c258SEugene Krasnikov 	WCN36XX_HAL_ENTER_UAPSD_RSP = 99,
2168e84c258SEugene Krasnikov 	WCN36XX_HAL_EXIT_UAPSD_RSP = 100,
2178e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_UAPSD_AC_PARAMS_RSP = 101,
2188e84c258SEugene Krasnikov 	WCN36XX_HAL_UPDATE_UAPSD_PARAM_RSP = 102,
2198e84c258SEugene Krasnikov 	WCN36XX_HAL_CONFIGURE_RXP_FILTER_RSP = 103,
2208e84c258SEugene Krasnikov 	WCN36XX_HAL_ADD_BCN_FILTER_RSP = 104,
2218e84c258SEugene Krasnikov 	WCN36XX_HAL_REM_BCN_FILTER_RSP = 105,
2228e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_RSSI_THRESH_RSP = 106,
2238e84c258SEugene Krasnikov 	WCN36XX_HAL_HOST_OFFLOAD_RSP = 107,
2248e84c258SEugene Krasnikov 	WCN36XX_HAL_ADD_WOWL_BCAST_PTRN_RSP = 108,
2258e84c258SEugene Krasnikov 	WCN36XX_HAL_DEL_WOWL_BCAST_PTRN_RSP = 109,
2268e84c258SEugene Krasnikov 	WCN36XX_HAL_ENTER_WOWL_RSP = 110,
2278e84c258SEugene Krasnikov 	WCN36XX_HAL_EXIT_WOWL_RSP = 111,
2288e84c258SEugene Krasnikov 	WCN36XX_HAL_RSSI_NOTIFICATION_IND = 112,
2298e84c258SEugene Krasnikov 	WCN36XX_HAL_GET_RSSI_RSP = 113,
2308e84c258SEugene Krasnikov 	WCN36XX_HAL_CONFIGURE_APPS_CPU_WAKEUP_STATE_RSP = 114,
2318e84c258SEugene Krasnikov 
2328e84c258SEugene Krasnikov 	/* 11k related events */
2338e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_MAX_TX_POWER_REQ = 115,
2348e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_MAX_TX_POWER_RSP = 116,
2358e84c258SEugene Krasnikov 
2368e84c258SEugene Krasnikov 	/* 11R related msgs */
2378e84c258SEugene Krasnikov 	WCN36XX_HAL_AGGR_ADD_TS_REQ = 117,
2388e84c258SEugene Krasnikov 	WCN36XX_HAL_AGGR_ADD_TS_RSP = 118,
2398e84c258SEugene Krasnikov 
2408e84c258SEugene Krasnikov 	/* P2P  WLAN_FEATURE_P2P */
2418e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_P2P_GONOA_REQ = 119,
2428e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_P2P_GONOA_RSP = 120,
2438e84c258SEugene Krasnikov 
2448e84c258SEugene Krasnikov 	/* WLAN Dump commands */
2458e84c258SEugene Krasnikov 	WCN36XX_HAL_DUMP_COMMAND_REQ = 121,
2468e84c258SEugene Krasnikov 	WCN36XX_HAL_DUMP_COMMAND_RSP = 122,
2478e84c258SEugene Krasnikov 
2488e84c258SEugene Krasnikov 	/* OEM_DATA FEATURE SUPPORT */
2498e84c258SEugene Krasnikov 	WCN36XX_HAL_START_OEM_DATA_REQ = 123,
2508e84c258SEugene Krasnikov 	WCN36XX_HAL_START_OEM_DATA_RSP = 124,
2518e84c258SEugene Krasnikov 
2528e84c258SEugene Krasnikov 	/* ADD SELF STA REQ and RSP */
2538e84c258SEugene Krasnikov 	WCN36XX_HAL_ADD_STA_SELF_REQ = 125,
2548e84c258SEugene Krasnikov 	WCN36XX_HAL_ADD_STA_SELF_RSP = 126,
2558e84c258SEugene Krasnikov 
2568e84c258SEugene Krasnikov 	/* DEL SELF STA SUPPORT */
2578e84c258SEugene Krasnikov 	WCN36XX_HAL_DEL_STA_SELF_REQ = 127,
2588e84c258SEugene Krasnikov 	WCN36XX_HAL_DEL_STA_SELF_RSP = 128,
2598e84c258SEugene Krasnikov 
2608e84c258SEugene Krasnikov 	/* Coex Indication */
2618e84c258SEugene Krasnikov 	WCN36XX_HAL_COEX_IND = 129,
2628e84c258SEugene Krasnikov 
2638e84c258SEugene Krasnikov 	/* Tx Complete Indication */
2648e84c258SEugene Krasnikov 	WCN36XX_HAL_OTA_TX_COMPL_IND = 130,
2658e84c258SEugene Krasnikov 
2668e84c258SEugene Krasnikov 	/* Host Suspend/resume messages */
2678e84c258SEugene Krasnikov 	WCN36XX_HAL_HOST_SUSPEND_IND = 131,
2688e84c258SEugene Krasnikov 	WCN36XX_HAL_HOST_RESUME_REQ = 132,
2698e84c258SEugene Krasnikov 	WCN36XX_HAL_HOST_RESUME_RSP = 133,
2708e84c258SEugene Krasnikov 
2718e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_TX_POWER_REQ = 134,
2728e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_TX_POWER_RSP = 135,
2738e84c258SEugene Krasnikov 	WCN36XX_HAL_GET_TX_POWER_REQ = 136,
2748e84c258SEugene Krasnikov 	WCN36XX_HAL_GET_TX_POWER_RSP = 137,
2758e84c258SEugene Krasnikov 
2768e84c258SEugene Krasnikov 	WCN36XX_HAL_P2P_NOA_ATTR_IND = 138,
2778e84c258SEugene Krasnikov 
2788e84c258SEugene Krasnikov 	WCN36XX_HAL_ENABLE_RADAR_DETECT_REQ = 139,
2798e84c258SEugene Krasnikov 	WCN36XX_HAL_ENABLE_RADAR_DETECT_RSP = 140,
2808e84c258SEugene Krasnikov 	WCN36XX_HAL_GET_TPC_REPORT_REQ = 141,
2818e84c258SEugene Krasnikov 	WCN36XX_HAL_GET_TPC_REPORT_RSP = 142,
2828e84c258SEugene Krasnikov 	WCN36XX_HAL_RADAR_DETECT_IND = 143,
2838e84c258SEugene Krasnikov 	WCN36XX_HAL_RADAR_DETECT_INTR_IND = 144,
2848e84c258SEugene Krasnikov 	WCN36XX_HAL_KEEP_ALIVE_REQ = 145,
2858e84c258SEugene Krasnikov 	WCN36XX_HAL_KEEP_ALIVE_RSP = 146,
2868e84c258SEugene Krasnikov 
2878e84c258SEugene Krasnikov 	/* PNO messages */
2888e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_PREF_NETWORK_REQ = 147,
2898e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_PREF_NETWORK_RSP = 148,
2908e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_RSSI_FILTER_REQ = 149,
2918e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_RSSI_FILTER_RSP = 150,
2928e84c258SEugene Krasnikov 	WCN36XX_HAL_UPDATE_SCAN_PARAM_REQ = 151,
2938e84c258SEugene Krasnikov 	WCN36XX_HAL_UPDATE_SCAN_PARAM_RSP = 152,
2948e84c258SEugene Krasnikov 	WCN36XX_HAL_PREF_NETW_FOUND_IND = 153,
2958e84c258SEugene Krasnikov 
2968e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_TX_PER_TRACKING_REQ = 154,
2978e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_TX_PER_TRACKING_RSP = 155,
2988e84c258SEugene Krasnikov 	WCN36XX_HAL_TX_PER_HIT_IND = 156,
2998e84c258SEugene Krasnikov 
3008e84c258SEugene Krasnikov 	WCN36XX_HAL_8023_MULTICAST_LIST_REQ = 157,
3018e84c258SEugene Krasnikov 	WCN36XX_HAL_8023_MULTICAST_LIST_RSP = 158,
3028e84c258SEugene Krasnikov 
3038e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_PACKET_FILTER_REQ = 159,
3048e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_PACKET_FILTER_RSP = 160,
3058e84c258SEugene Krasnikov 	WCN36XX_HAL_PACKET_FILTER_MATCH_COUNT_REQ = 161,
3068e84c258SEugene Krasnikov 	WCN36XX_HAL_PACKET_FILTER_MATCH_COUNT_RSP = 162,
3078e84c258SEugene Krasnikov 	WCN36XX_HAL_CLEAR_PACKET_FILTER_REQ = 163,
3088e84c258SEugene Krasnikov 	WCN36XX_HAL_CLEAR_PACKET_FILTER_RSP = 164,
3098e84c258SEugene Krasnikov 
3108e84c258SEugene Krasnikov 	/*
3118e84c258SEugene Krasnikov 	 * This is temp fix. Should be removed once Host and Riva code is
3128e84c258SEugene Krasnikov 	 * in sync.
3138e84c258SEugene Krasnikov 	 */
3148e84c258SEugene Krasnikov 	WCN36XX_HAL_INIT_SCAN_CON_REQ = 165,
3158e84c258SEugene Krasnikov 
3168e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_POWER_PARAMS_REQ = 166,
3178e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_POWER_PARAMS_RSP = 167,
3188e84c258SEugene Krasnikov 
3198e84c258SEugene Krasnikov 	WCN36XX_HAL_TSM_STATS_REQ = 168,
3208e84c258SEugene Krasnikov 	WCN36XX_HAL_TSM_STATS_RSP = 169,
3218e84c258SEugene Krasnikov 
3228e84c258SEugene Krasnikov 	/* wake reason indication (WOW) */
3238e84c258SEugene Krasnikov 	WCN36XX_HAL_WAKE_REASON_IND = 170,
3248e84c258SEugene Krasnikov 
3258e84c258SEugene Krasnikov 	/* GTK offload support */
3268e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_OFFLOAD_REQ = 171,
3278e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_OFFLOAD_RSP = 172,
3288e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_OFFLOAD_GETINFO_REQ = 173,
3298e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_OFFLOAD_GETINFO_RSP = 174,
3308e84c258SEugene Krasnikov 
3318e84c258SEugene Krasnikov 	WCN36XX_HAL_FEATURE_CAPS_EXCHANGE_REQ = 175,
3328e84c258SEugene Krasnikov 	WCN36XX_HAL_FEATURE_CAPS_EXCHANGE_RSP = 176,
3338e84c258SEugene Krasnikov 	WCN36XX_HAL_EXCLUDE_UNENCRYPTED_IND = 177,
3348e84c258SEugene Krasnikov 
3358e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_THERMAL_MITIGATION_REQ = 178,
3368e84c258SEugene Krasnikov 	WCN36XX_HAL_SET_THERMAL_MITIGATION_RSP = 179,
3378e84c258SEugene Krasnikov 
3388e84c258SEugene Krasnikov 	WCN36XX_HAL_UPDATE_VHT_OP_MODE_REQ = 182,
3398e84c258SEugene Krasnikov 	WCN36XX_HAL_UPDATE_VHT_OP_MODE_RSP = 183,
3408e84c258SEugene Krasnikov 
3418e84c258SEugene Krasnikov 	WCN36XX_HAL_P2P_NOA_START_IND = 184,
3428e84c258SEugene Krasnikov 
3438e84c258SEugene Krasnikov 	WCN36XX_HAL_GET_ROAM_RSSI_REQ = 185,
3448e84c258SEugene Krasnikov 	WCN36XX_HAL_GET_ROAM_RSSI_RSP = 186,
3458e84c258SEugene Krasnikov 
3468e84c258SEugene Krasnikov 	WCN36XX_HAL_CLASS_B_STATS_IND = 187,
3478e84c258SEugene Krasnikov 	WCN36XX_HAL_DEL_BA_IND = 188,
3488e84c258SEugene Krasnikov 	WCN36XX_HAL_DHCP_START_IND = 189,
3498e84c258SEugene Krasnikov 	WCN36XX_HAL_DHCP_STOP_IND = 190,
3508e84c258SEugene Krasnikov 
3519193adebSAndy Green 	WCN36XX_HAL_AVOID_FREQ_RANGE_IND = 233,
3529193adebSAndy Green 
3538e84c258SEugene Krasnikov 	WCN36XX_HAL_MSG_MAX = WCN36XX_HAL_MSG_TYPE_MAX_ENUM_SIZE
3548e84c258SEugene Krasnikov };
3558e84c258SEugene Krasnikov 
3568e84c258SEugene Krasnikov /* Enumeration for Version */
3578e84c258SEugene Krasnikov enum wcn36xx_hal_host_msg_version {
3588e84c258SEugene Krasnikov 	WCN36XX_HAL_MSG_VERSION0 = 0,
3598e84c258SEugene Krasnikov 	WCN36XX_HAL_MSG_VERSION1 = 1,
3608e84c258SEugene Krasnikov 	/* define as 2 bytes data */
3618e84c258SEugene Krasnikov 	WCN36XX_HAL_MSG_WCNSS_CTRL_VERSION = 0x7FFF,
3628e84c258SEugene Krasnikov 	WCN36XX_HAL_MSG_VERSION_MAX_FIELD = WCN36XX_HAL_MSG_WCNSS_CTRL_VERSION
3638e84c258SEugene Krasnikov };
3648e84c258SEugene Krasnikov 
3658e84c258SEugene Krasnikov enum driver_type {
3668e84c258SEugene Krasnikov 	DRIVER_TYPE_PRODUCTION = 0,
3678e84c258SEugene Krasnikov 	DRIVER_TYPE_MFG = 1,
3688e84c258SEugene Krasnikov 	DRIVER_TYPE_DVT = 2,
3698e84c258SEugene Krasnikov 	DRIVER_TYPE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
3708e84c258SEugene Krasnikov };
3718e84c258SEugene Krasnikov 
3728e84c258SEugene Krasnikov enum wcn36xx_hal_stop_type {
3738e84c258SEugene Krasnikov 	HAL_STOP_TYPE_SYS_RESET,
3748e84c258SEugene Krasnikov 	HAL_STOP_TYPE_SYS_DEEP_SLEEP,
3758e84c258SEugene Krasnikov 	HAL_STOP_TYPE_RF_KILL,
3768e84c258SEugene Krasnikov 	HAL_STOP_TYPE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
3778e84c258SEugene Krasnikov };
3788e84c258SEugene Krasnikov 
3798e84c258SEugene Krasnikov enum wcn36xx_hal_sys_mode {
3808e84c258SEugene Krasnikov 	HAL_SYS_MODE_NORMAL,
3818e84c258SEugene Krasnikov 	HAL_SYS_MODE_LEARN,
3828e84c258SEugene Krasnikov 	HAL_SYS_MODE_SCAN,
3838e84c258SEugene Krasnikov 	HAL_SYS_MODE_PROMISC,
3848e84c258SEugene Krasnikov 	HAL_SYS_MODE_SUSPEND_LINK,
3858e84c258SEugene Krasnikov 	HAL_SYS_MODE_ROAM_SCAN,
3868e84c258SEugene Krasnikov 	HAL_SYS_MODE_ROAM_SUSPEND_LINK,
3878e84c258SEugene Krasnikov 	HAL_SYS_MODE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
3888e84c258SEugene Krasnikov };
3898e84c258SEugene Krasnikov 
3908e84c258SEugene Krasnikov enum phy_chan_bond_state {
3918e84c258SEugene Krasnikov 	/* 20MHz IF bandwidth centered on IF carrier */
3928e84c258SEugene Krasnikov 	PHY_SINGLE_CHANNEL_CENTERED = 0,
3938e84c258SEugene Krasnikov 
3948e84c258SEugene Krasnikov 	/* 40MHz IF bandwidth with lower 20MHz supporting the primary channel */
3958e84c258SEugene Krasnikov 	PHY_DOUBLE_CHANNEL_LOW_PRIMARY = 1,
3968e84c258SEugene Krasnikov 
3978e84c258SEugene Krasnikov 	/* 40MHz IF bandwidth centered on IF carrier */
3988e84c258SEugene Krasnikov 	PHY_DOUBLE_CHANNEL_CENTERED = 2,
3998e84c258SEugene Krasnikov 
4008e84c258SEugene Krasnikov 	/* 40MHz IF bandwidth with higher 20MHz supporting the primary ch */
4018e84c258SEugene Krasnikov 	PHY_DOUBLE_CHANNEL_HIGH_PRIMARY = 3,
4028e84c258SEugene Krasnikov 
4038e84c258SEugene Krasnikov 	/* 20/40MHZ offset LOW 40/80MHZ offset CENTERED */
4048e84c258SEugene Krasnikov 	PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_CENTERED = 4,
4058e84c258SEugene Krasnikov 
4068e84c258SEugene Krasnikov 	/* 20/40MHZ offset CENTERED 40/80MHZ offset CENTERED */
4078e84c258SEugene Krasnikov 	PHY_QUADRUPLE_CHANNEL_20MHZ_CENTERED_40MHZ_CENTERED = 5,
4088e84c258SEugene Krasnikov 
4098e84c258SEugene Krasnikov 	/* 20/40MHZ offset HIGH 40/80MHZ offset CENTERED */
4108e84c258SEugene Krasnikov 	PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_CENTERED = 6,
4118e84c258SEugene Krasnikov 
4128e84c258SEugene Krasnikov 	/* 20/40MHZ offset LOW 40/80MHZ offset LOW */
4138e84c258SEugene Krasnikov 	PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_LOW = 7,
4148e84c258SEugene Krasnikov 
4158e84c258SEugene Krasnikov 	/* 20/40MHZ offset HIGH 40/80MHZ offset LOW */
4168e84c258SEugene Krasnikov 	PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_LOW = 8,
4178e84c258SEugene Krasnikov 
4188e84c258SEugene Krasnikov 	/* 20/40MHZ offset LOW 40/80MHZ offset HIGH */
4198e84c258SEugene Krasnikov 	PHY_QUADRUPLE_CHANNEL_20MHZ_LOW_40MHZ_HIGH = 9,
4208e84c258SEugene Krasnikov 
4218e84c258SEugene Krasnikov 	/* 20/40MHZ offset-HIGH 40/80MHZ offset HIGH */
4228e84c258SEugene Krasnikov 	PHY_QUADRUPLE_CHANNEL_20MHZ_HIGH_40MHZ_HIGH = 10,
4238e84c258SEugene Krasnikov 
4248e84c258SEugene Krasnikov 	PHY_CHANNEL_BONDING_STATE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
4258e84c258SEugene Krasnikov };
4268e84c258SEugene Krasnikov 
4278e84c258SEugene Krasnikov /* Spatial Multiplexing(SM) Power Save mode */
4288e84c258SEugene Krasnikov enum wcn36xx_hal_ht_mimo_state {
4298e84c258SEugene Krasnikov 	/* Static SM Power Save mode */
4308e84c258SEugene Krasnikov 	WCN36XX_HAL_HT_MIMO_PS_STATIC = 0,
4318e84c258SEugene Krasnikov 
4328e84c258SEugene Krasnikov 	/* Dynamic SM Power Save mode */
4338e84c258SEugene Krasnikov 	WCN36XX_HAL_HT_MIMO_PS_DYNAMIC = 1,
4348e84c258SEugene Krasnikov 
4358e84c258SEugene Krasnikov 	/* reserved */
4368e84c258SEugene Krasnikov 	WCN36XX_HAL_HT_MIMO_PS_NA = 2,
4378e84c258SEugene Krasnikov 
4388e84c258SEugene Krasnikov 	/* SM Power Save disabled */
4398e84c258SEugene Krasnikov 	WCN36XX_HAL_HT_MIMO_PS_NO_LIMIT = 3,
4408e84c258SEugene Krasnikov 
4418e84c258SEugene Krasnikov 	WCN36XX_HAL_HT_MIMO_PS_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
4428e84c258SEugene Krasnikov };
4438e84c258SEugene Krasnikov 
4448e84c258SEugene Krasnikov /* each station added has a rate mode which specifies the sta attributes */
4458e84c258SEugene Krasnikov enum sta_rate_mode {
4468e84c258SEugene Krasnikov 	STA_TAURUS = 0,
4478e84c258SEugene Krasnikov 	STA_TITAN,
4488e84c258SEugene Krasnikov 	STA_POLARIS,
4498e84c258SEugene Krasnikov 	STA_11b,
4508e84c258SEugene Krasnikov 	STA_11bg,
4518e84c258SEugene Krasnikov 	STA_11a,
4528e84c258SEugene Krasnikov 	STA_11n,
4538e84c258SEugene Krasnikov 	STA_11ac,
4548e84c258SEugene Krasnikov 	STA_INVALID_RATE_MODE = WCN36XX_HAL_MAX_ENUM_SIZE
4558e84c258SEugene Krasnikov };
4568e84c258SEugene Krasnikov 
4578e84c258SEugene Krasnikov /* 1,2,5.5,11 */
4588e84c258SEugene Krasnikov #define WCN36XX_HAL_NUM_DSSS_RATES           4
4598e84c258SEugene Krasnikov 
4608e84c258SEugene Krasnikov /* 6,9,12,18,24,36,48,54 */
4618e84c258SEugene Krasnikov #define WCN36XX_HAL_NUM_OFDM_RATES           8
4628e84c258SEugene Krasnikov 
4638e84c258SEugene Krasnikov /* 72,96,108 */
4648e84c258SEugene Krasnikov #define WCN36XX_HAL_NUM_POLARIS_RATES       3
4658e84c258SEugene Krasnikov 
4668e84c258SEugene Krasnikov #define WCN36XX_HAL_MAC_MAX_SUPPORTED_MCS_SET    16
4678e84c258SEugene Krasnikov 
4688e84c258SEugene Krasnikov enum wcn36xx_hal_bss_type {
4698e84c258SEugene Krasnikov 	WCN36XX_HAL_INFRASTRUCTURE_MODE,
4708e84c258SEugene Krasnikov 
4718e84c258SEugene Krasnikov 	/* Added for softAP support */
4728e84c258SEugene Krasnikov 	WCN36XX_HAL_INFRA_AP_MODE,
4738e84c258SEugene Krasnikov 
4748e84c258SEugene Krasnikov 	WCN36XX_HAL_IBSS_MODE,
4758e84c258SEugene Krasnikov 
4768e84c258SEugene Krasnikov 	/* Added for BT-AMP support */
4778e84c258SEugene Krasnikov 	WCN36XX_HAL_BTAMP_STA_MODE,
4788e84c258SEugene Krasnikov 
4798e84c258SEugene Krasnikov 	/* Added for BT-AMP support */
4808e84c258SEugene Krasnikov 	WCN36XX_HAL_BTAMP_AP_MODE,
4818e84c258SEugene Krasnikov 
4828e84c258SEugene Krasnikov 	WCN36XX_HAL_AUTO_MODE,
4838e84c258SEugene Krasnikov 
4848e84c258SEugene Krasnikov 	WCN36XX_HAL_DONOT_USE_BSS_TYPE = WCN36XX_HAL_MAX_ENUM_SIZE
4858e84c258SEugene Krasnikov };
4868e84c258SEugene Krasnikov 
4878e84c258SEugene Krasnikov enum wcn36xx_hal_nw_type {
4888e84c258SEugene Krasnikov 	WCN36XX_HAL_11A_NW_TYPE,
4898e84c258SEugene Krasnikov 	WCN36XX_HAL_11B_NW_TYPE,
4908e84c258SEugene Krasnikov 	WCN36XX_HAL_11G_NW_TYPE,
4918e84c258SEugene Krasnikov 	WCN36XX_HAL_11N_NW_TYPE,
4928e84c258SEugene Krasnikov 	WCN36XX_HAL_DONOT_USE_NW_TYPE = WCN36XX_HAL_MAX_ENUM_SIZE
4938e84c258SEugene Krasnikov };
4948e84c258SEugene Krasnikov 
4958e84c258SEugene Krasnikov #define WCN36XX_HAL_MAC_RATESET_EID_MAX            12
4968e84c258SEugene Krasnikov 
4978e84c258SEugene Krasnikov enum wcn36xx_hal_ht_operating_mode {
4988e84c258SEugene Krasnikov 	/* No Protection */
4998e84c258SEugene Krasnikov 	WCN36XX_HAL_HT_OP_MODE_PURE,
5008e84c258SEugene Krasnikov 
5018e84c258SEugene Krasnikov 	/* Overlap Legacy device present, protection is optional */
5028e84c258SEugene Krasnikov 	WCN36XX_HAL_HT_OP_MODE_OVERLAP_LEGACY,
5038e84c258SEugene Krasnikov 
5048e84c258SEugene Krasnikov 	/* No legacy device, but 20 MHz HT present */
5058e84c258SEugene Krasnikov 	WCN36XX_HAL_HT_OP_MODE_NO_LEGACY_20MHZ_HT,
5068e84c258SEugene Krasnikov 
5078e84c258SEugene Krasnikov 	/* Protection is required */
5088e84c258SEugene Krasnikov 	WCN36XX_HAL_HT_OP_MODE_MIXED,
5098e84c258SEugene Krasnikov 
5108e84c258SEugene Krasnikov 	WCN36XX_HAL_HT_OP_MODE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
5118e84c258SEugene Krasnikov };
5128e84c258SEugene Krasnikov 
5138e84c258SEugene Krasnikov /* Encryption type enum used with peer */
5148e84c258SEugene Krasnikov enum ani_ed_type {
5158e84c258SEugene Krasnikov 	WCN36XX_HAL_ED_NONE,
5168e84c258SEugene Krasnikov 	WCN36XX_HAL_ED_WEP40,
5178e84c258SEugene Krasnikov 	WCN36XX_HAL_ED_WEP104,
5188e84c258SEugene Krasnikov 	WCN36XX_HAL_ED_TKIP,
5198e84c258SEugene Krasnikov 	WCN36XX_HAL_ED_CCMP,
5208e84c258SEugene Krasnikov 	WCN36XX_HAL_ED_WPI,
5218e84c258SEugene Krasnikov 	WCN36XX_HAL_ED_AES_128_CMAC,
5228e84c258SEugene Krasnikov 	WCN36XX_HAL_ED_NOT_IMPLEMENTED = WCN36XX_HAL_MAX_ENUM_SIZE
5238e84c258SEugene Krasnikov };
5248e84c258SEugene Krasnikov 
5258e84c258SEugene Krasnikov #define WLAN_MAX_KEY_RSC_LEN                16
5268e84c258SEugene Krasnikov #define WLAN_WAPI_KEY_RSC_LEN               16
5278e84c258SEugene Krasnikov 
5288e84c258SEugene Krasnikov /* MAX key length when ULA is used */
5298e84c258SEugene Krasnikov #define WCN36XX_HAL_MAC_MAX_KEY_LENGTH              32
5308e84c258SEugene Krasnikov #define WCN36XX_HAL_MAC_MAX_NUM_OF_DEFAULT_KEYS     4
5318e84c258SEugene Krasnikov 
5328e84c258SEugene Krasnikov /*
5338e84c258SEugene Krasnikov  * Enum to specify whether key is used for TX only, RX only or both.
5348e84c258SEugene Krasnikov  */
5358e84c258SEugene Krasnikov enum ani_key_direction {
5368e84c258SEugene Krasnikov 	WCN36XX_HAL_TX_ONLY,
5378e84c258SEugene Krasnikov 	WCN36XX_HAL_RX_ONLY,
5388e84c258SEugene Krasnikov 	WCN36XX_HAL_TX_RX,
5398e84c258SEugene Krasnikov 	WCN36XX_HAL_TX_DEFAULT,
5408e84c258SEugene Krasnikov 	WCN36XX_HAL_DONOT_USE_KEY_DIRECTION = WCN36XX_HAL_MAX_ENUM_SIZE
5418e84c258SEugene Krasnikov };
5428e84c258SEugene Krasnikov 
5438e84c258SEugene Krasnikov enum ani_wep_type {
5448e84c258SEugene Krasnikov 	WCN36XX_HAL_WEP_STATIC,
5458e84c258SEugene Krasnikov 	WCN36XX_HAL_WEP_DYNAMIC,
5468e84c258SEugene Krasnikov 	WCN36XX_HAL_WEP_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
5478e84c258SEugene Krasnikov };
5488e84c258SEugene Krasnikov 
5498e84c258SEugene Krasnikov enum wcn36xx_hal_link_state {
5508e84c258SEugene Krasnikov 
5518e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_IDLE_STATE = 0,
5528e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_PREASSOC_STATE = 1,
5538e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_POSTASSOC_STATE = 2,
5548e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_AP_STATE = 3,
5558e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_IBSS_STATE = 4,
5568e84c258SEugene Krasnikov 
5578e84c258SEugene Krasnikov 	/* BT-AMP Case */
5588e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_BTAMP_PREASSOC_STATE = 5,
5598e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_BTAMP_POSTASSOC_STATE = 6,
5608e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_BTAMP_AP_STATE = 7,
5618e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_BTAMP_STA_STATE = 8,
5628e84c258SEugene Krasnikov 
5638e84c258SEugene Krasnikov 	/* Reserved for HAL Internal Use */
5648e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_LEARN_STATE = 9,
5658e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_SCAN_STATE = 10,
5668e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_FINISH_SCAN_STATE = 11,
5678e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_INIT_CAL_STATE = 12,
5688e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_FINISH_CAL_STATE = 13,
5698e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_LISTEN_STATE = 14,
5708e84c258SEugene Krasnikov 
5718e84c258SEugene Krasnikov 	WCN36XX_HAL_LINK_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
5728e84c258SEugene Krasnikov };
5738e84c258SEugene Krasnikov 
5748e84c258SEugene Krasnikov enum wcn36xx_hal_stats_mask {
5758e84c258SEugene Krasnikov 	HAL_SUMMARY_STATS_INFO = 0x00000001,
5768e84c258SEugene Krasnikov 	HAL_GLOBAL_CLASS_A_STATS_INFO = 0x00000002,
5778e84c258SEugene Krasnikov 	HAL_GLOBAL_CLASS_B_STATS_INFO = 0x00000004,
5788e84c258SEugene Krasnikov 	HAL_GLOBAL_CLASS_C_STATS_INFO = 0x00000008,
5798e84c258SEugene Krasnikov 	HAL_GLOBAL_CLASS_D_STATS_INFO = 0x00000010,
5808e84c258SEugene Krasnikov 	HAL_PER_STA_STATS_INFO = 0x00000020
5818e84c258SEugene Krasnikov };
5828e84c258SEugene Krasnikov 
5838e84c258SEugene Krasnikov /* BT-AMP events type */
5848e84c258SEugene Krasnikov enum bt_amp_event_type {
5858e84c258SEugene Krasnikov 	BTAMP_EVENT_CONNECTION_START,
5868e84c258SEugene Krasnikov 	BTAMP_EVENT_CONNECTION_STOP,
5878e84c258SEugene Krasnikov 	BTAMP_EVENT_CONNECTION_TERMINATED,
5888e84c258SEugene Krasnikov 
5898e84c258SEugene Krasnikov 	/* This and beyond are invalid values */
5908e84c258SEugene Krasnikov 	BTAMP_EVENT_TYPE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE,
5918e84c258SEugene Krasnikov };
5928e84c258SEugene Krasnikov 
5938e84c258SEugene Krasnikov /* PE Statistics */
5948e84c258SEugene Krasnikov enum pe_stats_mask {
5958e84c258SEugene Krasnikov 	PE_SUMMARY_STATS_INFO = 0x00000001,
5968e84c258SEugene Krasnikov 	PE_GLOBAL_CLASS_A_STATS_INFO = 0x00000002,
5978e84c258SEugene Krasnikov 	PE_GLOBAL_CLASS_B_STATS_INFO = 0x00000004,
5988e84c258SEugene Krasnikov 	PE_GLOBAL_CLASS_C_STATS_INFO = 0x00000008,
5998e84c258SEugene Krasnikov 	PE_GLOBAL_CLASS_D_STATS_INFO = 0x00000010,
6008e84c258SEugene Krasnikov 	PE_PER_STA_STATS_INFO = 0x00000020,
6018e84c258SEugene Krasnikov 
6028e84c258SEugene Krasnikov 	/* This and beyond are invalid values */
6038e84c258SEugene Krasnikov 	PE_STATS_TYPE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
6048e84c258SEugene Krasnikov };
6058e84c258SEugene Krasnikov 
6068e84c258SEugene Krasnikov /*
6078e84c258SEugene Krasnikov  * Configuration Parameter IDs
6088e84c258SEugene Krasnikov  */
6098e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_STA_ID				0
6108e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_CURRENT_TX_ANTENNA		1
6118e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_CURRENT_RX_ANTENNA		2
6128e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_LOW_GAIN_OVERRIDE		3
6138e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_POWER_STATE_PER_CHAIN		4
6148e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_CAL_PERIOD			5
6158e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_CAL_CONTROL			6
6168e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PROXIMITY			7
6178e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_NETWORK_DENSITY			8
6188e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_MAX_MEDIUM_TIME			9
6198e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_MAX_MPDUS_IN_AMPDU		10
6208e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_RTS_THRESHOLD			11
6218e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_SHORT_RETRY_LIMIT		12
6228e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_LONG_RETRY_LIMIT		13
6238e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_FRAGMENTATION_THRESHOLD		14
6248e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_DYNAMIC_THRESHOLD_ZERO		15
6258e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_DYNAMIC_THRESHOLD_ONE		16
6268e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_DYNAMIC_THRESHOLD_TWO		17
6278e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_FIXED_RATE			18
6288e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_RETRYRATE_POLICY		19
6298e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_RETRYRATE_SECONDARY		20
6308e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_RETRYRATE_TERTIARY		21
6318e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_FORCE_POLICY_PROTECTION		22
6328e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_FIXED_RATE_MULTICAST_24GHZ	23
6338e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_FIXED_RATE_MULTICAST_5GHZ	24
6348e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_DEFAULT_RATE_INDEX_24GHZ	25
6358e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_DEFAULT_RATE_INDEX_5GHZ		26
6368e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_MAX_BA_SESSIONS			27
6378e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PS_DATA_INACTIVITY_TIMEOUT	28
6388e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PS_ENABLE_BCN_FILTER		29
6398e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PS_ENABLE_RSSI_MONITOR		30
6408e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_NUM_BEACON_PER_RSSI_AVERAGE	31
6418e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_STATS_PERIOD			32
6428e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_CFP_MAX_DURATION		33
6438e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_FRAME_TRANS_ENABLED		34
6448e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_DTIM_PERIOD			35
6458e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_EDCA_WMM_ACBK			36
6468e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_EDCA_WMM_ACBE			37
6478e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_EDCA_WMM_ACVO			38
6488e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_EDCA_WMM_ACVI			39
6498e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BA_THRESHOLD_HIGH		40
6508e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_MAX_BA_BUFFERS			41
6518e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_RPE_POLLING_THRESHOLD		42
6528e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC0_REG	43
6538e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC1_REG	44
6548e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC2_REG	45
6558e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_RPE_AGING_THRESHOLD_FOR_AC3_REG	46
6568e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_NO_OF_ONCHIP_REORDER_SESSIONS	47
6578e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PS_LISTEN_INTERVAL		48
6588e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PS_HEART_BEAT_THRESHOLD		49
6598e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PS_NTH_BEACON_FILTER		50
6608e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PS_MAX_PS_POLL			51
6618e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PS_MIN_RSSI_THRESHOLD		52
6628e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PS_RSSI_FILTER_PERIOD		53
6638e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PS_BROADCAST_FRAME_FILTER_ENABLE 54
6648e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PS_IGNORE_DTIM			55
6658e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PS_ENABLE_BCN_EARLY_TERM	56
6668e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_DYNAMIC_PS_POLL_VALUE		57
6678e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PS_NULLDATA_AP_RESP_TIMEOUT	58
6688e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_TELE_BCN_WAKEUP_EN		59
6698e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_TELE_BCN_TRANS_LI		60
6708e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_TELE_BCN_TRANS_LI_IDLE_BCNS	61
6718e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_TELE_BCN_MAX_LI			62
6728e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_TELE_BCN_MAX_LI_IDLE_BCNS	63
6738e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_TX_PWR_CTRL_ENABLE		64
6748e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_VALID_RADAR_CHANNEL_LIST	65
6758e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_TX_POWER_24_20			66
6768e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_TX_POWER_24_40			67
6778e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_TX_POWER_50_20			68
6788e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_TX_POWER_50_40			69
6798e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_MCAST_BCAST_FILTER_SETTING	70
6808e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BCN_EARLY_TERM_WAKEUP_INTERVAL	71
6818e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_MAX_TX_POWER_2_4		72
6828e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_MAX_TX_POWER_5			73
6838e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_INFRA_STA_KEEP_ALIVE_PERIOD	74
6848e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_ENABLE_CLOSE_LOOP		75
6858e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_EXECUTION_MODE		76
6868e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_DHCP_BT_SLOTS_TO_BLOCK	77
6878e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_A2DP_DHCP_BT_SUB_INTERVALS	78
6888e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_PS_TX_INACTIVITY_TIMEOUT	79
6898e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_WCNSS_API_VERSION		80
6908e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_AP_KEEPALIVE_TIMEOUT		81
6918e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_GO_KEEPALIVE_TIMEOUT		82
6928e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_ENABLE_MC_ADDR_LIST		83
6938e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_INQ_BT		84
6948e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_PAGE_BT		85
6958e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_CONN_BT		86
6968e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_LE_BT		87
6978e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_INQ_WLAN		88
6988e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_PAGE_WLAN	89
6998e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_CONN_WLAN	90
7008e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_STATIC_LEN_LE_WLAN		91
7018e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_DYN_MAX_LEN_BT		92
7028e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_DYN_MAX_LEN_WLAN		93
7038e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_MAX_SCO_BLOCK_PERC		94
7048e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_DHCP_PROT_ON_A2DP		95
7058e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_DHCP_PROT_ON_SCO		96
7068e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_ENABLE_UNICAST_FILTER		97
7078e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_MAX_ASSOC_LIMIT			98
7088e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_ENABLE_LPWR_IMG_TRANSITION	99
7098e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_ENABLE_MCC_ADAPTIVE_SCHEDULER	100
7108e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_ENABLE_DETECT_PS_SUPPORT	101
7118e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_AP_LINK_MONITOR_TIMEOUT		102
7128e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_BTC_DWELL_TIME_MULTIPLIER	103
7138e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_ENABLE_TDLS_OXYGEN_MODE		104
7148e84c258SEugene Krasnikov #define WCN36XX_HAL_CFG_MAX_PARAMS			105
7158e84c258SEugene Krasnikov 
7168e84c258SEugene Krasnikov /* Message definitons - All the messages below need to be packed */
7178e84c258SEugene Krasnikov 
7188e84c258SEugene Krasnikov /* Definition for HAL API Version. */
7198e84c258SEugene Krasnikov struct wcnss_wlan_version {
7208e84c258SEugene Krasnikov 	u8 revision;
7218e84c258SEugene Krasnikov 	u8 version;
7228e84c258SEugene Krasnikov 	u8 minor;
7238e84c258SEugene Krasnikov 	u8 major;
7248e84c258SEugene Krasnikov } __packed;
7258e84c258SEugene Krasnikov 
7268e84c258SEugene Krasnikov /* Definition for Encryption Keys */
7278e84c258SEugene Krasnikov struct wcn36xx_hal_keys {
7288e84c258SEugene Krasnikov 	u8 id;
7298e84c258SEugene Krasnikov 
7308e84c258SEugene Krasnikov 	/* 0 for multicast */
7318e84c258SEugene Krasnikov 	u8 unicast;
7328e84c258SEugene Krasnikov 
7338e84c258SEugene Krasnikov 	enum ani_key_direction direction;
7348e84c258SEugene Krasnikov 
7358e84c258SEugene Krasnikov 	/* Usage is unknown */
7368e84c258SEugene Krasnikov 	u8 rsc[WLAN_MAX_KEY_RSC_LEN];
7378e84c258SEugene Krasnikov 
7388e84c258SEugene Krasnikov 	/* =1 for authenticator,=0 for supplicant */
7398e84c258SEugene Krasnikov 	u8 pae_role;
7408e84c258SEugene Krasnikov 
7418e84c258SEugene Krasnikov 	u16 length;
7428e84c258SEugene Krasnikov 	u8 key[WCN36XX_HAL_MAC_MAX_KEY_LENGTH];
7438e84c258SEugene Krasnikov } __packed;
7448e84c258SEugene Krasnikov 
7458e84c258SEugene Krasnikov /*
7468e84c258SEugene Krasnikov  * set_sta_key_params Moving here since it is shared by
7478e84c258SEugene Krasnikov  * configbss/setstakey msgs
7488e84c258SEugene Krasnikov  */
7498e84c258SEugene Krasnikov struct wcn36xx_hal_set_sta_key_params {
7508e84c258SEugene Krasnikov 	/* STA Index */
7518e84c258SEugene Krasnikov 	u16 sta_index;
7528e84c258SEugene Krasnikov 
7538e84c258SEugene Krasnikov 	/* Encryption Type used with peer */
7548e84c258SEugene Krasnikov 	enum ani_ed_type enc_type;
7558e84c258SEugene Krasnikov 
7568e84c258SEugene Krasnikov 	/* STATIC/DYNAMIC - valid only for WEP */
7578e84c258SEugene Krasnikov 	enum ani_wep_type wep_type;
7588e84c258SEugene Krasnikov 
7598e84c258SEugene Krasnikov 	/* Default WEP key, valid only for static WEP, must between 0 and 3. */
7608e84c258SEugene Krasnikov 	u8 def_wep_idx;
7618e84c258SEugene Krasnikov 
7628e84c258SEugene Krasnikov 	/* valid only for non-static WEP encyrptions */
7638e84c258SEugene Krasnikov 	struct wcn36xx_hal_keys key[WCN36XX_HAL_MAC_MAX_NUM_OF_DEFAULT_KEYS];
7648e84c258SEugene Krasnikov 
7658e84c258SEugene Krasnikov 	/*
7668e84c258SEugene Krasnikov 	 * Control for Replay Count, 1= Single TID based replay count on Tx
7678e84c258SEugene Krasnikov 	 * 0 = Per TID based replay count on TX
7688e84c258SEugene Krasnikov 	 */
7698e84c258SEugene Krasnikov 	u8 single_tid_rc;
7708e84c258SEugene Krasnikov 
7718e84c258SEugene Krasnikov } __packed;
7728e84c258SEugene Krasnikov 
7738e84c258SEugene Krasnikov /* 4-byte control message header used by HAL*/
7748e84c258SEugene Krasnikov struct wcn36xx_hal_msg_header {
7758e84c258SEugene Krasnikov 	enum wcn36xx_hal_host_msg_type msg_type:16;
7768e84c258SEugene Krasnikov 	enum wcn36xx_hal_host_msg_version msg_version:16;
7778e84c258SEugene Krasnikov 	u32 len;
7788e84c258SEugene Krasnikov } __packed;
7798e84c258SEugene Krasnikov 
7808e84c258SEugene Krasnikov /* Config format required by HAL for each CFG item*/
7818e84c258SEugene Krasnikov struct wcn36xx_hal_cfg {
7828e84c258SEugene Krasnikov 	/* Cfg Id. The Id required by HAL is exported by HAL
7838e84c258SEugene Krasnikov 	 * in shared header file between UMAC and HAL.*/
7848e84c258SEugene Krasnikov 	u16 id;
7858e84c258SEugene Krasnikov 
7868e84c258SEugene Krasnikov 	/* Length of the Cfg. This parameter is used to go to next cfg
7878e84c258SEugene Krasnikov 	 * in the TLV format.*/
7888e84c258SEugene Krasnikov 	u16 len;
7898e84c258SEugene Krasnikov 
7908e84c258SEugene Krasnikov 	/* Padding bytes for unaligned address's */
7918e84c258SEugene Krasnikov 	u16 pad_bytes;
7928e84c258SEugene Krasnikov 
7938e84c258SEugene Krasnikov 	/* Reserve bytes for making cfgVal to align address */
7948e84c258SEugene Krasnikov 	u16 reserve;
7958e84c258SEugene Krasnikov 
7968e84c258SEugene Krasnikov 	/* Following the uCfgLen field there should be a 'uCfgLen' bytes
7978e84c258SEugene Krasnikov 	 * containing the uCfgValue ; u8 uCfgValue[uCfgLen] */
7988e84c258SEugene Krasnikov } __packed;
7998e84c258SEugene Krasnikov 
8008e84c258SEugene Krasnikov struct wcn36xx_hal_mac_start_parameters {
8018e84c258SEugene Krasnikov 	/* Drive Type - Production or FTM etc */
8028e84c258SEugene Krasnikov 	enum driver_type type;
8038e84c258SEugene Krasnikov 
8048e84c258SEugene Krasnikov 	/* Length of the config buffer */
8058e84c258SEugene Krasnikov 	u32 len;
8068e84c258SEugene Krasnikov 
8078e84c258SEugene Krasnikov 	/* Following this there is a TLV formatted buffer of length
8088e84c258SEugene Krasnikov 	 * "len" bytes containing all config values.
8098e84c258SEugene Krasnikov 	 * The TLV is expected to be formatted like this:
8108e84c258SEugene Krasnikov 	 * 0           15            31           31+CFG_LEN-1        length-1
8118e84c258SEugene Krasnikov 	 * |   CFG_ID   |   CFG_LEN   |   CFG_BODY    |  CFG_ID  |......|
8128e84c258SEugene Krasnikov 	 */
8138e84c258SEugene Krasnikov } __packed;
8148e84c258SEugene Krasnikov 
8158e84c258SEugene Krasnikov struct wcn36xx_hal_mac_start_req_msg {
8168e84c258SEugene Krasnikov 	/* config buffer must start in TLV format just here */
8178e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
8188e84c258SEugene Krasnikov 	struct wcn36xx_hal_mac_start_parameters params;
8198e84c258SEugene Krasnikov } __packed;
8208e84c258SEugene Krasnikov 
8218e84c258SEugene Krasnikov struct wcn36xx_hal_mac_start_rsp_params {
8228e84c258SEugene Krasnikov 	/* success or failure */
8238e84c258SEugene Krasnikov 	u16 status;
8248e84c258SEugene Krasnikov 
8258e84c258SEugene Krasnikov 	/* Max number of STA supported by the device */
8268e84c258SEugene Krasnikov 	u8 stations;
8278e84c258SEugene Krasnikov 
8288e84c258SEugene Krasnikov 	/* Max number of BSS supported by the device */
8298e84c258SEugene Krasnikov 	u8 bssids;
8308e84c258SEugene Krasnikov 
8318e84c258SEugene Krasnikov 	/* API Version */
8328e84c258SEugene Krasnikov 	struct wcnss_wlan_version version;
8338e84c258SEugene Krasnikov 
8348e84c258SEugene Krasnikov 	/* CRM build information */
8358e84c258SEugene Krasnikov 	u8 crm_version[WCN36XX_HAL_VERSION_LENGTH];
8368e84c258SEugene Krasnikov 
8378e84c258SEugene Krasnikov 	/* hardware/chipset/misc version information */
8388e84c258SEugene Krasnikov 	u8 wlan_version[WCN36XX_HAL_VERSION_LENGTH];
8398e84c258SEugene Krasnikov 
8408e84c258SEugene Krasnikov } __packed;
8418e84c258SEugene Krasnikov 
8428e84c258SEugene Krasnikov struct wcn36xx_hal_mac_start_rsp_msg {
8438e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
8448e84c258SEugene Krasnikov 	struct wcn36xx_hal_mac_start_rsp_params start_rsp_params;
8458e84c258SEugene Krasnikov } __packed;
8468e84c258SEugene Krasnikov 
8478e84c258SEugene Krasnikov struct wcn36xx_hal_mac_stop_req_params {
8488e84c258SEugene Krasnikov 	/* The reason for which the device is being stopped */
8498e84c258SEugene Krasnikov 	enum wcn36xx_hal_stop_type reason;
8508e84c258SEugene Krasnikov 
8518e84c258SEugene Krasnikov } __packed;
8528e84c258SEugene Krasnikov 
8538e84c258SEugene Krasnikov struct wcn36xx_hal_mac_stop_req_msg {
8548e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
8558e84c258SEugene Krasnikov 	struct wcn36xx_hal_mac_stop_req_params stop_req_params;
8568e84c258SEugene Krasnikov } __packed;
8578e84c258SEugene Krasnikov 
8588e84c258SEugene Krasnikov struct wcn36xx_hal_mac_stop_rsp_msg {
8598e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
8608e84c258SEugene Krasnikov 
8618e84c258SEugene Krasnikov 	/* success or failure */
8628e84c258SEugene Krasnikov 	u32 status;
8638e84c258SEugene Krasnikov } __packed;
8648e84c258SEugene Krasnikov 
8658e84c258SEugene Krasnikov struct wcn36xx_hal_update_cfg_req_msg {
8668e84c258SEugene Krasnikov 	/*
8678e84c258SEugene Krasnikov 	 * Note: The length specified in tHalUpdateCfgReqMsg messages should be
8688e84c258SEugene Krasnikov 	 * header.msgLen = sizeof(tHalUpdateCfgReqMsg) + uConfigBufferLen
8698e84c258SEugene Krasnikov 	 */
8708e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
8718e84c258SEugene Krasnikov 
8728e84c258SEugene Krasnikov 	/* Length of the config buffer. Allows UMAC to update multiple CFGs */
8738e84c258SEugene Krasnikov 	u32 len;
8748e84c258SEugene Krasnikov 
8758e84c258SEugene Krasnikov 	/*
8768e84c258SEugene Krasnikov 	 * Following this there is a TLV formatted buffer of length
8778e84c258SEugene Krasnikov 	 * "uConfigBufferLen" bytes containing all config values.
8788e84c258SEugene Krasnikov 	 * The TLV is expected to be formatted like this:
8798e84c258SEugene Krasnikov 	 * 0           15            31           31+CFG_LEN-1        length-1
8808e84c258SEugene Krasnikov 	 * |   CFG_ID   |   CFG_LEN   |   CFG_BODY    |  CFG_ID  |......|
8818e84c258SEugene Krasnikov 	 */
8828e84c258SEugene Krasnikov 
8838e84c258SEugene Krasnikov } __packed;
8848e84c258SEugene Krasnikov 
8858e84c258SEugene Krasnikov struct wcn36xx_hal_update_cfg_rsp_msg {
8868e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
8878e84c258SEugene Krasnikov 
8888e84c258SEugene Krasnikov 	/* success or failure */
8898e84c258SEugene Krasnikov 	u32 status;
8908e84c258SEugene Krasnikov 
8918e84c258SEugene Krasnikov } __packed;
8928e84c258SEugene Krasnikov 
8938e84c258SEugene Krasnikov /* Frame control field format (2 bytes) */
8948e84c258SEugene Krasnikov struct wcn36xx_hal_mac_frame_ctl {
8958e84c258SEugene Krasnikov 
8968e84c258SEugene Krasnikov #ifndef ANI_LITTLE_BIT_ENDIAN
8978e84c258SEugene Krasnikov 
8988e84c258SEugene Krasnikov 	u8 subType:4;
8998e84c258SEugene Krasnikov 	u8 type:2;
9008e84c258SEugene Krasnikov 	u8 protVer:2;
9018e84c258SEugene Krasnikov 
9028e84c258SEugene Krasnikov 	u8 order:1;
9038e84c258SEugene Krasnikov 	u8 wep:1;
9048e84c258SEugene Krasnikov 	u8 moreData:1;
9058e84c258SEugene Krasnikov 	u8 powerMgmt:1;
9068e84c258SEugene Krasnikov 	u8 retry:1;
9078e84c258SEugene Krasnikov 	u8 moreFrag:1;
9088e84c258SEugene Krasnikov 	u8 fromDS:1;
9098e84c258SEugene Krasnikov 	u8 toDS:1;
9108e84c258SEugene Krasnikov 
9118e84c258SEugene Krasnikov #else
9128e84c258SEugene Krasnikov 
9138e84c258SEugene Krasnikov 	u8 protVer:2;
9148e84c258SEugene Krasnikov 	u8 type:2;
9158e84c258SEugene Krasnikov 	u8 subType:4;
9168e84c258SEugene Krasnikov 
9178e84c258SEugene Krasnikov 	u8 toDS:1;
9188e84c258SEugene Krasnikov 	u8 fromDS:1;
9198e84c258SEugene Krasnikov 	u8 moreFrag:1;
9208e84c258SEugene Krasnikov 	u8 retry:1;
9218e84c258SEugene Krasnikov 	u8 powerMgmt:1;
9228e84c258SEugene Krasnikov 	u8 moreData:1;
9238e84c258SEugene Krasnikov 	u8 wep:1;
9248e84c258SEugene Krasnikov 	u8 order:1;
9258e84c258SEugene Krasnikov 
9268e84c258SEugene Krasnikov #endif
9278e84c258SEugene Krasnikov 
9288e84c258SEugene Krasnikov };
9298e84c258SEugene Krasnikov 
9308e84c258SEugene Krasnikov /* Sequence control field */
9318e84c258SEugene Krasnikov struct wcn36xx_hal_mac_seq_ctl {
9328e84c258SEugene Krasnikov 	u8 fragNum:4;
9338e84c258SEugene Krasnikov 	u8 seqNumLo:4;
9348e84c258SEugene Krasnikov 	u8 seqNumHi:8;
9358e84c258SEugene Krasnikov };
9368e84c258SEugene Krasnikov 
9378e84c258SEugene Krasnikov /* Management header format */
9388e84c258SEugene Krasnikov struct wcn36xx_hal_mac_mgmt_hdr {
9398e84c258SEugene Krasnikov 	struct wcn36xx_hal_mac_frame_ctl fc;
9408e84c258SEugene Krasnikov 	u8 durationLo;
9418e84c258SEugene Krasnikov 	u8 durationHi;
9428e84c258SEugene Krasnikov 	u8 da[6];
9438e84c258SEugene Krasnikov 	u8 sa[6];
9448e84c258SEugene Krasnikov 	u8 bssId[6];
9458e84c258SEugene Krasnikov 	struct wcn36xx_hal_mac_seq_ctl seqControl;
9468e84c258SEugene Krasnikov };
9478e84c258SEugene Krasnikov 
9488e84c258SEugene Krasnikov /* FIXME: pronto v1 apparently has 4 */
9498e84c258SEugene Krasnikov #define WCN36XX_HAL_NUM_BSSID               2
9508e84c258SEugene Krasnikov 
9518e84c258SEugene Krasnikov /* Scan Entry to hold active BSS idx's */
9528e84c258SEugene Krasnikov struct wcn36xx_hal_scan_entry {
9538e84c258SEugene Krasnikov 	u8 bss_index[WCN36XX_HAL_NUM_BSSID];
9548e84c258SEugene Krasnikov 	u8 active_bss_count;
9558e84c258SEugene Krasnikov };
9568e84c258SEugene Krasnikov 
9578e84c258SEugene Krasnikov struct wcn36xx_hal_init_scan_req_msg {
9588e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
9598e84c258SEugene Krasnikov 
9608e84c258SEugene Krasnikov 	/* LEARN - AP Role
9618e84c258SEugene Krasnikov 	   SCAN - STA Role */
9628e84c258SEugene Krasnikov 	enum wcn36xx_hal_sys_mode mode;
9638e84c258SEugene Krasnikov 
9648e84c258SEugene Krasnikov 	/* BSSID of the BSS */
9658e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
9668e84c258SEugene Krasnikov 
9678e84c258SEugene Krasnikov 	/* Whether BSS needs to be notified */
9688e84c258SEugene Krasnikov 	u8 notify;
9698e84c258SEugene Krasnikov 
9708e84c258SEugene Krasnikov 	/* Kind of frame to be used for notifying the BSS (Data Null, QoS
9718e84c258SEugene Krasnikov 	 * Null, or CTS to Self). Must always be a valid frame type. */
9728e84c258SEugene Krasnikov 	u8 frame_type;
9738e84c258SEugene Krasnikov 
9748e84c258SEugene Krasnikov 	/* UMAC has the option of passing the MAC frame to be used for
9758e84c258SEugene Krasnikov 	 * notifying the BSS. If non-zero, HAL will use the MAC frame
9768e84c258SEugene Krasnikov 	 * buffer pointed to by macMgmtHdr. If zero, HAL will generate the
9778e84c258SEugene Krasnikov 	 * appropriate MAC frame based on frameType. */
9788e84c258SEugene Krasnikov 	u8 frame_len;
9798e84c258SEugene Krasnikov 
9808e84c258SEugene Krasnikov 	/* Following the framelength there is a MAC frame buffer if
9818e84c258SEugene Krasnikov 	 * frameLength is non-zero. */
9828e84c258SEugene Krasnikov 	struct wcn36xx_hal_mac_mgmt_hdr mac_mgmt_hdr;
9838e84c258SEugene Krasnikov 
9848e84c258SEugene Krasnikov 	/* Entry to hold number of active BSS idx's */
9858e84c258SEugene Krasnikov 	struct wcn36xx_hal_scan_entry scan_entry;
9868e84c258SEugene Krasnikov };
9878e84c258SEugene Krasnikov 
9888e84c258SEugene Krasnikov struct wcn36xx_hal_init_scan_con_req_msg {
9898e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
9908e84c258SEugene Krasnikov 
9918e84c258SEugene Krasnikov 	/* LEARN - AP Role
9928e84c258SEugene Krasnikov 	   SCAN - STA Role */
9938e84c258SEugene Krasnikov 	enum wcn36xx_hal_sys_mode mode;
9948e84c258SEugene Krasnikov 
9958e84c258SEugene Krasnikov 	/* BSSID of the BSS */
9968e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
9978e84c258SEugene Krasnikov 
9988e84c258SEugene Krasnikov 	/* Whether BSS needs to be notified */
9998e84c258SEugene Krasnikov 	u8 notify;
10008e84c258SEugene Krasnikov 
10018e84c258SEugene Krasnikov 	/* Kind of frame to be used for notifying the BSS (Data Null, QoS
10028e84c258SEugene Krasnikov 	 * Null, or CTS to Self). Must always be a valid frame type. */
10038e84c258SEugene Krasnikov 	u8 frame_type;
10048e84c258SEugene Krasnikov 
10058e84c258SEugene Krasnikov 	/* UMAC has the option of passing the MAC frame to be used for
10068e84c258SEugene Krasnikov 	 * notifying the BSS. If non-zero, HAL will use the MAC frame
10078e84c258SEugene Krasnikov 	 * buffer pointed to by macMgmtHdr. If zero, HAL will generate the
10088e84c258SEugene Krasnikov 	 * appropriate MAC frame based on frameType. */
10098e84c258SEugene Krasnikov 	u8 frame_length;
10108e84c258SEugene Krasnikov 
10118e84c258SEugene Krasnikov 	/* Following the framelength there is a MAC frame buffer if
10128e84c258SEugene Krasnikov 	 * frameLength is non-zero. */
10138e84c258SEugene Krasnikov 	struct wcn36xx_hal_mac_mgmt_hdr mac_mgmt_hdr;
10148e84c258SEugene Krasnikov 
10158e84c258SEugene Krasnikov 	/* Entry to hold number of active BSS idx's */
10168e84c258SEugene Krasnikov 	struct wcn36xx_hal_scan_entry scan_entry;
10178e84c258SEugene Krasnikov 
10188e84c258SEugene Krasnikov 	/* Single NoA usage in Scanning */
10198e84c258SEugene Krasnikov 	u8 use_noa;
10208e84c258SEugene Krasnikov 
10218e84c258SEugene Krasnikov 	/* Indicates the scan duration (in ms) */
10228e84c258SEugene Krasnikov 	u16 scan_duration;
10238e84c258SEugene Krasnikov 
10248e84c258SEugene Krasnikov };
10258e84c258SEugene Krasnikov 
10268e84c258SEugene Krasnikov struct wcn36xx_hal_init_scan_rsp_msg {
10278e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
10288e84c258SEugene Krasnikov 
10298e84c258SEugene Krasnikov 	/* success or failure */
10308e84c258SEugene Krasnikov 	u32 status;
10318e84c258SEugene Krasnikov 
10328e84c258SEugene Krasnikov } __packed;
10338e84c258SEugene Krasnikov 
10348e84c258SEugene Krasnikov struct wcn36xx_hal_start_scan_req_msg {
10358e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
10368e84c258SEugene Krasnikov 
10378e84c258SEugene Krasnikov 	/* Indicates the channel to scan */
10388e84c258SEugene Krasnikov 	u8 scan_channel;
10398e84c258SEugene Krasnikov } __packed;
10408e84c258SEugene Krasnikov 
10418e84c258SEugene Krasnikov struct wcn36xx_hal_start_rsp_msg {
10428e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
10438e84c258SEugene Krasnikov 
10448e84c258SEugene Krasnikov 	/* success or failure */
10458e84c258SEugene Krasnikov 	u32 status;
10468e84c258SEugene Krasnikov 
10478e84c258SEugene Krasnikov 	u32 start_tsf[2];
10488e84c258SEugene Krasnikov 	u8 tx_mgmt_power;
10498e84c258SEugene Krasnikov 
10508e84c258SEugene Krasnikov } __packed;
10518e84c258SEugene Krasnikov 
10528e84c258SEugene Krasnikov struct wcn36xx_hal_end_scan_req_msg {
10538e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
10548e84c258SEugene Krasnikov 
10558e84c258SEugene Krasnikov 	/* Indicates the channel to stop scanning. Not used really. But
10568e84c258SEugene Krasnikov 	 * retained for symmetry with "start Scan" message. It can also
10578e84c258SEugene Krasnikov 	 * help in error check if needed. */
10588e84c258SEugene Krasnikov 	u8 scan_channel;
10598e84c258SEugene Krasnikov } __packed;
10608e84c258SEugene Krasnikov 
10618e84c258SEugene Krasnikov struct wcn36xx_hal_end_scan_rsp_msg {
10628e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
10638e84c258SEugene Krasnikov 
10648e84c258SEugene Krasnikov 	/* success or failure */
10658e84c258SEugene Krasnikov 	u32 status;
10668e84c258SEugene Krasnikov } __packed;
10678e84c258SEugene Krasnikov 
10688e84c258SEugene Krasnikov struct wcn36xx_hal_finish_scan_req_msg {
10698e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
10708e84c258SEugene Krasnikov 
10718e84c258SEugene Krasnikov 	/* Identifies the operational state of the AP/STA
10728e84c258SEugene Krasnikov 	 * LEARN - AP Role SCAN - STA Role */
10738e84c258SEugene Krasnikov 	enum wcn36xx_hal_sys_mode mode;
10748e84c258SEugene Krasnikov 
10758e84c258SEugene Krasnikov 	/* Operating channel to tune to. */
10768e84c258SEugene Krasnikov 	u8 oper_channel;
10778e84c258SEugene Krasnikov 
10788e84c258SEugene Krasnikov 	/* Channel Bonding state If 20/40 MHz is operational, this will
10798e84c258SEugene Krasnikov 	 * indicate the 40 MHz extension channel in combination with the
10808e84c258SEugene Krasnikov 	 * control channel */
10818e84c258SEugene Krasnikov 	enum phy_chan_bond_state cb_state;
10828e84c258SEugene Krasnikov 
10838e84c258SEugene Krasnikov 	/* BSSID of the BSS */
10848e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
10858e84c258SEugene Krasnikov 
10868e84c258SEugene Krasnikov 	/* Whether BSS needs to be notified */
10878e84c258SEugene Krasnikov 	u8 notify;
10888e84c258SEugene Krasnikov 
10898e84c258SEugene Krasnikov 	/* Kind of frame to be used for notifying the BSS (Data Null, QoS
10908e84c258SEugene Krasnikov 	 * Null, or CTS to Self). Must always be a valid frame type. */
10918e84c258SEugene Krasnikov 	u8 frame_type;
10928e84c258SEugene Krasnikov 
10938e84c258SEugene Krasnikov 	/* UMAC has the option of passing the MAC frame to be used for
10948e84c258SEugene Krasnikov 	 * notifying the BSS. If non-zero, HAL will use the MAC frame
10958e84c258SEugene Krasnikov 	 * buffer pointed to by macMgmtHdr. If zero, HAL will generate the
10968e84c258SEugene Krasnikov 	 * appropriate MAC frame based on frameType. */
10978e84c258SEugene Krasnikov 	u8 frame_length;
10988e84c258SEugene Krasnikov 
10998e84c258SEugene Krasnikov 	/* Following the framelength there is a MAC frame buffer if
11008e84c258SEugene Krasnikov 	 * frameLength is non-zero. */
11018e84c258SEugene Krasnikov 	struct wcn36xx_hal_mac_mgmt_hdr mac_mgmt_hdr;
11028e84c258SEugene Krasnikov 
11038e84c258SEugene Krasnikov 	/* Entry to hold number of active BSS idx's */
11048e84c258SEugene Krasnikov 	struct wcn36xx_hal_scan_entry scan_entry;
11058e84c258SEugene Krasnikov 
11068e84c258SEugene Krasnikov } __packed;
11078e84c258SEugene Krasnikov 
11088e84c258SEugene Krasnikov struct wcn36xx_hal_finish_scan_rsp_msg {
11098e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
11108e84c258SEugene Krasnikov 
11118e84c258SEugene Krasnikov 	/* success or failure */
11128e84c258SEugene Krasnikov 	u32 status;
11138e84c258SEugene Krasnikov 
11148e84c258SEugene Krasnikov } __packed;
11158e84c258SEugene Krasnikov 
11168e84c258SEugene Krasnikov enum wcn36xx_hal_rate_index {
11178e84c258SEugene Krasnikov 	HW_RATE_INDEX_1MBPS	= 0x82,
11188e84c258SEugene Krasnikov 	HW_RATE_INDEX_2MBPS	= 0x84,
11198e84c258SEugene Krasnikov 	HW_RATE_INDEX_5_5MBPS	= 0x8B,
11208e84c258SEugene Krasnikov 	HW_RATE_INDEX_6MBPS	= 0x0C,
11218e84c258SEugene Krasnikov 	HW_RATE_INDEX_9MBPS	= 0x12,
11228e84c258SEugene Krasnikov 	HW_RATE_INDEX_11MBPS	= 0x96,
11238e84c258SEugene Krasnikov 	HW_RATE_INDEX_12MBPS	= 0x18,
11248e84c258SEugene Krasnikov 	HW_RATE_INDEX_18MBPS	= 0x24,
11258e84c258SEugene Krasnikov 	HW_RATE_INDEX_24MBPS	= 0x30,
11268e84c258SEugene Krasnikov 	HW_RATE_INDEX_36MBPS	= 0x48,
11278e84c258SEugene Krasnikov 	HW_RATE_INDEX_48MBPS	= 0x60,
11288e84c258SEugene Krasnikov 	HW_RATE_INDEX_54MBPS	= 0x6C
11298e84c258SEugene Krasnikov };
11308e84c258SEugene Krasnikov 
11318e84c258SEugene Krasnikov struct wcn36xx_hal_supported_rates {
11328e84c258SEugene Krasnikov 	/*
11338e84c258SEugene Krasnikov 	 * For Self STA Entry: this represents Self Mode.
11348e84c258SEugene Krasnikov 	 * For Peer Stations, this represents the mode of the peer.
11358e84c258SEugene Krasnikov 	 * On Station:
11368e84c258SEugene Krasnikov 	 *
11378e84c258SEugene Krasnikov 	 * --this mode is updated when PE adds the Self Entry.
11388e84c258SEugene Krasnikov 	 *
11398e84c258SEugene Krasnikov 	 * -- OR when PE sends 'ADD_BSS' message and station context in BSS
11408e84c258SEugene Krasnikov 	 *    is used to indicate the mode of the AP.
11418e84c258SEugene Krasnikov 	 *
11428e84c258SEugene Krasnikov 	 * ON AP:
11438e84c258SEugene Krasnikov 	 *
11448e84c258SEugene Krasnikov 	 * -- this mode is updated when PE sends 'ADD_BSS' and Sta entry
11458e84c258SEugene Krasnikov 	 *     for that BSS is used to indicate the self mode of the AP.
11468e84c258SEugene Krasnikov 	 *
11478e84c258SEugene Krasnikov 	 * -- OR when a station is associated, PE sends 'ADD_STA' message
11488e84c258SEugene Krasnikov 	 *    with this mode updated.
11498e84c258SEugene Krasnikov 	 */
11508e84c258SEugene Krasnikov 
11518e84c258SEugene Krasnikov 	enum sta_rate_mode op_rate_mode;
11528e84c258SEugene Krasnikov 
11538e84c258SEugene Krasnikov 	/* 11b, 11a and aniLegacyRates are IE rates which gives rate in
11548e84c258SEugene Krasnikov 	 * unit of 500Kbps */
11558e84c258SEugene Krasnikov 	u16 dsss_rates[WCN36XX_HAL_NUM_DSSS_RATES];
11568e84c258SEugene Krasnikov 	u16 ofdm_rates[WCN36XX_HAL_NUM_OFDM_RATES];
11578e84c258SEugene Krasnikov 	u16 legacy_rates[WCN36XX_HAL_NUM_POLARIS_RATES];
11588e84c258SEugene Krasnikov 	u16 reserved;
11598e84c258SEugene Krasnikov 
11608e84c258SEugene Krasnikov 	/* Taurus only supports 26 Titan Rates(no ESF/concat Rates will be
11618e84c258SEugene Krasnikov 	 * supported) First 26 bits are reserved for those Titan rates and
11628e84c258SEugene Krasnikov 	 * the last 4 bits(bit28-31) for Taurus, 2(bit26-27) bits are
11638e84c258SEugene Krasnikov 	 * reserved. */
11648e84c258SEugene Krasnikov 	/* Titan and Taurus Rates */
11658e84c258SEugene Krasnikov 	u32 enhanced_rate_bitmap;
11668e84c258SEugene Krasnikov 
11678e84c258SEugene Krasnikov 	/*
11688e84c258SEugene Krasnikov 	 * 0-76 bits used, remaining reserved
11698e84c258SEugene Krasnikov 	 * bits 0-15 and 32 should be set.
11708e84c258SEugene Krasnikov 	 */
11718e84c258SEugene Krasnikov 	u8 supported_mcs_set[WCN36XX_HAL_MAC_MAX_SUPPORTED_MCS_SET];
11728e84c258SEugene Krasnikov 
11738e84c258SEugene Krasnikov 	/*
11748e84c258SEugene Krasnikov 	 * RX Highest Supported Data Rate defines the highest data
11758e84c258SEugene Krasnikov 	 * rate that the STA is able to receive, in unites of 1Mbps.
11768e84c258SEugene Krasnikov 	 * This value is derived from "Supported MCS Set field" inside
11778e84c258SEugene Krasnikov 	 * the HT capability element.
11788e84c258SEugene Krasnikov 	 */
11798e84c258SEugene Krasnikov 	u16 rx_highest_data_rate;
11808e84c258SEugene Krasnikov 
11818e84c258SEugene Krasnikov } __packed;
11828e84c258SEugene Krasnikov 
11838e84c258SEugene Krasnikov struct wcn36xx_hal_config_sta_params {
11848e84c258SEugene Krasnikov 	/* BSSID of STA */
11858e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
11868e84c258SEugene Krasnikov 
11878e84c258SEugene Krasnikov 	/* ASSOC ID, as assigned by UMAC */
11888e84c258SEugene Krasnikov 	u16 aid;
11898e84c258SEugene Krasnikov 
11908e84c258SEugene Krasnikov 	/* STA entry Type: 0 - Self, 1 - Other/Peer, 2 - BSSID, 3 - BCAST */
11918e84c258SEugene Krasnikov 	u8 type;
11928e84c258SEugene Krasnikov 
11938e84c258SEugene Krasnikov 	/* Short Preamble Supported. */
11948e84c258SEugene Krasnikov 	u8 short_preamble_supported;
11958e84c258SEugene Krasnikov 
11968e84c258SEugene Krasnikov 	/* MAC Address of STA */
11978e84c258SEugene Krasnikov 	u8 mac[ETH_ALEN];
11988e84c258SEugene Krasnikov 
11998e84c258SEugene Krasnikov 	/* Listen interval of the STA */
12008e84c258SEugene Krasnikov 	u16 listen_interval;
12018e84c258SEugene Krasnikov 
12028e84c258SEugene Krasnikov 	/* Support for 11e/WMM */
12038e84c258SEugene Krasnikov 	u8 wmm_enabled;
12048e84c258SEugene Krasnikov 
12058e84c258SEugene Krasnikov 	/* 11n HT capable STA */
12068e84c258SEugene Krasnikov 	u8 ht_capable;
12078e84c258SEugene Krasnikov 
12088e84c258SEugene Krasnikov 	/* TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz */
12098e84c258SEugene Krasnikov 	u8 tx_channel_width_set;
12108e84c258SEugene Krasnikov 
12118e84c258SEugene Krasnikov 	/* RIFS mode 0 - NA, 1 - Allowed */
12128e84c258SEugene Krasnikov 	u8 rifs_mode;
12138e84c258SEugene Krasnikov 
12148e84c258SEugene Krasnikov 	/* L-SIG TXOP Protection mechanism
12158e84c258SEugene Krasnikov 	   0 - No Support, 1 - Supported
12168e84c258SEugene Krasnikov 	   SG - there is global field */
12178e84c258SEugene Krasnikov 	u8 lsig_txop_protection;
12188e84c258SEugene Krasnikov 
12198e84c258SEugene Krasnikov 	/* Max Ampdu Size supported by STA. TPE programming.
12208e84c258SEugene Krasnikov 	   0 : 8k , 1 : 16k, 2 : 32k, 3 : 64k */
12218e84c258SEugene Krasnikov 	u8 max_ampdu_size;
12228e84c258SEugene Krasnikov 
12238e84c258SEugene Krasnikov 	/* Max Ampdu density. Used by RA.  3 : 0~7 : 2^(11nAMPDUdensity -4) */
12248e84c258SEugene Krasnikov 	u8 max_ampdu_density;
12258e84c258SEugene Krasnikov 
12268e84c258SEugene Krasnikov 	/* Max AMSDU size 1 : 3839 bytes, 0 : 7935 bytes */
12278e84c258SEugene Krasnikov 	u8 max_amsdu_size;
12288e84c258SEugene Krasnikov 
12298e84c258SEugene Krasnikov 	/* Short GI support for 40Mhz packets */
12308e84c258SEugene Krasnikov 	u8 sgi_40mhz;
12318e84c258SEugene Krasnikov 
12328e84c258SEugene Krasnikov 	/* Short GI support for 20Mhz packets */
12338e84c258SEugene Krasnikov 	u8 sgi_20Mhz;
12348e84c258SEugene Krasnikov 
12358e84c258SEugene Krasnikov 	/* TODO move this parameter to the end for 3680 */
12368e84c258SEugene Krasnikov 	/* These rates are the intersection of peer and self capabilities. */
12378e84c258SEugene Krasnikov 	struct wcn36xx_hal_supported_rates supported_rates;
12388e84c258SEugene Krasnikov 
12398e84c258SEugene Krasnikov 	/* Robust Management Frame (RMF) enabled/disabled */
12408e84c258SEugene Krasnikov 	u8 rmf;
12418e84c258SEugene Krasnikov 
12428e84c258SEugene Krasnikov 	/* The unicast encryption type in the association */
12438e84c258SEugene Krasnikov 	u32 encrypt_type;
12448e84c258SEugene Krasnikov 
12458e84c258SEugene Krasnikov 	/* HAL should update the existing STA entry, if this flag is set. UMAC
12468e84c258SEugene Krasnikov 	   will set this flag in case of RE-ASSOC, where we want to reuse the
12478e84c258SEugene Krasnikov 	   old STA ID. 0 = Add, 1 = Update */
12488e84c258SEugene Krasnikov 	u8 action;
12498e84c258SEugene Krasnikov 
12508e84c258SEugene Krasnikov 	/* U-APSD Flags: 1b per AC.  Encoded as follows:
12518e84c258SEugene Krasnikov 	   b7 b6 b5 b4 b3 b2 b1 b0 =
12528e84c258SEugene Krasnikov 	   X  X  X  X  BE BK VI VO */
12538e84c258SEugene Krasnikov 	u8 uapsd;
12548e84c258SEugene Krasnikov 
12558e84c258SEugene Krasnikov 	/* Max SP Length */
12568e84c258SEugene Krasnikov 	u8 max_sp_len;
12578e84c258SEugene Krasnikov 
12588e84c258SEugene Krasnikov 	/* 11n Green Field preamble support
12598e84c258SEugene Krasnikov 	   0 - Not supported, 1 - Supported */
12608e84c258SEugene Krasnikov 	u8 green_field_capable;
12618e84c258SEugene Krasnikov 
12628e84c258SEugene Krasnikov 	/* MIMO Power Save mode */
12638e84c258SEugene Krasnikov 	enum wcn36xx_hal_ht_mimo_state mimo_ps;
12648e84c258SEugene Krasnikov 
12658e84c258SEugene Krasnikov 	/* Delayed BA Support */
12668e84c258SEugene Krasnikov 	u8 delayed_ba_support;
12678e84c258SEugene Krasnikov 
12688e84c258SEugene Krasnikov 	/* Max AMPDU duration in 32us */
12698e84c258SEugene Krasnikov 	u8 max_ampdu_duration;
12708e84c258SEugene Krasnikov 
12718e84c258SEugene Krasnikov 	/* HT STA should set it to 1 if it is enabled in BSS. HT STA should
12728e84c258SEugene Krasnikov 	 * set it to 0 if AP does not support it. This indication is sent
12738e84c258SEugene Krasnikov 	 * to HAL and HAL uses this flag to pickup up appropriate 40Mhz
12748e84c258SEugene Krasnikov 	 * rates. */
12758e84c258SEugene Krasnikov 	u8 dsss_cck_mode_40mhz;
12768e84c258SEugene Krasnikov 
12778e84c258SEugene Krasnikov 	/* Valid STA Idx when action=Update. Set to 0xFF when invalid!
12788e84c258SEugene Krasnikov 	 * Retained for backward compalibity with existing HAL code */
12798e84c258SEugene Krasnikov 	u8 sta_index;
12808e84c258SEugene Krasnikov 
12818e84c258SEugene Krasnikov 	/* BSSID of BSS to which station is associated. Set to 0xFF when
12828e84c258SEugene Krasnikov 	 * invalid. Retained for backward compalibity with existing HAL
12838e84c258SEugene Krasnikov 	 * code */
12848e84c258SEugene Krasnikov 	u8 bssid_index;
12858e84c258SEugene Krasnikov 
12868e84c258SEugene Krasnikov 	u8 p2p;
12878e84c258SEugene Krasnikov 
12888e84c258SEugene Krasnikov 	/* TODO add this parameter for 3680. */
12898e84c258SEugene Krasnikov 	/* Reserved to align next field on a dword boundary */
12908e84c258SEugene Krasnikov 	/* u8 reserved; */
12918e84c258SEugene Krasnikov } __packed;
12928e84c258SEugene Krasnikov 
12938e84c258SEugene Krasnikov struct wcn36xx_hal_config_sta_req_msg {
12948e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
12958e84c258SEugene Krasnikov 	struct wcn36xx_hal_config_sta_params sta_params;
12968e84c258SEugene Krasnikov } __packed;
12978e84c258SEugene Krasnikov 
12988e84c258SEugene Krasnikov struct wcn36xx_hal_config_sta_params_v1 {
12998e84c258SEugene Krasnikov 	/* BSSID of STA */
13008e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
13018e84c258SEugene Krasnikov 
13028e84c258SEugene Krasnikov 	/* ASSOC ID, as assigned by UMAC */
13038e84c258SEugene Krasnikov 	u16 aid;
13048e84c258SEugene Krasnikov 
13058e84c258SEugene Krasnikov 	/* STA entry Type: 0 - Self, 1 - Other/Peer, 2 - BSSID, 3 - BCAST */
13068e84c258SEugene Krasnikov 	u8 type;
13078e84c258SEugene Krasnikov 
13088e84c258SEugene Krasnikov 	/* Short Preamble Supported. */
13098e84c258SEugene Krasnikov 	u8 short_preamble_supported;
13108e84c258SEugene Krasnikov 
13118e84c258SEugene Krasnikov 	/* MAC Address of STA */
13128e84c258SEugene Krasnikov 	u8 mac[ETH_ALEN];
13138e84c258SEugene Krasnikov 
13148e84c258SEugene Krasnikov 	/* Listen interval of the STA */
13158e84c258SEugene Krasnikov 	u16 listen_interval;
13168e84c258SEugene Krasnikov 
13178e84c258SEugene Krasnikov 	/* Support for 11e/WMM */
13188e84c258SEugene Krasnikov 	u8 wmm_enabled;
13198e84c258SEugene Krasnikov 
13208e84c258SEugene Krasnikov 	/* 11n HT capable STA */
13218e84c258SEugene Krasnikov 	u8 ht_capable;
13228e84c258SEugene Krasnikov 
13238e84c258SEugene Krasnikov 	/* TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz */
13248e84c258SEugene Krasnikov 	u8 tx_channel_width_set;
13258e84c258SEugene Krasnikov 
13268e84c258SEugene Krasnikov 	/* RIFS mode 0 - NA, 1 - Allowed */
13278e84c258SEugene Krasnikov 	u8 rifs_mode;
13288e84c258SEugene Krasnikov 
13298e84c258SEugene Krasnikov 	/* L-SIG TXOP Protection mechanism
13308e84c258SEugene Krasnikov 	   0 - No Support, 1 - Supported
13318e84c258SEugene Krasnikov 	   SG - there is global field */
13328e84c258SEugene Krasnikov 	u8 lsig_txop_protection;
13338e84c258SEugene Krasnikov 
13348e84c258SEugene Krasnikov 	/* Max Ampdu Size supported by STA. TPE programming.
13358e84c258SEugene Krasnikov 	   0 : 8k , 1 : 16k, 2 : 32k, 3 : 64k */
13368e84c258SEugene Krasnikov 	u8 max_ampdu_size;
13378e84c258SEugene Krasnikov 
13388e84c258SEugene Krasnikov 	/* Max Ampdu density. Used by RA.  3 : 0~7 : 2^(11nAMPDUdensity -4) */
13398e84c258SEugene Krasnikov 	u8 max_ampdu_density;
13408e84c258SEugene Krasnikov 
13418e84c258SEugene Krasnikov 	/* Max AMSDU size 1 : 3839 bytes, 0 : 7935 bytes */
13428e84c258SEugene Krasnikov 	u8 max_amsdu_size;
13438e84c258SEugene Krasnikov 
13448e84c258SEugene Krasnikov 	/* Short GI support for 40Mhz packets */
13458e84c258SEugene Krasnikov 	u8 sgi_40mhz;
13468e84c258SEugene Krasnikov 
13478e84c258SEugene Krasnikov 	/* Short GI support for 20Mhz packets */
13488e84c258SEugene Krasnikov 	u8 sgi_20Mhz;
13498e84c258SEugene Krasnikov 
13508e84c258SEugene Krasnikov 	/* Robust Management Frame (RMF) enabled/disabled */
13518e84c258SEugene Krasnikov 	u8 rmf;
13528e84c258SEugene Krasnikov 
13538e84c258SEugene Krasnikov 	/* The unicast encryption type in the association */
13548e84c258SEugene Krasnikov 	u32 encrypt_type;
13558e84c258SEugene Krasnikov 
13568e84c258SEugene Krasnikov 	/* HAL should update the existing STA entry, if this flag is set. UMAC
13578e84c258SEugene Krasnikov 	   will set this flag in case of RE-ASSOC, where we want to reuse the
13588e84c258SEugene Krasnikov 	   old STA ID. 0 = Add, 1 = Update */
13598e84c258SEugene Krasnikov 	u8 action;
13608e84c258SEugene Krasnikov 
13618e84c258SEugene Krasnikov 	/* U-APSD Flags: 1b per AC.  Encoded as follows:
13628e84c258SEugene Krasnikov 	   b7 b6 b5 b4 b3 b2 b1 b0 =
13638e84c258SEugene Krasnikov 	   X  X  X  X  BE BK VI VO */
13648e84c258SEugene Krasnikov 	u8 uapsd;
13658e84c258SEugene Krasnikov 
13668e84c258SEugene Krasnikov 	/* Max SP Length */
13678e84c258SEugene Krasnikov 	u8 max_sp_len;
13688e84c258SEugene Krasnikov 
13698e84c258SEugene Krasnikov 	/* 11n Green Field preamble support
13708e84c258SEugene Krasnikov 	   0 - Not supported, 1 - Supported */
13718e84c258SEugene Krasnikov 	u8 green_field_capable;
13728e84c258SEugene Krasnikov 
13738e84c258SEugene Krasnikov 	/* MIMO Power Save mode */
13748e84c258SEugene Krasnikov 	enum wcn36xx_hal_ht_mimo_state mimo_ps;
13758e84c258SEugene Krasnikov 
13768e84c258SEugene Krasnikov 	/* Delayed BA Support */
13778e84c258SEugene Krasnikov 	u8 delayed_ba_support;
13788e84c258SEugene Krasnikov 
13798e84c258SEugene Krasnikov 	/* Max AMPDU duration in 32us */
13808e84c258SEugene Krasnikov 	u8 max_ampdu_duration;
13818e84c258SEugene Krasnikov 
13828e84c258SEugene Krasnikov 	/* HT STA should set it to 1 if it is enabled in BSS. HT STA should
13838e84c258SEugene Krasnikov 	 * set it to 0 if AP does not support it. This indication is sent
13848e84c258SEugene Krasnikov 	 * to HAL and HAL uses this flag to pickup up appropriate 40Mhz
13858e84c258SEugene Krasnikov 	 * rates. */
13868e84c258SEugene Krasnikov 	u8 dsss_cck_mode_40mhz;
13878e84c258SEugene Krasnikov 
13888e84c258SEugene Krasnikov 	/* Valid STA Idx when action=Update. Set to 0xFF when invalid!
13898e84c258SEugene Krasnikov 	 * Retained for backward compalibity with existing HAL code */
13908e84c258SEugene Krasnikov 	u8 sta_index;
13918e84c258SEugene Krasnikov 
13928e84c258SEugene Krasnikov 	/* BSSID of BSS to which station is associated. Set to 0xFF when
13938e84c258SEugene Krasnikov 	 * invalid. Retained for backward compalibity with existing HAL
13948e84c258SEugene Krasnikov 	 * code */
13958e84c258SEugene Krasnikov 	u8 bssid_index;
13968e84c258SEugene Krasnikov 
13978e84c258SEugene Krasnikov 	u8 p2p;
13988e84c258SEugene Krasnikov 
13998e84c258SEugene Krasnikov 	/* Reserved to align next field on a dword boundary */
14008e84c258SEugene Krasnikov 	u8 reserved;
14018e84c258SEugene Krasnikov 
14028e84c258SEugene Krasnikov 	/* These rates are the intersection of peer and self capabilities. */
14038e84c258SEugene Krasnikov 	struct wcn36xx_hal_supported_rates supported_rates;
14048e84c258SEugene Krasnikov } __packed;
14058e84c258SEugene Krasnikov 
14068e84c258SEugene Krasnikov struct wcn36xx_hal_config_sta_req_msg_v1 {
14078e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
14088e84c258SEugene Krasnikov 	struct wcn36xx_hal_config_sta_params_v1 sta_params;
14098e84c258SEugene Krasnikov } __packed;
14108e84c258SEugene Krasnikov 
14118e84c258SEugene Krasnikov struct config_sta_rsp_params {
14128e84c258SEugene Krasnikov 	/* success or failure */
14138e84c258SEugene Krasnikov 	u32 status;
14148e84c258SEugene Krasnikov 
14158e84c258SEugene Krasnikov 	/* Station index; valid only when 'status' field value SUCCESS */
14168e84c258SEugene Krasnikov 	u8 sta_index;
14178e84c258SEugene Krasnikov 
14188e84c258SEugene Krasnikov 	/* BSSID Index of BSS to which the station is associated */
14198e84c258SEugene Krasnikov 	u8 bssid_index;
14208e84c258SEugene Krasnikov 
14218e84c258SEugene Krasnikov 	/* DPU Index for PTK */
14228e84c258SEugene Krasnikov 	u8 dpu_index;
14238e84c258SEugene Krasnikov 
14248e84c258SEugene Krasnikov 	/* DPU Index for GTK */
14258e84c258SEugene Krasnikov 	u8 bcast_dpu_index;
14268e84c258SEugene Krasnikov 
14278e84c258SEugene Krasnikov 	/* DPU Index for IGTK  */
14288e84c258SEugene Krasnikov 	u8 bcast_mgmt_dpu_idx;
14298e84c258SEugene Krasnikov 
14308e84c258SEugene Krasnikov 	/* PTK DPU signature */
14318e84c258SEugene Krasnikov 	u8 uc_ucast_sig;
14328e84c258SEugene Krasnikov 
14338e84c258SEugene Krasnikov 	/* GTK DPU isignature */
14348e84c258SEugene Krasnikov 	u8 uc_bcast_sig;
14358e84c258SEugene Krasnikov 
14368e84c258SEugene Krasnikov 	/* IGTK DPU signature */
14378e84c258SEugene Krasnikov 	u8 uc_mgmt_sig;
14388e84c258SEugene Krasnikov 
14398e84c258SEugene Krasnikov 	u8 p2p;
14408e84c258SEugene Krasnikov 
14418e84c258SEugene Krasnikov } __packed;
14428e84c258SEugene Krasnikov 
14438e84c258SEugene Krasnikov struct wcn36xx_hal_config_sta_rsp_msg {
14448e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
14458e84c258SEugene Krasnikov 
14468e84c258SEugene Krasnikov 	struct config_sta_rsp_params params;
14478e84c258SEugene Krasnikov } __packed;
14488e84c258SEugene Krasnikov 
14498e84c258SEugene Krasnikov /* Delete STA Request message */
14508e84c258SEugene Krasnikov struct wcn36xx_hal_delete_sta_req_msg {
14518e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
14528e84c258SEugene Krasnikov 
14538e84c258SEugene Krasnikov 	/* Index of STA to delete */
14548e84c258SEugene Krasnikov 	u8 sta_index;
14558e84c258SEugene Krasnikov 
14568e84c258SEugene Krasnikov } __packed;
14578e84c258SEugene Krasnikov 
14588e84c258SEugene Krasnikov /* Delete STA Response message */
14598e84c258SEugene Krasnikov struct wcn36xx_hal_delete_sta_rsp_msg {
14608e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
14618e84c258SEugene Krasnikov 
14628e84c258SEugene Krasnikov 	/* success or failure */
14638e84c258SEugene Krasnikov 	u32 status;
14648e84c258SEugene Krasnikov 
14658e84c258SEugene Krasnikov 	/* Index of STA deleted */
14668e84c258SEugene Krasnikov 	u8 sta_id;
14678e84c258SEugene Krasnikov } __packed;
14688e84c258SEugene Krasnikov 
14698e84c258SEugene Krasnikov /* 12 Bytes long because this structure can be used to represent rate and
14708e84c258SEugene Krasnikov  * extended rate set IEs. The parser assume this to be at least 12 */
14718e84c258SEugene Krasnikov struct wcn36xx_hal_rate_set {
14728e84c258SEugene Krasnikov 	u8 num_rates;
14738e84c258SEugene Krasnikov 	u8 rate[WCN36XX_HAL_MAC_RATESET_EID_MAX];
14748e84c258SEugene Krasnikov } __packed;
14758e84c258SEugene Krasnikov 
14768e84c258SEugene Krasnikov /* access category record */
14778e84c258SEugene Krasnikov struct wcn36xx_hal_aci_aifsn {
14788e84c258SEugene Krasnikov #ifndef ANI_LITTLE_BIT_ENDIAN
14798e84c258SEugene Krasnikov 	u8 rsvd:1;
14808e84c258SEugene Krasnikov 	u8 aci:2;
14818e84c258SEugene Krasnikov 	u8 acm:1;
14828e84c258SEugene Krasnikov 	u8 aifsn:4;
14838e84c258SEugene Krasnikov #else
14848e84c258SEugene Krasnikov 	u8 aifsn:4;
14858e84c258SEugene Krasnikov 	u8 acm:1;
14868e84c258SEugene Krasnikov 	u8 aci:2;
14878e84c258SEugene Krasnikov 	u8 rsvd:1;
14888e84c258SEugene Krasnikov #endif
14898e84c258SEugene Krasnikov } __packed;
14908e84c258SEugene Krasnikov 
14918e84c258SEugene Krasnikov /* contention window size */
14928e84c258SEugene Krasnikov struct wcn36xx_hal_mac_cw {
14938e84c258SEugene Krasnikov #ifndef ANI_LITTLE_BIT_ENDIAN
14948e84c258SEugene Krasnikov 	u8 max:4;
14958e84c258SEugene Krasnikov 	u8 min:4;
14968e84c258SEugene Krasnikov #else
14978e84c258SEugene Krasnikov 	u8 min:4;
14988e84c258SEugene Krasnikov 	u8 max:4;
14998e84c258SEugene Krasnikov #endif
15008e84c258SEugene Krasnikov } __packed;
15018e84c258SEugene Krasnikov 
15028e84c258SEugene Krasnikov struct wcn36xx_hal_edca_param_record {
15038e84c258SEugene Krasnikov 	struct wcn36xx_hal_aci_aifsn aci;
15048e84c258SEugene Krasnikov 	struct wcn36xx_hal_mac_cw cw;
15058e84c258SEugene Krasnikov 	u16 txop_limit;
15068e84c258SEugene Krasnikov } __packed;
15078e84c258SEugene Krasnikov 
15088e84c258SEugene Krasnikov struct wcn36xx_hal_mac_ssid {
15098e84c258SEugene Krasnikov 	u8 length;
15108e84c258SEugene Krasnikov 	u8 ssid[32];
15118e84c258SEugene Krasnikov } __packed;
15128e84c258SEugene Krasnikov 
15138e84c258SEugene Krasnikov /* Concurrency role. These are generic IDs that identify the various roles
15148e84c258SEugene Krasnikov  *  in the software system. */
15158e84c258SEugene Krasnikov enum wcn36xx_hal_con_mode {
15168e84c258SEugene Krasnikov 	WCN36XX_HAL_STA_MODE = 0,
15178e84c258SEugene Krasnikov 
15188e84c258SEugene Krasnikov 	/* to support softAp mode . This is misleading.
15198e84c258SEugene Krasnikov 	   It means AP MODE only. */
15208e84c258SEugene Krasnikov 	WCN36XX_HAL_STA_SAP_MODE = 1,
15218e84c258SEugene Krasnikov 
15228e84c258SEugene Krasnikov 	WCN36XX_HAL_P2P_CLIENT_MODE,
15238e84c258SEugene Krasnikov 	WCN36XX_HAL_P2P_GO_MODE,
15248e84c258SEugene Krasnikov 	WCN36XX_HAL_MONITOR_MODE,
15258e84c258SEugene Krasnikov };
15268e84c258SEugene Krasnikov 
15278e84c258SEugene Krasnikov /* This is a bit pattern to be set for each mode
15288e84c258SEugene Krasnikov  * bit 0 - sta mode
15298e84c258SEugene Krasnikov  * bit 1 - ap mode
15308e84c258SEugene Krasnikov  * bit 2 - p2p client mode
15318e84c258SEugene Krasnikov  * bit 3 - p2p go mode */
15328e84c258SEugene Krasnikov enum wcn36xx_hal_concurrency_mode {
15338e84c258SEugene Krasnikov 	HAL_STA = 1,
15348e84c258SEugene Krasnikov 	HAL_SAP = 2,
15358e84c258SEugene Krasnikov 
15368e84c258SEugene Krasnikov 	/* to support sta, softAp  mode . This means STA+AP mode */
15378e84c258SEugene Krasnikov 	HAL_STA_SAP = 3,
15388e84c258SEugene Krasnikov 
15398e84c258SEugene Krasnikov 	HAL_P2P_CLIENT = 4,
15408e84c258SEugene Krasnikov 	HAL_P2P_GO = 8,
15418e84c258SEugene Krasnikov 	HAL_MAX_CONCURRENCY_PERSONA = 4
15428e84c258SEugene Krasnikov };
15438e84c258SEugene Krasnikov 
15448e84c258SEugene Krasnikov struct wcn36xx_hal_config_bss_params {
15458e84c258SEugene Krasnikov 	/* BSSID */
15468e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
15478e84c258SEugene Krasnikov 
15488e84c258SEugene Krasnikov 	/* Self Mac Address */
15498e84c258SEugene Krasnikov 	u8 self_mac_addr[ETH_ALEN];
15508e84c258SEugene Krasnikov 
15518e84c258SEugene Krasnikov 	/* BSS type */
15528e84c258SEugene Krasnikov 	enum wcn36xx_hal_bss_type bss_type;
15538e84c258SEugene Krasnikov 
15548e84c258SEugene Krasnikov 	/* Operational Mode: AP =0, STA = 1 */
15558e84c258SEugene Krasnikov 	u8 oper_mode;
15568e84c258SEugene Krasnikov 
15578e84c258SEugene Krasnikov 	/* Network Type */
15588e84c258SEugene Krasnikov 	enum wcn36xx_hal_nw_type nw_type;
15598e84c258SEugene Krasnikov 
15608e84c258SEugene Krasnikov 	/* Used to classify PURE_11G/11G_MIXED to program MTU */
15618e84c258SEugene Krasnikov 	u8 short_slot_time_supported;
15628e84c258SEugene Krasnikov 
15638e84c258SEugene Krasnikov 	/* Co-exist with 11a STA */
15648e84c258SEugene Krasnikov 	u8 lla_coexist;
15658e84c258SEugene Krasnikov 
15668e84c258SEugene Krasnikov 	/* Co-exist with 11b STA */
15678e84c258SEugene Krasnikov 	u8 llb_coexist;
15688e84c258SEugene Krasnikov 
15698e84c258SEugene Krasnikov 	/* Co-exist with 11g STA */
15708e84c258SEugene Krasnikov 	u8 llg_coexist;
15718e84c258SEugene Krasnikov 
15728e84c258SEugene Krasnikov 	/* Coexistence with 11n STA */
15738e84c258SEugene Krasnikov 	u8 ht20_coexist;
15748e84c258SEugene Krasnikov 
15758e84c258SEugene Krasnikov 	/* Non GF coexist flag */
15768e84c258SEugene Krasnikov 	u8 lln_non_gf_coexist;
15778e84c258SEugene Krasnikov 
15788e84c258SEugene Krasnikov 	/* TXOP protection support */
15798e84c258SEugene Krasnikov 	u8 lsig_tx_op_protection_full_support;
15808e84c258SEugene Krasnikov 
15818e84c258SEugene Krasnikov 	/* RIFS mode */
15828e84c258SEugene Krasnikov 	u8 rifs_mode;
15838e84c258SEugene Krasnikov 
15848e84c258SEugene Krasnikov 	/* Beacon Interval in TU */
15858e84c258SEugene Krasnikov 	u16 beacon_interval;
15868e84c258SEugene Krasnikov 
15878e84c258SEugene Krasnikov 	/* DTIM period */
15888e84c258SEugene Krasnikov 	u8 dtim_period;
15898e84c258SEugene Krasnikov 
15908e84c258SEugene Krasnikov 	/* TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz */
15918e84c258SEugene Krasnikov 	u8 tx_channel_width_set;
15928e84c258SEugene Krasnikov 
15938e84c258SEugene Krasnikov 	/* Operating channel */
15948e84c258SEugene Krasnikov 	u8 oper_channel;
15958e84c258SEugene Krasnikov 
15968e84c258SEugene Krasnikov 	/* Extension channel for channel bonding */
15978e84c258SEugene Krasnikov 	u8 ext_channel;
15988e84c258SEugene Krasnikov 
15998e84c258SEugene Krasnikov 	/* Reserved to align next field on a dword boundary */
16008e84c258SEugene Krasnikov 	u8 reserved;
16018e84c258SEugene Krasnikov 
16028e84c258SEugene Krasnikov 	/* TODO move sta to the end for 3680 */
16038e84c258SEugene Krasnikov 	/* Context of the station being added in HW
16048e84c258SEugene Krasnikov 	 *  Add a STA entry for "itself" -
16058e84c258SEugene Krasnikov 	 *
16068e84c258SEugene Krasnikov 	 *  On AP  - Add the AP itself in an "STA context"
16078e84c258SEugene Krasnikov 	 *
16088e84c258SEugene Krasnikov 	 *  On STA - Add the AP to which this STA is joining in an
16098e84c258SEugene Krasnikov 	 *  "STA context"
16108e84c258SEugene Krasnikov 	 */
16118e84c258SEugene Krasnikov 	struct wcn36xx_hal_config_sta_params sta;
16128e84c258SEugene Krasnikov 	/* SSID of the BSS */
16138e84c258SEugene Krasnikov 	struct wcn36xx_hal_mac_ssid ssid;
16148e84c258SEugene Krasnikov 
16158e84c258SEugene Krasnikov 	/* HAL should update the existing BSS entry, if this flag is set.
16168e84c258SEugene Krasnikov 	 * UMAC will set this flag in case of reassoc, where we want to
16178e84c258SEugene Krasnikov 	 * resue the the old BSSID and still return success 0 = Add, 1 =
16188e84c258SEugene Krasnikov 	 * Update */
16198e84c258SEugene Krasnikov 	u8 action;
16208e84c258SEugene Krasnikov 
16218e84c258SEugene Krasnikov 	/* MAC Rate Set */
16228e84c258SEugene Krasnikov 	struct wcn36xx_hal_rate_set rateset;
16238e84c258SEugene Krasnikov 
16248e84c258SEugene Krasnikov 	/* Enable/Disable HT capabilities of the BSS */
16258e84c258SEugene Krasnikov 	u8 ht;
16268e84c258SEugene Krasnikov 
16278e84c258SEugene Krasnikov 	/* Enable/Disable OBSS protection */
16288e84c258SEugene Krasnikov 	u8 obss_prot_enabled;
16298e84c258SEugene Krasnikov 
16308e84c258SEugene Krasnikov 	/* RMF enabled/disabled */
16318e84c258SEugene Krasnikov 	u8 rmf;
16328e84c258SEugene Krasnikov 
16338e84c258SEugene Krasnikov 	/* HT Operating Mode operating mode of the 802.11n STA */
16348e84c258SEugene Krasnikov 	enum wcn36xx_hal_ht_operating_mode ht_oper_mode;
16358e84c258SEugene Krasnikov 
16368e84c258SEugene Krasnikov 	/* Dual CTS Protection: 0 - Unused, 1 - Used */
16378e84c258SEugene Krasnikov 	u8 dual_cts_protection;
16388e84c258SEugene Krasnikov 
16398e84c258SEugene Krasnikov 	/* Probe Response Max retries */
16408e84c258SEugene Krasnikov 	u8 max_probe_resp_retry_limit;
16418e84c258SEugene Krasnikov 
16428e84c258SEugene Krasnikov 	/* To Enable Hidden ssid */
16438e84c258SEugene Krasnikov 	u8 hidden_ssid;
16448e84c258SEugene Krasnikov 
16458e84c258SEugene Krasnikov 	/* To Enable Disable FW Proxy Probe Resp */
16468e84c258SEugene Krasnikov 	u8 proxy_probe_resp;
16478e84c258SEugene Krasnikov 
16488e84c258SEugene Krasnikov 	/* Boolean to indicate if EDCA params are valid. UMAC might not
16498e84c258SEugene Krasnikov 	 * have valid EDCA params or might not desire to apply EDCA params
16508e84c258SEugene Krasnikov 	 * during config BSS. 0 implies Not Valid ; Non-Zero implies
16518e84c258SEugene Krasnikov 	 * valid */
16528e84c258SEugene Krasnikov 	u8 edca_params_valid;
16538e84c258SEugene Krasnikov 
16548e84c258SEugene Krasnikov 	/* EDCA Parameters for Best Effort Access Category */
16558e84c258SEugene Krasnikov 	struct wcn36xx_hal_edca_param_record acbe;
16568e84c258SEugene Krasnikov 
16578e84c258SEugene Krasnikov 	/* EDCA Parameters forBackground Access Category */
16588e84c258SEugene Krasnikov 	struct wcn36xx_hal_edca_param_record acbk;
16598e84c258SEugene Krasnikov 
16608e84c258SEugene Krasnikov 	/* EDCA Parameters for Video Access Category */
16618e84c258SEugene Krasnikov 	struct wcn36xx_hal_edca_param_record acvi;
16628e84c258SEugene Krasnikov 
16638e84c258SEugene Krasnikov 	/* EDCA Parameters for Voice Access Category */
16648e84c258SEugene Krasnikov 	struct wcn36xx_hal_edca_param_record acvo;
16658e84c258SEugene Krasnikov 
16668e84c258SEugene Krasnikov 	/* Ext Bss Config Msg if set */
16678e84c258SEugene Krasnikov 	u8 ext_set_sta_key_param_valid;
16688e84c258SEugene Krasnikov 
16698e84c258SEugene Krasnikov 	/* SetStaKeyParams for ext bss msg */
16708e84c258SEugene Krasnikov 	struct wcn36xx_hal_set_sta_key_params ext_set_sta_key_param;
16718e84c258SEugene Krasnikov 
16728e84c258SEugene Krasnikov 	/* Persona for the BSS can be STA,AP,GO,CLIENT value same as enum
16738e84c258SEugene Krasnikov 	 * wcn36xx_hal_con_mode */
16748e84c258SEugene Krasnikov 	u8 wcn36xx_hal_persona;
16758e84c258SEugene Krasnikov 
16768e84c258SEugene Krasnikov 	u8 spectrum_mgt_enable;
16778e84c258SEugene Krasnikov 
16788e84c258SEugene Krasnikov 	/* HAL fills in the tx power used for mgmt frames in txMgmtPower */
16798e84c258SEugene Krasnikov 	s8 tx_mgmt_power;
16808e84c258SEugene Krasnikov 
16818e84c258SEugene Krasnikov 	/* maxTxPower has max power to be used after applying the power
16828e84c258SEugene Krasnikov 	 * constraint if any */
16838e84c258SEugene Krasnikov 	s8 max_tx_power;
16848e84c258SEugene Krasnikov } __packed;
16858e84c258SEugene Krasnikov 
16868e84c258SEugene Krasnikov struct wcn36xx_hal_config_bss_req_msg {
16878e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
16888e84c258SEugene Krasnikov 	struct wcn36xx_hal_config_bss_params bss_params;
16898e84c258SEugene Krasnikov } __packed;
16908e84c258SEugene Krasnikov 
16918e84c258SEugene Krasnikov struct wcn36xx_hal_config_bss_params_v1 {
16928e84c258SEugene Krasnikov 	/* BSSID */
16938e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
16948e84c258SEugene Krasnikov 
16958e84c258SEugene Krasnikov 	/* Self Mac Address */
16968e84c258SEugene Krasnikov 	u8 self_mac_addr[ETH_ALEN];
16978e84c258SEugene Krasnikov 
16988e84c258SEugene Krasnikov 	/* BSS type */
16998e84c258SEugene Krasnikov 	enum wcn36xx_hal_bss_type bss_type;
17008e84c258SEugene Krasnikov 
17018e84c258SEugene Krasnikov 	/* Operational Mode: AP =0, STA = 1 */
17028e84c258SEugene Krasnikov 	u8 oper_mode;
17038e84c258SEugene Krasnikov 
17048e84c258SEugene Krasnikov 	/* Network Type */
17058e84c258SEugene Krasnikov 	enum wcn36xx_hal_nw_type nw_type;
17068e84c258SEugene Krasnikov 
17078e84c258SEugene Krasnikov 	/* Used to classify PURE_11G/11G_MIXED to program MTU */
17088e84c258SEugene Krasnikov 	u8 short_slot_time_supported;
17098e84c258SEugene Krasnikov 
17108e84c258SEugene Krasnikov 	/* Co-exist with 11a STA */
17118e84c258SEugene Krasnikov 	u8 lla_coexist;
17128e84c258SEugene Krasnikov 
17138e84c258SEugene Krasnikov 	/* Co-exist with 11b STA */
17148e84c258SEugene Krasnikov 	u8 llb_coexist;
17158e84c258SEugene Krasnikov 
17168e84c258SEugene Krasnikov 	/* Co-exist with 11g STA */
17178e84c258SEugene Krasnikov 	u8 llg_coexist;
17188e84c258SEugene Krasnikov 
17198e84c258SEugene Krasnikov 	/* Coexistence with 11n STA */
17208e84c258SEugene Krasnikov 	u8 ht20_coexist;
17218e84c258SEugene Krasnikov 
17228e84c258SEugene Krasnikov 	/* Non GF coexist flag */
17238e84c258SEugene Krasnikov 	u8 lln_non_gf_coexist;
17248e84c258SEugene Krasnikov 
17258e84c258SEugene Krasnikov 	/* TXOP protection support */
17268e84c258SEugene Krasnikov 	u8 lsig_tx_op_protection_full_support;
17278e84c258SEugene Krasnikov 
17288e84c258SEugene Krasnikov 	/* RIFS mode */
17298e84c258SEugene Krasnikov 	u8 rifs_mode;
17308e84c258SEugene Krasnikov 
17318e84c258SEugene Krasnikov 	/* Beacon Interval in TU */
17328e84c258SEugene Krasnikov 	u16 beacon_interval;
17338e84c258SEugene Krasnikov 
17348e84c258SEugene Krasnikov 	/* DTIM period */
17358e84c258SEugene Krasnikov 	u8 dtim_period;
17368e84c258SEugene Krasnikov 
17378e84c258SEugene Krasnikov 	/* TX Width Set: 0 - 20 MHz only, 1 - 20/40 MHz */
17388e84c258SEugene Krasnikov 	u8 tx_channel_width_set;
17398e84c258SEugene Krasnikov 
17408e84c258SEugene Krasnikov 	/* Operating channel */
17418e84c258SEugene Krasnikov 	u8 oper_channel;
17428e84c258SEugene Krasnikov 
17438e84c258SEugene Krasnikov 	/* Extension channel for channel bonding */
17448e84c258SEugene Krasnikov 	u8 ext_channel;
17458e84c258SEugene Krasnikov 
17468e84c258SEugene Krasnikov 	/* Reserved to align next field on a dword boundary */
17478e84c258SEugene Krasnikov 	u8 reserved;
17488e84c258SEugene Krasnikov 
17498e84c258SEugene Krasnikov 	/* SSID of the BSS */
17508e84c258SEugene Krasnikov 	struct wcn36xx_hal_mac_ssid ssid;
17518e84c258SEugene Krasnikov 
17528e84c258SEugene Krasnikov 	/* HAL should update the existing BSS entry, if this flag is set.
17538e84c258SEugene Krasnikov 	 * UMAC will set this flag in case of reassoc, where we want to
17548e84c258SEugene Krasnikov 	 * resue the the old BSSID and still return success 0 = Add, 1 =
17558e84c258SEugene Krasnikov 	 * Update */
17568e84c258SEugene Krasnikov 	u8 action;
17578e84c258SEugene Krasnikov 
17588e84c258SEugene Krasnikov 	/* MAC Rate Set */
17598e84c258SEugene Krasnikov 	struct wcn36xx_hal_rate_set rateset;
17608e84c258SEugene Krasnikov 
17618e84c258SEugene Krasnikov 	/* Enable/Disable HT capabilities of the BSS */
17628e84c258SEugene Krasnikov 	u8 ht;
17638e84c258SEugene Krasnikov 
17648e84c258SEugene Krasnikov 	/* Enable/Disable OBSS protection */
17658e84c258SEugene Krasnikov 	u8 obss_prot_enabled;
17668e84c258SEugene Krasnikov 
17678e84c258SEugene Krasnikov 	/* RMF enabled/disabled */
17688e84c258SEugene Krasnikov 	u8 rmf;
17698e84c258SEugene Krasnikov 
17708e84c258SEugene Krasnikov 	/* HT Operating Mode operating mode of the 802.11n STA */
17718e84c258SEugene Krasnikov 	enum wcn36xx_hal_ht_operating_mode ht_oper_mode;
17728e84c258SEugene Krasnikov 
17738e84c258SEugene Krasnikov 	/* Dual CTS Protection: 0 - Unused, 1 - Used */
17748e84c258SEugene Krasnikov 	u8 dual_cts_protection;
17758e84c258SEugene Krasnikov 
17768e84c258SEugene Krasnikov 	/* Probe Response Max retries */
17778e84c258SEugene Krasnikov 	u8 max_probe_resp_retry_limit;
17788e84c258SEugene Krasnikov 
17798e84c258SEugene Krasnikov 	/* To Enable Hidden ssid */
17808e84c258SEugene Krasnikov 	u8 hidden_ssid;
17818e84c258SEugene Krasnikov 
17828e84c258SEugene Krasnikov 	/* To Enable Disable FW Proxy Probe Resp */
17838e84c258SEugene Krasnikov 	u8 proxy_probe_resp;
17848e84c258SEugene Krasnikov 
17858e84c258SEugene Krasnikov 	/* Boolean to indicate if EDCA params are valid. UMAC might not
17868e84c258SEugene Krasnikov 	 * have valid EDCA params or might not desire to apply EDCA params
17878e84c258SEugene Krasnikov 	 * during config BSS. 0 implies Not Valid ; Non-Zero implies
17888e84c258SEugene Krasnikov 	 * valid */
17898e84c258SEugene Krasnikov 	u8 edca_params_valid;
17908e84c258SEugene Krasnikov 
17918e84c258SEugene Krasnikov 	/* EDCA Parameters for Best Effort Access Category */
17928e84c258SEugene Krasnikov 	struct wcn36xx_hal_edca_param_record acbe;
17938e84c258SEugene Krasnikov 
17948e84c258SEugene Krasnikov 	/* EDCA Parameters forBackground Access Category */
17958e84c258SEugene Krasnikov 	struct wcn36xx_hal_edca_param_record acbk;
17968e84c258SEugene Krasnikov 
17978e84c258SEugene Krasnikov 	/* EDCA Parameters for Video Access Category */
17988e84c258SEugene Krasnikov 	struct wcn36xx_hal_edca_param_record acvi;
17998e84c258SEugene Krasnikov 
18008e84c258SEugene Krasnikov 	/* EDCA Parameters for Voice Access Category */
18018e84c258SEugene Krasnikov 	struct wcn36xx_hal_edca_param_record acvo;
18028e84c258SEugene Krasnikov 
18038e84c258SEugene Krasnikov 	/* Ext Bss Config Msg if set */
18048e84c258SEugene Krasnikov 	u8 ext_set_sta_key_param_valid;
18058e84c258SEugene Krasnikov 
18068e84c258SEugene Krasnikov 	/* SetStaKeyParams for ext bss msg */
18078e84c258SEugene Krasnikov 	struct wcn36xx_hal_set_sta_key_params ext_set_sta_key_param;
18088e84c258SEugene Krasnikov 
18098e84c258SEugene Krasnikov 	/* Persona for the BSS can be STA,AP,GO,CLIENT value same as enum
18108e84c258SEugene Krasnikov 	 * wcn36xx_hal_con_mode */
18118e84c258SEugene Krasnikov 	u8 wcn36xx_hal_persona;
18128e84c258SEugene Krasnikov 
18138e84c258SEugene Krasnikov 	u8 spectrum_mgt_enable;
18148e84c258SEugene Krasnikov 
18158e84c258SEugene Krasnikov 	/* HAL fills in the tx power used for mgmt frames in txMgmtPower */
18168e84c258SEugene Krasnikov 	s8 tx_mgmt_power;
18178e84c258SEugene Krasnikov 
18188e84c258SEugene Krasnikov 	/* maxTxPower has max power to be used after applying the power
18198e84c258SEugene Krasnikov 	 * constraint if any */
18208e84c258SEugene Krasnikov 	s8 max_tx_power;
18218e84c258SEugene Krasnikov 
18228e84c258SEugene Krasnikov 	/* Context of the station being added in HW
18238e84c258SEugene Krasnikov 	 *  Add a STA entry for "itself" -
18248e84c258SEugene Krasnikov 	 *
18258e84c258SEugene Krasnikov 	 *  On AP  - Add the AP itself in an "STA context"
18268e84c258SEugene Krasnikov 	 *
18278e84c258SEugene Krasnikov 	 *  On STA - Add the AP to which this STA is joining in an
18288e84c258SEugene Krasnikov 	 *  "STA context"
18298e84c258SEugene Krasnikov 	 */
18308e84c258SEugene Krasnikov 	struct wcn36xx_hal_config_sta_params_v1 sta;
18318e84c258SEugene Krasnikov } __packed;
18328e84c258SEugene Krasnikov 
18338e84c258SEugene Krasnikov struct wcn36xx_hal_config_bss_req_msg_v1 {
18348e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
18358e84c258SEugene Krasnikov 	struct wcn36xx_hal_config_bss_params_v1 bss_params;
18368e84c258SEugene Krasnikov } __packed;
18378e84c258SEugene Krasnikov 
18388e84c258SEugene Krasnikov struct wcn36xx_hal_config_bss_rsp_params {
18398e84c258SEugene Krasnikov 	/* Success or Failure */
18408e84c258SEugene Krasnikov 	u32 status;
18418e84c258SEugene Krasnikov 
18428e84c258SEugene Krasnikov 	/* BSS index allocated by HAL */
18438e84c258SEugene Krasnikov 	u8 bss_index;
18448e84c258SEugene Krasnikov 
18458e84c258SEugene Krasnikov 	/* DPU descriptor index for PTK */
18468e84c258SEugene Krasnikov 	u8 dpu_desc_index;
18478e84c258SEugene Krasnikov 
18488e84c258SEugene Krasnikov 	/* PTK DPU signature */
18498e84c258SEugene Krasnikov 	u8 ucast_dpu_signature;
18508e84c258SEugene Krasnikov 
18518e84c258SEugene Krasnikov 	/* DPU descriptor index for GTK */
18528e84c258SEugene Krasnikov 	u8 bcast_dpu_desc_indx;
18538e84c258SEugene Krasnikov 
18548e84c258SEugene Krasnikov 	/* GTK DPU signature */
18558e84c258SEugene Krasnikov 	u8 bcast_dpu_signature;
18568e84c258SEugene Krasnikov 
18578e84c258SEugene Krasnikov 	/* DPU descriptor for IGTK */
18588e84c258SEugene Krasnikov 	u8 mgmt_dpu_desc_index;
18598e84c258SEugene Krasnikov 
18608e84c258SEugene Krasnikov 	/* IGTK DPU signature */
18618e84c258SEugene Krasnikov 	u8 mgmt_dpu_signature;
18628e84c258SEugene Krasnikov 
18638e84c258SEugene Krasnikov 	/* Station Index for BSS entry */
18648e84c258SEugene Krasnikov 	u8 bss_sta_index;
18658e84c258SEugene Krasnikov 
18668e84c258SEugene Krasnikov 	/* Self station index for this BSS */
18678e84c258SEugene Krasnikov 	u8 bss_self_sta_index;
18688e84c258SEugene Krasnikov 
18698e84c258SEugene Krasnikov 	/* Bcast station for buffering bcast frames in AP role */
18708e84c258SEugene Krasnikov 	u8 bss_bcast_sta_idx;
18718e84c258SEugene Krasnikov 
18728e84c258SEugene Krasnikov 	/* MAC Address of STA(PEER/SELF) in staContext of configBSSReq */
18738e84c258SEugene Krasnikov 	u8 mac[ETH_ALEN];
18748e84c258SEugene Krasnikov 
18758e84c258SEugene Krasnikov 	/* HAL fills in the tx power used for mgmt frames in this field. */
18768e84c258SEugene Krasnikov 	s8 tx_mgmt_power;
18778e84c258SEugene Krasnikov 
18788e84c258SEugene Krasnikov } __packed;
18798e84c258SEugene Krasnikov 
18808e84c258SEugene Krasnikov struct wcn36xx_hal_config_bss_rsp_msg {
18818e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
18828e84c258SEugene Krasnikov 	struct wcn36xx_hal_config_bss_rsp_params bss_rsp_params;
18838e84c258SEugene Krasnikov } __packed;
18848e84c258SEugene Krasnikov 
18858e84c258SEugene Krasnikov struct wcn36xx_hal_delete_bss_req_msg {
18868e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
18878e84c258SEugene Krasnikov 
18888e84c258SEugene Krasnikov 	/* BSS index to be deleted */
18898e84c258SEugene Krasnikov 	u8 bss_index;
18908e84c258SEugene Krasnikov 
18918e84c258SEugene Krasnikov } __packed;
18928e84c258SEugene Krasnikov 
18938e84c258SEugene Krasnikov struct wcn36xx_hal_delete_bss_rsp_msg {
18948e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
18958e84c258SEugene Krasnikov 
18968e84c258SEugene Krasnikov 	/* Success or Failure */
18978e84c258SEugene Krasnikov 	u32 status;
18988e84c258SEugene Krasnikov 
18998e84c258SEugene Krasnikov 	/* BSS index that has been deleted */
19008e84c258SEugene Krasnikov 	u8 bss_index;
19018e84c258SEugene Krasnikov 
19028e84c258SEugene Krasnikov } __packed;
19038e84c258SEugene Krasnikov 
19048e84c258SEugene Krasnikov struct wcn36xx_hal_join_req_msg {
19058e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
19068e84c258SEugene Krasnikov 
19078e84c258SEugene Krasnikov 	/* Indicates the BSSID to which STA is going to associate */
19088e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
19098e84c258SEugene Krasnikov 
19108e84c258SEugene Krasnikov 	/* Indicates the channel to switch to. */
19118e84c258SEugene Krasnikov 	u8 channel;
19128e84c258SEugene Krasnikov 
19138e84c258SEugene Krasnikov 	/* Self STA MAC */
19148e84c258SEugene Krasnikov 	u8 self_sta_mac_addr[ETH_ALEN];
19158e84c258SEugene Krasnikov 
19168e84c258SEugene Krasnikov 	/* Local power constraint */
19178e84c258SEugene Krasnikov 	u8 local_power_constraint;
19188e84c258SEugene Krasnikov 
19198e84c258SEugene Krasnikov 	/* Secondary channel offset */
19208e84c258SEugene Krasnikov 	enum phy_chan_bond_state secondary_channel_offset;
19218e84c258SEugene Krasnikov 
19228e84c258SEugene Krasnikov 	/* link State */
19238e84c258SEugene Krasnikov 	enum wcn36xx_hal_link_state link_state;
19248e84c258SEugene Krasnikov 
19258e84c258SEugene Krasnikov 	/* Max TX power */
19268e84c258SEugene Krasnikov 	s8 max_tx_power;
19278e84c258SEugene Krasnikov } __packed;
19288e84c258SEugene Krasnikov 
19298e84c258SEugene Krasnikov struct wcn36xx_hal_join_rsp_msg {
19308e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
19318e84c258SEugene Krasnikov 
19328e84c258SEugene Krasnikov 	/* success or failure */
19338e84c258SEugene Krasnikov 	u32 status;
19348e84c258SEugene Krasnikov 
19358e84c258SEugene Krasnikov 	/* HAL fills in the tx power used for mgmt frames in this field */
19368e84c258SEugene Krasnikov 	u8 tx_mgmt_power;
19378e84c258SEugene Krasnikov } __packed;
19388e84c258SEugene Krasnikov 
19398e84c258SEugene Krasnikov struct post_assoc_req_msg {
19408e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
19418e84c258SEugene Krasnikov 
19428e84c258SEugene Krasnikov 	struct wcn36xx_hal_config_sta_params sta_params;
19438e84c258SEugene Krasnikov 	struct wcn36xx_hal_config_bss_params bss_params;
19448e84c258SEugene Krasnikov };
19458e84c258SEugene Krasnikov 
19468e84c258SEugene Krasnikov struct post_assoc_rsp_msg {
19478e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
19488e84c258SEugene Krasnikov 	struct config_sta_rsp_params sta_rsp_params;
19498e84c258SEugene Krasnikov 	struct wcn36xx_hal_config_bss_rsp_params bss_rsp_params;
19508e84c258SEugene Krasnikov };
19518e84c258SEugene Krasnikov 
19528e84c258SEugene Krasnikov /* This is used to create a set of WEP keys for a given BSS. */
19538e84c258SEugene Krasnikov struct wcn36xx_hal_set_bss_key_req_msg {
19548e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
19558e84c258SEugene Krasnikov 
19568e84c258SEugene Krasnikov 	/* BSS Index of the BSS */
19578e84c258SEugene Krasnikov 	u8 bss_idx;
19588e84c258SEugene Krasnikov 
19598e84c258SEugene Krasnikov 	/* Encryption Type used with peer */
19608e84c258SEugene Krasnikov 	enum ani_ed_type enc_type;
19618e84c258SEugene Krasnikov 
19628e84c258SEugene Krasnikov 	/* Number of keys */
19638e84c258SEugene Krasnikov 	u8 num_keys;
19648e84c258SEugene Krasnikov 
19658e84c258SEugene Krasnikov 	/* Array of keys. */
19668e84c258SEugene Krasnikov 	struct wcn36xx_hal_keys keys[WCN36XX_HAL_MAC_MAX_NUM_OF_DEFAULT_KEYS];
19678e84c258SEugene Krasnikov 
19688e84c258SEugene Krasnikov 	/* Control for Replay Count, 1= Single TID based replay count on Tx
19698e84c258SEugene Krasnikov 	 * 0 = Per TID based replay count on TX */
19708e84c258SEugene Krasnikov 	u8 single_tid_rc;
19718e84c258SEugene Krasnikov } __packed;
19728e84c258SEugene Krasnikov 
19738e84c258SEugene Krasnikov /* tagged version of set bss key */
19748e84c258SEugene Krasnikov struct wcn36xx_hal_set_bss_key_req_msg_tagged {
19758e84c258SEugene Krasnikov 	struct wcn36xx_hal_set_bss_key_req_msg Msg;
19768e84c258SEugene Krasnikov 	u32 tag;
19778e84c258SEugene Krasnikov } __packed;
19788e84c258SEugene Krasnikov 
19798e84c258SEugene Krasnikov struct wcn36xx_hal_set_bss_key_rsp_msg {
19808e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
19818e84c258SEugene Krasnikov 
19828e84c258SEugene Krasnikov 	/* success or failure */
19838e84c258SEugene Krasnikov 	u32 status;
19848e84c258SEugene Krasnikov } __packed;
19858e84c258SEugene Krasnikov 
19868e84c258SEugene Krasnikov /*
19878e84c258SEugene Krasnikov  * This is used  configure the key information on a given station.
19888e84c258SEugene Krasnikov  * When the sec_type is WEP40 or WEP104, the def_wep_idx is used to locate
19898e84c258SEugene Krasnikov  * a preconfigured key from a BSS the station assoicated with; otherwise
19908e84c258SEugene Krasnikov  * a new key descriptor is created based on the key field.
19918e84c258SEugene Krasnikov  */
19928e84c258SEugene Krasnikov struct wcn36xx_hal_set_sta_key_req_msg {
19938e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
19948e84c258SEugene Krasnikov 	struct wcn36xx_hal_set_sta_key_params set_sta_key_params;
19958e84c258SEugene Krasnikov } __packed;
19968e84c258SEugene Krasnikov 
19978e84c258SEugene Krasnikov struct wcn36xx_hal_set_sta_key_rsp_msg {
19988e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
19998e84c258SEugene Krasnikov 
20008e84c258SEugene Krasnikov 	/* success or failure */
20018e84c258SEugene Krasnikov 	u32 status;
20028e84c258SEugene Krasnikov } __packed;
20038e84c258SEugene Krasnikov 
20048e84c258SEugene Krasnikov struct wcn36xx_hal_remove_bss_key_req_msg {
20058e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
20068e84c258SEugene Krasnikov 
20078e84c258SEugene Krasnikov 	/* BSS Index of the BSS */
20088e84c258SEugene Krasnikov 	u8 bss_idx;
20098e84c258SEugene Krasnikov 
20108e84c258SEugene Krasnikov 	/* Encryption Type used with peer */
20118e84c258SEugene Krasnikov 	enum ani_ed_type enc_type;
20128e84c258SEugene Krasnikov 
20138e84c258SEugene Krasnikov 	/* Key Id */
20148e84c258SEugene Krasnikov 	u8 key_id;
20158e84c258SEugene Krasnikov 
20168e84c258SEugene Krasnikov 	/* STATIC/DYNAMIC. Used in Nullifying in Key Descriptors for
20178e84c258SEugene Krasnikov 	 * Static/Dynamic keys */
20188e84c258SEugene Krasnikov 	enum ani_wep_type wep_type;
20198e84c258SEugene Krasnikov } __packed;
20208e84c258SEugene Krasnikov 
20218e84c258SEugene Krasnikov struct wcn36xx_hal_remove_bss_key_rsp_msg {
20228e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
20238e84c258SEugene Krasnikov 
20248e84c258SEugene Krasnikov 	/* success or failure */
20258e84c258SEugene Krasnikov 	u32 status;
20268e84c258SEugene Krasnikov } __packed;
20278e84c258SEugene Krasnikov 
20288e84c258SEugene Krasnikov /*
20298e84c258SEugene Krasnikov  * This is used by PE to Remove the key information on a given station.
20308e84c258SEugene Krasnikov  */
20318e84c258SEugene Krasnikov struct wcn36xx_hal_remove_sta_key_req_msg {
20328e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
20338e84c258SEugene Krasnikov 
20348e84c258SEugene Krasnikov 	/* STA Index */
20358e84c258SEugene Krasnikov 	u16 sta_idx;
20368e84c258SEugene Krasnikov 
20378e84c258SEugene Krasnikov 	/* Encryption Type used with peer */
20388e84c258SEugene Krasnikov 	enum ani_ed_type enc_type;
20398e84c258SEugene Krasnikov 
20408e84c258SEugene Krasnikov 	/* Key Id */
20418e84c258SEugene Krasnikov 	u8 key_id;
20428e84c258SEugene Krasnikov 
20438e84c258SEugene Krasnikov 	/* Whether to invalidate the Broadcast key or Unicast key. In case
20448e84c258SEugene Krasnikov 	 * of WEP, the same key is used for both broadcast and unicast. */
20458e84c258SEugene Krasnikov 	u8 unicast;
20468e84c258SEugene Krasnikov 
20478e84c258SEugene Krasnikov } __packed;
20488e84c258SEugene Krasnikov 
20498e84c258SEugene Krasnikov struct wcn36xx_hal_remove_sta_key_rsp_msg {
20508e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
20518e84c258SEugene Krasnikov 
20528e84c258SEugene Krasnikov 	/*success or failure */
20538e84c258SEugene Krasnikov 	u32 status;
20548e84c258SEugene Krasnikov 
20558e84c258SEugene Krasnikov } __packed;
20568e84c258SEugene Krasnikov 
20578e84c258SEugene Krasnikov #ifdef FEATURE_OEM_DATA_SUPPORT
20588e84c258SEugene Krasnikov 
20598e84c258SEugene Krasnikov #ifndef OEM_DATA_REQ_SIZE
20608e84c258SEugene Krasnikov #define OEM_DATA_REQ_SIZE 134
20618e84c258SEugene Krasnikov #endif
20628e84c258SEugene Krasnikov 
20638e84c258SEugene Krasnikov #ifndef OEM_DATA_RSP_SIZE
20648e84c258SEugene Krasnikov #define OEM_DATA_RSP_SIZE 1968
20658e84c258SEugene Krasnikov #endif
20668e84c258SEugene Krasnikov 
20678e84c258SEugene Krasnikov struct start_oem_data_req_msg {
20688e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
20698e84c258SEugene Krasnikov 
20708e84c258SEugene Krasnikov 	u32 status;
20718e84c258SEugene Krasnikov 	tSirMacAddr self_mac_addr;
20728e84c258SEugene Krasnikov 	u8 oem_data_req[OEM_DATA_REQ_SIZE];
20738e84c258SEugene Krasnikov 
20748e84c258SEugene Krasnikov };
20758e84c258SEugene Krasnikov 
20768e84c258SEugene Krasnikov struct start_oem_data_rsp_msg {
20778e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
20788e84c258SEugene Krasnikov 
20798e84c258SEugene Krasnikov 	u8 oem_data_rsp[OEM_DATA_RSP_SIZE];
20808e84c258SEugene Krasnikov };
20818e84c258SEugene Krasnikov 
20828e84c258SEugene Krasnikov #endif
20838e84c258SEugene Krasnikov 
20848e84c258SEugene Krasnikov struct wcn36xx_hal_switch_channel_req_msg {
20858e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
20868e84c258SEugene Krasnikov 
20878e84c258SEugene Krasnikov 	/* Channel number */
20888e84c258SEugene Krasnikov 	u8 channel_number;
20898e84c258SEugene Krasnikov 
20908e84c258SEugene Krasnikov 	/* Local power constraint */
20918e84c258SEugene Krasnikov 	u8 local_power_constraint;
20928e84c258SEugene Krasnikov 
20938e84c258SEugene Krasnikov 	/* Secondary channel offset */
20948e84c258SEugene Krasnikov 	enum phy_chan_bond_state secondary_channel_offset;
20958e84c258SEugene Krasnikov 
20968e84c258SEugene Krasnikov 	/* HAL fills in the tx power used for mgmt frames in this field. */
20978e84c258SEugene Krasnikov 	u8 tx_mgmt_power;
20988e84c258SEugene Krasnikov 
20998e84c258SEugene Krasnikov 	/* Max TX power */
21008e84c258SEugene Krasnikov 	u8 max_tx_power;
21018e84c258SEugene Krasnikov 
21028e84c258SEugene Krasnikov 	/* Self STA MAC */
21038e84c258SEugene Krasnikov 	u8 self_sta_mac_addr[ETH_ALEN];
21048e84c258SEugene Krasnikov 
21058e84c258SEugene Krasnikov 	/* VO WIFI comment: BSSID needed to identify session. As the
21068e84c258SEugene Krasnikov 	 * request has power constraints, this should be applied only to
21078e84c258SEugene Krasnikov 	 * that session Since MTU timing and EDCA are sessionized, this
21088e84c258SEugene Krasnikov 	 * struct needs to be sessionized and bssid needs to be out of the
21098e84c258SEugene Krasnikov 	 * VOWifi feature flag V IMP: Keep bssId field at the end of this
21108e84c258SEugene Krasnikov 	 * msg. It is used to mantain backward compatbility by way of
21118e84c258SEugene Krasnikov 	 * ignoring if using new host/old FW or old host/new FW since it is
21128e84c258SEugene Krasnikov 	 * at the end of this struct
21138e84c258SEugene Krasnikov 	 */
21148e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
21158e84c258SEugene Krasnikov } __packed;
21168e84c258SEugene Krasnikov 
21178e84c258SEugene Krasnikov struct wcn36xx_hal_switch_channel_rsp_msg {
21188e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
21198e84c258SEugene Krasnikov 
21208e84c258SEugene Krasnikov 	/* Status */
21218e84c258SEugene Krasnikov 	u32 status;
21228e84c258SEugene Krasnikov 
21238e84c258SEugene Krasnikov 	/* Channel number - same as in request */
21248e84c258SEugene Krasnikov 	u8 channel_number;
21258e84c258SEugene Krasnikov 
21268e84c258SEugene Krasnikov 	/* HAL fills in the tx power used for mgmt frames in this field */
21278e84c258SEugene Krasnikov 	u8 tx_mgmt_power;
21288e84c258SEugene Krasnikov 
21298e84c258SEugene Krasnikov 	/* BSSID needed to identify session - same as in request */
21308e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
21318e84c258SEugene Krasnikov 
21328e84c258SEugene Krasnikov } __packed;
21338e84c258SEugene Krasnikov 
21348e84c258SEugene Krasnikov struct update_edca_params_req_msg {
21358e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
21368e84c258SEugene Krasnikov 
21378e84c258SEugene Krasnikov 	/*BSS Index */
21388e84c258SEugene Krasnikov 	u16 bss_index;
21398e84c258SEugene Krasnikov 
21408e84c258SEugene Krasnikov 	/* Best Effort */
21418e84c258SEugene Krasnikov 	struct wcn36xx_hal_edca_param_record acbe;
21428e84c258SEugene Krasnikov 
21438e84c258SEugene Krasnikov 	/* Background */
21448e84c258SEugene Krasnikov 	struct wcn36xx_hal_edca_param_record acbk;
21458e84c258SEugene Krasnikov 
21468e84c258SEugene Krasnikov 	/* Video */
21478e84c258SEugene Krasnikov 	struct wcn36xx_hal_edca_param_record acvi;
21488e84c258SEugene Krasnikov 
21498e84c258SEugene Krasnikov 	/* Voice */
21508e84c258SEugene Krasnikov 	struct wcn36xx_hal_edca_param_record acvo;
21518e84c258SEugene Krasnikov };
21528e84c258SEugene Krasnikov 
21538e84c258SEugene Krasnikov struct update_edca_params_rsp_msg {
21548e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
21558e84c258SEugene Krasnikov 
21568e84c258SEugene Krasnikov 	/* success or failure */
21578e84c258SEugene Krasnikov 	u32 status;
21588e84c258SEugene Krasnikov };
21598e84c258SEugene Krasnikov 
21608e84c258SEugene Krasnikov struct dpu_stats_params {
21618e84c258SEugene Krasnikov 	/* Index of STA to which the statistics */
21628e84c258SEugene Krasnikov 	u16 sta_index;
21638e84c258SEugene Krasnikov 
21648e84c258SEugene Krasnikov 	/* Encryption mode */
21658e84c258SEugene Krasnikov 	u8 enc_mode;
21668e84c258SEugene Krasnikov 
21678e84c258SEugene Krasnikov 	/* status */
21688e84c258SEugene Krasnikov 	u32 status;
21698e84c258SEugene Krasnikov 
21708e84c258SEugene Krasnikov 	/* Statistics */
21718e84c258SEugene Krasnikov 	u32 send_blocks;
21728e84c258SEugene Krasnikov 	u32 recv_blocks;
21738e84c258SEugene Krasnikov 	u32 replays;
21748e84c258SEugene Krasnikov 	u8 mic_error_cnt;
21758e84c258SEugene Krasnikov 	u32 prot_excl_cnt;
21768e84c258SEugene Krasnikov 	u16 format_err_cnt;
21778e84c258SEugene Krasnikov 	u16 un_decryptable_cnt;
21788e84c258SEugene Krasnikov 	u32 decrypt_err_cnt;
21798e84c258SEugene Krasnikov 	u32 decrypt_ok_cnt;
21808e84c258SEugene Krasnikov };
21818e84c258SEugene Krasnikov 
21828e84c258SEugene Krasnikov struct wcn36xx_hal_stats_req_msg {
21838e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
21848e84c258SEugene Krasnikov 
21858e84c258SEugene Krasnikov 	/* Valid STA Idx for per STA stats request */
21868e84c258SEugene Krasnikov 	u32 sta_id;
21878e84c258SEugene Krasnikov 
21888e84c258SEugene Krasnikov 	/* Categories of stats requested as specified in eHalStatsMask */
21898e84c258SEugene Krasnikov 	u32 stats_mask;
21908e84c258SEugene Krasnikov };
21918e84c258SEugene Krasnikov 
21928e84c258SEugene Krasnikov struct ani_summary_stats_info {
21938e84c258SEugene Krasnikov 	/* Total number of packets(per AC) that were successfully
21948e84c258SEugene Krasnikov 	 * transmitted with retries */
21958e84c258SEugene Krasnikov 	u32 retry_cnt[4];
21968e84c258SEugene Krasnikov 
21978e84c258SEugene Krasnikov 	/* The number of MSDU packets and MMPDU frames per AC that the
21988e84c258SEugene Krasnikov 	 * 802.11 station successfully transmitted after more than one
21998e84c258SEugene Krasnikov 	 * retransmission attempt */
22008e84c258SEugene Krasnikov 	u32 multiple_retry_cnt[4];
22018e84c258SEugene Krasnikov 
22028e84c258SEugene Krasnikov 	/* Total number of packets(per AC) that were successfully
22038e84c258SEugene Krasnikov 	 * transmitted (with and without retries, including multi-cast,
22048e84c258SEugene Krasnikov 	 * broadcast) */
22058e84c258SEugene Krasnikov 	u32 tx_frm_cnt[4];
22068e84c258SEugene Krasnikov 
22078e84c258SEugene Krasnikov 	/* Total number of packets that were successfully received (after
22088e84c258SEugene Krasnikov 	 * appropriate filter rules including multi-cast, broadcast) */
22098e84c258SEugene Krasnikov 	u32 rx_frm_cnt;
22108e84c258SEugene Krasnikov 
22118e84c258SEugene Krasnikov 	/* Total number of duplicate frames received successfully */
22128e84c258SEugene Krasnikov 	u32 frm_dup_cnt;
22138e84c258SEugene Krasnikov 
22148e84c258SEugene Krasnikov 	/* Total number packets(per AC) failed to transmit */
22158e84c258SEugene Krasnikov 	u32 fail_cnt[4];
22168e84c258SEugene Krasnikov 
22178e84c258SEugene Krasnikov 	/* Total number of RTS/CTS sequence failures for transmission of a
22188e84c258SEugene Krasnikov 	 * packet */
22198e84c258SEugene Krasnikov 	u32 rts_fail_cnt;
22208e84c258SEugene Krasnikov 
22218e84c258SEugene Krasnikov 	/* Total number packets failed transmit because of no ACK from the
22228e84c258SEugene Krasnikov 	 * remote entity */
22238e84c258SEugene Krasnikov 	u32 ack_fail_cnt;
22248e84c258SEugene Krasnikov 
22258e84c258SEugene Krasnikov 	/* Total number of RTS/CTS sequence success for transmission of a
22268e84c258SEugene Krasnikov 	 * packet */
22278e84c258SEugene Krasnikov 	u32 rts_succ_cnt;
22288e84c258SEugene Krasnikov 
22298e84c258SEugene Krasnikov 	/* The sum of the receive error count and dropped-receive-buffer
22308e84c258SEugene Krasnikov 	 * error count. HAL will provide this as a sum of (FCS error) +
22318e84c258SEugene Krasnikov 	 * (Fail get BD/PDU in HW) */
22328e84c258SEugene Krasnikov 	u32 rx_discard_cnt;
22338e84c258SEugene Krasnikov 
22348e84c258SEugene Krasnikov 	/*
22358e84c258SEugene Krasnikov 	 * The receive error count. HAL will provide the RxP FCS error
22368e84c258SEugene Krasnikov 	 * global counter. */
22378e84c258SEugene Krasnikov 	u32 rx_error_cnt;
22388e84c258SEugene Krasnikov 
22398e84c258SEugene Krasnikov 	/* The sum of the transmit-directed byte count, transmit-multicast
22408e84c258SEugene Krasnikov 	 * byte count and transmit-broadcast byte count. HAL will sum TPE
22418e84c258SEugene Krasnikov 	 * UC/MC/BCAST global counters to provide this. */
22428e84c258SEugene Krasnikov 	u32 tx_byte_cnt;
22438e84c258SEugene Krasnikov };
22448e84c258SEugene Krasnikov 
22458e84c258SEugene Krasnikov /* defines tx_rate_flags */
22468e84c258SEugene Krasnikov enum tx_rate_info {
22478e84c258SEugene Krasnikov 	/* Legacy rates */
22488e84c258SEugene Krasnikov 	HAL_TX_RATE_LEGACY = 0x1,
22498e84c258SEugene Krasnikov 
22508e84c258SEugene Krasnikov 	/* HT20 rates */
22518e84c258SEugene Krasnikov 	HAL_TX_RATE_HT20 = 0x2,
22528e84c258SEugene Krasnikov 
22538e84c258SEugene Krasnikov 	/* HT40 rates */
22548e84c258SEugene Krasnikov 	HAL_TX_RATE_HT40 = 0x4,
22558e84c258SEugene Krasnikov 
22568e84c258SEugene Krasnikov 	/* Rate with Short guard interval */
22578e84c258SEugene Krasnikov 	HAL_TX_RATE_SGI = 0x8,
22588e84c258SEugene Krasnikov 
22598e84c258SEugene Krasnikov 	/* Rate with Long guard interval */
22608e84c258SEugene Krasnikov 	HAL_TX_RATE_LGI = 0x10
22618e84c258SEugene Krasnikov };
22628e84c258SEugene Krasnikov 
22638e84c258SEugene Krasnikov struct ani_global_class_a_stats_info {
22648e84c258SEugene Krasnikov 	/* The number of MPDU frames received by the 802.11 station for
22658e84c258SEugene Krasnikov 	 * MSDU packets or MMPDU frames */
22668e84c258SEugene Krasnikov 	u32 rx_frag_cnt;
22678e84c258SEugene Krasnikov 
22688e84c258SEugene Krasnikov 	/* The number of MPDU frames received by the 802.11 station for
22698e84c258SEugene Krasnikov 	 * MSDU packets or MMPDU frames when a promiscuous packet filter
22708e84c258SEugene Krasnikov 	 * was enabled */
22718e84c258SEugene Krasnikov 	u32 promiscuous_rx_frag_cnt;
22728e84c258SEugene Krasnikov 
22738e84c258SEugene Krasnikov 	/* The receiver input sensitivity referenced to a FER of 8% at an
22748e84c258SEugene Krasnikov 	 * MPDU length of 1024 bytes at the antenna connector. Each element
22758e84c258SEugene Krasnikov 	 * of the array shall correspond to a supported rate and the order
22768e84c258SEugene Krasnikov 	 * shall be the same as the supporteRates parameter. */
22778e84c258SEugene Krasnikov 	u32 rx_input_sensitivity;
22788e84c258SEugene Krasnikov 
22798e84c258SEugene Krasnikov 	/* The maximum transmit power in dBm upto one decimal. for eg: if
22808e84c258SEugene Krasnikov 	 * it is 10.5dBm, the value would be 105 */
22818e84c258SEugene Krasnikov 	u32 max_pwr;
22828e84c258SEugene Krasnikov 
22838e84c258SEugene Krasnikov 	/* Number of times the receiver failed to synchronize with the
22848e84c258SEugene Krasnikov 	 * incoming signal after detecting the sync in the preamble of the
22858e84c258SEugene Krasnikov 	 * transmitted PLCP protocol data unit. */
22868e84c258SEugene Krasnikov 	u32 sync_fail_cnt;
22878e84c258SEugene Krasnikov 
22888e84c258SEugene Krasnikov 	/* Legacy transmit rate, in units of 500 kbit/sec, for the most
22898e84c258SEugene Krasnikov 	 * recently transmitted frame */
22908e84c258SEugene Krasnikov 	u32 tx_rate;
22918e84c258SEugene Krasnikov 
22928e84c258SEugene Krasnikov 	/* mcs index for HT20 and HT40 rates */
22938e84c258SEugene Krasnikov 	u32 mcs_index;
22948e84c258SEugene Krasnikov 
22958e84c258SEugene Krasnikov 	/* to differentiate between HT20 and HT40 rates; short and long
22968e84c258SEugene Krasnikov 	 * guard interval */
22978e84c258SEugene Krasnikov 	u32 tx_rate_flags;
22988e84c258SEugene Krasnikov };
22998e84c258SEugene Krasnikov 
23008e84c258SEugene Krasnikov struct ani_global_security_stats {
23018e84c258SEugene Krasnikov 	/* The number of unencrypted received MPDU frames that the MAC
23028e84c258SEugene Krasnikov 	 * layer discarded when the IEEE 802.11 dot11ExcludeUnencrypted
23038e84c258SEugene Krasnikov 	 * management information base (MIB) object is enabled */
23048e84c258SEugene Krasnikov 	u32 rx_wep_unencrypted_frm_cnt;
23058e84c258SEugene Krasnikov 
23068e84c258SEugene Krasnikov 	/* The number of received MSDU packets that that the 802.11 station
23078e84c258SEugene Krasnikov 	 * discarded because of MIC failures */
23088e84c258SEugene Krasnikov 	u32 rx_mic_fail_cnt;
23098e84c258SEugene Krasnikov 
23108e84c258SEugene Krasnikov 	/* The number of encrypted MPDU frames that the 802.11 station
23118e84c258SEugene Krasnikov 	 * failed to decrypt because of a TKIP ICV error */
23128e84c258SEugene Krasnikov 	u32 tkip_icv_err;
23138e84c258SEugene Krasnikov 
23148e84c258SEugene Krasnikov 	/* The number of received MPDU frames that the 802.11 discarded
23158e84c258SEugene Krasnikov 	 * because of an invalid AES-CCMP format */
23168e84c258SEugene Krasnikov 	u32 aes_ccmp_format_err;
23178e84c258SEugene Krasnikov 
23188e84c258SEugene Krasnikov 	/* The number of received MPDU frames that the 802.11 station
23198e84c258SEugene Krasnikov 	 * discarded because of the AES-CCMP replay protection procedure */
23208e84c258SEugene Krasnikov 	u32 aes_ccmp_replay_cnt;
23218e84c258SEugene Krasnikov 
23228e84c258SEugene Krasnikov 	/* The number of received MPDU frames that the 802.11 station
23238e84c258SEugene Krasnikov 	 * discarded because of errors detected by the AES-CCMP decryption
23248e84c258SEugene Krasnikov 	 * algorithm */
23258e84c258SEugene Krasnikov 	u32 aes_ccmp_decrpt_err;
23268e84c258SEugene Krasnikov 
23278e84c258SEugene Krasnikov 	/* The number of encrypted MPDU frames received for which a WEP
23288e84c258SEugene Krasnikov 	 * decryption key was not available on the 802.11 station */
23298e84c258SEugene Krasnikov 	u32 wep_undecryptable_cnt;
23308e84c258SEugene Krasnikov 
23318e84c258SEugene Krasnikov 	/* The number of encrypted MPDU frames that the 802.11 station
23328e84c258SEugene Krasnikov 	 * failed to decrypt because of a WEP ICV error */
23338e84c258SEugene Krasnikov 	u32 wep_icv_err;
23348e84c258SEugene Krasnikov 
23358e84c258SEugene Krasnikov 	/* The number of received encrypted packets that the 802.11 station
23368e84c258SEugene Krasnikov 	 * successfully decrypted */
23378e84c258SEugene Krasnikov 	u32 rx_decrypt_succ_cnt;
23388e84c258SEugene Krasnikov 
23398e84c258SEugene Krasnikov 	/* The number of encrypted packets that the 802.11 station failed
23408e84c258SEugene Krasnikov 	 * to decrypt */
23418e84c258SEugene Krasnikov 	u32 rx_decrypt_fail_cnt;
23428e84c258SEugene Krasnikov };
23438e84c258SEugene Krasnikov 
23448e84c258SEugene Krasnikov struct ani_global_class_b_stats_info {
23458e84c258SEugene Krasnikov 	struct ani_global_security_stats uc_stats;
23468e84c258SEugene Krasnikov 	struct ani_global_security_stats mc_bc_stats;
23478e84c258SEugene Krasnikov };
23488e84c258SEugene Krasnikov 
23498e84c258SEugene Krasnikov struct ani_global_class_c_stats_info {
23508e84c258SEugene Krasnikov 	/* This counter shall be incremented for a received A-MSDU frame
23518e84c258SEugene Krasnikov 	 * with the stations MAC address in the address 1 field or an
23528e84c258SEugene Krasnikov 	 * A-MSDU frame with a group address in the address 1 field */
23538e84c258SEugene Krasnikov 	u32 rx_amsdu_cnt;
23548e84c258SEugene Krasnikov 
23558e84c258SEugene Krasnikov 	/* This counter shall be incremented when the MAC receives an AMPDU
23568e84c258SEugene Krasnikov 	 * from the PHY */
23578e84c258SEugene Krasnikov 	u32 rx_ampdu_cnt;
23588e84c258SEugene Krasnikov 
23598e84c258SEugene Krasnikov 	/* This counter shall be incremented when a Frame is transmitted
23608e84c258SEugene Krasnikov 	 * only on the primary channel */
23618e84c258SEugene Krasnikov 	u32 tx_20_frm_cnt;
23628e84c258SEugene Krasnikov 
23638e84c258SEugene Krasnikov 	/* This counter shall be incremented when a Frame is received only
23648e84c258SEugene Krasnikov 	 * on the primary channel */
23658e84c258SEugene Krasnikov 	u32 rx_20_frm_cnt;
23668e84c258SEugene Krasnikov 
23678e84c258SEugene Krasnikov 	/* This counter shall be incremented by the number of MPDUs
23688e84c258SEugene Krasnikov 	 * received in the A-MPDU when an A-MPDU is received */
23698e84c258SEugene Krasnikov 	u32 rx_mpdu_in_ampdu_cnt;
23708e84c258SEugene Krasnikov 
23718e84c258SEugene Krasnikov 	/* This counter shall be incremented when an MPDU delimiter has a
23728e84c258SEugene Krasnikov 	 * CRC error when this is the first CRC error in the received AMPDU
23738e84c258SEugene Krasnikov 	 * or when the previous delimiter has been decoded correctly */
23748e84c258SEugene Krasnikov 	u32 ampdu_delimiter_crc_err;
23758e84c258SEugene Krasnikov };
23768e84c258SEugene Krasnikov 
23778e84c258SEugene Krasnikov struct ani_per_sta_stats_info {
23788e84c258SEugene Krasnikov 	/* The number of MPDU frames that the 802.11 station transmitted
23798e84c258SEugene Krasnikov 	 * and acknowledged through a received 802.11 ACK frame */
23808e84c258SEugene Krasnikov 	u32 tx_frag_cnt[4];
23818e84c258SEugene Krasnikov 
23828e84c258SEugene Krasnikov 	/* This counter shall be incremented when an A-MPDU is transmitted */
23838e84c258SEugene Krasnikov 	u32 tx_ampdu_cnt;
23848e84c258SEugene Krasnikov 
23858e84c258SEugene Krasnikov 	/* This counter shall increment by the number of MPDUs in the AMPDU
23868e84c258SEugene Krasnikov 	 * when an A-MPDU is transmitted */
23878e84c258SEugene Krasnikov 	u32 tx_mpdu_in_ampdu_cnt;
23888e84c258SEugene Krasnikov };
23898e84c258SEugene Krasnikov 
23908e84c258SEugene Krasnikov struct wcn36xx_hal_stats_rsp_msg {
23918e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
23928e84c258SEugene Krasnikov 
23938e84c258SEugene Krasnikov 	/* Success or Failure */
23948e84c258SEugene Krasnikov 	u32 status;
23958e84c258SEugene Krasnikov 
23968e84c258SEugene Krasnikov 	/* STA Idx */
23978e84c258SEugene Krasnikov 	u32 sta_index;
23988e84c258SEugene Krasnikov 
23998e84c258SEugene Krasnikov 	/* Categories of STATS being returned as per eHalStatsMask */
24008e84c258SEugene Krasnikov 	u32 stats_mask;
24018e84c258SEugene Krasnikov 
24028e84c258SEugene Krasnikov 	/* message type is same as the request type */
24038e84c258SEugene Krasnikov 	u16 msg_type;
24048e84c258SEugene Krasnikov 
24058e84c258SEugene Krasnikov 	/* length of the entire request, includes the pStatsBuf length too */
24068e84c258SEugene Krasnikov 	u16 msg_len;
24078e84c258SEugene Krasnikov };
24088e84c258SEugene Krasnikov 
24098e84c258SEugene Krasnikov struct wcn36xx_hal_set_link_state_req_msg {
24108e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
24118e84c258SEugene Krasnikov 
24128e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
24138e84c258SEugene Krasnikov 	enum wcn36xx_hal_link_state state;
24148e84c258SEugene Krasnikov 	u8 self_mac_addr[ETH_ALEN];
24158e84c258SEugene Krasnikov 
24168e84c258SEugene Krasnikov } __packed;
24178e84c258SEugene Krasnikov 
24188e84c258SEugene Krasnikov struct set_link_state_rsp_msg {
24198e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
24208e84c258SEugene Krasnikov 
24218e84c258SEugene Krasnikov 	/* success or failure */
24228e84c258SEugene Krasnikov 	u32 status;
24238e84c258SEugene Krasnikov };
24248e84c258SEugene Krasnikov 
24258e84c258SEugene Krasnikov /* TSPEC Params */
24268e84c258SEugene Krasnikov struct wcn36xx_hal_ts_info_tfc {
24278e84c258SEugene Krasnikov #ifndef ANI_LITTLE_BIT_ENDIAN
24288e84c258SEugene Krasnikov 	u16 ackPolicy:2;
24298e84c258SEugene Krasnikov 	u16 userPrio:3;
24308e84c258SEugene Krasnikov 	u16 psb:1;
24318e84c258SEugene Krasnikov 	u16 aggregation:1;
24328e84c258SEugene Krasnikov 	u16 accessPolicy:2;
24338e84c258SEugene Krasnikov 	u16 direction:2;
24348e84c258SEugene Krasnikov 	u16 tsid:4;
24358e84c258SEugene Krasnikov 	u16 trafficType:1;
24368e84c258SEugene Krasnikov #else
24378e84c258SEugene Krasnikov 	u16 trafficType:1;
24388e84c258SEugene Krasnikov 	u16 tsid:4;
24398e84c258SEugene Krasnikov 	u16 direction:2;
24408e84c258SEugene Krasnikov 	u16 accessPolicy:2;
24418e84c258SEugene Krasnikov 	u16 aggregation:1;
24428e84c258SEugene Krasnikov 	u16 psb:1;
24438e84c258SEugene Krasnikov 	u16 userPrio:3;
24448e84c258SEugene Krasnikov 	u16 ackPolicy:2;
24458e84c258SEugene Krasnikov #endif
24468e84c258SEugene Krasnikov };
24478e84c258SEugene Krasnikov 
24488e84c258SEugene Krasnikov /* Flag to schedule the traffic type */
24498e84c258SEugene Krasnikov struct wcn36xx_hal_ts_info_sch {
24508e84c258SEugene Krasnikov #ifndef ANI_LITTLE_BIT_ENDIAN
24518e84c258SEugene Krasnikov 	u8 rsvd:7;
24528e84c258SEugene Krasnikov 	u8 schedule:1;
24538e84c258SEugene Krasnikov #else
24548e84c258SEugene Krasnikov 	u8 schedule:1;
24558e84c258SEugene Krasnikov 	u8 rsvd:7;
24568e84c258SEugene Krasnikov #endif
24578e84c258SEugene Krasnikov };
24588e84c258SEugene Krasnikov 
24598e84c258SEugene Krasnikov /* Traffic and scheduling info */
24608e84c258SEugene Krasnikov struct wcn36xx_hal_ts_info {
24618e84c258SEugene Krasnikov 	struct wcn36xx_hal_ts_info_tfc traffic;
24628e84c258SEugene Krasnikov 	struct wcn36xx_hal_ts_info_sch schedule;
24638e84c258SEugene Krasnikov };
24648e84c258SEugene Krasnikov 
24658e84c258SEugene Krasnikov /* Information elements */
24668e84c258SEugene Krasnikov struct wcn36xx_hal_tspec_ie {
24678e84c258SEugene Krasnikov 	u8 type;
24688e84c258SEugene Krasnikov 	u8 length;
24698e84c258SEugene Krasnikov 	struct wcn36xx_hal_ts_info ts_info;
24708e84c258SEugene Krasnikov 	u16 nom_msdu_size;
24718e84c258SEugene Krasnikov 	u16 max_msdu_size;
24728e84c258SEugene Krasnikov 	u32 min_svc_interval;
24738e84c258SEugene Krasnikov 	u32 max_svc_interval;
24748e84c258SEugene Krasnikov 	u32 inact_interval;
24758e84c258SEugene Krasnikov 	u32 suspend_interval;
24768e84c258SEugene Krasnikov 	u32 svc_start_time;
24778e84c258SEugene Krasnikov 	u32 min_data_rate;
24788e84c258SEugene Krasnikov 	u32 mean_data_rate;
24798e84c258SEugene Krasnikov 	u32 peak_data_rate;
24808e84c258SEugene Krasnikov 	u32 max_burst_sz;
24818e84c258SEugene Krasnikov 	u32 delay_bound;
24828e84c258SEugene Krasnikov 	u32 min_phy_rate;
24838e84c258SEugene Krasnikov 	u16 surplus_bw;
24848e84c258SEugene Krasnikov 	u16 medium_time;
24858e84c258SEugene Krasnikov };
24868e84c258SEugene Krasnikov 
24878e84c258SEugene Krasnikov struct add_ts_req_msg {
24888e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
24898e84c258SEugene Krasnikov 
24908e84c258SEugene Krasnikov 	/* Station Index */
24918e84c258SEugene Krasnikov 	u16 sta_index;
24928e84c258SEugene Krasnikov 
24938e84c258SEugene Krasnikov 	/* TSPEC handler uniquely identifying a TSPEC for a STA in a BSS */
24948e84c258SEugene Krasnikov 	u16 tspec_index;
24958e84c258SEugene Krasnikov 
24968e84c258SEugene Krasnikov 	/* To program TPE with required parameters */
24978e84c258SEugene Krasnikov 	struct wcn36xx_hal_tspec_ie tspec;
24988e84c258SEugene Krasnikov 
24998e84c258SEugene Krasnikov 	/* U-APSD Flags: 1b per AC.  Encoded as follows:
25008e84c258SEugene Krasnikov 	   b7 b6 b5 b4 b3 b2 b1 b0 =
25018e84c258SEugene Krasnikov 	   X  X  X  X  BE BK VI VO */
25028e84c258SEugene Krasnikov 	u8 uapsd;
25038e84c258SEugene Krasnikov 
25048e84c258SEugene Krasnikov 	/* These parameters are for all the access categories */
25058e84c258SEugene Krasnikov 
25068e84c258SEugene Krasnikov 	/* Service Interval */
25078e84c258SEugene Krasnikov 	u32 service_interval[WCN36XX_HAL_MAX_AC];
25088e84c258SEugene Krasnikov 
25098e84c258SEugene Krasnikov 	/* Suspend Interval */
25108e84c258SEugene Krasnikov 	u32 suspend_interval[WCN36XX_HAL_MAX_AC];
25118e84c258SEugene Krasnikov 
25128e84c258SEugene Krasnikov 	/* Delay Interval */
25138e84c258SEugene Krasnikov 	u32 delay_interval[WCN36XX_HAL_MAX_AC];
25148e84c258SEugene Krasnikov };
25158e84c258SEugene Krasnikov 
25168e84c258SEugene Krasnikov struct add_rs_rsp_msg {
25178e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
25188e84c258SEugene Krasnikov 
25198e84c258SEugene Krasnikov 	/* success or failure */
25208e84c258SEugene Krasnikov 	u32 status;
25218e84c258SEugene Krasnikov };
25228e84c258SEugene Krasnikov 
25238e84c258SEugene Krasnikov struct del_ts_req_msg {
25248e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
25258e84c258SEugene Krasnikov 
25268e84c258SEugene Krasnikov 	/* Station Index */
25278e84c258SEugene Krasnikov 	u16 sta_index;
25288e84c258SEugene Krasnikov 
25298e84c258SEugene Krasnikov 	/* TSPEC identifier uniquely identifying a TSPEC for a STA in a BSS */
25308e84c258SEugene Krasnikov 	u16 tspec_index;
25318e84c258SEugene Krasnikov 
25328e84c258SEugene Krasnikov 	/* To lookup station id using the mac address */
25338e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
25348e84c258SEugene Krasnikov };
25358e84c258SEugene Krasnikov 
25368e84c258SEugene Krasnikov struct del_ts_rsp_msg {
25378e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
25388e84c258SEugene Krasnikov 
25398e84c258SEugene Krasnikov 	/* success or failure */
25408e84c258SEugene Krasnikov 	u32 status;
25418e84c258SEugene Krasnikov };
25428e84c258SEugene Krasnikov 
25438e84c258SEugene Krasnikov /* End of TSpec Parameters */
25448e84c258SEugene Krasnikov 
25458e84c258SEugene Krasnikov /* Start of BLOCK ACK related Parameters */
25468e84c258SEugene Krasnikov 
25478e84c258SEugene Krasnikov struct wcn36xx_hal_add_ba_session_req_msg {
25488e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
25498e84c258SEugene Krasnikov 
25508e84c258SEugene Krasnikov 	/* Station Index */
25518e84c258SEugene Krasnikov 	u16 sta_index;
25528e84c258SEugene Krasnikov 
25538e84c258SEugene Krasnikov 	/* Peer MAC Address */
25548e84c258SEugene Krasnikov 	u8 mac_addr[ETH_ALEN];
25558e84c258SEugene Krasnikov 
25568e84c258SEugene Krasnikov 	/* ADDBA Action Frame dialog token
25578e84c258SEugene Krasnikov 	   HAL will not interpret this object */
25588e84c258SEugene Krasnikov 	u8 dialog_token;
25598e84c258SEugene Krasnikov 
25608e84c258SEugene Krasnikov 	/* TID for which the BA is being setup
25618e84c258SEugene Krasnikov 	   This identifies the TC or TS of interest */
25628e84c258SEugene Krasnikov 	u8 tid;
25638e84c258SEugene Krasnikov 
25648e84c258SEugene Krasnikov 	/* 0 - Delayed BA (Not supported)
25658e84c258SEugene Krasnikov 	   1 - Immediate BA */
25668e84c258SEugene Krasnikov 	u8 policy;
25678e84c258SEugene Krasnikov 
25688e84c258SEugene Krasnikov 	/* Indicates the number of buffers for this TID (baTID)
25698e84c258SEugene Krasnikov 	   NOTE - This is the requested buffer size. When this
25708e84c258SEugene Krasnikov 	   is processed by HAL and subsequently by HDD, it is
25718e84c258SEugene Krasnikov 	   possible that HDD may change this buffer size. Any
25728e84c258SEugene Krasnikov 	   change in the buffer size should be noted by PE and
25738e84c258SEugene Krasnikov 	   advertized appropriately in the ADDBA response */
25748e84c258SEugene Krasnikov 	u16 buffer_size;
25758e84c258SEugene Krasnikov 
25768e84c258SEugene Krasnikov 	/* BA timeout in TU's 0 means no timeout will occur */
25778e84c258SEugene Krasnikov 	u16 timeout;
25788e84c258SEugene Krasnikov 
25798e84c258SEugene Krasnikov 	/* b0..b3 - Fragment Number - Always set to 0
25808e84c258SEugene Krasnikov 	   b4..b15 - Starting Sequence Number of first MSDU
25818e84c258SEugene Krasnikov 	   for which this BA is setup */
25828e84c258SEugene Krasnikov 	u16 ssn;
25838e84c258SEugene Krasnikov 
25848e84c258SEugene Krasnikov 	/* ADDBA direction
25858e84c258SEugene Krasnikov 	   1 - Originator
25868e84c258SEugene Krasnikov 	   0 - Recipient */
25878e84c258SEugene Krasnikov 	u8 direction;
25888e84c258SEugene Krasnikov } __packed;
25898e84c258SEugene Krasnikov 
25908e84c258SEugene Krasnikov struct wcn36xx_hal_add_ba_session_rsp_msg {
25918e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
25928e84c258SEugene Krasnikov 
25938e84c258SEugene Krasnikov 	/* success or failure */
25948e84c258SEugene Krasnikov 	u32 status;
25958e84c258SEugene Krasnikov 
25968e84c258SEugene Krasnikov 	/* Dialog token */
25978e84c258SEugene Krasnikov 	u8 dialog_token;
25988e84c258SEugene Krasnikov 
25998e84c258SEugene Krasnikov 	/* TID for which the BA session has been setup */
26008e84c258SEugene Krasnikov 	u8 ba_tid;
26018e84c258SEugene Krasnikov 
26028e84c258SEugene Krasnikov 	/* BA Buffer Size allocated for the current BA session */
26038e84c258SEugene Krasnikov 	u8 ba_buffer_size;
26048e84c258SEugene Krasnikov 
26058e84c258SEugene Krasnikov 	u8 ba_session_id;
26068e84c258SEugene Krasnikov 
26078e84c258SEugene Krasnikov 	/* Reordering Window buffer */
26088e84c258SEugene Krasnikov 	u8 win_size;
26098e84c258SEugene Krasnikov 
26108e84c258SEugene Krasnikov 	/* Station Index to id the sta */
26118e84c258SEugene Krasnikov 	u8 sta_index;
26128e84c258SEugene Krasnikov 
26138e84c258SEugene Krasnikov 	/* Starting Sequence Number */
26148e84c258SEugene Krasnikov 	u16 ssn;
26158e84c258SEugene Krasnikov } __packed;
26168e84c258SEugene Krasnikov 
26178e84c258SEugene Krasnikov struct wcn36xx_hal_add_ba_req_msg {
26188e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
26198e84c258SEugene Krasnikov 
26208e84c258SEugene Krasnikov 	/* Session Id */
26218e84c258SEugene Krasnikov 	u8 session_id;
26228e84c258SEugene Krasnikov 
26238e84c258SEugene Krasnikov 	/* Reorder Window Size */
26248e84c258SEugene Krasnikov 	u8 win_size;
26258e84c258SEugene Krasnikov /* Old FW 1.2.2.4 does not support this*/
26268e84c258SEugene Krasnikov #ifdef FEATURE_ON_CHIP_REORDERING
26278e84c258SEugene Krasnikov 	u8 reordering_done_on_chip;
26288e84c258SEugene Krasnikov #endif
26298e84c258SEugene Krasnikov } __packed;
26308e84c258SEugene Krasnikov 
26318e84c258SEugene Krasnikov struct wcn36xx_hal_add_ba_rsp_msg {
26328e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
26338e84c258SEugene Krasnikov 
26348e84c258SEugene Krasnikov 	/* success or failure */
26358e84c258SEugene Krasnikov 	u32 status;
26368e84c258SEugene Krasnikov 
26378e84c258SEugene Krasnikov 	/* Dialog token */
26388e84c258SEugene Krasnikov 	u8 dialog_token;
26398e84c258SEugene Krasnikov } __packed;
26408e84c258SEugene Krasnikov 
26418e84c258SEugene Krasnikov struct add_ba_info {
26428e84c258SEugene Krasnikov 	u16 ba_enable:1;
26438e84c258SEugene Krasnikov 	u16 starting_seq_num:12;
26448e84c258SEugene Krasnikov 	u16 reserved:3;
26458e84c258SEugene Krasnikov };
26468e84c258SEugene Krasnikov 
26478e84c258SEugene Krasnikov struct wcn36xx_hal_trigger_ba_rsp_candidate {
26488e84c258SEugene Krasnikov 	u8 sta_addr[ETH_ALEN];
26498e84c258SEugene Krasnikov 	struct add_ba_info ba_info[STACFG_MAX_TC];
26508e84c258SEugene Krasnikov } __packed;
26518e84c258SEugene Krasnikov 
2652cddc6046SChun-Yeow Yeoh struct wcn36xx_hal_trigger_ba_req_candidate {
26538e84c258SEugene Krasnikov 	u8 sta_index;
26548e84c258SEugene Krasnikov 	u8 tid_bitmap;
26558e84c258SEugene Krasnikov } __packed;
26568e84c258SEugene Krasnikov 
26578e84c258SEugene Krasnikov struct wcn36xx_hal_trigger_ba_req_msg {
26588e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
26598e84c258SEugene Krasnikov 
26608e84c258SEugene Krasnikov 	/* Session Id */
26618e84c258SEugene Krasnikov 	u8 session_id;
26628e84c258SEugene Krasnikov 
26638e84c258SEugene Krasnikov 	/* baCandidateCnt is followed by trigger BA
26648e84c258SEugene Krasnikov 	 * Candidate List(tTriggerBaCandidate)
26658e84c258SEugene Krasnikov 	 */
26668e84c258SEugene Krasnikov 	u16 candidate_cnt;
26678e84c258SEugene Krasnikov 
26688e84c258SEugene Krasnikov } __packed;
26698e84c258SEugene Krasnikov 
26708e84c258SEugene Krasnikov struct wcn36xx_hal_trigger_ba_rsp_msg {
26718e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
26728e84c258SEugene Krasnikov 
26738e84c258SEugene Krasnikov 	/* TO SUPPORT BT-AMP */
26748e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
26758e84c258SEugene Krasnikov 
26768e84c258SEugene Krasnikov 	/* success or failure */
26778e84c258SEugene Krasnikov 	u32 status;
26788e84c258SEugene Krasnikov 
26798e84c258SEugene Krasnikov 	/* baCandidateCnt is followed by trigger BA
26808e84c258SEugene Krasnikov 	 * Rsp Candidate List(tTriggerRspBaCandidate)
26818e84c258SEugene Krasnikov 	 */
26828e84c258SEugene Krasnikov 	u16 candidate_cnt;
26838e84c258SEugene Krasnikov } __packed;
26848e84c258SEugene Krasnikov 
26858e84c258SEugene Krasnikov struct wcn36xx_hal_del_ba_req_msg {
26868e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
26878e84c258SEugene Krasnikov 
26888e84c258SEugene Krasnikov 	/* Station Index */
26898e84c258SEugene Krasnikov 	u16 sta_index;
26908e84c258SEugene Krasnikov 
26918e84c258SEugene Krasnikov 	/* TID for which the BA session is being deleted */
26928e84c258SEugene Krasnikov 	u8 tid;
26938e84c258SEugene Krasnikov 
26948e84c258SEugene Krasnikov 	/* DELBA direction
26958e84c258SEugene Krasnikov 	   1 - Originator
26968e84c258SEugene Krasnikov 	   0 - Recipient */
26978e84c258SEugene Krasnikov 	u8 direction;
26988e84c258SEugene Krasnikov } __packed;
26998e84c258SEugene Krasnikov 
27008e84c258SEugene Krasnikov struct wcn36xx_hal_del_ba_rsp_msg {
27018e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
27028e84c258SEugene Krasnikov 
27038e84c258SEugene Krasnikov 	/* success or failure */
27048e84c258SEugene Krasnikov 	u32 status;
27058e84c258SEugene Krasnikov } __packed;
27068e84c258SEugene Krasnikov 
27078e84c258SEugene Krasnikov struct tsm_stats_req_msg {
27088e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
27098e84c258SEugene Krasnikov 
27108e84c258SEugene Krasnikov 	/* Traffic Id */
27118e84c258SEugene Krasnikov 	u8 tid;
27128e84c258SEugene Krasnikov 
27138e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
27148e84c258SEugene Krasnikov };
27158e84c258SEugene Krasnikov 
27168e84c258SEugene Krasnikov struct tsm_stats_rsp_msg {
27178e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
27188e84c258SEugene Krasnikov 
27198e84c258SEugene Krasnikov 	/*success or failure */
27208e84c258SEugene Krasnikov 	u32 status;
27218e84c258SEugene Krasnikov 
27228e84c258SEugene Krasnikov 	/* Uplink Packet Queue delay */
27238e84c258SEugene Krasnikov 	u16 uplink_pkt_queue_delay;
27248e84c258SEugene Krasnikov 
27258e84c258SEugene Krasnikov 	/* Uplink Packet Queue delay histogram */
27268e84c258SEugene Krasnikov 	u16 uplink_pkt_queue_delay_hist[4];
27278e84c258SEugene Krasnikov 
27288e84c258SEugene Krasnikov 	/* Uplink Packet Transmit delay */
27298e84c258SEugene Krasnikov 	u32 uplink_pkt_tx_delay;
27308e84c258SEugene Krasnikov 
27318e84c258SEugene Krasnikov 	/* Uplink Packet loss */
27328e84c258SEugene Krasnikov 	u16 uplink_pkt_loss;
27338e84c258SEugene Krasnikov 
27348e84c258SEugene Krasnikov 	/* Uplink Packet count */
27358e84c258SEugene Krasnikov 	u16 uplink_pkt_count;
27368e84c258SEugene Krasnikov 
27378e84c258SEugene Krasnikov 	/* Roaming count */
27388e84c258SEugene Krasnikov 	u8 roaming_count;
27398e84c258SEugene Krasnikov 
27408e84c258SEugene Krasnikov 	/* Roaming Delay */
27418e84c258SEugene Krasnikov 	u16 roaming_delay;
27428e84c258SEugene Krasnikov };
27438e84c258SEugene Krasnikov 
27448e84c258SEugene Krasnikov struct set_key_done_msg {
27458e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
27468e84c258SEugene Krasnikov 
27478e84c258SEugene Krasnikov 	/*bssid of the keys */
27488e84c258SEugene Krasnikov 	u8 bssidx;
27498e84c258SEugene Krasnikov 	u8 enc_type;
27508e84c258SEugene Krasnikov };
27518e84c258SEugene Krasnikov 
27528e84c258SEugene Krasnikov struct wcn36xx_hal_nv_img_download_req_msg {
27538e84c258SEugene Krasnikov 	/* Note: The length specified in wcn36xx_hal_nv_img_download_req_msg
27548e84c258SEugene Krasnikov 	 * messages should be
27558e84c258SEugene Krasnikov 	 * header.len = sizeof(wcn36xx_hal_nv_img_download_req_msg) +
27568e84c258SEugene Krasnikov 	 * nv_img_buffer_size */
27578e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
27588e84c258SEugene Krasnikov 
27598e84c258SEugene Krasnikov 	/* Fragment sequence number of the NV Image. Note that NV Image
27608e84c258SEugene Krasnikov 	 * might not fit into one message due to size limitation of the SMD
27618e84c258SEugene Krasnikov 	 * channel FIFO. UMAC can hence choose to chop the NV blob into
27628e84c258SEugene Krasnikov 	 * multiple fragments starting with seqeunce number 0, 1, 2 etc.
27638e84c258SEugene Krasnikov 	 * The last fragment MUST be indicated by marking the
27648e84c258SEugene Krasnikov 	 * isLastFragment field to 1. Note that all the NV blobs would be
27658e84c258SEugene Krasnikov 	 * concatenated together by HAL without any padding bytes in
27668e84c258SEugene Krasnikov 	 * between.*/
27678e84c258SEugene Krasnikov 	u16 frag_number;
27688e84c258SEugene Krasnikov 
27698e84c258SEugene Krasnikov 	/* Is this the last fragment? When set to 1 it indicates that no
27708e84c258SEugene Krasnikov 	 * more fragments will be sent by UMAC and HAL can concatenate all
27718e84c258SEugene Krasnikov 	 * the NV blobs rcvd & proceed with the parsing. HAL would generate
27728e84c258SEugene Krasnikov 	 * a WCN36XX_HAL_DOWNLOAD_NV_RSP to the WCN36XX_HAL_DOWNLOAD_NV_REQ
27738e84c258SEugene Krasnikov 	 * after it receives each fragment */
27748e84c258SEugene Krasnikov 	u16 last_fragment;
27758e84c258SEugene Krasnikov 
27768e84c258SEugene Krasnikov 	/* NV Image size (number of bytes) */
27778e84c258SEugene Krasnikov 	u32 nv_img_buffer_size;
27788e84c258SEugene Krasnikov 
27798e84c258SEugene Krasnikov 	/* Following the 'nv_img_buffer_size', there should be
27808e84c258SEugene Krasnikov 	 * nv_img_buffer_size bytes of NV Image i.e.
27818e84c258SEugene Krasnikov 	 * u8[nv_img_buffer_size] */
27828e84c258SEugene Krasnikov } __packed;
27838e84c258SEugene Krasnikov 
27848e84c258SEugene Krasnikov struct wcn36xx_hal_nv_img_download_rsp_msg {
27858e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
27868e84c258SEugene Krasnikov 
27878e84c258SEugene Krasnikov 	/* Success or Failure. HAL would generate a
27888e84c258SEugene Krasnikov 	 * WCN36XX_HAL_DOWNLOAD_NV_RSP after each fragment */
27898e84c258SEugene Krasnikov 	u32 status;
27908e84c258SEugene Krasnikov } __packed;
27918e84c258SEugene Krasnikov 
27928e84c258SEugene Krasnikov struct wcn36xx_hal_nv_store_ind {
27938e84c258SEugene Krasnikov 	/* Note: The length specified in tHalNvStoreInd messages should be
27948e84c258SEugene Krasnikov 	 * header.msgLen = sizeof(tHalNvStoreInd) + nvBlobSize */
27958e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
27968e84c258SEugene Krasnikov 
27978e84c258SEugene Krasnikov 	/* NV Item */
27988e84c258SEugene Krasnikov 	u32 table_id;
27998e84c258SEugene Krasnikov 
28008e84c258SEugene Krasnikov 	/* Size of NV Blob */
28018e84c258SEugene Krasnikov 	u32 nv_blob_size;
28028e84c258SEugene Krasnikov 
28038e84c258SEugene Krasnikov 	/* Following the 'nvBlobSize', there should be nvBlobSize bytes of
28048e84c258SEugene Krasnikov 	 * NV blob i.e. u8[nvBlobSize] */
28058e84c258SEugene Krasnikov };
28068e84c258SEugene Krasnikov 
28078e84c258SEugene Krasnikov /* End of Block Ack Related Parameters */
28088e84c258SEugene Krasnikov 
28098e84c258SEugene Krasnikov #define WCN36XX_HAL_CIPHER_SEQ_CTR_SIZE 6
28108e84c258SEugene Krasnikov 
28118e84c258SEugene Krasnikov /* Definition for MIC failure indication MAC reports this each time a MIC
28128e84c258SEugene Krasnikov  * failure occures on Rx TKIP packet
28138e84c258SEugene Krasnikov  */
28148e84c258SEugene Krasnikov struct mic_failure_ind_msg {
28158e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
28168e84c258SEugene Krasnikov 
28178e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
28188e84c258SEugene Krasnikov 
28198e84c258SEugene Krasnikov 	/* address used to compute MIC */
28208e84c258SEugene Krasnikov 	u8 src_addr[ETH_ALEN];
28218e84c258SEugene Krasnikov 
28228e84c258SEugene Krasnikov 	/* transmitter address */
28238e84c258SEugene Krasnikov 	u8 ta_addr[ETH_ALEN];
28248e84c258SEugene Krasnikov 
28258e84c258SEugene Krasnikov 	u8 dst_addr[ETH_ALEN];
28268e84c258SEugene Krasnikov 
28278e84c258SEugene Krasnikov 	u8 multicast;
28288e84c258SEugene Krasnikov 
28298e84c258SEugene Krasnikov 	/* first byte of IV */
28308e84c258SEugene Krasnikov 	u8 iv1;
28318e84c258SEugene Krasnikov 
28328e84c258SEugene Krasnikov 	/* second byte of IV */
28338e84c258SEugene Krasnikov 	u8 key_id;
28348e84c258SEugene Krasnikov 
28358e84c258SEugene Krasnikov 	/* sequence number */
28368e84c258SEugene Krasnikov 	u8 tsc[WCN36XX_HAL_CIPHER_SEQ_CTR_SIZE];
28378e84c258SEugene Krasnikov 
28388e84c258SEugene Krasnikov 	/* receive address */
28398e84c258SEugene Krasnikov 	u8 rx_addr[ETH_ALEN];
28408e84c258SEugene Krasnikov };
28418e84c258SEugene Krasnikov 
28428e84c258SEugene Krasnikov struct update_vht_op_mode_req_msg {
28438e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
28448e84c258SEugene Krasnikov 
28458e84c258SEugene Krasnikov 	u16 op_mode;
28468e84c258SEugene Krasnikov 	u16 sta_id;
28478e84c258SEugene Krasnikov };
28488e84c258SEugene Krasnikov 
28498e84c258SEugene Krasnikov struct update_vht_op_mode_params_rsp_msg {
28508e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
28518e84c258SEugene Krasnikov 
28528e84c258SEugene Krasnikov 	u32 status;
28538e84c258SEugene Krasnikov };
28548e84c258SEugene Krasnikov 
28558e84c258SEugene Krasnikov struct update_beacon_req_msg {
28568e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
28578e84c258SEugene Krasnikov 
28588e84c258SEugene Krasnikov 	u8 bss_index;
28598e84c258SEugene Krasnikov 
28608e84c258SEugene Krasnikov 	/* shortPreamble mode. HAL should update all the STA rates when it
28618e84c258SEugene Krasnikov 	 * receives this message */
28628e84c258SEugene Krasnikov 	u8 short_preamble;
28638e84c258SEugene Krasnikov 
28648e84c258SEugene Krasnikov 	/* short Slot time. */
28658e84c258SEugene Krasnikov 	u8 short_slot_time;
28668e84c258SEugene Krasnikov 
28678e84c258SEugene Krasnikov 	/* Beacon Interval */
28688e84c258SEugene Krasnikov 	u16 beacon_interval;
28698e84c258SEugene Krasnikov 
28708e84c258SEugene Krasnikov 	/* Protection related */
28718e84c258SEugene Krasnikov 	u8 lla_coexist;
28728e84c258SEugene Krasnikov 	u8 llb_coexist;
28738e84c258SEugene Krasnikov 	u8 llg_coexist;
28748e84c258SEugene Krasnikov 	u8 ht20_coexist;
28758e84c258SEugene Krasnikov 	u8 lln_non_gf_coexist;
28768e84c258SEugene Krasnikov 	u8 lsig_tx_op_protection_full_support;
28778e84c258SEugene Krasnikov 	u8 rifs_mode;
28788e84c258SEugene Krasnikov 
28798e84c258SEugene Krasnikov 	u16 param_change_bitmap;
28808e84c258SEugene Krasnikov };
28818e84c258SEugene Krasnikov 
28828e84c258SEugene Krasnikov struct update_beacon_rsp_msg {
28838e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
28848e84c258SEugene Krasnikov 	u32 status;
28858e84c258SEugene Krasnikov };
28868e84c258SEugene Krasnikov 
28878e84c258SEugene Krasnikov struct wcn36xx_hal_send_beacon_req_msg {
28888e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
28898e84c258SEugene Krasnikov 
289025d217d6SPontus Fuchs 	/* length of the template + 6. Only qcom knows why */
289125d217d6SPontus Fuchs 	u32 beacon_length6;
289225d217d6SPontus Fuchs 
28938e84c258SEugene Krasnikov 	/* length of the template. */
28948e84c258SEugene Krasnikov 	u32 beacon_length;
28958e84c258SEugene Krasnikov 
28968e84c258SEugene Krasnikov 	/* Beacon data. */
289725d217d6SPontus Fuchs 	u8 beacon[BEACON_TEMPLATE_SIZE - sizeof(u32)];
28988e84c258SEugene Krasnikov 
28998e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
29008e84c258SEugene Krasnikov 
29018e84c258SEugene Krasnikov 	/* TIM IE offset from the beginning of the template. */
29028e84c258SEugene Krasnikov 	u32 tim_ie_offset;
29038e84c258SEugene Krasnikov 
29048e84c258SEugene Krasnikov 	/* P2P IE offset from the begining of the template */
29058e84c258SEugene Krasnikov 	u16 p2p_ie_offset;
29068e84c258SEugene Krasnikov } __packed;
29078e84c258SEugene Krasnikov 
29088e84c258SEugene Krasnikov struct send_beacon_rsp_msg {
29098e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
29108e84c258SEugene Krasnikov 	u32 status;
29118e84c258SEugene Krasnikov } __packed;
29128e84c258SEugene Krasnikov 
29138e84c258SEugene Krasnikov struct enable_radar_req_msg {
29148e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
29158e84c258SEugene Krasnikov 
29168e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
29178e84c258SEugene Krasnikov 	u8 channel;
29188e84c258SEugene Krasnikov };
29198e84c258SEugene Krasnikov 
29208e84c258SEugene Krasnikov struct enable_radar_rsp_msg {
29218e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
29228e84c258SEugene Krasnikov 
29238e84c258SEugene Krasnikov 	/* Link Parameters */
29248e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
29258e84c258SEugene Krasnikov 
29268e84c258SEugene Krasnikov 	/* success or failure */
29278e84c258SEugene Krasnikov 	u32 status;
29288e84c258SEugene Krasnikov };
29298e84c258SEugene Krasnikov 
29308e84c258SEugene Krasnikov struct radar_detect_intr_ind_msg {
29318e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
29328e84c258SEugene Krasnikov 
29338e84c258SEugene Krasnikov 	u8 radar_det_channel;
29348e84c258SEugene Krasnikov };
29358e84c258SEugene Krasnikov 
29368e84c258SEugene Krasnikov struct radar_detect_ind_msg {
29378e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
29388e84c258SEugene Krasnikov 
29398e84c258SEugene Krasnikov 	/* channel number in which the RADAR detected */
29408e84c258SEugene Krasnikov 	u8 channel_number;
29418e84c258SEugene Krasnikov 
29428e84c258SEugene Krasnikov 	/* RADAR pulse width in usecond */
29438e84c258SEugene Krasnikov 	u16 radar_pulse_width;
29448e84c258SEugene Krasnikov 
29458e84c258SEugene Krasnikov 	/* Number of RADAR pulses */
29468e84c258SEugene Krasnikov 	u16 num_radar_pulse;
29478e84c258SEugene Krasnikov };
29488e84c258SEugene Krasnikov 
29498e84c258SEugene Krasnikov struct wcn36xx_hal_get_tpc_report_req_msg {
29508e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
29518e84c258SEugene Krasnikov 
29528e84c258SEugene Krasnikov 	u8 sta[ETH_ALEN];
29538e84c258SEugene Krasnikov 	u8 dialog_token;
29548e84c258SEugene Krasnikov 	u8 txpower;
29558e84c258SEugene Krasnikov };
29568e84c258SEugene Krasnikov 
29578e84c258SEugene Krasnikov struct wcn36xx_hal_get_tpc_report_rsp_msg {
29588e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
29598e84c258SEugene Krasnikov 
29608e84c258SEugene Krasnikov 	/* success or failure */
29618e84c258SEugene Krasnikov 	u32 status;
29628e84c258SEugene Krasnikov };
29638e84c258SEugene Krasnikov 
29648e84c258SEugene Krasnikov struct wcn36xx_hal_send_probe_resp_req_msg {
29658e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
29668e84c258SEugene Krasnikov 
29678e84c258SEugene Krasnikov 	u8 probe_resp_template[BEACON_TEMPLATE_SIZE];
29688e84c258SEugene Krasnikov 	u32 probe_resp_template_len;
29698e84c258SEugene Krasnikov 	u32 proxy_probe_req_valid_ie_bmap[8];
29708e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
29718e84c258SEugene Krasnikov };
29728e84c258SEugene Krasnikov 
29738e84c258SEugene Krasnikov struct send_probe_resp_rsp_msg {
29748e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
29758e84c258SEugene Krasnikov 
29768e84c258SEugene Krasnikov 	/* success or failure */
29778e84c258SEugene Krasnikov 	u32 status;
29788e84c258SEugene Krasnikov };
29798e84c258SEugene Krasnikov 
29808e84c258SEugene Krasnikov struct send_unknown_frame_rx_ind_msg {
29818e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
29828e84c258SEugene Krasnikov 
29838e84c258SEugene Krasnikov 	/* success or failure */
29848e84c258SEugene Krasnikov 	u32 status;
29858e84c258SEugene Krasnikov };
29868e84c258SEugene Krasnikov 
29878e84c258SEugene Krasnikov struct wcn36xx_hal_delete_sta_context_ind_msg {
29888e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
29898e84c258SEugene Krasnikov 
29908e84c258SEugene Krasnikov 	u16 aid;
29918e84c258SEugene Krasnikov 	u16 sta_id;
29928e84c258SEugene Krasnikov 
29938e84c258SEugene Krasnikov 	/* TO SUPPORT BT-AMP */
29948e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
29958e84c258SEugene Krasnikov 
29968e84c258SEugene Krasnikov 	/* HAL copies bssid from the sta table. */
29978e84c258SEugene Krasnikov 	u8 addr2[ETH_ALEN];
29988e84c258SEugene Krasnikov 
29998e84c258SEugene Krasnikov 	/* To unify the keepalive / unknown A2 / tim-based disa */
30008e84c258SEugene Krasnikov 	u16 reason_code;
30018e84c258SEugene Krasnikov } __packed;
30028e84c258SEugene Krasnikov 
30038e84c258SEugene Krasnikov struct indicate_del_sta {
30048e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
30058e84c258SEugene Krasnikov 	u8 aid;
30068e84c258SEugene Krasnikov 	u8 sta_index;
30078e84c258SEugene Krasnikov 	u8 bss_index;
30088e84c258SEugene Krasnikov 	u8 reason_code;
30098e84c258SEugene Krasnikov 	u32 status;
30108e84c258SEugene Krasnikov };
30118e84c258SEugene Krasnikov 
30128e84c258SEugene Krasnikov struct bt_amp_event_msg {
30138e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
30148e84c258SEugene Krasnikov 
30158e84c258SEugene Krasnikov 	enum bt_amp_event_type btAmpEventType;
30168e84c258SEugene Krasnikov };
30178e84c258SEugene Krasnikov 
30188e84c258SEugene Krasnikov struct bt_amp_event_rsp {
30198e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
30208e84c258SEugene Krasnikov 
30218e84c258SEugene Krasnikov 	/* success or failure */
30228e84c258SEugene Krasnikov 	u32 status;
30238e84c258SEugene Krasnikov };
30248e84c258SEugene Krasnikov 
30258e84c258SEugene Krasnikov struct tl_hal_flush_ac_req_msg {
30268e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
30278e84c258SEugene Krasnikov 
30288e84c258SEugene Krasnikov 	/* Station Index. originates from HAL */
30298e84c258SEugene Krasnikov 	u8 sta_id;
30308e84c258SEugene Krasnikov 
30318e84c258SEugene Krasnikov 	/* TID for which the transmit queue is being flushed */
30328e84c258SEugene Krasnikov 	u8 tid;
30338e84c258SEugene Krasnikov };
30348e84c258SEugene Krasnikov 
30358e84c258SEugene Krasnikov struct tl_hal_flush_ac_rsp_msg {
30368e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
30378e84c258SEugene Krasnikov 
30388e84c258SEugene Krasnikov 	/* Station Index. originates from HAL */
30398e84c258SEugene Krasnikov 	u8 sta_id;
30408e84c258SEugene Krasnikov 
30418e84c258SEugene Krasnikov 	/* TID for which the transmit queue is being flushed */
30428e84c258SEugene Krasnikov 	u8 tid;
30438e84c258SEugene Krasnikov 
30448e84c258SEugene Krasnikov 	/* success or failure */
30458e84c258SEugene Krasnikov 	u32 status;
30468e84c258SEugene Krasnikov };
30478e84c258SEugene Krasnikov 
30488e84c258SEugene Krasnikov struct wcn36xx_hal_enter_imps_req_msg {
30498e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
30508e84c258SEugene Krasnikov };
30518e84c258SEugene Krasnikov 
30528e84c258SEugene Krasnikov struct wcn36xx_hal_exit_imps_req {
30538e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
30548e84c258SEugene Krasnikov };
30558e84c258SEugene Krasnikov 
30568e84c258SEugene Krasnikov struct wcn36xx_hal_enter_bmps_req_msg {
30578e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
30588e84c258SEugene Krasnikov 
30598e84c258SEugene Krasnikov 	u8 bss_index;
30608e84c258SEugene Krasnikov 
30618e84c258SEugene Krasnikov 	/* TBTT value derived from the last beacon */
30628e84c258SEugene Krasnikov #ifndef BUILD_QWPTTSTATIC
30638e84c258SEugene Krasnikov 	u64 tbtt;
30648e84c258SEugene Krasnikov #endif
30658e84c258SEugene Krasnikov 	u8 dtim_count;
30668e84c258SEugene Krasnikov 
30678e84c258SEugene Krasnikov 	/* DTIM period given to HAL during association may not be valid, if
30688e84c258SEugene Krasnikov 	 * association is based on ProbeRsp instead of beacon. */
30698e84c258SEugene Krasnikov 	u8 dtim_period;
30708e84c258SEugene Krasnikov 
30718e84c258SEugene Krasnikov 	/* For CCX and 11R Roaming */
30728e84c258SEugene Krasnikov 	u32 rssi_filter_period;
30738e84c258SEugene Krasnikov 
30748e84c258SEugene Krasnikov 	u32 num_beacon_per_rssi_average;
30758e84c258SEugene Krasnikov 	u8 rssi_filter_enable;
30768e84c258SEugene Krasnikov } __packed;
30778e84c258SEugene Krasnikov 
30788e84c258SEugene Krasnikov struct wcn36xx_hal_exit_bmps_req_msg {
30798e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
30808e84c258SEugene Krasnikov 
30818e84c258SEugene Krasnikov 	u8 send_data_null;
30828e84c258SEugene Krasnikov 	u8 bss_index;
30838e84c258SEugene Krasnikov } __packed;
30848e84c258SEugene Krasnikov 
30858e84c258SEugene Krasnikov struct wcn36xx_hal_missed_beacon_ind_msg {
30868e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
30878e84c258SEugene Krasnikov 
30888e84c258SEugene Krasnikov 	u8 bss_index;
30898e84c258SEugene Krasnikov } __packed;
30908e84c258SEugene Krasnikov 
30918e84c258SEugene Krasnikov /* Beacon Filtering data structures */
30928e84c258SEugene Krasnikov 
30938e84c258SEugene Krasnikov /* The above structure would be followed by multiple of below mentioned
30948e84c258SEugene Krasnikov  * structure
30958e84c258SEugene Krasnikov  */
30968e84c258SEugene Krasnikov struct beacon_filter_ie {
30978e84c258SEugene Krasnikov 	u8 element_id;
30988e84c258SEugene Krasnikov 	u8 check_ie_presence;
30998e84c258SEugene Krasnikov 	u8 offset;
31008e84c258SEugene Krasnikov 	u8 value;
31018e84c258SEugene Krasnikov 	u8 bitmask;
31028e84c258SEugene Krasnikov 	u8 ref;
31038e84c258SEugene Krasnikov };
31048e84c258SEugene Krasnikov 
31058e84c258SEugene Krasnikov struct wcn36xx_hal_add_bcn_filter_req_msg {
31068e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
31078e84c258SEugene Krasnikov 
31088e84c258SEugene Krasnikov 	u16 capability_info;
31098e84c258SEugene Krasnikov 	u16 capability_mask;
31108e84c258SEugene Krasnikov 	u16 beacon_interval;
31118e84c258SEugene Krasnikov 	u16 ie_num;
31128e84c258SEugene Krasnikov 	u8 bss_index;
31138e84c258SEugene Krasnikov 	u8 reserved;
31148e84c258SEugene Krasnikov };
31158e84c258SEugene Krasnikov 
31168e84c258SEugene Krasnikov struct wcn36xx_hal_rem_bcn_filter_req {
31178e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
31188e84c258SEugene Krasnikov 
31198e84c258SEugene Krasnikov 	u8 ie_Count;
31208e84c258SEugene Krasnikov 	u8 rem_ie_id[1];
31218e84c258SEugene Krasnikov };
31228e84c258SEugene Krasnikov 
31238e84c258SEugene Krasnikov #define WCN36XX_HAL_IPV4_ARP_REPLY_OFFLOAD                  0
31248e84c258SEugene Krasnikov #define WCN36XX_HAL_IPV6_NEIGHBOR_DISCOVERY_OFFLOAD         1
31258e84c258SEugene Krasnikov #define WCN36XX_HAL_IPV6_NS_OFFLOAD                         2
31268e84c258SEugene Krasnikov #define WCN36XX_HAL_IPV6_ADDR_LEN                           16
31278e84c258SEugene Krasnikov #define WCN36XX_HAL_OFFLOAD_DISABLE                         0
31288e84c258SEugene Krasnikov #define WCN36XX_HAL_OFFLOAD_ENABLE                          1
31298e84c258SEugene Krasnikov #define WCN36XX_HAL_OFFLOAD_BCAST_FILTER_ENABLE             0x2
31308e84c258SEugene Krasnikov #define WCN36XX_HAL_OFFLOAD_ARP_AND_BCAST_FILTER_ENABLE	\
31318e84c258SEugene Krasnikov 	(HAL_OFFLOAD_ENABLE|HAL_OFFLOAD_BCAST_FILTER_ENABLE)
31328e84c258SEugene Krasnikov 
31338e84c258SEugene Krasnikov struct wcn36xx_hal_ns_offload_params {
31348e84c258SEugene Krasnikov 	u8 src_ipv6_addr[WCN36XX_HAL_IPV6_ADDR_LEN];
31358e84c258SEugene Krasnikov 	u8 self_ipv6_addr[WCN36XX_HAL_IPV6_ADDR_LEN];
31368e84c258SEugene Krasnikov 
31378e84c258SEugene Krasnikov 	/* Only support 2 possible Network Advertisement IPv6 address */
31388e84c258SEugene Krasnikov 	u8 target_ipv6_addr1[WCN36XX_HAL_IPV6_ADDR_LEN];
31398e84c258SEugene Krasnikov 	u8 target_ipv6_addr2[WCN36XX_HAL_IPV6_ADDR_LEN];
31408e84c258SEugene Krasnikov 
31418e84c258SEugene Krasnikov 	u8 self_addr[ETH_ALEN];
31428e84c258SEugene Krasnikov 	u8 src_ipv6_addr_valid:1;
31438e84c258SEugene Krasnikov 	u8 target_ipv6_addr1_valid:1;
31448e84c258SEugene Krasnikov 	u8 target_ipv6_addr2_valid:1;
31458e84c258SEugene Krasnikov 	u8 reserved1:5;
31468e84c258SEugene Krasnikov 
31478e84c258SEugene Krasnikov 	/* make it DWORD aligned */
31488e84c258SEugene Krasnikov 	u8 reserved2;
31498e84c258SEugene Krasnikov 
31508e84c258SEugene Krasnikov 	/* slot index for this offload */
31518e84c258SEugene Krasnikov 	u32 slot_index;
31528e84c258SEugene Krasnikov 	u8 bss_index;
31538e84c258SEugene Krasnikov };
31548e84c258SEugene Krasnikov 
31558e84c258SEugene Krasnikov struct wcn36xx_hal_host_offload_req {
31568e84c258SEugene Krasnikov 	u8 offload_Type;
31578e84c258SEugene Krasnikov 
31588e84c258SEugene Krasnikov 	/* enable or disable */
31598e84c258SEugene Krasnikov 	u8 enable;
31608e84c258SEugene Krasnikov 
31618e84c258SEugene Krasnikov 	union {
31628e84c258SEugene Krasnikov 		u8 host_ipv4_addr[4];
31638e84c258SEugene Krasnikov 		u8 host_ipv6_addr[WCN36XX_HAL_IPV6_ADDR_LEN];
31648e84c258SEugene Krasnikov 	} u;
31658e84c258SEugene Krasnikov };
31668e84c258SEugene Krasnikov 
31678e84c258SEugene Krasnikov struct wcn36xx_hal_host_offload_req_msg {
31688e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
31698e84c258SEugene Krasnikov 	struct wcn36xx_hal_host_offload_req host_offload_params;
31708e84c258SEugene Krasnikov 	struct wcn36xx_hal_ns_offload_params ns_offload_params;
31718e84c258SEugene Krasnikov };
31728e84c258SEugene Krasnikov 
31738e84c258SEugene Krasnikov /* Packet Types. */
31748e84c258SEugene Krasnikov #define WCN36XX_HAL_KEEP_ALIVE_NULL_PKT              1
31758e84c258SEugene Krasnikov #define WCN36XX_HAL_KEEP_ALIVE_UNSOLICIT_ARP_RSP     2
31768e84c258SEugene Krasnikov 
31778e84c258SEugene Krasnikov /* Enable or disable keep alive */
31788e84c258SEugene Krasnikov #define WCN36XX_HAL_KEEP_ALIVE_DISABLE   0
31798e84c258SEugene Krasnikov #define WCN36XX_HAL_KEEP_ALIVE_ENABLE    1
31808e84c258SEugene Krasnikov #define WCN36XX_KEEP_ALIVE_TIME_PERIOD	 30 /* unit: s */
31818e84c258SEugene Krasnikov 
31828e84c258SEugene Krasnikov /* Keep Alive request. */
31838e84c258SEugene Krasnikov struct wcn36xx_hal_keep_alive_req_msg {
31848e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
31858e84c258SEugene Krasnikov 
31868e84c258SEugene Krasnikov 	u8 packet_type;
31878e84c258SEugene Krasnikov 	u32 time_period;
31888e84c258SEugene Krasnikov 	u8 host_ipv4_addr[WCN36XX_HAL_IPV4_ADDR_LEN];
31898e84c258SEugene Krasnikov 	u8 dest_ipv4_addr[WCN36XX_HAL_IPV4_ADDR_LEN];
31908e84c258SEugene Krasnikov 	u8 dest_addr[ETH_ALEN];
31918e84c258SEugene Krasnikov 	u8 bss_index;
31928e84c258SEugene Krasnikov } __packed;
31938e84c258SEugene Krasnikov 
31948e84c258SEugene Krasnikov struct wcn36xx_hal_rssi_threshold_req_msg {
31958e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
31968e84c258SEugene Krasnikov 
31978e84c258SEugene Krasnikov 	s8 threshold1:8;
31988e84c258SEugene Krasnikov 	s8 threshold2:8;
31998e84c258SEugene Krasnikov 	s8 threshold3:8;
32008e84c258SEugene Krasnikov 	u8 thres1_pos_notify:1;
32018e84c258SEugene Krasnikov 	u8 thres1_neg_notify:1;
32028e84c258SEugene Krasnikov 	u8 thres2_pos_notify:1;
32038e84c258SEugene Krasnikov 	u8 thres2_neg_notify:1;
32048e84c258SEugene Krasnikov 	u8 thres3_pos_notify:1;
32058e84c258SEugene Krasnikov 	u8 thres3_neg_notify:1;
32068e84c258SEugene Krasnikov 	u8 reserved10:2;
32078e84c258SEugene Krasnikov };
32088e84c258SEugene Krasnikov 
32098e84c258SEugene Krasnikov struct wcn36xx_hal_enter_uapsd_req_msg {
32108e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
32118e84c258SEugene Krasnikov 
32128e84c258SEugene Krasnikov 	u8 bk_delivery:1;
32138e84c258SEugene Krasnikov 	u8 be_delivery:1;
32148e84c258SEugene Krasnikov 	u8 vi_delivery:1;
32158e84c258SEugene Krasnikov 	u8 vo_delivery:1;
32168e84c258SEugene Krasnikov 	u8 bk_trigger:1;
32178e84c258SEugene Krasnikov 	u8 be_trigger:1;
32188e84c258SEugene Krasnikov 	u8 vi_trigger:1;
32198e84c258SEugene Krasnikov 	u8 vo_trigger:1;
32208e84c258SEugene Krasnikov 	u8 bss_index;
32218e84c258SEugene Krasnikov };
32228e84c258SEugene Krasnikov 
32238e84c258SEugene Krasnikov struct wcn36xx_hal_exit_uapsd_req_msg {
32248e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
32258e84c258SEugene Krasnikov 	u8 bss_index;
32268e84c258SEugene Krasnikov };
32278e84c258SEugene Krasnikov 
32288e84c258SEugene Krasnikov #define WCN36XX_HAL_WOWL_BCAST_PATTERN_MAX_SIZE 128
32298e84c258SEugene Krasnikov #define WCN36XX_HAL_WOWL_BCAST_MAX_NUM_PATTERNS 16
32308e84c258SEugene Krasnikov 
32318e84c258SEugene Krasnikov struct wcn36xx_hal_wowl_add_bcast_ptrn_req_msg {
32328e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
32338e84c258SEugene Krasnikov 
32348e84c258SEugene Krasnikov 	/* Pattern ID */
32358e84c258SEugene Krasnikov 	u8 id;
32368e84c258SEugene Krasnikov 
32378e84c258SEugene Krasnikov 	/* Pattern byte offset from beginning of the 802.11 packet to start
32388e84c258SEugene Krasnikov 	 * of the wake-up pattern */
32398e84c258SEugene Krasnikov 	u8 byte_Offset;
32408e84c258SEugene Krasnikov 
32418e84c258SEugene Krasnikov 	/* Non-Zero Pattern size */
32428e84c258SEugene Krasnikov 	u8 size;
32438e84c258SEugene Krasnikov 
32448e84c258SEugene Krasnikov 	/* Pattern */
32458e84c258SEugene Krasnikov 	u8 pattern[WCN36XX_HAL_WOWL_BCAST_PATTERN_MAX_SIZE];
32468e84c258SEugene Krasnikov 
32478e84c258SEugene Krasnikov 	/* Non-zero pattern mask size */
32488e84c258SEugene Krasnikov 	u8 mask_size;
32498e84c258SEugene Krasnikov 
32508e84c258SEugene Krasnikov 	/* Pattern mask */
32518e84c258SEugene Krasnikov 	u8 mask[WCN36XX_HAL_WOWL_BCAST_PATTERN_MAX_SIZE];
32528e84c258SEugene Krasnikov 
32538e84c258SEugene Krasnikov 	/* Extra pattern */
32548e84c258SEugene Krasnikov 	u8 extra[WCN36XX_HAL_WOWL_BCAST_PATTERN_MAX_SIZE];
32558e84c258SEugene Krasnikov 
32568e84c258SEugene Krasnikov 	/* Extra pattern mask */
32578e84c258SEugene Krasnikov 	u8 mask_extra[WCN36XX_HAL_WOWL_BCAST_PATTERN_MAX_SIZE];
32588e84c258SEugene Krasnikov 
32598e84c258SEugene Krasnikov 	u8 bss_index;
32608e84c258SEugene Krasnikov };
32618e84c258SEugene Krasnikov 
32628e84c258SEugene Krasnikov struct wcn36xx_hal_wow_del_bcast_ptrn_req_msg {
32638e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
32648e84c258SEugene Krasnikov 
32658e84c258SEugene Krasnikov 	/* Pattern ID of the wakeup pattern to be deleted */
32668e84c258SEugene Krasnikov 	u8 id;
32678e84c258SEugene Krasnikov 	u8 bss_index;
32688e84c258SEugene Krasnikov };
32698e84c258SEugene Krasnikov 
32708e84c258SEugene Krasnikov struct wcn36xx_hal_wowl_enter_req_msg {
32718e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
32728e84c258SEugene Krasnikov 
32738e84c258SEugene Krasnikov 	/* Enables/disables magic packet filtering */
32748e84c258SEugene Krasnikov 	u8 magic_packet_enable;
32758e84c258SEugene Krasnikov 
32768e84c258SEugene Krasnikov 	/* Magic pattern */
32778e84c258SEugene Krasnikov 	u8 magic_pattern[ETH_ALEN];
32788e84c258SEugene Krasnikov 
32798e84c258SEugene Krasnikov 	/* Enables/disables packet pattern filtering in firmware. Enabling
32808e84c258SEugene Krasnikov 	 * this flag enables broadcast pattern matching in Firmware. If
32818e84c258SEugene Krasnikov 	 * unicast pattern matching is also desired,
32828e84c258SEugene Krasnikov 	 * ucUcastPatternFilteringEnable flag must be set tot true as well
32838e84c258SEugene Krasnikov 	 */
32848e84c258SEugene Krasnikov 	u8 pattern_filtering_enable;
32858e84c258SEugene Krasnikov 
32868e84c258SEugene Krasnikov 	/* Enables/disables unicast packet pattern filtering. This flag
32878e84c258SEugene Krasnikov 	 * specifies whether we want to do pattern match on unicast packets
32888e84c258SEugene Krasnikov 	 * as well and not just broadcast packets. This flag has no effect
32898e84c258SEugene Krasnikov 	 * if the ucPatternFilteringEnable (main controlling flag) is set
32908e84c258SEugene Krasnikov 	 * to false
32918e84c258SEugene Krasnikov 	 */
32928e84c258SEugene Krasnikov 	u8 ucast_pattern_filtering_enable;
32938e84c258SEugene Krasnikov 
32948e84c258SEugene Krasnikov 	/* This configuration is valid only when magicPktEnable=1. It
32958e84c258SEugene Krasnikov 	 * requests hardware to wake up when it receives the Channel Switch
32968e84c258SEugene Krasnikov 	 * Action Frame.
32978e84c258SEugene Krasnikov 	 */
32988e84c258SEugene Krasnikov 	u8 wow_channel_switch_receive;
32998e84c258SEugene Krasnikov 
33008e84c258SEugene Krasnikov 	/* This configuration is valid only when magicPktEnable=1. It
33018e84c258SEugene Krasnikov 	 * requests hardware to wake up when it receives the
33028e84c258SEugene Krasnikov 	 * Deauthentication Frame.
33038e84c258SEugene Krasnikov 	 */
33048e84c258SEugene Krasnikov 	u8 wow_deauth_receive;
33058e84c258SEugene Krasnikov 
33068e84c258SEugene Krasnikov 	/* This configuration is valid only when magicPktEnable=1. It
33078e84c258SEugene Krasnikov 	 * requests hardware to wake up when it receives the Disassociation
33088e84c258SEugene Krasnikov 	 * Frame.
33098e84c258SEugene Krasnikov 	 */
33108e84c258SEugene Krasnikov 	u8 wow_disassoc_receive;
33118e84c258SEugene Krasnikov 
33128e84c258SEugene Krasnikov 	/* This configuration is valid only when magicPktEnable=1. It
33138e84c258SEugene Krasnikov 	 * requests hardware to wake up when it has missed consecutive
33148e84c258SEugene Krasnikov 	 * beacons. This is a hardware register configuration (NOT a
33158e84c258SEugene Krasnikov 	 * firmware configuration).
33168e84c258SEugene Krasnikov 	 */
33178e84c258SEugene Krasnikov 	u8 wow_max_missed_beacons;
33188e84c258SEugene Krasnikov 
33198e84c258SEugene Krasnikov 	/* This configuration is valid only when magicPktEnable=1. This is
33208e84c258SEugene Krasnikov 	 * a timeout value in units of microsec. It requests hardware to
33218e84c258SEugene Krasnikov 	 * unconditionally wake up after it has stayed in WoWLAN mode for
33228e84c258SEugene Krasnikov 	 * some time. Set 0 to disable this feature.
33238e84c258SEugene Krasnikov 	 */
33248e84c258SEugene Krasnikov 	u8 wow_max_sleep;
33258e84c258SEugene Krasnikov 
33268e84c258SEugene Krasnikov 	/* This configuration directs the WoW packet filtering to look for
33278e84c258SEugene Krasnikov 	 * EAP-ID requests embedded in EAPOL frames and use this as a wake
33288e84c258SEugene Krasnikov 	 * source.
33298e84c258SEugene Krasnikov 	 */
33308e84c258SEugene Krasnikov 	u8 wow_eap_id_request_enable;
33318e84c258SEugene Krasnikov 
33328e84c258SEugene Krasnikov 	/* This configuration directs the WoW packet filtering to look for
33338e84c258SEugene Krasnikov 	 * EAPOL-4WAY requests and use this as a wake source.
33348e84c258SEugene Krasnikov 	 */
33358e84c258SEugene Krasnikov 	u8 wow_eapol_4way_enable;
33368e84c258SEugene Krasnikov 
33378e84c258SEugene Krasnikov 	/* This configuration allows a host wakeup on an network scan
33388e84c258SEugene Krasnikov 	 * offload match.
33398e84c258SEugene Krasnikov 	 */
33408e84c258SEugene Krasnikov 	u8 wow_net_scan_offload_match;
33418e84c258SEugene Krasnikov 
33428e84c258SEugene Krasnikov 	/* This configuration allows a host wakeup on any GTK rekeying
33438e84c258SEugene Krasnikov 	 * error.
33448e84c258SEugene Krasnikov 	 */
33458e84c258SEugene Krasnikov 	u8 wow_gtk_rekey_error;
33468e84c258SEugene Krasnikov 
33478e84c258SEugene Krasnikov 	/* This configuration allows a host wakeup on BSS connection loss.
33488e84c258SEugene Krasnikov 	 */
33498e84c258SEugene Krasnikov 	u8 wow_bss_connection_loss;
33508e84c258SEugene Krasnikov 
33518e84c258SEugene Krasnikov 	u8 bss_index;
33528e84c258SEugene Krasnikov };
33538e84c258SEugene Krasnikov 
33548e84c258SEugene Krasnikov struct wcn36xx_hal_wowl_exit_req_msg {
33558e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
33568e84c258SEugene Krasnikov 
33578e84c258SEugene Krasnikov 	u8 bss_index;
33588e84c258SEugene Krasnikov };
33598e84c258SEugene Krasnikov 
33608e84c258SEugene Krasnikov struct wcn36xx_hal_get_rssi_req_msg {
33618e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
33628e84c258SEugene Krasnikov };
33638e84c258SEugene Krasnikov 
33648e84c258SEugene Krasnikov struct wcn36xx_hal_get_roam_rssi_req_msg {
33658e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
33668e84c258SEugene Krasnikov 
33678e84c258SEugene Krasnikov 	/* Valid STA Idx for per STA stats request */
33688e84c258SEugene Krasnikov 	u32 sta_id;
33698e84c258SEugene Krasnikov };
33708e84c258SEugene Krasnikov 
33718e84c258SEugene Krasnikov struct wcn36xx_hal_set_uapsd_ac_params_req_msg {
33728e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
33738e84c258SEugene Krasnikov 
33748e84c258SEugene Krasnikov 	/* STA index */
33758e84c258SEugene Krasnikov 	u8 sta_idx;
33768e84c258SEugene Krasnikov 
33778e84c258SEugene Krasnikov 	/* Access Category */
33788e84c258SEugene Krasnikov 	u8 ac;
33798e84c258SEugene Krasnikov 
33808e84c258SEugene Krasnikov 	/* User Priority */
33818e84c258SEugene Krasnikov 	u8 up;
33828e84c258SEugene Krasnikov 
33838e84c258SEugene Krasnikov 	/* Service Interval */
33848e84c258SEugene Krasnikov 	u32 service_interval;
33858e84c258SEugene Krasnikov 
33868e84c258SEugene Krasnikov 	/* Suspend Interval */
33878e84c258SEugene Krasnikov 	u32 suspend_interval;
33888e84c258SEugene Krasnikov 
33898e84c258SEugene Krasnikov 	/* Delay Interval */
33908e84c258SEugene Krasnikov 	u32 delay_interval;
33918e84c258SEugene Krasnikov };
33928e84c258SEugene Krasnikov 
33938e84c258SEugene Krasnikov struct wcn36xx_hal_configure_rxp_filter_req_msg {
33948e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
33958e84c258SEugene Krasnikov 
33968e84c258SEugene Krasnikov 	u8 set_mcst_bcst_filter_setting;
33978e84c258SEugene Krasnikov 	u8 set_mcst_bcst_filter;
33988e84c258SEugene Krasnikov };
33998e84c258SEugene Krasnikov 
34008e84c258SEugene Krasnikov struct wcn36xx_hal_enter_imps_rsp_msg {
34018e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
34028e84c258SEugene Krasnikov 
34038e84c258SEugene Krasnikov 	/* success or failure */
34048e84c258SEugene Krasnikov 	u32 status;
34058e84c258SEugene Krasnikov };
34068e84c258SEugene Krasnikov 
34078e84c258SEugene Krasnikov struct wcn36xx_hal_exit_imps_rsp_msg {
34088e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
34098e84c258SEugene Krasnikov 
34108e84c258SEugene Krasnikov 	/* success or failure */
34118e84c258SEugene Krasnikov 	u32 status;
34128e84c258SEugene Krasnikov };
34138e84c258SEugene Krasnikov 
34148e84c258SEugene Krasnikov struct wcn36xx_hal_enter_bmps_rsp_msg {
34158e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
34168e84c258SEugene Krasnikov 
34178e84c258SEugene Krasnikov 	/* success or failure */
34188e84c258SEugene Krasnikov 	u32 status;
34198e84c258SEugene Krasnikov 
34208e84c258SEugene Krasnikov 	u8 bss_index;
34218e84c258SEugene Krasnikov } __packed;
34228e84c258SEugene Krasnikov 
34238e84c258SEugene Krasnikov struct wcn36xx_hal_exit_bmps_rsp_msg {
34248e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
34258e84c258SEugene Krasnikov 
34268e84c258SEugene Krasnikov 	/* success or failure */
34278e84c258SEugene Krasnikov 	u32 status;
34288e84c258SEugene Krasnikov 
34298e84c258SEugene Krasnikov 	u8 bss_index;
34308e84c258SEugene Krasnikov } __packed;
34318e84c258SEugene Krasnikov 
34328e84c258SEugene Krasnikov struct wcn36xx_hal_enter_uapsd_rsp_msg {
34338e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
34348e84c258SEugene Krasnikov 
34358e84c258SEugene Krasnikov 	/* success or failure */
34368e84c258SEugene Krasnikov 	u32 status;
34378e84c258SEugene Krasnikov 
34388e84c258SEugene Krasnikov 	u8 bss_index;
34398e84c258SEugene Krasnikov };
34408e84c258SEugene Krasnikov 
34418e84c258SEugene Krasnikov struct wcn36xx_hal_exit_uapsd_rsp_msg {
34428e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
34438e84c258SEugene Krasnikov 
34448e84c258SEugene Krasnikov 	/* success or failure */
34458e84c258SEugene Krasnikov 	u32 status;
34468e84c258SEugene Krasnikov 
34478e84c258SEugene Krasnikov 	u8 bss_index;
34488e84c258SEugene Krasnikov };
34498e84c258SEugene Krasnikov 
34508e84c258SEugene Krasnikov struct wcn36xx_hal_rssi_notification_ind_msg {
34518e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
34528e84c258SEugene Krasnikov 
34538e84c258SEugene Krasnikov 	u32 rssi_thres1_pos_cross:1;
34548e84c258SEugene Krasnikov 	u32 rssi_thres1_neg_cross:1;
34558e84c258SEugene Krasnikov 	u32 rssi_thres2_pos_cross:1;
34568e84c258SEugene Krasnikov 	u32 rssi_thres2_neg_cross:1;
34578e84c258SEugene Krasnikov 	u32 rssi_thres3_pos_cross:1;
34588e84c258SEugene Krasnikov 	u32 rssi_thres3_neg_cross:1;
34598e84c258SEugene Krasnikov 	u32 avg_rssi:8;
34608e84c258SEugene Krasnikov 	u32 reserved:18;
34618e84c258SEugene Krasnikov 
34628e84c258SEugene Krasnikov };
34638e84c258SEugene Krasnikov 
34648e84c258SEugene Krasnikov struct wcn36xx_hal_get_rssio_rsp_msg {
34658e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
34668e84c258SEugene Krasnikov 
34678e84c258SEugene Krasnikov 	/* success or failure */
34688e84c258SEugene Krasnikov 	u32 status;
34698e84c258SEugene Krasnikov 	s8 rssi;
34708e84c258SEugene Krasnikov 
34718e84c258SEugene Krasnikov };
34728e84c258SEugene Krasnikov 
34738e84c258SEugene Krasnikov struct wcn36xx_hal_get_roam_rssi_rsp_msg {
34748e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
34758e84c258SEugene Krasnikov 
34768e84c258SEugene Krasnikov 	/* success or failure */
34778e84c258SEugene Krasnikov 	u32 status;
34788e84c258SEugene Krasnikov 
34798e84c258SEugene Krasnikov 	u8 sta_id;
34808e84c258SEugene Krasnikov 	s8 rssi;
34818e84c258SEugene Krasnikov };
34828e84c258SEugene Krasnikov 
34838e84c258SEugene Krasnikov struct wcn36xx_hal_wowl_enter_rsp_msg {
34848e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
34858e84c258SEugene Krasnikov 
34868e84c258SEugene Krasnikov 	/* success or failure */
34878e84c258SEugene Krasnikov 	u32 status;
34888e84c258SEugene Krasnikov 	u8 bss_index;
34898e84c258SEugene Krasnikov };
34908e84c258SEugene Krasnikov 
34918e84c258SEugene Krasnikov struct wcn36xx_hal_wowl_exit_rsp_msg {
34928e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
34938e84c258SEugene Krasnikov 
34948e84c258SEugene Krasnikov 	/* success or failure */
34958e84c258SEugene Krasnikov 	u32 status;
34968e84c258SEugene Krasnikov 	u8 bss_index;
34978e84c258SEugene Krasnikov };
34988e84c258SEugene Krasnikov 
34998e84c258SEugene Krasnikov struct wcn36xx_hal_add_bcn_filter_rsp_msg {
35008e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
35018e84c258SEugene Krasnikov 
35028e84c258SEugene Krasnikov 	/* success or failure */
35038e84c258SEugene Krasnikov 	u32 status;
35048e84c258SEugene Krasnikov };
35058e84c258SEugene Krasnikov 
35068e84c258SEugene Krasnikov struct wcn36xx_hal_rem_bcn_filter_rsp_msg {
35078e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
35088e84c258SEugene Krasnikov 
35098e84c258SEugene Krasnikov 	/* success or failure */
35108e84c258SEugene Krasnikov 	u32 status;
35118e84c258SEugene Krasnikov };
35128e84c258SEugene Krasnikov 
35138e84c258SEugene Krasnikov struct wcn36xx_hal_add_wowl_bcast_ptrn_rsp_msg {
35148e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
35158e84c258SEugene Krasnikov 
35168e84c258SEugene Krasnikov 	/* success or failure */
35178e84c258SEugene Krasnikov 	u32 status;
35188e84c258SEugene Krasnikov 	u8 bss_index;
35198e84c258SEugene Krasnikov };
35208e84c258SEugene Krasnikov 
35218e84c258SEugene Krasnikov struct wcn36xx_hal_del_wowl_bcast_ptrn_rsp_msg {
35228e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
35238e84c258SEugene Krasnikov 
35248e84c258SEugene Krasnikov 	/* success or failure */
35258e84c258SEugene Krasnikov 	u32 status;
35268e84c258SEugene Krasnikov 	u8 bss_index;
35278e84c258SEugene Krasnikov };
35288e84c258SEugene Krasnikov 
35298e84c258SEugene Krasnikov struct wcn36xx_hal_host_offload_rsp_msg {
35308e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
35318e84c258SEugene Krasnikov 
35328e84c258SEugene Krasnikov 	/* success or failure */
35338e84c258SEugene Krasnikov 	u32 status;
35348e84c258SEugene Krasnikov };
35358e84c258SEugene Krasnikov 
35368e84c258SEugene Krasnikov struct wcn36xx_hal_keep_alive_rsp_msg {
35378e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
35388e84c258SEugene Krasnikov 
35398e84c258SEugene Krasnikov 	/* success or failure */
35408e84c258SEugene Krasnikov 	u32 status;
35418e84c258SEugene Krasnikov };
35428e84c258SEugene Krasnikov 
35438e84c258SEugene Krasnikov struct wcn36xx_hal_set_rssi_thresh_rsp_msg {
35448e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
35458e84c258SEugene Krasnikov 
35468e84c258SEugene Krasnikov 	/* success or failure */
35478e84c258SEugene Krasnikov 	u32 status;
35488e84c258SEugene Krasnikov };
35498e84c258SEugene Krasnikov 
35508e84c258SEugene Krasnikov struct wcn36xx_hal_set_uapsd_ac_params_rsp_msg {
35518e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
35528e84c258SEugene Krasnikov 
35538e84c258SEugene Krasnikov 	/* success or failure */
35548e84c258SEugene Krasnikov 	u32 status;
35558e84c258SEugene Krasnikov };
35568e84c258SEugene Krasnikov 
35578e84c258SEugene Krasnikov struct wcn36xx_hal_configure_rxp_filter_rsp_msg {
35588e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
35598e84c258SEugene Krasnikov 
35608e84c258SEugene Krasnikov 	/* success or failure */
35618e84c258SEugene Krasnikov 	u32 status;
35628e84c258SEugene Krasnikov };
35638e84c258SEugene Krasnikov 
35648e84c258SEugene Krasnikov struct set_max_tx_pwr_req {
35658e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
35668e84c258SEugene Krasnikov 
35678e84c258SEugene Krasnikov 	/* BSSID is needed to identify which session issued this request.
35688e84c258SEugene Krasnikov 	 * As the request has power constraints, this should be applied
35698e84c258SEugene Krasnikov 	 * only to that session */
35708e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
35718e84c258SEugene Krasnikov 
35728e84c258SEugene Krasnikov 	u8 self_addr[ETH_ALEN];
35738e84c258SEugene Krasnikov 
35748e84c258SEugene Krasnikov 	/* In request, power == MaxTx power to be used. */
35758e84c258SEugene Krasnikov 	u8 power;
35768e84c258SEugene Krasnikov };
35778e84c258SEugene Krasnikov 
35788e84c258SEugene Krasnikov struct set_max_tx_pwr_rsp_msg {
35798e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
35808e84c258SEugene Krasnikov 
35818e84c258SEugene Krasnikov 	/* power == tx power used for management frames */
35828e84c258SEugene Krasnikov 	u8 power;
35838e84c258SEugene Krasnikov 
35848e84c258SEugene Krasnikov 	/* success or failure */
35858e84c258SEugene Krasnikov 	u32 status;
35868e84c258SEugene Krasnikov };
35878e84c258SEugene Krasnikov 
35888e84c258SEugene Krasnikov struct set_tx_pwr_req_msg {
35898e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
35908e84c258SEugene Krasnikov 
35918e84c258SEugene Krasnikov 	/* TX Power in milli watts */
35928e84c258SEugene Krasnikov 	u32 tx_power;
35938e84c258SEugene Krasnikov 
35948e84c258SEugene Krasnikov 	u8 bss_index;
35958e84c258SEugene Krasnikov };
35968e84c258SEugene Krasnikov 
35978e84c258SEugene Krasnikov struct set_tx_pwr_rsp_msg {
35988e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
35998e84c258SEugene Krasnikov 
36008e84c258SEugene Krasnikov 	/* success or failure */
36018e84c258SEugene Krasnikov 	u32 status;
36028e84c258SEugene Krasnikov };
36038e84c258SEugene Krasnikov 
36048e84c258SEugene Krasnikov struct get_tx_pwr_req_msg {
36058e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
36068e84c258SEugene Krasnikov 
36078e84c258SEugene Krasnikov 	u8 sta_id;
36088e84c258SEugene Krasnikov };
36098e84c258SEugene Krasnikov 
36108e84c258SEugene Krasnikov struct get_tx_pwr_rsp_msg {
36118e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
36128e84c258SEugene Krasnikov 
36138e84c258SEugene Krasnikov 	/* success or failure */
36148e84c258SEugene Krasnikov 	u32 status;
36158e84c258SEugene Krasnikov 
36168e84c258SEugene Krasnikov 	/* TX Power in milli watts */
36178e84c258SEugene Krasnikov 	u32 tx_power;
36188e84c258SEugene Krasnikov };
36198e84c258SEugene Krasnikov 
36208e84c258SEugene Krasnikov struct set_p2p_gonoa_req_msg {
36218e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
36228e84c258SEugene Krasnikov 
36238e84c258SEugene Krasnikov 	u8 opp_ps;
36248e84c258SEugene Krasnikov 	u32 ct_window;
36258e84c258SEugene Krasnikov 	u8 count;
36268e84c258SEugene Krasnikov 	u32 duration;
36278e84c258SEugene Krasnikov 	u32 interval;
36288e84c258SEugene Krasnikov 	u32 single_noa_duration;
36298e84c258SEugene Krasnikov 	u8 ps_selection;
36308e84c258SEugene Krasnikov };
36318e84c258SEugene Krasnikov 
36328e84c258SEugene Krasnikov struct set_p2p_gonoa_rsp_msg {
36338e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
36348e84c258SEugene Krasnikov 
36358e84c258SEugene Krasnikov 	/* success or failure */
36368e84c258SEugene Krasnikov 	u32 status;
36378e84c258SEugene Krasnikov };
36388e84c258SEugene Krasnikov 
36398e84c258SEugene Krasnikov struct wcn36xx_hal_add_sta_self_req {
36408e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
36418e84c258SEugene Krasnikov 
36428e84c258SEugene Krasnikov 	u8 self_addr[ETH_ALEN];
36438e84c258SEugene Krasnikov 	u32 status;
36448e84c258SEugene Krasnikov } __packed;
36458e84c258SEugene Krasnikov 
36468e84c258SEugene Krasnikov struct wcn36xx_hal_add_sta_self_rsp_msg {
36478e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
36488e84c258SEugene Krasnikov 
36498e84c258SEugene Krasnikov 	/* success or failure */
36508e84c258SEugene Krasnikov 	u32 status;
36518e84c258SEugene Krasnikov 
36528e84c258SEugene Krasnikov 	/* Self STA Index */
36538e84c258SEugene Krasnikov 	u8 self_sta_index;
36548e84c258SEugene Krasnikov 
36558e84c258SEugene Krasnikov 	/* DPU Index (IGTK, PTK, GTK all same) */
36568e84c258SEugene Krasnikov 	u8 dpu_index;
36578e84c258SEugene Krasnikov 
36588e84c258SEugene Krasnikov 	/* DPU Signature */
36598e84c258SEugene Krasnikov 	u8 dpu_signature;
36608e84c258SEugene Krasnikov } __packed;
36618e84c258SEugene Krasnikov 
36628e84c258SEugene Krasnikov struct wcn36xx_hal_del_sta_self_req_msg {
36638e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
36648e84c258SEugene Krasnikov 
36658e84c258SEugene Krasnikov 	u8 self_addr[ETH_ALEN];
36668e84c258SEugene Krasnikov } __packed;
36678e84c258SEugene Krasnikov 
36688e84c258SEugene Krasnikov struct wcn36xx_hal_del_sta_self_rsp_msg {
36698e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
36708e84c258SEugene Krasnikov 
36718e84c258SEugene Krasnikov 	/*success or failure */
36728e84c258SEugene Krasnikov 	u32 status;
36738e84c258SEugene Krasnikov 
36748e84c258SEugene Krasnikov 	u8 self_addr[ETH_ALEN];
36758e84c258SEugene Krasnikov } __packed;
36768e84c258SEugene Krasnikov 
36778e84c258SEugene Krasnikov struct aggr_add_ts_req {
36788e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
36798e84c258SEugene Krasnikov 
36808e84c258SEugene Krasnikov 	/* Station Index */
36818e84c258SEugene Krasnikov 	u16 sta_idx;
36828e84c258SEugene Krasnikov 
36838e84c258SEugene Krasnikov 	/* TSPEC handler uniquely identifying a TSPEC for a STA in a BSS.
36848e84c258SEugene Krasnikov 	 * This will carry the bitmap with the bit positions representing
36858e84c258SEugene Krasnikov 	 * different AC.s */
36868e84c258SEugene Krasnikov 	u16 tspec_index;
36878e84c258SEugene Krasnikov 
36888e84c258SEugene Krasnikov 	/* Tspec info per AC To program TPE with required parameters */
36898e84c258SEugene Krasnikov 	struct wcn36xx_hal_tspec_ie tspec[WCN36XX_HAL_MAX_AC];
36908e84c258SEugene Krasnikov 
36918e84c258SEugene Krasnikov 	/* U-APSD Flags: 1b per AC.  Encoded as follows:
36928e84c258SEugene Krasnikov 	   b7 b6 b5 b4 b3 b2 b1 b0 =
36938e84c258SEugene Krasnikov 	   X  X  X  X  BE BK VI VO */
36948e84c258SEugene Krasnikov 	u8 uapsd;
36958e84c258SEugene Krasnikov 
36968e84c258SEugene Krasnikov 	/* These parameters are for all the access categories */
36978e84c258SEugene Krasnikov 
36988e84c258SEugene Krasnikov 	/* Service Interval */
36998e84c258SEugene Krasnikov 	u32 service_interval[WCN36XX_HAL_MAX_AC];
37008e84c258SEugene Krasnikov 
37018e84c258SEugene Krasnikov 	/* Suspend Interval */
37028e84c258SEugene Krasnikov 	u32 suspend_interval[WCN36XX_HAL_MAX_AC];
37038e84c258SEugene Krasnikov 
37048e84c258SEugene Krasnikov 	/* Delay Interval */
37058e84c258SEugene Krasnikov 	u32 delay_interval[WCN36XX_HAL_MAX_AC];
37068e84c258SEugene Krasnikov };
37078e84c258SEugene Krasnikov 
37088e84c258SEugene Krasnikov struct aggr_add_ts_rsp_msg {
37098e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
37108e84c258SEugene Krasnikov 
37118e84c258SEugene Krasnikov 	/* success or failure */
37128e84c258SEugene Krasnikov 	u32 status0;
37138e84c258SEugene Krasnikov 
37148e84c258SEugene Krasnikov 	/* FIXME PRIMA for future use for 11R */
37158e84c258SEugene Krasnikov 	u32 status1;
37168e84c258SEugene Krasnikov };
37178e84c258SEugene Krasnikov 
37188e84c258SEugene Krasnikov struct wcn36xx_hal_configure_apps_cpu_wakeup_state_req_msg {
37198e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
37208e84c258SEugene Krasnikov 
37218e84c258SEugene Krasnikov 	u8 is_apps_cpu_awake;
37228e84c258SEugene Krasnikov };
37238e84c258SEugene Krasnikov 
37248e84c258SEugene Krasnikov struct wcn36xx_hal_configure_apps_cpu_wakeup_state_rsp_msg {
37258e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
37268e84c258SEugene Krasnikov 
37278e84c258SEugene Krasnikov 	/* success or failure */
37288e84c258SEugene Krasnikov 	u32 status;
37298e84c258SEugene Krasnikov };
37308e84c258SEugene Krasnikov 
37318e84c258SEugene Krasnikov struct wcn36xx_hal_dump_cmd_req_msg {
37328e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
37338e84c258SEugene Krasnikov 
37348e84c258SEugene Krasnikov 	u32 arg1;
37358e84c258SEugene Krasnikov 	u32 arg2;
37368e84c258SEugene Krasnikov 	u32 arg3;
37378e84c258SEugene Krasnikov 	u32 arg4;
37388e84c258SEugene Krasnikov 	u32 arg5;
37398e84c258SEugene Krasnikov } __packed;
37408e84c258SEugene Krasnikov 
37418e84c258SEugene Krasnikov struct wcn36xx_hal_dump_cmd_rsp_msg {
37428e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
37438e84c258SEugene Krasnikov 
37448e84c258SEugene Krasnikov 	/* success or failure */
37458e84c258SEugene Krasnikov 	u32 status;
37468e84c258SEugene Krasnikov 
37478e84c258SEugene Krasnikov 	/* Length of the responce message */
37488e84c258SEugene Krasnikov 	u32 rsp_length;
37498e84c258SEugene Krasnikov 
37508e84c258SEugene Krasnikov 	/* FIXME: Currently considering the the responce will be less than
37518e84c258SEugene Krasnikov 	 * 100bytes */
37528e84c258SEugene Krasnikov 	u8 rsp_buffer[DUMPCMD_RSP_BUFFER];
37538e84c258SEugene Krasnikov } __packed;
37548e84c258SEugene Krasnikov 
37558e84c258SEugene Krasnikov #define WLAN_COEX_IND_DATA_SIZE (4)
37568e84c258SEugene Krasnikov #define WLAN_COEX_IND_TYPE_DISABLE_HB_MONITOR (0)
37578e84c258SEugene Krasnikov #define WLAN_COEX_IND_TYPE_ENABLE_HB_MONITOR (1)
37588e84c258SEugene Krasnikov 
37598e84c258SEugene Krasnikov struct coex_ind_msg {
37608e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
37618e84c258SEugene Krasnikov 
37628e84c258SEugene Krasnikov 	/* Coex Indication Type */
37638e84c258SEugene Krasnikov 	u32 type;
37648e84c258SEugene Krasnikov 
37658e84c258SEugene Krasnikov 	/* Coex Indication Data */
37668e84c258SEugene Krasnikov 	u32 data[WLAN_COEX_IND_DATA_SIZE];
37678e84c258SEugene Krasnikov };
37688e84c258SEugene Krasnikov 
37698e84c258SEugene Krasnikov struct wcn36xx_hal_tx_compl_ind_msg {
37708e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
37718e84c258SEugene Krasnikov 
37728e84c258SEugene Krasnikov 	/* Tx Complete Indication Success or Failure */
37738e84c258SEugene Krasnikov 	u32 status;
37748e84c258SEugene Krasnikov };
37758e84c258SEugene Krasnikov 
37768e84c258SEugene Krasnikov struct wcn36xx_hal_wlan_host_suspend_ind_msg {
37778e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
37788e84c258SEugene Krasnikov 
37798e84c258SEugene Krasnikov 	u32 configured_mcst_bcst_filter_setting;
37808e84c258SEugene Krasnikov 	u32 active_session_count;
37818e84c258SEugene Krasnikov };
37828e84c258SEugene Krasnikov 
37838e84c258SEugene Krasnikov struct wcn36xx_hal_wlan_exclude_unencrpted_ind_msg {
37848e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
37858e84c258SEugene Krasnikov 
37868e84c258SEugene Krasnikov 	u8 dot11_exclude_unencrypted;
37878e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
37888e84c258SEugene Krasnikov };
37898e84c258SEugene Krasnikov 
37908e84c258SEugene Krasnikov struct noa_attr_ind_msg {
37918e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
37928e84c258SEugene Krasnikov 
37938e84c258SEugene Krasnikov 	u8 index;
37948e84c258SEugene Krasnikov 	u8 opp_ps_flag;
37958e84c258SEugene Krasnikov 	u16 ctwin;
37968e84c258SEugene Krasnikov 
37978e84c258SEugene Krasnikov 	u16 noa1_interval_count;
37988e84c258SEugene Krasnikov 	u16 bss_index;
37998e84c258SEugene Krasnikov 	u32 noa1_duration;
38008e84c258SEugene Krasnikov 	u32 noa1_interval;
38018e84c258SEugene Krasnikov 	u32 noa1_starttime;
38028e84c258SEugene Krasnikov 
38038e84c258SEugene Krasnikov 	u16 noa2_interval_count;
38048e84c258SEugene Krasnikov 	u16 reserved2;
38058e84c258SEugene Krasnikov 	u32 noa2_duration;
38068e84c258SEugene Krasnikov 	u32 noa2_interval;
38078e84c258SEugene Krasnikov 	u32 noa2_start_time;
38088e84c258SEugene Krasnikov 
38098e84c258SEugene Krasnikov 	u32 status;
38108e84c258SEugene Krasnikov };
38118e84c258SEugene Krasnikov 
38128e84c258SEugene Krasnikov struct noa_start_ind_msg {
38138e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
38148e84c258SEugene Krasnikov 
38158e84c258SEugene Krasnikov 	u32 status;
38168e84c258SEugene Krasnikov 	u32 bss_index;
38178e84c258SEugene Krasnikov };
38188e84c258SEugene Krasnikov 
38198e84c258SEugene Krasnikov struct wcn36xx_hal_wlan_host_resume_req_msg {
38208e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
38218e84c258SEugene Krasnikov 
38228e84c258SEugene Krasnikov 	u8 configured_mcst_bcst_filter_setting;
38238e84c258SEugene Krasnikov };
38248e84c258SEugene Krasnikov 
38258e84c258SEugene Krasnikov struct wcn36xx_hal_host_resume_rsp_msg {
38268e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
38278e84c258SEugene Krasnikov 
38288e84c258SEugene Krasnikov 	/* success or failure */
38298e84c258SEugene Krasnikov 	u32 status;
38308e84c258SEugene Krasnikov };
38318e84c258SEugene Krasnikov 
38328e84c258SEugene Krasnikov struct wcn36xx_hal_del_ba_ind_msg {
38338e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
38348e84c258SEugene Krasnikov 
38358e84c258SEugene Krasnikov 	u16 sta_idx;
38368e84c258SEugene Krasnikov 
38378e84c258SEugene Krasnikov 	/* Peer MAC Address, whose BA session has timed out */
38388e84c258SEugene Krasnikov 	u8 peer_addr[ETH_ALEN];
38398e84c258SEugene Krasnikov 
38408e84c258SEugene Krasnikov 	/* TID for which a BA session timeout is being triggered */
38418e84c258SEugene Krasnikov 	u8 ba_tid;
38428e84c258SEugene Krasnikov 
38438e84c258SEugene Krasnikov 	/* DELBA direction
38448e84c258SEugene Krasnikov 	 * 1 - Originator
38458e84c258SEugene Krasnikov 	 * 0 - Recipient
38468e84c258SEugene Krasnikov 	 */
38478e84c258SEugene Krasnikov 	u8 direction;
38488e84c258SEugene Krasnikov 
38498e84c258SEugene Krasnikov 	u32 reason_code;
38508e84c258SEugene Krasnikov 
38518e84c258SEugene Krasnikov 	/* TO SUPPORT BT-AMP */
38528e84c258SEugene Krasnikov 	u8 bssid[ETH_ALEN];
38538e84c258SEugene Krasnikov };
38548e84c258SEugene Krasnikov 
38558e84c258SEugene Krasnikov /* PNO Messages */
38568e84c258SEugene Krasnikov 
38578e84c258SEugene Krasnikov /* Max number of channels that a network can be found on */
38588e84c258SEugene Krasnikov #define WCN36XX_HAL_PNO_MAX_NETW_CHANNELS  26
38598e84c258SEugene Krasnikov 
38608e84c258SEugene Krasnikov /* Max number of channels that a network can be found on */
38618e84c258SEugene Krasnikov #define WCN36XX_HAL_PNO_MAX_NETW_CHANNELS_EX  60
38628e84c258SEugene Krasnikov 
38638e84c258SEugene Krasnikov /* Maximum numbers of networks supported by PNO */
38648e84c258SEugene Krasnikov #define WCN36XX_HAL_PNO_MAX_SUPP_NETWORKS  16
38658e84c258SEugene Krasnikov 
38668e84c258SEugene Krasnikov /* The number of scan time intervals that can be programmed into PNO */
38678e84c258SEugene Krasnikov #define WCN36XX_HAL_PNO_MAX_SCAN_TIMERS    10
38688e84c258SEugene Krasnikov 
38698e84c258SEugene Krasnikov /* Maximum size of the probe template */
38708e84c258SEugene Krasnikov #define WCN36XX_HAL_PNO_MAX_PROBE_SIZE     450
38718e84c258SEugene Krasnikov 
38728e84c258SEugene Krasnikov /* Type of PNO enabling:
38738e84c258SEugene Krasnikov  *
38748e84c258SEugene Krasnikov  * Immediate - scanning will start immediately and PNO procedure will be
38758e84c258SEugene Krasnikov  * repeated based on timer
38768e84c258SEugene Krasnikov  *
38778e84c258SEugene Krasnikov  * Suspend - scanning will start at suspend
38788e84c258SEugene Krasnikov  *
38798e84c258SEugene Krasnikov  * Resume - scanning will start on system resume
38808e84c258SEugene Krasnikov  */
38818e84c258SEugene Krasnikov enum pno_mode {
38828e84c258SEugene Krasnikov 	PNO_MODE_IMMEDIATE,
38838e84c258SEugene Krasnikov 	PNO_MODE_ON_SUSPEND,
38848e84c258SEugene Krasnikov 	PNO_MODE_ON_RESUME,
38858e84c258SEugene Krasnikov 	PNO_MODE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
38868e84c258SEugene Krasnikov };
38878e84c258SEugene Krasnikov 
38888e84c258SEugene Krasnikov /* Authentication type */
38898e84c258SEugene Krasnikov enum auth_type {
38908e84c258SEugene Krasnikov 	AUTH_TYPE_ANY = 0,
38918e84c258SEugene Krasnikov 	AUTH_TYPE_OPEN_SYSTEM = 1,
38928e84c258SEugene Krasnikov 
38938e84c258SEugene Krasnikov 	/* Upper layer authentication types */
38948e84c258SEugene Krasnikov 	AUTH_TYPE_WPA = 2,
38958e84c258SEugene Krasnikov 	AUTH_TYPE_WPA_PSK = 3,
38968e84c258SEugene Krasnikov 
38978e84c258SEugene Krasnikov 	AUTH_TYPE_RSN = 4,
38988e84c258SEugene Krasnikov 	AUTH_TYPE_RSN_PSK = 5,
38998e84c258SEugene Krasnikov 	AUTH_TYPE_FT_RSN = 6,
39008e84c258SEugene Krasnikov 	AUTH_TYPE_FT_RSN_PSK = 7,
39018e84c258SEugene Krasnikov 	AUTH_TYPE_WAPI_WAI_CERTIFICATE = 8,
39028e84c258SEugene Krasnikov 	AUTH_TYPE_WAPI_WAI_PSK = 9,
39038e84c258SEugene Krasnikov 
39048e84c258SEugene Krasnikov 	AUTH_TYPE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
39058e84c258SEugene Krasnikov };
39068e84c258SEugene Krasnikov 
39078e84c258SEugene Krasnikov /* Encryption type */
39088e84c258SEugene Krasnikov enum ed_type {
39098e84c258SEugene Krasnikov 	ED_ANY = 0,
39108e84c258SEugene Krasnikov 	ED_NONE = 1,
39118e84c258SEugene Krasnikov 	ED_WEP = 2,
39128e84c258SEugene Krasnikov 	ED_TKIP = 3,
39138e84c258SEugene Krasnikov 	ED_CCMP = 4,
39148e84c258SEugene Krasnikov 	ED_WPI = 5,
39158e84c258SEugene Krasnikov 
39168e84c258SEugene Krasnikov 	ED_TYPE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
39178e84c258SEugene Krasnikov };
39188e84c258SEugene Krasnikov 
39198e84c258SEugene Krasnikov /* SSID broadcast  type */
39208e84c258SEugene Krasnikov enum ssid_bcast_type {
39218e84c258SEugene Krasnikov 	BCAST_UNKNOWN = 0,
39228e84c258SEugene Krasnikov 	BCAST_NORMAL = 1,
39238e84c258SEugene Krasnikov 	BCAST_HIDDEN = 2,
39248e84c258SEugene Krasnikov 
39258e84c258SEugene Krasnikov 	BCAST_TYPE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE
39268e84c258SEugene Krasnikov };
39278e84c258SEugene Krasnikov 
39288e84c258SEugene Krasnikov /* The network description for which PNO will have to look for */
39298e84c258SEugene Krasnikov struct network_type {
39308e84c258SEugene Krasnikov 	/* SSID of the BSS */
39318e84c258SEugene Krasnikov 	struct wcn36xx_hal_mac_ssid ssid;
39328e84c258SEugene Krasnikov 
39338e84c258SEugene Krasnikov 	/* Authentication type for the network */
39348e84c258SEugene Krasnikov 	enum auth_type authentication;
39358e84c258SEugene Krasnikov 
39368e84c258SEugene Krasnikov 	/* Encryption type for the network */
39378e84c258SEugene Krasnikov 	enum ed_type encryption;
39388e84c258SEugene Krasnikov 
39398e84c258SEugene Krasnikov 	/* Indicate the channel on which the Network can be found 0 - if
39408e84c258SEugene Krasnikov 	 * all channels */
39418e84c258SEugene Krasnikov 	u8 channel_count;
39428e84c258SEugene Krasnikov 	u8 channels[WCN36XX_HAL_PNO_MAX_NETW_CHANNELS];
39438e84c258SEugene Krasnikov 
39448e84c258SEugene Krasnikov 	/* Indicates the RSSI threshold for the network to be considered */
39458e84c258SEugene Krasnikov 	u8 rssi_threshold;
39468e84c258SEugene Krasnikov };
39478e84c258SEugene Krasnikov 
39488e84c258SEugene Krasnikov struct scan_timer {
39498e84c258SEugene Krasnikov 	/* How much it should wait */
39508e84c258SEugene Krasnikov 	u32 value;
39518e84c258SEugene Krasnikov 
39528e84c258SEugene Krasnikov 	/* How many times it should repeat that wait value 0 - keep using
39538e84c258SEugene Krasnikov 	 * this timer until PNO is disabled */
39548e84c258SEugene Krasnikov 	u32 repeat;
39558e84c258SEugene Krasnikov 
39568e84c258SEugene Krasnikov 	/* e.g: 2 3 4 0 - it will wait 2s between consecutive scans for 3
39578e84c258SEugene Krasnikov 	 * times - after that it will wait 4s between consecutive scans
39588e84c258SEugene Krasnikov 	 * until disabled */
39598e84c258SEugene Krasnikov };
39608e84c258SEugene Krasnikov 
39618e84c258SEugene Krasnikov /* The network parameters to be sent to the PNO algorithm */
39628e84c258SEugene Krasnikov struct scan_timers_type {
39638e84c258SEugene Krasnikov 	/* set to 0 if you wish for PNO to use its default telescopic timer */
39648e84c258SEugene Krasnikov 	u8 count;
39658e84c258SEugene Krasnikov 
39668e84c258SEugene Krasnikov 	/* A set value represents the amount of time that PNO will wait
39678e84c258SEugene Krasnikov 	 * between two consecutive scan procedures If the desired is for a
39688e84c258SEugene Krasnikov 	 * uniform timer that fires always at the exact same interval - one
39698e84c258SEugene Krasnikov 	 * single value is to be set If there is a desire for a more
39708e84c258SEugene Krasnikov 	 * complex - telescopic like timer multiple values can be set -
39718e84c258SEugene Krasnikov 	 * once PNO reaches the end of the array it will continue scanning
39728e84c258SEugene Krasnikov 	 * at intervals presented by the last value */
39738e84c258SEugene Krasnikov 	struct scan_timer values[WCN36XX_HAL_PNO_MAX_SCAN_TIMERS];
39748e84c258SEugene Krasnikov };
39758e84c258SEugene Krasnikov 
39768e84c258SEugene Krasnikov /* Preferred network list request */
39778e84c258SEugene Krasnikov struct set_pref_netw_list_req {
39788e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
39798e84c258SEugene Krasnikov 
39808e84c258SEugene Krasnikov 	/* Enable PNO */
39818e84c258SEugene Krasnikov 	u32 enable;
39828e84c258SEugene Krasnikov 
39838e84c258SEugene Krasnikov 	/* Immediate,  On Suspend,   On Resume */
39848e84c258SEugene Krasnikov 	enum pno_mode mode;
39858e84c258SEugene Krasnikov 
39868e84c258SEugene Krasnikov 	/* Number of networks sent for PNO */
39878e84c258SEugene Krasnikov 	u32 networks_count;
39888e84c258SEugene Krasnikov 
39898e84c258SEugene Krasnikov 	/* The networks that PNO needs to look for */
39908e84c258SEugene Krasnikov 	struct network_type networks[WCN36XX_HAL_PNO_MAX_SUPP_NETWORKS];
39918e84c258SEugene Krasnikov 
39928e84c258SEugene Krasnikov 	/* The scan timers required for PNO */
39938e84c258SEugene Krasnikov 	struct scan_timers_type scan_timers;
39948e84c258SEugene Krasnikov 
39958e84c258SEugene Krasnikov 	/* Probe template for 2.4GHz band */
39968e84c258SEugene Krasnikov 	u16 band_24g_probe_size;
39978e84c258SEugene Krasnikov 	u8 band_24g_probe_template[WCN36XX_HAL_PNO_MAX_PROBE_SIZE];
39988e84c258SEugene Krasnikov 
39998e84c258SEugene Krasnikov 	/* Probe template for 5GHz band */
40008e84c258SEugene Krasnikov 	u16 band_5g_probe_size;
40018e84c258SEugene Krasnikov 	u8 band_5g_probe_template[WCN36XX_HAL_PNO_MAX_PROBE_SIZE];
40028e84c258SEugene Krasnikov };
40038e84c258SEugene Krasnikov 
40048e84c258SEugene Krasnikov /* The network description for which PNO will have to look for */
40058e84c258SEugene Krasnikov struct network_type_new {
40068e84c258SEugene Krasnikov 	/* SSID of the BSS */
40078e84c258SEugene Krasnikov 	struct wcn36xx_hal_mac_ssid ssid;
40088e84c258SEugene Krasnikov 
40098e84c258SEugene Krasnikov 	/* Authentication type for the network */
40108e84c258SEugene Krasnikov 	enum auth_type authentication;
40118e84c258SEugene Krasnikov 
40128e84c258SEugene Krasnikov 	/* Encryption type for the network */
40138e84c258SEugene Krasnikov 	enum ed_type encryption;
40148e84c258SEugene Krasnikov 
40158e84c258SEugene Krasnikov 	/* SSID broadcast type, normal, hidden or unknown */
40168e84c258SEugene Krasnikov 	enum ssid_bcast_type bcast_network_type;
40178e84c258SEugene Krasnikov 
40188e84c258SEugene Krasnikov 	/* Indicate the channel on which the Network can be found 0 - if
40198e84c258SEugene Krasnikov 	 * all channels */
40208e84c258SEugene Krasnikov 	u8 channel_count;
40218e84c258SEugene Krasnikov 	u8 channels[WCN36XX_HAL_PNO_MAX_NETW_CHANNELS];
40228e84c258SEugene Krasnikov 
40238e84c258SEugene Krasnikov 	/* Indicates the RSSI threshold for the network to be considered */
40248e84c258SEugene Krasnikov 	u8 rssi_threshold;
40258e84c258SEugene Krasnikov };
40268e84c258SEugene Krasnikov 
40278e84c258SEugene Krasnikov /* Preferred network list request new */
40288e84c258SEugene Krasnikov struct set_pref_netw_list_req_new {
40298e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
40308e84c258SEugene Krasnikov 
40318e84c258SEugene Krasnikov 	/* Enable PNO */
40328e84c258SEugene Krasnikov 	u32 enable;
40338e84c258SEugene Krasnikov 
40348e84c258SEugene Krasnikov 	/* Immediate,  On Suspend,   On Resume */
40358e84c258SEugene Krasnikov 	enum pno_mode mode;
40368e84c258SEugene Krasnikov 
40378e84c258SEugene Krasnikov 	/* Number of networks sent for PNO */
40388e84c258SEugene Krasnikov 	u32 networks_count;
40398e84c258SEugene Krasnikov 
40408e84c258SEugene Krasnikov 	/* The networks that PNO needs to look for */
40418e84c258SEugene Krasnikov 	struct network_type_new networks[WCN36XX_HAL_PNO_MAX_SUPP_NETWORKS];
40428e84c258SEugene Krasnikov 
40438e84c258SEugene Krasnikov 	/* The scan timers required for PNO */
40448e84c258SEugene Krasnikov 	struct scan_timers_type scan_timers;
40458e84c258SEugene Krasnikov 
40468e84c258SEugene Krasnikov 	/* Probe template for 2.4GHz band */
40478e84c258SEugene Krasnikov 	u16 band_24g_probe_size;
40488e84c258SEugene Krasnikov 	u8 band_24g_probe_template[WCN36XX_HAL_PNO_MAX_PROBE_SIZE];
40498e84c258SEugene Krasnikov 
40508e84c258SEugene Krasnikov 	/* Probe template for 5GHz band */
40518e84c258SEugene Krasnikov 	u16 band_5g_probe_size;
40528e84c258SEugene Krasnikov 	u8 band_5g_probe_template[WCN36XX_HAL_PNO_MAX_PROBE_SIZE];
40538e84c258SEugene Krasnikov };
40548e84c258SEugene Krasnikov 
40558e84c258SEugene Krasnikov /* Preferred network list response */
40568e84c258SEugene Krasnikov struct set_pref_netw_list_resp {
40578e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
40588e84c258SEugene Krasnikov 
40598e84c258SEugene Krasnikov 	/* status of the request - just to indicate that PNO has
40608e84c258SEugene Krasnikov 	 * acknowledged the request and will start scanning */
40618e84c258SEugene Krasnikov 	u32 status;
40628e84c258SEugene Krasnikov };
40638e84c258SEugene Krasnikov 
40648e84c258SEugene Krasnikov /* Preferred network found indication */
40658e84c258SEugene Krasnikov struct pref_netw_found_ind {
40668e84c258SEugene Krasnikov 
40678e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
40688e84c258SEugene Krasnikov 
40698e84c258SEugene Krasnikov 	/* Network that was found with the highest RSSI */
40708e84c258SEugene Krasnikov 	struct wcn36xx_hal_mac_ssid ssid;
40718e84c258SEugene Krasnikov 
40728e84c258SEugene Krasnikov 	/* Indicates the RSSI */
40738e84c258SEugene Krasnikov 	u8 rssi;
40748e84c258SEugene Krasnikov };
40758e84c258SEugene Krasnikov 
40768e84c258SEugene Krasnikov /* RSSI Filter request */
40778e84c258SEugene Krasnikov struct set_rssi_filter_req {
40788e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
40798e84c258SEugene Krasnikov 
40808e84c258SEugene Krasnikov 	/* RSSI Threshold */
40818e84c258SEugene Krasnikov 	u8 rssi_threshold;
40828e84c258SEugene Krasnikov };
40838e84c258SEugene Krasnikov 
40848e84c258SEugene Krasnikov /* Set RSSI filter resp */
40858e84c258SEugene Krasnikov struct set_rssi_filter_resp {
40868e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
40878e84c258SEugene Krasnikov 
40888e84c258SEugene Krasnikov 	/* status of the request */
40898e84c258SEugene Krasnikov 	u32 status;
40908e84c258SEugene Krasnikov };
40918e84c258SEugene Krasnikov 
40928e84c258SEugene Krasnikov /* Update scan params - sent from host to PNO to be used during PNO
40938e84c258SEugene Krasnikov  * scanningx */
40948e84c258SEugene Krasnikov struct wcn36xx_hal_update_scan_params_req {
40958e84c258SEugene Krasnikov 
40968e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
40978e84c258SEugene Krasnikov 
40988e84c258SEugene Krasnikov 	/* Host setting for 11d */
40998e84c258SEugene Krasnikov 	u8 dot11d_enabled;
41008e84c258SEugene Krasnikov 
41018e84c258SEugene Krasnikov 	/* Lets PNO know that host has determined the regulatory domain */
41028e84c258SEugene Krasnikov 	u8 dot11d_resolved;
41038e84c258SEugene Krasnikov 
41048e84c258SEugene Krasnikov 	/* Channels on which PNO is allowed to scan */
41058e84c258SEugene Krasnikov 	u8 channel_count;
41068e84c258SEugene Krasnikov 	u8 channels[WCN36XX_HAL_PNO_MAX_NETW_CHANNELS];
41078e84c258SEugene Krasnikov 
41088e84c258SEugene Krasnikov 	/* Minimum channel time */
41098e84c258SEugene Krasnikov 	u16 active_min_ch_time;
41108e84c258SEugene Krasnikov 
41118e84c258SEugene Krasnikov 	/* Maximum channel time */
41128e84c258SEugene Krasnikov 	u16 active_max_ch_time;
41138e84c258SEugene Krasnikov 
41148e84c258SEugene Krasnikov 	/* Minimum channel time */
41158e84c258SEugene Krasnikov 	u16 passive_min_ch_time;
41168e84c258SEugene Krasnikov 
41178e84c258SEugene Krasnikov 	/* Maximum channel time */
41188e84c258SEugene Krasnikov 	u16 passive_max_ch_time;
41198e84c258SEugene Krasnikov 
41208e84c258SEugene Krasnikov 	/* Cb State */
41218e84c258SEugene Krasnikov 	enum phy_chan_bond_state state;
41228e84c258SEugene Krasnikov } __packed;
41238e84c258SEugene Krasnikov 
41248e84c258SEugene Krasnikov /* Update scan params - sent from host to PNO to be used during PNO
41258e84c258SEugene Krasnikov  * scanningx */
412686ceae90SBjorn Andersson struct wcn36xx_hal_update_scan_params_req_ex {
41278e84c258SEugene Krasnikov 
41288e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
41298e84c258SEugene Krasnikov 
41308e84c258SEugene Krasnikov 	/* Host setting for 11d */
41318e84c258SEugene Krasnikov 	u8 dot11d_enabled;
41328e84c258SEugene Krasnikov 
41338e84c258SEugene Krasnikov 	/* Lets PNO know that host has determined the regulatory domain */
41348e84c258SEugene Krasnikov 	u8 dot11d_resolved;
41358e84c258SEugene Krasnikov 
41368e84c258SEugene Krasnikov 	/* Channels on which PNO is allowed to scan */
41378e84c258SEugene Krasnikov 	u8 channel_count;
41388e84c258SEugene Krasnikov 	u8 channels[WCN36XX_HAL_PNO_MAX_NETW_CHANNELS_EX];
41398e84c258SEugene Krasnikov 
41408e84c258SEugene Krasnikov 	/* Minimum channel time */
41418e84c258SEugene Krasnikov 	u16 active_min_ch_time;
41428e84c258SEugene Krasnikov 
41438e84c258SEugene Krasnikov 	/* Maximum channel time */
41448e84c258SEugene Krasnikov 	u16 active_max_ch_time;
41458e84c258SEugene Krasnikov 
41468e84c258SEugene Krasnikov 	/* Minimum channel time */
41478e84c258SEugene Krasnikov 	u16 passive_min_ch_time;
41488e84c258SEugene Krasnikov 
41498e84c258SEugene Krasnikov 	/* Maximum channel time */
41508e84c258SEugene Krasnikov 	u16 passive_max_ch_time;
41518e84c258SEugene Krasnikov 
41528e84c258SEugene Krasnikov 	/* Cb State */
41538e84c258SEugene Krasnikov 	enum phy_chan_bond_state state;
415486ceae90SBjorn Andersson } __packed;
41558e84c258SEugene Krasnikov 
41568e84c258SEugene Krasnikov /* Update scan params - sent from host to PNO to be used during PNO
41578e84c258SEugene Krasnikov  * scanningx */
41588e84c258SEugene Krasnikov struct wcn36xx_hal_update_scan_params_resp {
41598e84c258SEugene Krasnikov 
41608e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
41618e84c258SEugene Krasnikov 
41628e84c258SEugene Krasnikov 	/* status of the request */
41638e84c258SEugene Krasnikov 	u32 status;
41648e84c258SEugene Krasnikov } __packed;
41658e84c258SEugene Krasnikov 
41668e84c258SEugene Krasnikov struct wcn36xx_hal_set_tx_per_tracking_req_msg {
41678e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
41688e84c258SEugene Krasnikov 
41698e84c258SEugene Krasnikov 	/* 0: disable, 1:enable */
41708e84c258SEugene Krasnikov 	u8 tx_per_tracking_enable;
41718e84c258SEugene Krasnikov 
41728e84c258SEugene Krasnikov 	/* Check period, unit is sec. */
41738e84c258SEugene Krasnikov 	u8 tx_per_tracking_period;
41748e84c258SEugene Krasnikov 
41758e84c258SEugene Krasnikov 	/* (Fail TX packet)/(Total TX packet) ratio, the unit is 10%. */
41768e84c258SEugene Krasnikov 	u8 tx_per_tracking_ratio;
41778e84c258SEugene Krasnikov 
41788e84c258SEugene Krasnikov 	/* A watermark of check number, once the tx packet exceed this
41798e84c258SEugene Krasnikov 	 * number, we do the check, default is 5 */
41808e84c258SEugene Krasnikov 	u32 tx_per_tracking_watermark;
41818e84c258SEugene Krasnikov };
41828e84c258SEugene Krasnikov 
41838e84c258SEugene Krasnikov struct wcn36xx_hal_set_tx_per_tracking_rsp_msg {
41848e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
41858e84c258SEugene Krasnikov 
41868e84c258SEugene Krasnikov 	/* success or failure */
41878e84c258SEugene Krasnikov 	u32 status;
41888e84c258SEugene Krasnikov 
41898e84c258SEugene Krasnikov };
41908e84c258SEugene Krasnikov 
41918e84c258SEugene Krasnikov struct tx_per_hit_ind_msg {
41928e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
41938e84c258SEugene Krasnikov };
41948e84c258SEugene Krasnikov 
41958e84c258SEugene Krasnikov /* Packet Filtering Definitions Begin */
41968e84c258SEugene Krasnikov #define    WCN36XX_HAL_PROTOCOL_DATA_LEN                  8
41978e84c258SEugene Krasnikov #define    WCN36XX_HAL_MAX_NUM_MULTICAST_ADDRESS        240
41988e84c258SEugene Krasnikov #define    WCN36XX_HAL_MAX_NUM_FILTERS                   20
41998e84c258SEugene Krasnikov #define    WCN36XX_HAL_MAX_CMP_PER_FILTER                10
42008e84c258SEugene Krasnikov 
42018e84c258SEugene Krasnikov enum wcn36xx_hal_receive_packet_filter_type {
42028e84c258SEugene Krasnikov 	HAL_RCV_FILTER_TYPE_INVALID,
42038e84c258SEugene Krasnikov 	HAL_RCV_FILTER_TYPE_FILTER_PKT,
42048e84c258SEugene Krasnikov 	HAL_RCV_FILTER_TYPE_BUFFER_PKT,
42058e84c258SEugene Krasnikov 	HAL_RCV_FILTER_TYPE_MAX_ENUM_SIZE
42068e84c258SEugene Krasnikov };
42078e84c258SEugene Krasnikov 
42088e84c258SEugene Krasnikov enum wcn36xx_hal_rcv_pkt_flt_protocol_type {
42098e84c258SEugene Krasnikov 	HAL_FILTER_PROTO_TYPE_INVALID,
42108e84c258SEugene Krasnikov 	HAL_FILTER_PROTO_TYPE_MAC,
42118e84c258SEugene Krasnikov 	HAL_FILTER_PROTO_TYPE_ARP,
42128e84c258SEugene Krasnikov 	HAL_FILTER_PROTO_TYPE_IPV4,
42138e84c258SEugene Krasnikov 	HAL_FILTER_PROTO_TYPE_IPV6,
42148e84c258SEugene Krasnikov 	HAL_FILTER_PROTO_TYPE_UDP,
42158e84c258SEugene Krasnikov 	HAL_FILTER_PROTO_TYPE_MAX
42168e84c258SEugene Krasnikov };
42178e84c258SEugene Krasnikov 
42188e84c258SEugene Krasnikov enum wcn36xx_hal_rcv_pkt_flt_cmp_flag_type {
42198e84c258SEugene Krasnikov 	HAL_FILTER_CMP_TYPE_INVALID,
42208e84c258SEugene Krasnikov 	HAL_FILTER_CMP_TYPE_EQUAL,
42218e84c258SEugene Krasnikov 	HAL_FILTER_CMP_TYPE_MASK_EQUAL,
42228e84c258SEugene Krasnikov 	HAL_FILTER_CMP_TYPE_NOT_EQUAL,
42238e84c258SEugene Krasnikov 	HAL_FILTER_CMP_TYPE_MAX
42248e84c258SEugene Krasnikov };
42258e84c258SEugene Krasnikov 
42268e84c258SEugene Krasnikov struct wcn36xx_hal_rcv_pkt_filter_params {
42278e84c258SEugene Krasnikov 	u8 protocol_layer;
42288e84c258SEugene Krasnikov 	u8 cmp_flag;
42298e84c258SEugene Krasnikov 
42308e84c258SEugene Krasnikov 	/* Length of the data to compare */
42318e84c258SEugene Krasnikov 	u16 data_length;
42328e84c258SEugene Krasnikov 
42338e84c258SEugene Krasnikov 	/* from start of the respective frame header */
42348e84c258SEugene Krasnikov 	u8 data_offset;
42358e84c258SEugene Krasnikov 
42368e84c258SEugene Krasnikov 	/* Reserved field */
42378e84c258SEugene Krasnikov 	u8 reserved;
42388e84c258SEugene Krasnikov 
42398e84c258SEugene Krasnikov 	/* Data to compare */
42408e84c258SEugene Krasnikov 	u8 compare_data[WCN36XX_HAL_PROTOCOL_DATA_LEN];
42418e84c258SEugene Krasnikov 
42428e84c258SEugene Krasnikov 	/* Mask to be applied on the received packet data before compare */
42438e84c258SEugene Krasnikov 	u8 data_mask[WCN36XX_HAL_PROTOCOL_DATA_LEN];
42448e84c258SEugene Krasnikov };
42458e84c258SEugene Krasnikov 
42468e84c258SEugene Krasnikov struct wcn36xx_hal_sessionized_rcv_pkt_filter_cfg_type {
42478e84c258SEugene Krasnikov 	u8 id;
42488e84c258SEugene Krasnikov 	u8 type;
42498e84c258SEugene Krasnikov 	u8 params_count;
42508e84c258SEugene Krasnikov 	u32 coleasce_time;
42518e84c258SEugene Krasnikov 	u8 bss_index;
42528e84c258SEugene Krasnikov 	struct wcn36xx_hal_rcv_pkt_filter_params params[1];
42538e84c258SEugene Krasnikov };
42548e84c258SEugene Krasnikov 
42558e84c258SEugene Krasnikov struct wcn36xx_hal_set_rcv_pkt_filter_req_msg {
42568e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
42578e84c258SEugene Krasnikov 
42588e84c258SEugene Krasnikov 	u8 id;
42598e84c258SEugene Krasnikov 	u8 type;
42608e84c258SEugene Krasnikov 	u8 params_count;
42618e84c258SEugene Krasnikov 	u32 coalesce_time;
42628e84c258SEugene Krasnikov 	struct wcn36xx_hal_rcv_pkt_filter_params params[1];
42638e84c258SEugene Krasnikov };
42648e84c258SEugene Krasnikov 
42658e84c258SEugene Krasnikov struct wcn36xx_hal_rcv_flt_mc_addr_list_type {
42668e84c258SEugene Krasnikov 	/* from start of the respective frame header */
42678e84c258SEugene Krasnikov 	u8 data_offset;
42688e84c258SEugene Krasnikov 
42698e84c258SEugene Krasnikov 	u32 mc_addr_count;
427020a779edSPontus Fuchs 	u8 mc_addr[WCN36XX_HAL_MAX_NUM_MULTICAST_ADDRESS][ETH_ALEN];
42718e84c258SEugene Krasnikov 	u8 bss_index;
427220a779edSPontus Fuchs } __packed;
42738e84c258SEugene Krasnikov 
42748e84c258SEugene Krasnikov struct wcn36xx_hal_set_pkt_filter_rsp_msg {
42758e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
42768e84c258SEugene Krasnikov 
42778e84c258SEugene Krasnikov 	/* success or failure */
42788e84c258SEugene Krasnikov 	u32 status;
42798e84c258SEugene Krasnikov 
42808e84c258SEugene Krasnikov 	u8 bss_index;
42818e84c258SEugene Krasnikov };
42828e84c258SEugene Krasnikov 
42838e84c258SEugene Krasnikov struct wcn36xx_hal_rcv_flt_pkt_match_cnt_req_msg {
42848e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
42858e84c258SEugene Krasnikov 
42868e84c258SEugene Krasnikov 	u8 bss_index;
42878e84c258SEugene Krasnikov };
42888e84c258SEugene Krasnikov 
42898e84c258SEugene Krasnikov struct wcn36xx_hal_rcv_flt_pkt_match_cnt {
42908e84c258SEugene Krasnikov 	u8 id;
42918e84c258SEugene Krasnikov 	u32 match_cnt;
42928e84c258SEugene Krasnikov };
42938e84c258SEugene Krasnikov 
42948e84c258SEugene Krasnikov struct wcn36xx_hal_rcv_flt_pkt_match_cnt_rsp_msg {
42958e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
42968e84c258SEugene Krasnikov 
42978e84c258SEugene Krasnikov 	/* Success or Failure */
42988e84c258SEugene Krasnikov 	u32 status;
42998e84c258SEugene Krasnikov 
43008e84c258SEugene Krasnikov 	u32 match_count;
43018e84c258SEugene Krasnikov 	struct wcn36xx_hal_rcv_flt_pkt_match_cnt
43028e84c258SEugene Krasnikov 		matches[WCN36XX_HAL_MAX_NUM_FILTERS];
43038e84c258SEugene Krasnikov 	u8 bss_index;
43048e84c258SEugene Krasnikov };
43058e84c258SEugene Krasnikov 
43068e84c258SEugene Krasnikov struct wcn36xx_hal_rcv_flt_pkt_clear_param {
43078e84c258SEugene Krasnikov 	/* only valid for response message */
43088e84c258SEugene Krasnikov 	u32 status;
43098e84c258SEugene Krasnikov 	u8 id;
43108e84c258SEugene Krasnikov 	u8 bss_index;
43118e84c258SEugene Krasnikov };
43128e84c258SEugene Krasnikov 
43138e84c258SEugene Krasnikov struct wcn36xx_hal_rcv_flt_pkt_clear_req_msg {
43148e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
43158e84c258SEugene Krasnikov 	struct wcn36xx_hal_rcv_flt_pkt_clear_param param;
43168e84c258SEugene Krasnikov };
43178e84c258SEugene Krasnikov 
43188e84c258SEugene Krasnikov struct wcn36xx_hal_rcv_flt_pkt_clear_rsp_msg {
43198e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
43208e84c258SEugene Krasnikov 	struct wcn36xx_hal_rcv_flt_pkt_clear_param param;
43218e84c258SEugene Krasnikov };
43228e84c258SEugene Krasnikov 
43238e84c258SEugene Krasnikov struct wcn36xx_hal_rcv_flt_pkt_set_mc_list_req_msg {
43248e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
43258e84c258SEugene Krasnikov 	struct wcn36xx_hal_rcv_flt_mc_addr_list_type mc_addr_list;
432620a779edSPontus Fuchs } __packed;
43278e84c258SEugene Krasnikov 
43288e84c258SEugene Krasnikov struct wcn36xx_hal_rcv_flt_pkt_set_mc_list_rsp_msg {
43298e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
43308e84c258SEugene Krasnikov 	u32 status;
43318e84c258SEugene Krasnikov 	u8 bss_index;
43328e84c258SEugene Krasnikov };
43338e84c258SEugene Krasnikov 
43348e84c258SEugene Krasnikov /* Packet Filtering Definitions End */
43358e84c258SEugene Krasnikov 
43368e84c258SEugene Krasnikov struct wcn36xx_hal_set_power_params_req_msg {
43378e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
43388e84c258SEugene Krasnikov 
43398e84c258SEugene Krasnikov 	/*  Ignore DTIM */
43408e84c258SEugene Krasnikov 	u32 ignore_dtim;
43418e84c258SEugene Krasnikov 
43428e84c258SEugene Krasnikov 	/* DTIM Period */
43438e84c258SEugene Krasnikov 	u32 dtim_period;
43448e84c258SEugene Krasnikov 
43458e84c258SEugene Krasnikov 	/* Listen Interval */
43468e84c258SEugene Krasnikov 	u32 listen_interval;
43478e84c258SEugene Krasnikov 
43488e84c258SEugene Krasnikov 	/* Broadcast Multicast Filter  */
43498e84c258SEugene Krasnikov 	u32 bcast_mcast_filter;
43508e84c258SEugene Krasnikov 
43518e84c258SEugene Krasnikov 	/* Beacon Early Termination */
43528e84c258SEugene Krasnikov 	u32 enable_bet;
43538e84c258SEugene Krasnikov 
43548e84c258SEugene Krasnikov 	/* Beacon Early Termination Interval */
43558e84c258SEugene Krasnikov 	u32 bet_interval;
43568e84c258SEugene Krasnikov } __packed;
43578e84c258SEugene Krasnikov 
43588e84c258SEugene Krasnikov struct wcn36xx_hal_set_power_params_resp {
43598e84c258SEugene Krasnikov 
43608e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
43618e84c258SEugene Krasnikov 
43628e84c258SEugene Krasnikov 	/* status of the request */
43638e84c258SEugene Krasnikov 	u32 status;
43648e84c258SEugene Krasnikov } __packed;
43658e84c258SEugene Krasnikov 
43668e84c258SEugene Krasnikov /* Capability bitmap exchange definitions and macros starts */
43678e84c258SEugene Krasnikov 
43688e84c258SEugene Krasnikov enum place_holder_in_cap_bitmap {
43698e84c258SEugene Krasnikov 	MCC = 0,
43708e84c258SEugene Krasnikov 	P2P = 1,
43718e84c258SEugene Krasnikov 	DOT11AC = 2,
43728e84c258SEugene Krasnikov 	SLM_SESSIONIZATION = 3,
43738e84c258SEugene Krasnikov 	DOT11AC_OPMODE = 4,
43748e84c258SEugene Krasnikov 	SAP32STA = 5,
43758e84c258SEugene Krasnikov 	TDLS = 6,
43768e84c258SEugene Krasnikov 	P2P_GO_NOA_DECOUPLE_INIT_SCAN = 7,
43778e84c258SEugene Krasnikov 	WLANACTIVE_OFFLOAD = 8,
43788e84c258SEugene Krasnikov 	BEACON_OFFLOAD = 9,
43798e84c258SEugene Krasnikov 	SCAN_OFFLOAD = 10,
43808e84c258SEugene Krasnikov 	ROAM_OFFLOAD = 11,
43818e84c258SEugene Krasnikov 	BCN_MISS_OFFLOAD = 12,
43828e84c258SEugene Krasnikov 	STA_POWERSAVE = 13,
43838e84c258SEugene Krasnikov 	STA_ADVANCED_PWRSAVE = 14,
43848e84c258SEugene Krasnikov 	AP_UAPSD = 15,
43858e84c258SEugene Krasnikov 	AP_DFS = 16,
43868e84c258SEugene Krasnikov 	BLOCKACK = 17,
43878e84c258SEugene Krasnikov 	PHY_ERR = 18,
43888e84c258SEugene Krasnikov 	BCN_FILTER = 19,
43898e84c258SEugene Krasnikov 	RTT = 20,
43908e84c258SEugene Krasnikov 	RATECTRL = 21,
43918e84c258SEugene Krasnikov 	WOW = 22,
4392ffc03c33SBjorn Andersson 	WLAN_ROAM_SCAN_OFFLOAD = 23,
4393ffc03c33SBjorn Andersson 	SPECULATIVE_PS_POLL = 24,
4394ffc03c33SBjorn Andersson 	SCAN_SCH = 25,
4395ffc03c33SBjorn Andersson 	IBSS_HEARTBEAT_OFFLOAD = 26,
4396ffc03c33SBjorn Andersson 	WLAN_SCAN_OFFLOAD = 27,
4397ffc03c33SBjorn Andersson 	WLAN_PERIODIC_TX_PTRN = 28,
4398ffc03c33SBjorn Andersson 	ADVANCE_TDLS = 29,
4399ffc03c33SBjorn Andersson 	BATCH_SCAN = 30,
4400ffc03c33SBjorn Andersson 	FW_IN_TX_PATH = 31,
4401ffc03c33SBjorn Andersson 	EXTENDED_NSOFFLOAD_SLOT = 32,
4402ffc03c33SBjorn Andersson 	CH_SWITCH_V1 = 33,
4403ffc03c33SBjorn Andersson 	HT40_OBSS_SCAN = 34,
4404ffc03c33SBjorn Andersson 	UPDATE_CHANNEL_LIST = 35,
4405ffc03c33SBjorn Andersson 	WLAN_MCADDR_FLT = 36,
4406ffc03c33SBjorn Andersson 	WLAN_CH144 = 37,
4407ffc03c33SBjorn Andersson 	NAN = 38,
4408ffc03c33SBjorn Andersson 	TDLS_SCAN_COEXISTENCE = 39,
4409ffc03c33SBjorn Andersson 	LINK_LAYER_STATS_MEAS = 40,
4410ffc03c33SBjorn Andersson 	MU_MIMO = 41,
4411ffc03c33SBjorn Andersson 	EXTENDED_SCAN = 42,
4412ffc03c33SBjorn Andersson 	DYNAMIC_WMM_PS = 43,
4413ffc03c33SBjorn Andersson 	MAC_SPOOFED_SCAN = 44,
4414ffc03c33SBjorn Andersson 	BMU_ERROR_GENERIC_RECOVERY = 45,
4415ffc03c33SBjorn Andersson 	DISA = 46,
4416ffc03c33SBjorn Andersson 	FW_STATS = 47,
4417ffc03c33SBjorn Andersson 	WPS_PRBRSP_TMPL = 48,
4418ffc03c33SBjorn Andersson 	BCN_IE_FLT_DELTA = 49,
4419ffc03c33SBjorn Andersson 	TDLS_OFF_CHANNEL = 51,
4420ffc03c33SBjorn Andersson 	RTT3 = 52,
4421ffc03c33SBjorn Andersson 	MGMT_FRAME_LOGGING = 53,
4422ffc03c33SBjorn Andersson 	ENHANCED_TXBD_COMPLETION = 54,
4423ffc03c33SBjorn Andersson 	LOGGING_ENHANCEMENT = 55,
4424ffc03c33SBjorn Andersson 	EXT_SCAN_ENHANCED = 56,
4425ffc03c33SBjorn Andersson 	MEMORY_DUMP_SUPPORTED = 57,
4426ffc03c33SBjorn Andersson 	PER_PKT_STATS_SUPPORTED = 58,
4427ffc03c33SBjorn Andersson 	EXT_LL_STAT = 60,
4428ffc03c33SBjorn Andersson 	WIFI_CONFIG = 61,
4429ffc03c33SBjorn Andersson 	ANTENNA_DIVERSITY_SELECTION = 62,
4430ffc03c33SBjorn Andersson 
44318e84c258SEugene Krasnikov 	MAX_FEATURE_SUPPORTED = 128,
44328e84c258SEugene Krasnikov };
44338e84c258SEugene Krasnikov 
4434c951da46SPontus Fuchs #define WCN36XX_HAL_CAPS_SIZE 4
4435c951da46SPontus Fuchs 
44368e84c258SEugene Krasnikov struct wcn36xx_hal_feat_caps_msg {
44378e84c258SEugene Krasnikov 
44388e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
44398e84c258SEugene Krasnikov 
4440c951da46SPontus Fuchs 	u32 feat_caps[WCN36XX_HAL_CAPS_SIZE];
44418e84c258SEugene Krasnikov } __packed;
44428e84c258SEugene Krasnikov 
44438e84c258SEugene Krasnikov /* status codes to help debug rekey failures */
44448e84c258SEugene Krasnikov enum gtk_rekey_status {
44458e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_REKEY_STATUS_SUCCESS = 0,
44468e84c258SEugene Krasnikov 
44478e84c258SEugene Krasnikov 	/* rekey detected, but not handled */
44488e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_REKEY_STATUS_NOT_HANDLED = 1,
44498e84c258SEugene Krasnikov 
44508e84c258SEugene Krasnikov 	/* MIC check error on M1 */
44518e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_REKEY_STATUS_MIC_ERROR = 2,
44528e84c258SEugene Krasnikov 
44538e84c258SEugene Krasnikov 	/* decryption error on M1  */
44548e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_REKEY_STATUS_DECRYPT_ERROR = 3,
44558e84c258SEugene Krasnikov 
44568e84c258SEugene Krasnikov 	/* M1 replay detected */
44578e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_REKEY_STATUS_REPLAY_ERROR = 4,
44588e84c258SEugene Krasnikov 
44598e84c258SEugene Krasnikov 	/* missing GTK key descriptor in M1 */
44608e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_REKEY_STATUS_MISSING_KDE = 5,
44618e84c258SEugene Krasnikov 
44628e84c258SEugene Krasnikov 	/* missing iGTK key descriptor in M1 */
44638e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_REKEY_STATUS_MISSING_IGTK_KDE = 6,
44648e84c258SEugene Krasnikov 
44658e84c258SEugene Krasnikov 	/* key installation error */
44668e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_REKEY_STATUS_INSTALL_ERROR = 7,
44678e84c258SEugene Krasnikov 
44688e84c258SEugene Krasnikov 	/* iGTK key installation error */
44698e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_REKEY_STATUS_IGTK_INSTALL_ERROR = 8,
44708e84c258SEugene Krasnikov 
44718e84c258SEugene Krasnikov 	/* GTK rekey M2 response TX error */
44728e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_REKEY_STATUS_RESP_TX_ERROR = 9,
44738e84c258SEugene Krasnikov 
44748e84c258SEugene Krasnikov 	/* non-specific general error */
44758e84c258SEugene Krasnikov 	WCN36XX_HAL_GTK_REKEY_STATUS_GEN_ERROR = 255
44768e84c258SEugene Krasnikov };
44778e84c258SEugene Krasnikov 
44788e84c258SEugene Krasnikov /* wake reason types */
44798e84c258SEugene Krasnikov enum wake_reason_type {
44808e84c258SEugene Krasnikov 	WCN36XX_HAL_WAKE_REASON_NONE = 0,
44818e84c258SEugene Krasnikov 
44828e84c258SEugene Krasnikov 	/* magic packet match */
44838e84c258SEugene Krasnikov 	WCN36XX_HAL_WAKE_REASON_MAGIC_PACKET = 1,
44848e84c258SEugene Krasnikov 
44858e84c258SEugene Krasnikov 	/* host defined pattern match */
44868e84c258SEugene Krasnikov 	WCN36XX_HAL_WAKE_REASON_PATTERN_MATCH = 2,
44878e84c258SEugene Krasnikov 
44888e84c258SEugene Krasnikov 	/* EAP-ID frame detected */
44898e84c258SEugene Krasnikov 	WCN36XX_HAL_WAKE_REASON_EAPID_PACKET = 3,
44908e84c258SEugene Krasnikov 
44918e84c258SEugene Krasnikov 	/* start of EAPOL 4-way handshake detected */
44928e84c258SEugene Krasnikov 	WCN36XX_HAL_WAKE_REASON_EAPOL4WAY_PACKET = 4,
44938e84c258SEugene Krasnikov 
44948e84c258SEugene Krasnikov 	/* network scan offload match */
44958e84c258SEugene Krasnikov 	WCN36XX_HAL_WAKE_REASON_NETSCAN_OFFL_MATCH = 5,
44968e84c258SEugene Krasnikov 
44978e84c258SEugene Krasnikov 	/* GTK rekey status wakeup (see status) */
44988e84c258SEugene Krasnikov 	WCN36XX_HAL_WAKE_REASON_GTK_REKEY_STATUS = 6,
44998e84c258SEugene Krasnikov 
45008e84c258SEugene Krasnikov 	/* BSS connection lost */
45018e84c258SEugene Krasnikov 	WCN36XX_HAL_WAKE_REASON_BSS_CONN_LOST = 7,
45028e84c258SEugene Krasnikov };
45038e84c258SEugene Krasnikov 
45048e84c258SEugene Krasnikov /*
45058e84c258SEugene Krasnikov   Wake Packet which is saved at tWakeReasonParams.DataStart
45068e84c258SEugene Krasnikov   This data is sent for any wake reasons that involve a packet-based wakeup :
45078e84c258SEugene Krasnikov 
45088e84c258SEugene Krasnikov   WCN36XX_HAL_WAKE_REASON_TYPE_MAGIC_PACKET
45098e84c258SEugene Krasnikov   WCN36XX_HAL_WAKE_REASON_TYPE_PATTERN_MATCH
45108e84c258SEugene Krasnikov   WCN36XX_HAL_WAKE_REASON_TYPE_EAPID_PACKET
45118e84c258SEugene Krasnikov   WCN36XX_HAL_WAKE_REASON_TYPE_EAPOL4WAY_PACKET
45128e84c258SEugene Krasnikov   WCN36XX_HAL_WAKE_REASON_TYPE_GTK_REKEY_STATUS
45138e84c258SEugene Krasnikov 
45148e84c258SEugene Krasnikov   The information is provided to the host for auditing and debug purposes
45158e84c258SEugene Krasnikov 
45168e84c258SEugene Krasnikov */
45178e84c258SEugene Krasnikov 
45188e84c258SEugene Krasnikov /* Wake reason indication */
45198e84c258SEugene Krasnikov struct wcn36xx_hal_wake_reason_ind {
45208e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
45218e84c258SEugene Krasnikov 
45228e84c258SEugene Krasnikov 	/* see tWakeReasonType */
45238e84c258SEugene Krasnikov 	u32 reason;
45248e84c258SEugene Krasnikov 
45258e84c258SEugene Krasnikov 	/* argument specific to the reason type */
45268e84c258SEugene Krasnikov 	u32 reason_arg;
45278e84c258SEugene Krasnikov 
45288e84c258SEugene Krasnikov 	/* length of optional data stored in this message, in case HAL
45298e84c258SEugene Krasnikov 	 * truncates the data (i.e. data packets) this length will be less
45308e84c258SEugene Krasnikov 	 * than the actual length */
45318e84c258SEugene Krasnikov 	u32 stored_data_len;
45328e84c258SEugene Krasnikov 
45338e84c258SEugene Krasnikov 	/* actual length of data */
45348e84c258SEugene Krasnikov 	u32 actual_data_len;
45358e84c258SEugene Krasnikov 
45368e84c258SEugene Krasnikov 	/* variable length start of data (length == storedDataLen) see
45378e84c258SEugene Krasnikov 	 * specific wake type */
45388e84c258SEugene Krasnikov 	u8 data_start[1];
45398e84c258SEugene Krasnikov 
45408e84c258SEugene Krasnikov 	u32 bss_index:8;
45418e84c258SEugene Krasnikov 	u32 reserved:24;
45428e84c258SEugene Krasnikov };
45438e84c258SEugene Krasnikov 
45448e84c258SEugene Krasnikov #define WCN36XX_HAL_GTK_KEK_BYTES 16
45458e84c258SEugene Krasnikov #define WCN36XX_HAL_GTK_KCK_BYTES 16
45468e84c258SEugene Krasnikov 
45478e84c258SEugene Krasnikov #define WCN36XX_HAL_GTK_OFFLOAD_FLAGS_DISABLE (1 << 0)
45488e84c258SEugene Krasnikov 
45498e84c258SEugene Krasnikov #define GTK_SET_BSS_KEY_TAG  0x1234AA55
45508e84c258SEugene Krasnikov 
45518e84c258SEugene Krasnikov struct wcn36xx_hal_gtk_offload_req_msg {
45528e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
45538e84c258SEugene Krasnikov 
45548e84c258SEugene Krasnikov 	/* optional flags */
45558e84c258SEugene Krasnikov 	u32 flags;
45568e84c258SEugene Krasnikov 
45578e84c258SEugene Krasnikov 	/* Key confirmation key */
45588e84c258SEugene Krasnikov 	u8 kck[WCN36XX_HAL_GTK_KCK_BYTES];
45598e84c258SEugene Krasnikov 
45608e84c258SEugene Krasnikov 	/* key encryption key */
45618e84c258SEugene Krasnikov 	u8 kek[WCN36XX_HAL_GTK_KEK_BYTES];
45628e84c258SEugene Krasnikov 
45638e84c258SEugene Krasnikov 	/* replay counter */
45648e84c258SEugene Krasnikov 	u64 key_replay_counter;
45658e84c258SEugene Krasnikov 
45668e84c258SEugene Krasnikov 	u8 bss_index;
45678e84c258SEugene Krasnikov };
45688e84c258SEugene Krasnikov 
45698e84c258SEugene Krasnikov struct wcn36xx_hal_gtk_offload_rsp_msg {
45708e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
45718e84c258SEugene Krasnikov 
45728e84c258SEugene Krasnikov 	/* success or failure */
45738e84c258SEugene Krasnikov 	u32 status;
45748e84c258SEugene Krasnikov 
45758e84c258SEugene Krasnikov 	u8 bss_index;
45768e84c258SEugene Krasnikov };
45778e84c258SEugene Krasnikov 
45788e84c258SEugene Krasnikov struct wcn36xx_hal_gtk_offload_get_info_req_msg {
45798e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
45808e84c258SEugene Krasnikov 	u8 bss_index;
45818e84c258SEugene Krasnikov };
45828e84c258SEugene Krasnikov 
45838e84c258SEugene Krasnikov struct wcn36xx_hal_gtk_offload_get_info_rsp_msg {
45848e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
45858e84c258SEugene Krasnikov 
45868e84c258SEugene Krasnikov 	/* success or failure */
45878e84c258SEugene Krasnikov 	u32 status;
45888e84c258SEugene Krasnikov 
45898e84c258SEugene Krasnikov 	/* last rekey status when the rekey was offloaded */
45908e84c258SEugene Krasnikov 	u32 last_rekey_status;
45918e84c258SEugene Krasnikov 
45928e84c258SEugene Krasnikov 	/* current replay counter value */
45938e84c258SEugene Krasnikov 	u64 key_replay_counter;
45948e84c258SEugene Krasnikov 
45958e84c258SEugene Krasnikov 	/* total rekey attempts */
45968e84c258SEugene Krasnikov 	u32 total_rekey_count;
45978e84c258SEugene Krasnikov 
45988e84c258SEugene Krasnikov 	/* successful GTK rekeys */
45998e84c258SEugene Krasnikov 	u32 gtk_rekey_count;
46008e84c258SEugene Krasnikov 
46018e84c258SEugene Krasnikov 	/* successful iGTK rekeys */
46028e84c258SEugene Krasnikov 	u32 igtk_rekey_count;
46038e84c258SEugene Krasnikov 
46048e84c258SEugene Krasnikov 	u8 bss_index;
46058e84c258SEugene Krasnikov };
46068e84c258SEugene Krasnikov 
46078e84c258SEugene Krasnikov struct dhcp_info {
46088e84c258SEugene Krasnikov 	/* Indicates the device mode which indicates about the DHCP activity */
46098e84c258SEugene Krasnikov 	u8 device_mode;
46108e84c258SEugene Krasnikov 
46118e84c258SEugene Krasnikov 	u8 addr[ETH_ALEN];
46128e84c258SEugene Krasnikov };
46138e84c258SEugene Krasnikov 
46148e84c258SEugene Krasnikov struct dhcp_ind_status {
46158e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
46168e84c258SEugene Krasnikov 
46178e84c258SEugene Krasnikov 	/* success or failure */
46188e84c258SEugene Krasnikov 	u32 status;
46198e84c258SEugene Krasnikov };
46208e84c258SEugene Krasnikov 
46218e84c258SEugene Krasnikov /*
46228e84c258SEugene Krasnikov  *   Thermal Mitigation mode of operation.
46238e84c258SEugene Krasnikov  *
46248e84c258SEugene Krasnikov  *  WCN36XX_HAL_THERMAL_MITIGATION_MODE_0 - Based on AMPDU disabling aggregation
46258e84c258SEugene Krasnikov  *
46268e84c258SEugene Krasnikov  *  WCN36XX_HAL_THERMAL_MITIGATION_MODE_1 - Based on AMPDU disabling aggregation
46278e84c258SEugene Krasnikov  *  and reducing transmit power
46288e84c258SEugene Krasnikov  *
46298e84c258SEugene Krasnikov  *  WCN36XX_HAL_THERMAL_MITIGATION_MODE_2 - Not supported */
46308e84c258SEugene Krasnikov enum wcn36xx_hal_thermal_mitigation_mode_type {
46318e84c258SEugene Krasnikov 	HAL_THERMAL_MITIGATION_MODE_INVALID = -1,
46328e84c258SEugene Krasnikov 	HAL_THERMAL_MITIGATION_MODE_0,
46338e84c258SEugene Krasnikov 	HAL_THERMAL_MITIGATION_MODE_1,
46348e84c258SEugene Krasnikov 	HAL_THERMAL_MITIGATION_MODE_2,
46358e84c258SEugene Krasnikov 	HAL_THERMAL_MITIGATION_MODE_MAX = WCN36XX_HAL_MAX_ENUM_SIZE,
46368e84c258SEugene Krasnikov };
46378e84c258SEugene Krasnikov 
46388e84c258SEugene Krasnikov 
46398e84c258SEugene Krasnikov /*
46408e84c258SEugene Krasnikov  *   Thermal Mitigation level.
46418e84c258SEugene Krasnikov  * Note the levels are incremental i.e WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_2 =
46428e84c258SEugene Krasnikov  * WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_0 +
46438e84c258SEugene Krasnikov  * WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_1
46448e84c258SEugene Krasnikov  *
46458e84c258SEugene Krasnikov  * WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_0 - lowest level of thermal mitigation.
46468e84c258SEugene Krasnikov  * This level indicates normal mode of operation
46478e84c258SEugene Krasnikov  *
46488e84c258SEugene Krasnikov  * WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_1 - 1st level of thermal mitigation
46498e84c258SEugene Krasnikov  *
46508e84c258SEugene Krasnikov  * WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_2 - 2nd level of thermal mitigation
46518e84c258SEugene Krasnikov  *
46528e84c258SEugene Krasnikov  * WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_3 - 3rd level of thermal mitigation
46538e84c258SEugene Krasnikov  *
46548e84c258SEugene Krasnikov  * WCN36XX_HAL_THERMAL_MITIGATION_LEVEL_4 - 4th level of thermal mitigation
46558e84c258SEugene Krasnikov  */
46568e84c258SEugene Krasnikov enum wcn36xx_hal_thermal_mitigation_level_type {
46578e84c258SEugene Krasnikov 	HAL_THERMAL_MITIGATION_LEVEL_INVALID = -1,
46588e84c258SEugene Krasnikov 	HAL_THERMAL_MITIGATION_LEVEL_0,
46598e84c258SEugene Krasnikov 	HAL_THERMAL_MITIGATION_LEVEL_1,
46608e84c258SEugene Krasnikov 	HAL_THERMAL_MITIGATION_LEVEL_2,
46618e84c258SEugene Krasnikov 	HAL_THERMAL_MITIGATION_LEVEL_3,
46628e84c258SEugene Krasnikov 	HAL_THERMAL_MITIGATION_LEVEL_4,
46638e84c258SEugene Krasnikov 	HAL_THERMAL_MITIGATION_LEVEL_MAX = WCN36XX_HAL_MAX_ENUM_SIZE,
46648e84c258SEugene Krasnikov };
46658e84c258SEugene Krasnikov 
46668e84c258SEugene Krasnikov 
46678e84c258SEugene Krasnikov /* WCN36XX_HAL_SET_THERMAL_MITIGATION_REQ */
46688e84c258SEugene Krasnikov struct set_thermal_mitigation_req_msg {
46698e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
46708e84c258SEugene Krasnikov 
46718e84c258SEugene Krasnikov 	/* Thermal Mitigation Operation Mode */
46728e84c258SEugene Krasnikov 	enum wcn36xx_hal_thermal_mitigation_mode_type mode;
46738e84c258SEugene Krasnikov 
46748e84c258SEugene Krasnikov 	/* Thermal Mitigation Level */
46758e84c258SEugene Krasnikov 	enum wcn36xx_hal_thermal_mitigation_level_type level;
46768e84c258SEugene Krasnikov };
46778e84c258SEugene Krasnikov 
46788e84c258SEugene Krasnikov struct set_thermal_mitigation_resp {
46798e84c258SEugene Krasnikov 
46808e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
46818e84c258SEugene Krasnikov 
46828e84c258SEugene Krasnikov 	/* status of the request */
46838e84c258SEugene Krasnikov 	u32 status;
46848e84c258SEugene Krasnikov };
46858e84c258SEugene Krasnikov 
46868e84c258SEugene Krasnikov /* Per STA Class B Statistics. Class B statistics are STA TX/RX stats
46878e84c258SEugene Krasnikov  * provided to FW from Host via periodic messages */
46888e84c258SEugene Krasnikov struct stats_class_b_ind {
46898e84c258SEugene Krasnikov 	struct wcn36xx_hal_msg_header header;
46908e84c258SEugene Krasnikov 
46918e84c258SEugene Krasnikov 	/* Duration over which this stats was collected */
46928e84c258SEugene Krasnikov 	u32 duration;
46938e84c258SEugene Krasnikov 
46948e84c258SEugene Krasnikov 	/* Per STA Stats */
46958e84c258SEugene Krasnikov 
46968e84c258SEugene Krasnikov 	/* TX stats */
46978e84c258SEugene Krasnikov 	u32 tx_bytes_pushed;
46988e84c258SEugene Krasnikov 	u32 tx_packets_pushed;
46998e84c258SEugene Krasnikov 
47008e84c258SEugene Krasnikov 	/* RX stats */
47018e84c258SEugene Krasnikov 	u32 rx_bytes_rcvd;
47028e84c258SEugene Krasnikov 	u32 rx_packets_rcvd;
47038e84c258SEugene Krasnikov 	u32 rx_time_total;
47048e84c258SEugene Krasnikov };
47058e84c258SEugene Krasnikov 
47068e84c258SEugene Krasnikov #endif /* _HAL_H_ */
4707