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