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