diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2013-11-20 15:29:45 -0800 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2013-11-20 15:29:45 -0800 |
| commit | e433288fc1c0189c90ed73b1cd88389e6ccc3174 (patch) | |
| tree | d52cd763553718bf61a3b7f8132775e57cee309c | |
| parent | cba53bb8875a2109e1f05d138eca51609d88a1f7 (diff) | |
| parent | 977071b82b62e755411210a4dbbc16c5452e2d30 (diff) | |
Merge "Merge remote-tracking branch 'origin/caf/caf-wlan/master'"
27 files changed, 437 insertions, 457 deletions
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c index 801213f6c867..bf677e21bfeb 100644 --- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c +++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c @@ -56,7 +56,7 @@ #define TLSHIM_LOGP(args...) \ VOS_TRACE( VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_FATAL, ## args) -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) /************************/ /* Internal defines */ @@ -302,7 +302,7 @@ tlshim_check_n_process_iapp_frame (pVosContextType pVosGCtx, return false; } -#endif /* FEATURE_WLAN_CCX */ +#endif /* defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) */ #ifdef QCA_WIFI_ISOC static void tlshim_mgmt_rx_dxe_handler(void *context, adf_nbuf_t buflist) @@ -635,7 +635,7 @@ static void tlshim_data_rx_handler(void *context, u_int16_t staid, while (buf) { next_buf = adf_nbuf_queue_next(buf); -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) /* * in case following returns true, a defered task was created * inside function, which does following: @@ -1257,7 +1257,7 @@ VOS_STATUS WLANTL_Open(void *vos_ctx, WLANTL_ConfigInfoType *tl_cfg) } INIT_WORK(&tl_shim->cache_flush_work, tl_shim_cache_flush_work); -#ifdef FEATURE_WLAN_CCX +#if defined(FEATURE_WLAN_CCX) && !defined(FEATURE_WLAN_CCX_UPLOAD) INIT_WORK(&(tl_shim->iapp_work.deferred_work), tlshim_mgmt_over_data_rx_handler); #endif diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h index 0b00506f3588..f93d13ba0d0e 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg.h +++ b/CORE/HDD/inc/wlan_hdd_cfg.h @@ -1773,9 +1773,9 @@ typedef enum * Power Save Offload */ #define CFG_POWERSAVE_OFFLOAD_NAME "gEnablePowerSaveOffload" -#define CFG_POWERSAVE_OFFLOAD_DISABLE ( 0 ) -#define CFG_POWERSAVE_OFFLOAD_ENABLE ( 1 ) -#define CFG_POWERSAVE_OFFLOAD_DEFAULT ( CFG_POWERSAVE_OFFLOAD_DISABLE ) +#define CFG_POWERSAVE_OFFLOAD_MIN ( 0 ) +#define CFG_POWERSAVE_OFFLOAD_MAX ( 4 ) +#define CFG_POWERSAVE_OFFLOAD_DEFAULT ( CFG_POWERSAVE_OFFLOAD_MIN ) /* * Firmware uart print diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h index fcecb6331eec..e67f226f8139 100644 --- a/CORE/HDD/inc/wlan_hdd_cfg80211.h +++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h @@ -162,4 +162,10 @@ extern void wlan_hdd_cfg80211_update_replayCounterCallback(void *callbackContext void wlan_hdd_testmode_rx_event(void *buf, size_t buf_len); #endif +#ifdef QCA_WIFI_2_0 +void hdd_suspend_wlan(void (*callback)(void *callbackContext), + void *callbackContext); +void hdd_resume_wlan(void); +#endif + #endif diff --git a/CORE/HDD/inc/wlan_hdd_main.h b/CORE/HDD/inc/wlan_hdd_main.h index 32a7d190f371..3e8cc9f2caf6 100644 --- a/CORE/HDD/inc/wlan_hdd_main.h +++ b/CORE/HDD/inc/wlan_hdd_main.h @@ -112,6 +112,9 @@ /** Maximum time(ms) to wait for mc thread suspend **/ #define WLAN_WAIT_TIME_MCTHREAD_SUSPEND 1200 +/** Maximum time(ms) to wait for target to be ready for suspend **/ +#define WLAN_WAIT_TIME_READY_TO_SUSPEND 2000 + #endif /** Maximum time(ms) to wait for tdls add sta to complete **/ @@ -990,6 +993,7 @@ struct hdd_context_s #ifdef QCA_WIFI_2_0 v_U32_t target_type; v_U32_t target_fw_version; + struct completion ready_to_suspend; #endif }; diff --git a/CORE/HDD/inc/wlan_hdd_wowl.h b/CORE/HDD/inc/wlan_hdd_wowl.h index ceba15926bba..546e1e564eef 100644 --- a/CORE/HDD/inc/wlan_hdd_wowl.h +++ b/CORE/HDD/inc/wlan_hdd_wowl.h @@ -111,6 +111,15 @@ /*---------------------------------------------------------------------------- * Preprocessor Definitions and Constants * -------------------------------------------------------------------------*/ +#ifdef QCA_WIFI_2_0 +#define WOWL_PTRN_MAX_SIZE 148 +#define WOWL_PTRN_MASK_MAX_SIZE 19 +#define WOWL_MAX_PTRNS_ALLOWED 22 +#else +#define WOWL_PTRN_MAX_SIZE 128 +#define WOWL_PTRN_MASK_MAX_SIZE 16 +#define WOWL_MAX_PTRNS_ALLOWED 8 +#endif /*---------------------------------------------------------------------------- * Type Declarations diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c index 3ff0e5c1a1b8..683672055dab 100644 --- a/CORE/HDD/src/wlan_hdd_cfg.c +++ b/CORE/HDD/src/wlan_hdd_cfg.c @@ -2284,10 +2284,10 @@ REG_VARIABLE( CFG_ENABLE_IP_CHKSUM_OFFLOAD, WLAN_PARAM_Integer, REG_VARIABLE( CFG_POWERSAVE_OFFLOAD_NAME, WLAN_PARAM_Integer, hdd_config_t, enablePowersaveOffload, - VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT, + VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK, CFG_POWERSAVE_OFFLOAD_DEFAULT, - CFG_POWERSAVE_OFFLOAD_DISABLE, - CFG_POWERSAVE_OFFLOAD_ENABLE ), + CFG_POWERSAVE_OFFLOAD_MIN, + CFG_POWERSAVE_OFFLOAD_MAX ), REG_VARIABLE( CFG_ENABLE_FW_UART_PRINT_NAME, WLAN_PARAM_Integer, hdd_config_t, enablefwprint, diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c index 7b5392aa4906..de8d832b6a3a 100644 --- a/CORE/HDD/src/wlan_hdd_cfg80211.c +++ b/CORE/HDD/src/wlan_hdd_cfg80211.c @@ -591,6 +591,12 @@ int wlan_hdd_cfg80211_register(struct device *dev, | WIPHY_FLAG_HAS_REMAIN_ON_CHANNEL | WIPHY_FLAG_OFFCHAN_TX; #endif + + wiphy->wowlan.flags = WIPHY_WOWLAN_MAGIC_PKT; + wiphy->wowlan.n_patterns = WOWL_MAX_PTRNS_ALLOWED; + wiphy->wowlan.pattern_min_len = 1; + wiphy->wowlan.pattern_max_len = WOWL_PTRN_MAX_SIZE; + #if defined (WLAN_FEATURE_VOWIFI_11R) || defined (FEATURE_WLAN_CCX) || defined(FEATURE_WLAN_LFR) if (pCfg->isFastTransitionEnabled #ifdef FEATURE_WLAN_LFR @@ -8230,6 +8236,14 @@ static int wlan_hdd_cfg80211_set_mac_acl(struct wiphy *wiphy, #endif #ifdef QCA_WIFI_2_0 + +void wlan_hdd_cfg80211_ready_to_suspend(void *callbackContext) +{ + hdd_context_t *pHddCtx = (hdd_context_t *)callbackContext; + + complete(&pHddCtx->ready_to_suspend); +} + int wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, struct cfg80211_wowlan *wow) { @@ -8268,6 +8282,20 @@ int wlan_hdd_cfg80211_suspend_wlan(struct wiphy *wiphy, pAdapterNode = pNext; } + /* Wait for the target to be ready for suspend */ + INIT_COMPLETION(pHddCtx->ready_to_suspend); + + hdd_suspend_wlan(&wlan_hdd_cfg80211_ready_to_suspend, pHddCtx); + + rc = wait_for_completion_interruptible_timeout(&pHddCtx->ready_to_suspend, + msecs_to_jiffies(WLAN_WAIT_TIME_READY_TO_SUSPEND)); + if (!rc) + { + VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR, + "%s: Failed to get ready to suspend", __func__); + return -ETIME; + } + /* Suspend MC thread */ set_bit(MC_SUSPEND_EVENT_MASK, &vosSchedContext->mcEventFlag); wake_up_interruptible(&vosSchedContext->mcWaitQueue); @@ -8298,6 +8326,8 @@ int wlan_hdd_cfg80211_resume_wlan(struct wiphy *wiphy) pHddCtx->isMcThreadSuspended = FALSE; + hdd_resume_wlan(); + return 0; } #endif diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c index 45dec1247060..529baddc5c25 100644 --- a/CORE/HDD/src/wlan_hdd_early_suspend.c +++ b/CORE/HDD/src/wlan_hdd_early_suspend.c @@ -863,7 +863,9 @@ void hdd_conf_mcastbcast_filter(hdd_context_t* pHddCtx, v_BOOL_t setfilter) } static void hdd_conf_suspend_ind(hdd_context_t* pHddCtx, - hdd_adapter_t *pAdapter) + hdd_adapter_t *pAdapter, + void (*callback)(void *callbackContext), + void *callbackContext) { eHalStatus halStatus = eHAL_STATUS_FAILURE; tpSirWlanSuspendParam wlanSuspendParam = @@ -914,7 +916,8 @@ static void hdd_conf_suspend_ind(hdd_context_t* pHddCtx, wlanSuspendParam->connectedState = FALSE; wlanSuspendParam->sessionId = pAdapter->sessionId; - halStatus = sme_ConfigureSuspendInd(pHddCtx->hHal, wlanSuspendParam); + halStatus = sme_ConfigureSuspendInd(pHddCtx->hHal, wlanSuspendParam, + callback, callbackContext); if(eHAL_STATUS_SUCCESS == halStatus) { pHddCtx->hdd_mcastbcast_filter_set = TRUE; @@ -973,7 +976,8 @@ static void hdd_conf_resume_ind(hdd_adapter_t *pAdapter) } //Suspend routine registered with Android OS -void hdd_suspend_wlan(void) +void hdd_suspend_wlan(void (*callback)(void *callbackContext), + void *callbackContext) { hdd_context_t *pHddCtx = NULL; v_CONTEXT_t pVosContext = NULL; @@ -1103,7 +1107,7 @@ send_suspend_ind: /* Keep this suspend indication at the end (before processing next adaptor) * for discrete. This indication is considered as trigger point to start * WOW (if wow is enabled). */ - hdd_conf_suspend_ind(pHddCtx, pAdapter); + hdd_conf_suspend_ind(pHddCtx, pAdapter, callback, callbackContext); status = hdd_get_next_adapter ( pHddCtx, pAdapterNode, &pNext ); pAdapterNode = pNext; @@ -1427,7 +1431,7 @@ VOS_STATUS hdd_wlan_reset_initialization(void) void hdd_set_wlan_suspend_mode(bool suspend) { if (suspend) - hdd_suspend_wlan(); + hdd_suspend_wlan(NULL, NULL); else hdd_resume_wlan(); } diff --git a/CORE/HDD/src/wlan_hdd_ftm.c b/CORE/HDD/src/wlan_hdd_ftm.c index c28f878d3666..c37523f46a1e 100644 --- a/CORE/HDD/src/wlan_hdd_ftm.c +++ b/CORE/HDD/src/wlan_hdd_ftm.c @@ -480,6 +480,20 @@ static VOS_STATUS wlan_ftm_vos_open( v_CONTEXT_t pVosContext, v_SIZE_t hddContex /*Open the WDA module */ vos_mem_set(&macOpenParms, sizeof(macOpenParms), 0); macOpenParms.driverType = eDRIVER_TYPE_MFG; + + pHddCtx = (hdd_context_t*)(gpVosContext->pHDDContext); + if((NULL == pHddCtx) || + (NULL == pHddCtx->cfg_ini)) + { + /* Critical Error ... Cannot proceed further */ + VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, + "%s: Hdd Context is Null", __func__); + VOS_ASSERT(0); + goto err_sys_close; + } + + macOpenParms.powersaveOffloadEnabled = + pHddCtx->cfg_ini->enablePowersaveOffload; vStatus = WDA_open(gpVosContext, gpVosContext->pHDDContext, NULL, &macOpenParms); if (!VOS_IS_STATUS_SUCCESS(vStatus)) @@ -518,29 +532,6 @@ static VOS_STATUS wlan_ftm_vos_open( v_CONTEXT_t pVosContext, v_SIZE_t hddContex /* UMA is supported in hardware for performing the frame translation 802.11 <-> 802.3 */ macOpenParms.frameTransRequired = 1; - /* - * Set Whether Power save Offload enabled or not - * This info needs to updated to MAC - * before opening sme module - * Based on this capability SME decides - * whether to open pmc or pmc offload - * module. - */ - pHddCtx = (hdd_context_t*)(gpVosContext->pHDDContext); - if((NULL == pHddCtx) || - (NULL == pHddCtx->cfg_ini)) - { - /* Critical Error ... Cannot proceed further */ - VOS_TRACE( VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_ERROR, - "%s: Hdd Context is Null", __func__); - VOS_ASSERT(0); - goto err_nv_close; - } - - if(pHddCtx->cfg_ini->enablePowersaveOffload) - macOpenParms.powersaveOffloadEnabled = TRUE; - else - macOpenParms.powersaveOffloadEnabled = FALSE; sirStatus = macOpen(&(gpVosContext->pMACContext), gpVosContext->pHDDContext, &macOpenParms); diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c index 9cc0d99feacf..23e350104cd9 100644 --- a/CORE/HDD/src/wlan_hdd_hostapd.c +++ b/CORE/HDD/src/wlan_hdd_hostapd.c @@ -1235,6 +1235,11 @@ static iw_softap_set_max_tx_power(struct net_device *dev, if (NULL == value) return -ENOMEM; + vos_mem_copy(bssid, pHostapdAdapter->macAddressCurrent.bytes, + VOS_MAC_ADDR_SIZE); + vos_mem_copy(selfMac, pHostapdAdapter->macAddressCurrent.bytes, + VOS_MAC_ADDR_SIZE); + set_value = value[0]; if (eHAL_STATUS_SUCCESS != sme_SetMaxTxPower(hHal, bssid, selfMac, set_value)) { diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c index 9a5981e272e3..60f90013c11e 100644 --- a/CORE/HDD/src/wlan_hdd_main.c +++ b/CORE/HDD/src/wlan_hdd_main.c @@ -675,11 +675,13 @@ int hdd_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd) } else if(strncmp(command, "SETSUSPENDMODE", 14) == 0) { +#ifndef QCA_WIFI_2_0 int suspend = 0; tANI_U8 *ptr = (tANI_U8*)command + 15; suspend = *ptr - '0'; hdd_set_wlan_suspend_mode(suspend); +#endif } #ifdef WLAN_FEATURE_NEIGHBOR_ROAMING else if (strncmp(command, "SETROAMTRIGGER", 14) == 0) @@ -3263,6 +3265,9 @@ static hdd_adapter_t* hdd_alloc_station_adapter( hdd_context_t *pHddCtx, tSirMac #endif init_completion(&pHddCtx->mc_sus_event_var); init_completion(&pHddCtx->tx_sus_event_var); +#ifdef QCA_WIFI_2_0 + init_completion(&pHddCtx->ready_to_suspend); +#endif init_completion(&pAdapter->ula_complete); init_completion(&pAdapter->scan_info.scan_req_completion_event); init_completion(&pAdapter->scan_info.abortscan_event_var); diff --git a/CORE/HDD/src/wlan_hdd_wowl.c b/CORE/HDD/src/wlan_hdd_wowl.c index b64542f56e7f..aa349de1eb56 100644 --- a/CORE/HDD/src/wlan_hdd_wowl.c +++ b/CORE/HDD/src/wlan_hdd_wowl.c @@ -45,15 +45,6 @@ * Preprocessor Definitions and Constants * -------------------------------------------------------------------------*/ -#ifdef QCA_WIFI_2_0 -#define WOWL_PTRN_MAX_SIZE 148 -#define WOWL_PTRN_MASK_MAX_SIZE 19 -#define WOWL_MAX_PTRNS_ALLOWED 22 -#else -#define WOWL_PTRN_MAX_SIZE 128 -#define WOWL_PTRN_MASK_MAX_SIZE 16 -#define WOWL_MAX_PTRNS_ALLOWED 8 -#endif #define WOWL_INTER_PTRN_TOKENIZER ';' #define WOWL_INTRA_PTRN_TOKENIZER ':' diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h index b8cb894cbe6d..15e708872e17 100644 --- a/CORE/MAC/inc/aniGlobal.h +++ b/CORE/MAC/inc/aniGlobal.h @@ -1054,6 +1054,10 @@ typedef struct sAniSirGlobal /* PNO offload */ v_BOOL_t pnoOffload; + + csrReadyToSuspendCallback readyToSuspendCallback; + void *readyToSuspendContext; + } tAniSirGlobal; #ifdef FEATURE_WLAN_TDLS diff --git a/CORE/MAC/inc/sirApi.h b/CORE/MAC/inc/sirApi.h index be5c302a2475..1ff0bdd6089c 100644 --- a/CORE/MAC/inc/sirApi.h +++ b/CORE/MAC/inc/sirApi.h @@ -4286,4 +4286,11 @@ typedef struct sSirRateUpdateInd tTxrateinfoflags mcastDataRate5GHzTxFlag; } tSirRateUpdateInd, *tpSirRateUpdateInd; + +typedef struct +{ + tANI_U16 mesgType; + tANI_U16 mesgLen; +} tSirReadyToSuspendInd, *tpSirReadyToSuspendInd; + #endif /* __SIR_API_H */ diff --git a/CORE/MAC/inc/wniApi.h b/CORE/MAC/inc/wniApi.h index 70216a1ef06f..2fecff450451 100644 --- a/CORE/MAC/inc/wniApi.h +++ b/CORE/MAC/inc/wniApi.h @@ -358,6 +358,7 @@ enum eWniMsgTypes eWNI_PMC_GTK_OFFLOAD_GETINFO_RSP, #endif // WLAN_FEATURE_GTK_OFFLOAD eWNI_SME_CANDIDATE_FOUND_IND, //ROAM candidate indication from FW + eWNI_SME_READY_TO_SUSPEND_IND, eWNI_SME_MSG_TYPES_END }; diff --git a/CORE/SAP/src/sapFsm.c b/CORE/SAP/src/sapFsm.c index 822a03899464..7d85166f1bcf 100644 --- a/CORE/SAP/src/sapFsm.c +++ b/CORE/SAP/src/sapFsm.c @@ -194,6 +194,9 @@ sapGotoChannelSel { /*if a valid channel is returned then use concurrent channel. Else take whatever comes from configuartion*/ sapContext->channel = channel; + sme_SelectCBMode(hHal, + sapConvertSapPhyModeToCsrPhyMode(sapContext->csrRoamProfile.phyMode), + channel); } } diff --git a/CORE/SERVICES/COMMON/dbglog_id.h b/CORE/SERVICES/COMMON/dbglog_id.h index 1f617d129574..e369732067fc 100644 --- a/CORE/SERVICES/COMMON/dbglog_id.h +++ b/CORE/SERVICES/COMMON/dbglog_id.h @@ -190,7 +190,16 @@ extern "C" { #define RESMGR_VC_REG_UNREG_LINK 48 #define RESMGR_VC_PRINT_LINK 49 #define RESMGR_OCS_MISS_TOLERANCE 50 -#define RESMGR_DEFINITION_END 51 +#define RESMGR_DYN_SCH_ALLOCRAM_SIZE 51 +#define RESMGR_DYN_SCH_ENABLE 52 +#define RESMGR_DYN_SCH_ACTIVE 53 +#define RESMGR_DYN_SCH_CH_STATS_START 54 +#define RESMGR_DYN_SCH_CH_SX_STATS 55 +#define RESMGR_DYN_SCH_TOT_UTIL_PER 56 +#define RESMGR_DYN_SCH_HOME_CH_QUOTA 57 +#define RESMGR_OCS_REG_RECAL_QUOTA_NOTIF 58 +#define RESMGR_OCS_DEREG_RECAL_QUOTA_NOTIF 59 +#define RESMGR_DEFINITION_END 60 /* RESMGR CHNMGR debug ids */ #define RESMGR_CHMGR_DEFINITION_START 0 @@ -220,7 +229,10 @@ extern "C" { #define VDEV_MGR_VDEV_START_OCS_HP_REQ_COMPLETE 13 #define VDEV_MGR_VDEV_START_OCS_HP_REQ_STOP 14 #define VDEV_MGR_HP_START_TIME 15 -#define VDEV_MGR_DEFINITION_END 16 +#define VDEV_MGR_VDEV_PAUSE_DELAY_UPDATE 16 +#define VDEV_MGR_VDEV_PAUSE_FAIL 17 +#define VDEV_MGR_GEN_PERIODIC_NOA 18 +#define VDEV_MGR_DEFINITION_END 19 /* WHAL debug identifier definitions */ #define WHAL_DBGID_DEFINITION_START 0 @@ -478,7 +490,33 @@ extern "C" { #define COEX_STATUS_OCS 211 #define COEX_STATS_BT 212 -#define COEX_DEBUG_ID_END 213 +#define COEX_MWS_WLAN_INIT 213 +#define COEX_MWS_WBTMR_SYNC 214 +#define COEX_MWS_TYPE2_RX 215 +#define COEX_MWS_TYPE2_TX 216 +#define COEX_MWS_WLAN_CHAVD 217 +#define COEX_MWS_WLAN_CHAVD_INSERT 218 +#define COEX_MWS_WLAN_CHAVD_MERGE 219 +#define COEX_MWS_WLAN_CHAVD_RPT 220 +#define COEX_MWS_CP_MSG_SEND 221 +#define COEX_MWS_CP_ESCAPE 222 +#define COEX_MWS_CP_UNFRAME 223 +#define COEX_MWS_CP_SYNC_UPDATE 224 +#define COEX_MWS_CP_SYNC 225 +#define COEX_MWS_CP_WLAN_STATE_IND 226 +#define COEX_MWS_CP_SYNCRESP_TIMEOUT 227 +#define COEX_MWS_SCHEME_UPDATE 228 +#define COEX_MWS_WLAN_EVENT 229 +#define COEX_MWS_UART_UNESCAPE 230 +#define COEX_MWS_UART_ENCODE_SEND 231 +#define COEX_MWS_UART_RECV_DECODE 232 +#define COEX_MWS_UL_HDL 233 +#define COEX_MWS_REMOTE_EVENT 234 +#define COEX_MWS_OTHER 235 +#define COEX_MWS_ERROR 236 +#define COEX_MWS_ANT_DIVERSITY 237 + +#define COEX_DEBUG_ID_END 238 #define SCAN_START_COMMAND_FAILED 0 #define SCAN_STOP_COMMAND_FAILED 1 @@ -593,7 +631,8 @@ extern "C" { #define WAL_DBGID_SETUP_RSSI_INTERRUPTS 55 #define WAL_DBGID_BRSSI_CONFIG 56 #define WAL_DBGID_CURRENT_BRSSI_AVE 57 -#define WAL_DBGID_DEFINITION_END 58 +#define WAL_DBGID_BCN_TX_COMP 58 +#define WAL_DBGID_DEFINITION_END 59 #define ANI_DBGID_POLL 0 #define ANI_DBGID_CONTROL 1 @@ -672,10 +711,12 @@ extern "C" { #define P2P_FIND_NEXT_EVENT_ENTER 30 #define P2P_NOA_GO_PRESENT 31 #define P2P_NOA_GO_ABSENT 32 -#define P2P_GO_NOA_NOTIF 33 -#define P2P_GO_TBTT_OFFSET 34 -#define P2P_GO_GET_NOA_INFO 35 -#define P2P_DBGID_DEFINITION_END 36 +#define P2P_GO_NOA_NOTIF 33 +#define P2P_GO_TBTT_OFFSET 34 +#define P2P_GO_GET_NOA_INFO 35 +#define P2P_GO_ADD_ONE_SHOT_NOA 36 +#define P2P_GO_GET_NOA_IE 37 +#define P2P_DBGID_DEFINITION_END 38 //CSA modules DBGIDs @@ -758,6 +799,7 @@ extern "C" { #define ROAM_FINAL_BMISS_RECVD 30 #define ROAM_CONFIG_SCAN_MODE 31 #define ROAM_DBGID_DEFINITION_END 32 + /* DATA_TXRX module DBGIDs*/ #define DATA_TXRX_DBGID_DEFINITION_START 0 #define DATA_TXRX_DBGID_RX_DATA_SEQ_LEN_INFO 1 @@ -784,6 +826,7 @@ extern "C" { #define TDLS_DBGID_PEER_EVT_DRP_RSSI 17 #define TDLS_DBGID_PEER_EVT_DISCOVER 18 #define TDLS_DBGID_PEER_EVT_DELETE 19 + /* SMPS module DBGIDs */ #define STA_SMPS_DBGID_DEFINITION_START 0 #define STA_SMPS_DBGID_CREATE_PDEV_INSTANCE 1 diff --git a/CORE/SERVICES/COMMON/wlan_defs.h b/CORE/SERVICES/COMMON/wlan_defs.h index 70d1ee986680..851d0095c7fb 100644 --- a/CORE/SERVICES/COMMON/wlan_defs.h +++ b/CORE/SERVICES/COMMON/wlan_defs.h @@ -186,6 +186,11 @@ typedef struct { A_UINT32 ack_rssi; /* ACK RSSI: b'7..b'0 avg RSSI across all chain */ A_UINT32 time_stamp ; /* ACK timestamp (helps determine age) */ A_UINT32 is_probe; /* Valid if probing. Else, 0 */ + A_UINT32 ba_win_size; /* b'7..b0, block Ack Window size, b'31..b8 Resvd */ + A_UINT32 failed_ba_bmap_0_31; /* failed BA bitmap 0..31 */ + A_UINT32 failed_ba_bmap_32_63; /* failed BA bitmap 32..63 */ + A_UINT32 bmap_tried_0_31; /* enqued bitmap 0..31 */ + A_UINT32 bmap_tried_32_63; /* enqued bitmap 32..63 */ } RC_TX_DONE_PARAMS; diff --git a/CORE/SERVICES/COMMON/wmi_tlv_defs.h b/CORE/SERVICES/COMMON/wmi_tlv_defs.h index 0c95b0659235..9c9f0c853406 100644 --- a/CORE/SERVICES/COMMON/wmi_tlv_defs.h +++ b/CORE/SERVICES/COMMON/wmi_tlv_defs.h @@ -379,6 +379,10 @@ typedef enum { WMITLV_TAG_STRUC_wmi_ba_req_ssn_cmd_sub_struct_param, WMITLV_TAG_STRUC_wmi_ba_req_ssn_event_sub_struct_param, WMITLV_TAG_STRUC_wmi_sta_smps_param_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_vdev_set_gtx_params_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_mcc_sched_traffic_stats_cmd_fixed_param, + WMITLV_TAG_STRUC_wmi_mcc_sched_sta_traffic_stats, + WMITLV_TAG_STRUC_wmi_offload_bcn_tx_status_event_fixed_param, } WMITLV_TAG_ID; /* @@ -491,6 +495,7 @@ typedef enum { OP(WMI_VDEV_WMM_ADDTS_CMDID) \ OP(WMI_VDEV_WMM_DELTS_CMDID) \ OP(WMI_VDEV_SET_WMM_PARAMS_CMDID) \ + OP(WMI_VDEV_SET_GTX_PARAMS_CMDID) \ OP(WMI_TDLS_SET_STATE_CMDID) \ OP(WMI_TDLS_PEER_UPDATE_CMDID) \ OP(WMI_FWTEST_VDEV_MCC_SET_TBTT_MODE_CMDID) \ @@ -503,7 +508,8 @@ typedef enum { OP(WMI_SET_MCASTBCAST_FILTER_CMDID) \ OP(WMI_P2P_SET_OPPPS_PARAM_CMDID) \ OP(WMI_FWTEST_P2P_SET_NOA_PARAM_CMDID) \ - OP(WMI_STA_SMPS_PARAM_CMDID) + OP(WMI_STA_SMPS_PARAM_CMDID) \ + OP(WMI_MCC_SCHED_TRAFFIC_STATS_CMDID) /* * IMPORTANT: Please add _ALL_ WMI Events Here. * Otherwise, these WMI TLV Functions will be process them. @@ -550,7 +556,8 @@ typedef enum { OP(WMI_CAPTUREH_EVENTID) \ OP(WMI_TDLS_PEER_EVENTID) \ OP(WMI_VDEV_MCC_BCN_INTERVAL_CHANGE_REQ_EVENTID) \ - OP(WMI_BA_RSP_SSN_EVENTID) + OP(WMI_BA_RSP_SSN_EVENTID) \ + OP(WMI_OFFLOAD_BCN_TX_STATUS_EVENTID) /* TLV definitions of WMI commands */ @@ -1233,6 +1240,11 @@ WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_WMM_DELTS_CMDID); WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_SET_WMM_PARAMS_CMDID); +#define WMITLV_TABLE_WMI_VDEV_SET_GTX_PARAMS_CMDID(id,op,buf,len) \ +WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_set_gtx_params_cmd_fixed_param, wmi_vdev_set_gtx_params_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) + +WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_SET_GTX_PARAMS_CMDID); + /* TDLS Enable/Disable Cmd */ #define WMITLV_TABLE_WMI_TDLS_SET_STATE_CMDID(id,op,buf,len) \ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_tdls_set_state_cmd_fixed_param, \ @@ -1284,6 +1296,14 @@ WMITLV_CREATE_PARAM_STRUC(WMI_STA_SMPS_FORCE_MODE_CMDID); WMITLV_CREATE_PARAM_STRUC(WMI_STA_SMPS_PARAM_CMDID); +/* MCC Adaptive Scheduler Traffic Stats */ +#define WMITLV_TABLE_WMI_MCC_SCHED_TRAFFIC_STATS_CMDID(id,op,buf,len) \ + WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mcc_sched_traffic_stats_cmd_fixed_param, wmi_mcc_sched_traffic_stats_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \ + WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_ARRAY_STRUC, wmi_mcc_sched_sta_traffic_stats, mcc_sched_sta_traffic_stats_list, WMITLV_SIZE_VAR) + +WMITLV_CREATE_PARAM_STRUC(WMI_MCC_SCHED_TRAFFIC_STATS_CMDID); + + /************************** TLV definitions of WMI events *******************************/ /* Service Ready event */ @@ -1519,6 +1539,10 @@ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_tdls_peer_event_fixed_param, wmi WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_vdev_mcc_bcn_intvl_change_event_fixed_param, wmi_vdev_mcc_bcn_intvl_change_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) WMITLV_CREATE_PARAM_STRUC(WMI_VDEV_MCC_BCN_INTERVAL_CHANGE_REQ_EVENTID); +#define WMITLV_TABLE_WMI_OFFLOAD_BCN_TX_STATUS_EVENTID(id,op,buf,len) \ +WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_offload_bcn_tx_status_event_fixed_param, wmi_offload_bcn_tx_status_event_fixed_param, fixed_param, WMITLV_SIZE_FIX) + WMITLV_CREATE_PARAM_STRUC(WMI_OFFLOAD_BCN_TX_STATUS_EVENTID); + #ifdef __cplusplus } #endif diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h index 9969323b5d60..388a3c230ca8 100644 --- a/CORE/SERVICES/COMMON/wmi_unified.h +++ b/CORE/SERVICES/COMMON/wmi_unified.h @@ -252,6 +252,7 @@ typedef enum { WMI_VDEV_WMM_ADDTS_CMDID, WMI_VDEV_WMM_DELTS_CMDID, WMI_VDEV_SET_WMM_PARAMS_CMDID, + WMI_VDEV_SET_GTX_PARAMS_CMDID, /* peer specific commands */ @@ -421,6 +422,8 @@ typedef enum { /* F/W stats */ /** one time request for stats */ WMI_REQUEST_STATS_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_STATS), + /** Push MCC Adaptive Scheduler Stats to Firmware */ + WMI_MCC_SCHED_TRAFFIC_STATS_CMDID, /** ARP OFFLOAD REQUEST*/ WMI_SET_ARP_NS_OFFLOAD_CMDID=WMI_CMD_GRP_START_ID(WMI_GRP_ARP_NS_OFL), @@ -576,6 +579,10 @@ typedef enum { staggered beacon transmission mode */ WMI_TBTTOFFSET_UPDATE_EVENTID, + /** event after the first beacon is transmitted following + a change in the template.*/ + WMI_OFFLOAD_BCN_TX_STATUS_EVENTID, + /*ADDBA Related WMI Events*/ /** Indication the completion of the prior WMI_PEER_TID_DELBA_CMDID(initiator) */ @@ -1148,6 +1155,7 @@ typedef struct { A_UINT32 num_tdls_conn_table_entries; /* number of peers to track per TDLS vdev */ A_UINT32 beacon_tx_offload_max_vdev; A_UINT32 num_multicast_filter_entries; + A_UINT32 num_wow_filters; /*host can configure the number of wow filters*/ } wmi_resource_config; @@ -1729,174 +1737,6 @@ typedef struct { A_UINT32 scan_start; } wmi_pdev_scan_cmd; -//currently, only RTT measurement has been implemented - -/* - * Mesage format for WMI_RTT_TSF_CMDID - * This CMD trigger FW to report TSF Measurement result to host - */ -typedef struct { - A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rtt_tsf_cmd_fixed_param */ - A_UINT32 req_id; //unique request ID for this TSF measure req - wmi_mac_addr dest_mac; //destination mac address for measurement - wmi_mac_addr spoof_bssid; //spoof BSSID for measurement with unassociated STA - A_UINT32 vdev_id; // vdev used for TSF - A_UINT32 time_out; //timeout for this TSF mesurement (ms) - /* This TLV is followed by below TLVs: - * wmi_channel channel; //channel information for this Requirement - */ -}wmi_rtt_tsf_cmd_fixed_param; - -/* - * Mesage format for WMI_RTT_MEASREQ_CMDID - * This CMD trigger FW to start measurement with a peer - * Need be careful about 32 alignment if any change made in future - */ -typedef struct { //any new change need take care of 32 alignment - A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rtt_measreq_body */ - A_UINT32 control_flag; // some control information here - /********************************************************************************* - *Bits 1:0: Reserved - *Bits 4:2: 802.11 Frame Type to measure RTT - * 000: NULL, 001: Qos NULL, 010: TMR-TM - *Bits 8:5: Tx chain mask used for transmission 0000 - 1111 - *Bits 12:9: Receive chainmask to use for reception 0000 - 1111 - *Bits 13:13 peer is qca chip or not - *Bits 15:14: BW 0- 20MHz 1- 40MHz 2- 80MHz 3 - 160 MHz - *Bits 17:16: Preamble 0- Legacy 2- HT 3-VHT - *Bits 21:18: Retry times - *Bits 29:22 MCS - *Bits 31:30 Reserved - *********************************************************************************/ - A_UINT32 measure_info; - /******************************************************************************* - *Bit 0-7 vdev_id vdev used for RTT - *Bit 15-8 num_meas #of measurements of each peer - *Bit 23:16 timeout for this rtt mesurement (ms) - *Bit 31-24 report_type - *******************************************************************************/ - wmi_mac_addr dest_mac; //destination mac address for measurement - wmi_mac_addr spoof_bssid; //spoof BSSID for measurement with unassociated STA -}wmi_rtt_measreq_body; - -typedef struct { //notice on 32 bit alignment if need do any further change - A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rtt_measreq_head */ - A_UINT32 req_id; //unique request ID for this RTT measure req - /****************************************************************************** - *bit 15:0 Request ID - *bit 16: sps enable 0- unenable 1--enable - *bit 31:17 reserved - ******************************************************************************/ - A_UINT32 sta_num; // how many number of STA in this RTT requirement - /****************************************************************************** - *bit 7:0 # of measurement peers - *bit 23:8 if sps, time delay for SPS (ms) - *bit 31:24 reserved - ******************************************************************************/ - /* This TLV is followed by below TLVs - * wmi_channel channel; // common channel information for this Requirement - * wmi_rtt_measreq_body body[]; - */ -} wmi_rtt_measreq_head; - -//Bit map macro define for RTT measurement command -#define RTT_MEAS_FRAME_NULL 0 -#define RTT_MEAS_FRAME_QOSNULL 1 -#define RTT_MEAS_FRAME_TMR 2 - -#define WMI_RTT_BW_20 0 -#define WMI_RTT_BW_40 1 -#define WMI_RTT_BW_80 2 -#define WMI_RTT_BW_160 3 - -#define WMI_RTT_PREAM_LEGACY 0 -#define WMI_RTT_PREAM_HT 2 -#define WMI_RTT_PREAM_VHT 3 - -#define WMI_RTT_REQ_ID_S 0 -#define WMI_RTT_REQ_ID (0xffff << WMI_RTT_REQ_ID_S) -#define WMI_RTT_REQ_ID_GET(x) WMI_F_MS(x,WMI_RTT_REQ_ID) -#define WMI_RTT_REQ_ID_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_REQ_ID) - -//SPS here is synchronized power save -#define WMI_RTT_SPS_S 16 -#define WMI_RTT_SPS (0x1 << WMI_RTT_SPS_S) -#define WMI_RTT_SPS_GET(x) WMI_F_MS(x,WMI_RTT_SPS) -#define WMI_RTT_SPS_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_SPS) - -#define WMI_RTT_NUM_STA_S 0 -#define WMI_RTT_NUM_STA (0xff << WMI_RTT_NUM_STA_S) -#define WMI_RTT_NUM_STA_GET(x) WMI_F_MS(x,WMI_RTT_NUM_STA) -#define WMI_RTT_NUM_STA_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_NUM_STA) - -#define WMI_RTT_SPS_DELAY_S 8 -#define WMI_RTT_SPS_DELAY (0xffff << WMI_RTT_SPS_DELAY_S) -#define WMI_RTT_SPS_DELAY_GET(x) WMI_F_MS(x,WMI_RTT_SPS_DELAY) -#define WMI_RTT_SPS_DELAY_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_SPS_DELAY) - -//req body Macro -#define WMI_RTT_FRAME_TYPE_S 2 -#define WMI_RTT_FRAME_TYPE (7 << WMI_RTT_FRAME_TYPE_S) -#define WMI_RTT_FRAME_TYPE_GET(x) WMI_F_MS(x,WMI_RTT_FRAME_TYPE) -#define WMI_RTT_FRAME_TYPE_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_FRAME_TYPE) - -#define WMI_RTT_TX_CHAIN_S 5 -#define WMI_RTT_TX_CHAIN (0xf << WMI_RTT_TX_CHAIN_S) -#define WMI_RTT_TX_CHAIN_GET(x) WMI_F_MS(x,WMI_RTT_TX_CHAIN) -#define WMI_RTT_TX_CHAIN_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_TX_CHAIN) - -#define WMI_RTT_RX_CHAIN_S 9 -#define WMI_RTT_RX_CHAIN (0xf << WMI_RTT_RX_CHAIN_S) -#define WMI_RTT_RX_CHAIN_GET(x) WMI_F_MS(x,WMI_RTT_RX_CHAIN) -#define WMI_RTT_RX_CHAIN_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_RX_CHAIN) - -#define WMI_RTT_QCA_PEER_S 13 -#define WMI_RTT_QCA_PEER (0x1 << WMI_RTT_QCA_PEER_S) -#define WMI_RTT_QCA_PEER_GET(x) WMI_F_MS(x,WMI_RTT_QCA_PEER) -#define WMI_RTT_QCA_PEER_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_QCA_PEER) - -#define WMI_RTT_BW_S 14 -#define WMI_RTT_BW (0x3 <<WMI_RTT_BW_S) -#define WMI_RTT_BW_GET(x) WMI_F_MS(x,WMI_RTT_BW) -#define WMI_RTT_BW_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_BW) - -#define WMI_RTT_PREAMBLE_S 16 -#define WMI_RTT_PREAMBLE (0x3 <<WMI_RTT_PREAMBLE_S) -#define WMI_RTT_PREAMBLE_GET(x) WMI_F_MS(x,WMI_RTT_PREAMBLE) -#define WMI_RTT_PREAMBLE_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_PREAMBLE) - -#define WMI_RTT_RETRIES_S 18 -#define WMI_RTT_RETRIES (0xf << WMI_RTT_RETRIES_S) -#define WMI_RTT_RETRIES_GET(x) WMI_F_MS(x,WMI_RTT_RETRIES) -#define WMI_RTT_RETRIES_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_RETRIES) - -#define WMI_RTT_MCS_S 22 -#define WMI_RTT_MCS (0xff << WMI_RTT_MCS_S) -#define WMI_RTT_MCS_GET(x) WMI_F_MS(x,WMI_RTT_MCS) -#define WMI_RTT_MCS_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_MCS) - -#define WMI_RTT_VDEV_ID_S 0 -#define WMI_RTT_VDEV_ID (0xff << WMI_RTT_VDEV_ID_S) -#define WMI_RTT_VDEV_ID_GET(x) WMI_F_MS(x,WMI_RTT_VDEV_ID) -#define WMI_RTT_VDEV_ID_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_VDEV_ID) - -#define WMI_RTT_MEAS_NUM_S 8 -#define WMI_RTT_MEAS_NUM (0xff << WMI_RTT_MEAS_NUM_S) -#define WMI_RTT_MEAS_NUM_GET(x) WMI_F_MS(x,WMI_RTT_MEAS_NUM) -#define WMI_RTT_MEAS_NUM_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_MEAS_NUM) - -#define WMI_RTT_TIMEOUT_S 16 -#define WMI_RTT_TIMEOUT (0xff << WMI_RTT_TIMEOUT_S) -#define WMI_RTT_TIMEOUT_GET(x) WMI_F_MS(x,WMI_RTT_TIMEOUT) -#define WMI_RTT_TIMEOUT_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_TIMEOUT) - -#define WMI_RTT_REPORT_TYPE_S 24 -#define WMI_RTT_REPORT_TYPE (0x3 <<WMI_RTT_REPORT_TYPE_S) -#define WMI_RTT_REPORT_TYPE_GET(x) WMI_F_MS(x,WMI_RTT_REPORT_TYPE) -#define WMI_RTT_REPORT_TYPE_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_REPORT_TYPE) - -/*---end of RTT COMMAND---*/ - /*Command to set/unset chip in quiet mode*/ typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_pdev_set_quiet_cmd_fixed_param */ @@ -2395,8 +2235,11 @@ typedef struct { } wmi_pdev_set_wmm_params_cmd_fixed_param; typedef enum { - WMI_REQUEST_PEER_STAT = 0x01, - WMI_REQUEST_AP_STAT = 0x02 + WMI_REQUEST_PEER_STAT = 0x01, + WMI_REQUEST_AP_STAT = 0x02, + WMI_REQUEST_PDEV_STAT = 0x04, + WMI_REQUEST_VDEV_STAT = 0x08, + WMI_REQUEST_BCNFLT_STAT = 0x10, } wmi_stats_id; typedef struct { @@ -3035,6 +2878,12 @@ typedef struct { */ } wmi_prb_tmpl_cmd_fixed_param; +typedef struct { + A_UINT32 tlv_header; + A_UINT32 vdev_id; + A_UINT32 tx_status; +}wmi_offload_bcn_tx_status_event_fixed_param; + enum wmi_sta_ps_mode { /** enable power save for the given STA VDEV */ @@ -3198,11 +3047,6 @@ typedef struct { * Enable QPower */ WMI_STA_PS_ENABLE_QPOWER = 6, - - /** - * Disable QPower - */ - WMI_STA_PS_DISABLE_QPOWER = 7, }; typedef struct { @@ -3762,7 +3606,8 @@ typedef struct { #define WMI_PEER_VHT 0x02000000 /* VHT Enabled */ #define WMI_PEER_80MHZ 0x04000000 /* 80MHz enabld */ #define WMI_PEER_PMF 0x08000000 /* Robust Management Frame Protection enabled */ -/** TODO: Place holder for WLAN_PEER_F_PS_PRESEND_REQUIRED = 0x10000000. Need to be clean up */ +/** CAUTION TODO: Place holder for WLAN_PEER_F_PS_PRESEND_REQUIRED = 0x10000000. Need to be clean up */ +#define WMI_PEER_IS_P2P_CAPABLE 0x20000000 /* P2P capable peer */ /** * Peer rate capabilities. @@ -4418,25 +4263,6 @@ typedef struct { #define WMI_UNIFIED_OPPPS_ATTR_CTWIN_SET(hdr, v) \ WMI_F_RMW((hdr)->oppps_attr, (v) & 0x7f, \ WMI_UNIFIED_OPPPS_ATTR_CTWIN); -/*----RTT Report event definition ----*/ -typedef enum { - RTT_COMMAND_HEADER_ERROR = 0, //rtt cmd header parsing error --terminate - RTT_COMMAND_ERROR, //rtt body parsing error -- skip current STA REQ - RTT_MODULE_BUSY, //rtt no resource -- terminate - RTT_TOO_MANY_STA, //STA exceed the support limit -- only server the first n STA - RTT_NO_RESOURCE, //any allocate failure - RTT_VDEV_ERROR, //can not find vdev with vdev ID -- skip current STA REQ - RTT_TRANSIMISSION_ERROR, //Tx failure -- continiue and measure number-- - RTT_TM_TIMER_EXPIRE, //wait for first TM timer expire -- terminate current STA measurement - RTT_FRAME_TYPE_NOSUPPORT, //we do not support RTT measurement with this type of frame - RTT_TIMER_EXPIRE, //whole RTT measurement timer expire -- terminate current STA measurement - RTT_CHAN_SWITCH_ERROR, //channel swicth failed - RTT_TMR_TRANS_ERROR, //TMR trans error, this dest peer will be skipped - RTT_NO_REPORT_BAD_CFR_TOKEN, //V3 only. If both CFR and Token mismatch, do not report - RTT_NO_REPORT_FIRST_TM_BAD_CFR, //For First TM, if CFR is bad, then do not report - RTT_REPORT_TYPE2_MIX, //do not allow report type2 mix with type 0, 1 - WMI_RTT_REJECT_MAX, -} WMI_RTT_ERROR_INDICATOR; typedef struct { A_UINT32 time32; //upper 32 bits of time stamp @@ -4444,169 +4270,6 @@ typedef struct { } A_TIME64; typedef struct { - A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rtt_event_header */ - A_UINT32 req_id; //identify the command and info - /*result is a bit mask - *bit 0:15 req_id from measurement request command - *bit 16: Success 1 / Fail 0 - *bit 17: Measurement Finished 1 / Measurement not Finished 0 - *bit 20:18 RTT measurement Type 000 - NULL 001-QoS_NULL 002 -TMR - *bit 23:21 report type (0,1,2) - *bit 25:24 V3 report status (v2 ignore) (report type 2 ignore) - * 00-Good 01 - Bad CFR 10 -- bad token - *bit 26: V3 accomplishment (v2 ignore) (report type 2 ignore) - * 0 - sending side is not finishing - * 1 - sending side finish - *bit 27: V3 start of a TM sequence (v2 ignore) (report type 2 ignore) - * 0 - not a start frame 1 -- start frame - *bit 31:28: #of AP inside this report (only for report type 2, 0,1 ignore) - */ - wmi_mac_addr dest_mac; - //In report type 1 and 2, MAC of the AP - //in report type 2, bit 31:0 is the channel info -}wmi_rtt_event_hdr; - -typedef struct { - /* RTT header would be added to the buffer as a TLV preceding this structure*/ - A_UINT32 rx_chain; // Rx chain info - /************************************************************ - * Bit:0-3:chain mask * - * Bit 4-5: band width info * - * 00 --Legacy 20, 01 --HT/VHT20 * - * 10 --HT/VHT40, 11 -- VHT80 * - ************************************************************/ - A_TIME64 tod; // resolution of 0.1ns - A_TIME64 toa; // resolution of 0.1ns - //If Measurement type is TMR, should be T3, T4 here A_TIME64 - //chain report body will be expand here - //includes rssi + channel dump for each chain -}wmi_rtt_meas_event; - -typedef struct { - wmi_mac_addr dest_mac; - A_UINT32 control; - //bit 0:7 #of measurement reports in this AP - //bit 10:8 RTT measurement type - //bit 31:11 reserved -}wmi_rtt_per_peer_event_hdr; - -typedef struct { - A_UINT32 rx_bw; - A_UINT32 rssi; - A_TIME64 tod; - A_TIME64 toa; -} wmi_rtt_per_frame_ie_v2; - -typedef struct { - A_UINT32 rx_bw; - A_UINT32 rssi; - A_TIME64 t1; - A_TIME64 t2; - A_UINT32 t3_del; - A_UINT32 t4_del; -} wmi_rtt_per_frame_ie_v3; - - -typedef struct { - /* RTT Event header TLV precedes this TLV - * wmi_rtt_event_hdr header; - */ - A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rtt_error_report_event_fixed_param */ - WMI_RTT_ERROR_INDICATOR reject_reason; -}wmi_rtt_error_report_event_fixed_param; - -typedef struct { - A_UINT32 req_id; //identify the command - A_UINT32 result; //Successfully or not 0-fail, 1-success - A_UINT64 peer_tsf; //TSF of peer - A_UINT64 self_tsf; //Self's TSF - A_UINT32 beacon_delta; //time delta between peer and self's beacon -}wmi_rtt_tsf_meas_event; - -#define RTT_V3_GOOD 0x0 -#define RTT_V3_BAD_CFR 0x1 -#define RTT_V3_BAD_TOKEN 0x2 - -#define RTT_REPORT_PER_FRAME_WITH_CFR 0 -#define RTT_REPORT_PER_FRAME_NO_CFR 1 -#define RTT_AGGREAGET_REPORT_NON_CFR 2 - -//define RTT report macro -#define WMI_RTT_REPORT_REQ_ID_S 0 -#define WMI_RTT_REPORT_REQ_ID (0xffff << WMI_RTT_REPORT_REQ_ID_S) -#define WMI_RTT_REPORT_REQ_ID_GET(x) WMI_F_MS(x, WMI_RTT_REPORT_REQ_ID) -#define WMI_RTT_REPORT_REQ_ID_SET(x,z) WMI_F_RMW(x,z, WMI_RTT_REPORT_REQ_ID) - -#define WMI_RTT_REPORT_CHAN_INFO_S 0 -#define WMI_RTT_REPORT_CHAN_INFO (0xffffffff << WMI_RTT_REPORT_CHAN_INFO_S) -#define WMI_RTT_REPORT_CHAN_INFO_GET(x) WMI_F_MS(x, WMI_RTT_REPORT_CHAN_INFO) -#define WMI_RTT_REPORT_CHAN_INFO_SET(x,z) WMI_F_RMW(x,z, WMI_RTT_REPORT_CHAN_INFO) - - -#define WMI_RTT_REPORT_STATUS_S 16 -#define WMI_RTT_REPORT_STATUS (0x1 << WMI_RTT_REPORT_STATUS_S) -#define WMI_RTT_REPORT_STATUS_GET(x) WMI_F_MS(x, WMI_RTT_REPORT_STATUS) -#define WMI_RTT_REPORT_STATUS_SET(x,z) WMI_F_RMW(x,z, WMI_RTT_REPORT_STATUS) - -#define WMI_RTT_REPORT_FINISH_S 17 -#define WMI_RTT_REPORT_FINISH (0x1 << WMI_RTT_REPORT_FINISH_S) -#define WMI_RTT_REPORT_FINISH_GET(x) WMI_F_MS(x, WMI_RTT_REPORT_FINISH) -#define WMI_RTT_REPORT_FINISH_SET(x,z) WMI_F_RMW(x,z, WMI_RTT_REPORT_FINISH) - -#define WMI_RTT_REPORT_MEAS_TYPE_S 18 -#define WMI_RTT_REPORT_MEAS_TYPE (0x7 << WMI_RTT_REPORT_MEAS_TYPE_S) -#define WMI_RTT_REPORT_MEAS_TYPE_GET(x) WMI_F_MS(x, WMI_RTT_REPORT_MEAS_TYPE) -#define WMI_RTT_REPORT_MEAS_TYPE_SET(x,z) WMI_F_RMW(x,z, WMI_RTT_REPORT_MEAS_TYPE) - -#define WMI_RTT_REPORT_REPORT_TYPE_S 21 -#define WMI_RTT_REPORT_REPORT_TYPE (0x7 << WMI_RTT_REPORT_REPORT_TYPE_S) -#define WMI_RTT_REPORT_REPORT_TYPE_GET(x) WMI_F_MS(x, WMI_RTT_REPORT_REPORT_TYPE) -#define WMI_RTT_REPORT_REPORT_TYPE_SET(x,z) WMI_F_RMW(x,z, WMI_RTT_REPORT_REPORT_TYPE) - -#define WMI_RTT_REPORT_V3_STATUS_S 24 -#define WMI_RTT_REPORT_V3_STATUS (0x3 << WMI_RTT_REPORT_V3_STATUS_S) -#define WMI_RTT_REPORT_V3_STATUS_GET(x) WMI_F_MS(x, WMI_RTT_REPORT_V3_STATUS) -#define WMI_RTT_REPORT_V3_STATUS_SET(x,z) WMI_F_RMW(x,z, WMI_RTT_REPORT_V3_STATUS) - -#define WMI_RTT_REPORT_V3_FINISH_S 26 -#define WMI_RTT_REPORT_V3_FINISH (0x1 << WMI_RTT_REPORT_V3_FINISH_S) -#define WMI_RTT_REPORT_V3_FINISH_GET(x) WMI_F_MS(x, WMI_RTT_REPORT_V3_FINISH) -#define WMI_RTT_REPORT_V3_FINISH_SET(x,z) WMI_F_RMW(x,z, WMI_RTT_REPORT_V3_FINISH) - -#define WMI_RTT_REPORT_V3_TM_START_S 27 -#define WMI_RTT_REPORT_V3_TM_START (0x1 << WMI_RTT_REPORT_V3_TM_START_S) -#define WMI_RTT_REPORT_V3_TM_START_GET(x) WMI_F_MS(x, WMI_RTT_REPORT_V3_TM_START) -#define WMI_RTT_REPORT_V3_TM_START_SET(x,z) WMI_F_RMW(x,z, WMI_RTT_REPORT_V3_TM_START) - -#define WMI_RTT_REPORT_NUM_AP_S 28 //used for only Report Type 2 -#define WMI_RTT_REPORT_NUM_AP (0xf << WMI_RTT_REPORT_NUM_AP_S) -#define WMI_RTT_REPORT_NUM_AP_GET(x) WMI_F_MS(x,WMI_RTT_REPORT_NUM_AP) -#define WMI_RTT_REPORT_NUM_AP_SET(x,z) WMI_F_RMW(x,z,WMI_RTT_REPORT_NUM_AP) - -//body start here -#define WMI_RTT_REPORT_RX_CHAIN_S 0 -#define WMI_RTT_REPORT_RX_CHAIN (0xf << WMI_RTT_REPORT_RX_CHAIN_S) -#define WMI_RTT_REPORT_RX_CHAIN_GET(x) WMI_F_MS(x, WMI_RTT_REPORT_RX_CHAIN) -#define WMI_RTT_REPORT_RX_CHAIN_SET(x,z) WMI_F_RMW(x,z, WMI_RTT_REPORT_RX_CHAIN) - -#define WMI_RTT_REPORT_RX_BW_S 4 -#define WMI_RTT_REPORT_RX_BW (0x3 << WMI_RTT_REPORT_RX_BW_S) -#define WMI_RTT_REPORT_RX_BW_GET(x) WMI_F_MS(x, WMI_RTT_REPORT_RX_BW) -#define WMI_RTT_REPORT_RX_BW_SET(x,z) WMI_F_RMW(x,z, WMI_RTT_REPORT_RX_BW) - -#define WMI_RTT_REPORT_TYPE2_NUM_MEAS_S 0 -#define WMI_RTT_REPORT_TYPE2_NUM_MEAS (0xff << WMI_RTT_REPORT_TYPE2_NUM_MEAS_S) -#define WMI_RTT_REPORT_TYPE2_NUM_MEAS_GET(x) WMI_F_MS(x, WMI_RTT_REPORT_TYPE2_NUM_MEAS) -#define WMI_RTT_REPORT_TYPE2_NUM_MEAS_SET(x,z) WMI_F_RMW(x,z, WMI_RTT_REPORT_TYPE2_NUM_MEAS) - -#define WMI_RTT_REPORT_TYPE2_MEAS_TYPE_S 8 -#define WMI_RTT_REPORT_TYPE2_MEAS_TYPE (0x7 << WMI_RTT_REPORT_TYPE2_MEAS_TYPE_S) -#define WMI_RTT_REPORT_TYPE2_MEAS_TYPE_GET(x) WMI_F_MS(x, WMI_RTT_REPORT_TYPE2_MEAS_TYPE) -#define WMI_RTT_REPORT_TYPE2_MEAS_TYPE_SET(x,z) WMI_F_RMW(x,z, WMI_RTT_REPORT_TYPE2_MEAS_TYPE) - -/*---- end of RTT report event definition ----*/ - -typedef struct { A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_peer_sta_kickout_event_fixed_param */ /** peer mac address */ wmi_mac_addr peer_macaddr; @@ -4668,7 +4331,7 @@ when comparing wifi header.*/ #define WOW_DEFAULT_BITMAP_PATTERN_SIZE_DWORD 37 //Convert WOW_DEFAULT_EVT_BUF_SIZE into Int32 size #define WOW_DEFAULT_BITMASK_SIZE 146 #define WOW_DEFAULT_BITMASK_SIZE_DWORD 37 -#define WOW_MAX_BITMAP_FILTERS 22 +#define WOW_MAX_BITMAP_FILTERS 32 #define WOW_DEFAULT_MAGIG_PATTERN_MATCH_CNT 16 #define WOW_DEFAULT_EVT_BUF_SIZE 148 /* Maximum 148 bytes of the data is copied starting from header incase if the match is found. The 148 comes from (128 - 14 ) payload size + 8bytes LLC + 26bytes MAC header*/ @@ -5525,6 +5188,17 @@ typedef struct { wmi_wmm_vparams wmm_params[4]; /* 0 be, 1 bk, 2 vi, 3 vo */ } wmi_vdev_set_wmm_params_cmd_fixed_param; +typedef struct { + A_UINT32 tlv_header; + A_UINT32 vdev_id; + A_UINT32 gtxRTMask[2]; /* for HT and VHT rate masks */ + A_UINT32 userGtxMask; /* host request for GTX mask */ + A_UINT32 gtxPERThreshold; /* default: 10% */ + A_UINT32 gtxPERMargin; /* default: 2% */ + A_UINT32 gtxTPCstep; /* default: 1 */ + A_UINT32 gtxTPCMin; /* default: 5 */ + A_UINT32 gtxBWMask; /* 20/40/80/160 Mhz */ +} wmi_vdev_set_gtx_params_cmd_fixed_param; typedef struct { @@ -5840,6 +5514,34 @@ typedef struct { A_UINT32 value; } wmi_sta_smps_param_cmd_fixed_param; +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_mcc_sched_sta_traffic_stats */ + A_UINT32 tlv_header; + /* TX stats */ + A_UINT32 txBytesPushed; + A_UINT32 txPacketsPushed; + /* RX stats */ + A_UINT32 rxBytesRcvd; + A_UINT32 rxPacketsRcvd; + A_UINT32 rxTimeTotal; + /** peer MAC address */ + wmi_mac_addr peer_macaddr; +} wmi_mcc_sched_sta_traffic_stats; + +typedef struct { + /** TLV tag and len; tag equals + * WMITLV_TAG_STRUC_wmi_mcc_sched_traffic_stats_cmd_fixed_param */ + A_UINT32 tlv_header; + /** Duration over which the host stats were collected */ + A_UINT32 duration; + /** Number of stations filled in following stats array */ + A_UINT32 num_sta; + /* Following this struct are the TLVs: + * wmi_mcc_sched_sta_traffic_stats mcc_sched_sta_traffic_stats_list; + */ +} wmi_mcc_sched_traffic_stats_cmd_fixed_param; + #ifdef __cplusplus } #endif diff --git a/CORE/SERVICES/COMMON/wmi_version.h b/CORE/SERVICES/COMMON/wmi_version.h index ef8b4f7ac988..4ce800710c27 100644 --- a/CORE/SERVICES/COMMON/wmi_version.h +++ b/CORE/SERVICES/COMMON/wmi_version.h @@ -36,7 +36,7 @@ #define __WMI_VER_MINOR_ 0 /** WMI revision number has to be incremented when there is a * change that may or may not break compatibility. */ -#define __WMI_REVISION_ 12 +#define __WMI_REVISION_ 17 /** The Version Namespace should not be normally changed. Only * host and firmware of the same WMI namespace will work diff --git a/CORE/SERVICES/HIF/PCIe/if_pci.c b/CORE/SERVICES/HIF/PCIe/if_pci.c index 5a63f151b500..a637a5c791b7 100644 --- a/CORE/SERVICES/HIF/PCIe/if_pci.c +++ b/CORE/SERVICES/HIF/PCIe/if_pci.c @@ -38,6 +38,9 @@ #include <osapi_linux.h> #include "vos_api.h" #include "wma_api.h" +#ifdef CONFIG_CNSS +#include <net/cnss.h> +#endif #ifdef WLAN_BTAMP_FEATURE #include "wlan_btc_svc.h" @@ -895,7 +898,8 @@ hif_pci_remove(struct pci_dev *pdev) #define OL_ATH_PCI_PM_CONTROL 0x44 #ifdef WLAN_LINK_UMAC_SUSPEND_WITH_BUS_SUSPEND -void hdd_suspend_wlan(void); +void hdd_suspend_wlan(void (*callback)(void *callbackContext), + void *callbackContext); #endif static int @@ -907,10 +911,15 @@ hif_pci_suspend(struct pci_dev *pdev, pm_message_t state) u32 val; #ifdef WLAN_LINK_UMAC_SUSPEND_WITH_BUS_SUSPEND - hdd_suspend_wlan(); + hdd_suspend_wlan(NULL, NULL); /* TODO: Wait until tx queue drains. Remove this hard coded delay */ msleep(3*1000); /* 3 sec */ #endif + +#if CONFIG_ATH_PCIE_MAX_PERF + /* Max performance path so no need to wake/poll target */ + A_PCI_WRITE32(sc->mem + FW_INDICATOR_ADDRESS, (state.event << 16)); +#else /* Make sure to wake Target before accessing Target memory */ A_PCI_WRITE32(sc->mem + PCIE_LOCAL_BASE_ADDRESS + PCIE_SOC_WAKE_ADDRESS, PCIE_SOC_WAKE_V_MASK); while (!hif_pci_targ_is_awake(sc, sc->mem)) { @@ -918,6 +927,7 @@ hif_pci_suspend(struct pci_dev *pdev, pm_message_t state) } A_PCI_WRITE32(sc->mem + FW_INDICATOR_ADDRESS, (state.event << 16)); A_PCI_WRITE32(sc->mem + PCIE_LOCAL_BASE_ADDRESS + PCIE_SOC_WAKE_ADDRESS, PCIE_SOC_WAKE_RESET); +#endif /* No need to send WMI_PDEV_SUSPEND_CMDID to FW if WOW is enabled */ if (!wma_is_wow_enabled(vos_get_context(VOS_MODULE_ID_WDA, vos)) && @@ -968,6 +978,10 @@ hif_pci_resume(struct pci_dev *pdev) pci_write_config_dword(pdev, 0x40, val & 0xffff00ff); } +#if CONFIG_ATH_PCIE_MAX_PERF + /* Max performance patch so no need to wake/poll target */ + val = A_PCI_READ32(sc->mem + FW_INDICATOR_ADDRESS) >> 16; +#else /* Make sure to wake Target before accessing Target memory */ A_PCI_WRITE32(sc->mem + PCIE_LOCAL_BASE_ADDRESS + PCIE_SOC_WAKE_ADDRESS, PCIE_SOC_WAKE_V_MASK); while (!hif_pci_targ_is_awake(sc, sc->mem)) { @@ -975,6 +989,7 @@ hif_pci_resume(struct pci_dev *pdev) } val = A_PCI_READ32(sc->mem + FW_INDICATOR_ADDRESS) >> 16; A_PCI_WRITE32(sc->mem + PCIE_LOCAL_BASE_ADDRESS + PCIE_SOC_WAKE_ADDRESS, PCIE_SOC_WAKE_RESET); +#endif /* No need to send WMI_PDEV_RESUME_CMDID to FW if WOW is enabled */ if (!wma_is_wow_enabled(vos_get_context(VOS_MODULE_ID_WDA, vos_context)) && @@ -997,6 +1012,18 @@ adf_os_size_t initBufferCount(adf_os_size_t maxSize) return maxSize; } +#ifdef CONFIG_CNSS +struct cnss_wlan_driver cnss_wlan_drv_id = { + .name = "hif_pci", + .id_table = hif_pci_id_table, + .probe = hif_pci_probe, + .remove = hif_pci_remove, +#ifdef ATH_BUS_PM + .suspend = hif_pci_suspend, + .resume = hif_pci_resume, +#endif +}; +#else MODULE_DEVICE_TABLE(pci, hif_pci_id_table); struct pci_driver hif_pci_drv_id = { .name = "hif_pci", @@ -1008,15 +1035,24 @@ struct pci_driver hif_pci_drv_id = { .resume = hif_pci_resume, #endif }; +#endif int hif_register_driver(void) { +#ifdef CONFIG_CNSS + return cnss_wlan_register_driver(&cnss_wlan_drv_id); +#else return pci_register_driver(&hif_pci_drv_id); +#endif } void hif_unregister_driver(void) { +#ifdef CONFIG_CNSS + cnss_wlan_unregister_driver(&cnss_wlan_drv_id); +#else pci_unregister_driver(&hif_pci_drv_id); +#endif } void hif_init_pdev_txrx_handle(void *ol_sc, void *txrx_handle) diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c index 93ccb522de36..974f15869950 100644 --- a/CORE/SERVICES/WMA/wma.c +++ b/CORE/SERVICES/WMA/wma.c @@ -5563,6 +5563,8 @@ static void wma_set_max_tx_power(WMA_HANDLE handle, } else WMA_LOGE("Failed to find vdev to set WMI_VDEV_PARAM_TX_PWRLIMIT"); + + wma_send_msg(wma_handle, WDA_SET_MAX_TX_POWER_RSP, tx_pwr_params, 0); } /* @@ -6503,6 +6505,32 @@ void wma_scan_cache_updated_ind(tp_wma_handle wma) #define WMA_DUMP_WOW_PTRN +void wma_send_ready_to_suspend_ind(tp_wma_handle wma) +{ + tSirReadyToSuspendInd *ready_to_suspend; + VOS_STATUS status; + vos_msg_t vos_msg; + u_int8_t len; + + WMA_LOGD("Posting ready to suspend indication to umac"); + + len = sizeof(tSirReadyToSuspendInd); + ready_to_suspend = (tSirReadyToSuspendInd *) vos_mem_malloc(len); + + ready_to_suspend->mesgType = eWNI_SME_READY_TO_SUSPEND_IND; + ready_to_suspend->mesgLen = len; + + vos_msg.type = eWNI_SME_READY_TO_SUSPEND_IND; + vos_msg.bodyptr = (void *) ready_to_suspend; + vos_msg.bodyval = 0; + + status = vos_mq_post_message(VOS_MQ_ID_SME, &vos_msg); + if (status != VOS_STATUS_SUCCESS) { + WMA_LOGE("Failed to post ready to suspend"); + vos_mem_free(ready_to_suspend); + } +} + /* Frees memory associated to given pattern ID in wow pattern cache. */ static inline void wma_free_wow_ptrn(tp_wma_handle wma, u_int8_t ptrn_id) { @@ -7082,6 +7110,8 @@ static VOS_STATUS wma_suspend_req(tp_wma_handle wma, tpSirWlanSuspendParam info) VOS_STATUS ret; u_int8_t i; + wma->no_of_suspend_ind++; + if (info->sessionId > wma->max_bssid) { WMA_LOGE("Invalid vdev id (%d)", info->sessionId); vos_mem_free(info); @@ -7096,8 +7126,14 @@ static VOS_STATUS wma_suspend_req(tp_wma_handle wma, tpSirWlanSuspendParam info) } if (!wma->wow.magic_ptrn_enable && !iface->ptrn_match_enable) { - WMA_LOGD("Both magic and pattern byte match are disabled"); vos_mem_free(info); + + if (wma->no_of_suspend_ind == wma_get_vdev_count(wma)) { + WMA_LOGD("Both magic and pattern byte match are disabled"); + wma->no_of_suspend_ind = 0; + goto send_ready_to_suspend; + } + return VOS_STATUS_SUCCESS; } @@ -7110,7 +7146,7 @@ static VOS_STATUS wma_suspend_req(tp_wma_handle wma, tpSirWlanSuspendParam info) * suspend indication received on last vdev before * enabling wow in fw. */ - if (++wma->no_of_suspend_ind < wma_get_vdev_count(wma)) { + if (wma->no_of_suspend_ind < wma_get_vdev_count(wma)) { vos_mem_free(info); return VOS_STATUS_SUCCESS; } @@ -7128,7 +7164,7 @@ static VOS_STATUS wma_suspend_req(tp_wma_handle wma, tpSirWlanSuspendParam info) if (!connected) { WMA_LOGD("All vdev are in disconnected state, skipping wow"); vos_mem_free(info); - return VOS_STATUS_SUCCESS; + goto send_ready_to_suspend; } WMA_LOGD("WOW Suspend"); @@ -7142,8 +7178,11 @@ static VOS_STATUS wma_suspend_req(tp_wma_handle wma, tpSirWlanSuspendParam info) vos_mem_free(info); return ret; } - vos_mem_free(info); + +send_ready_to_suspend: + wma_send_ready_to_suspend_ind(wma); + return VOS_STATUS_SUCCESS; } @@ -7469,19 +7508,25 @@ static int wma_process_receive_filter_clear_filter_req(tp_wma_handle wma_handle, * function fetches stats from data path APIs and post * WDA_TSM_STATS_RSP msg back to LIM. * @param: wma_handler - handle to wma - * @param: pTsmStats - TSM stats struct that needs to be populated and + * @param: pTsmStatsMsg - TSM stats struct that needs to be populated and * passed in message. */ - VOS_STATUS wma_process_tsm_stats_req(tp_wma_handle wma_handler, - tTSMStats *pTsmStats) + void *pTsmStatsMsg) { - int tid = pTsmStats->tid; u_int8_t counter; u_int32_t queue_delay_microsec = 0; u_int32_t tx_delay_microsec = 0; u_int16_t packet_count = 0; u_int16_t packet_loss_count = 0; + tpAniTrafStrmMetrics pTsmMetric = NULL; +#ifdef FEATURE_WLAN_CCX_UPLOAD + tpAniGetTsmStatsReq pStats = (tpAniGetTsmStatsReq)pTsmStatsMsg; + tpAniGetTsmStatsRsp pTsmRspParams = NULL; +#else + tTSMStats pStats = (tTSMStats)pTsmStatsMsg; +#endif + int tid = pStats->tid; /* * The number of histrogram bin report by data path api are different * than required by TSM, hence different (6) size array used @@ -7496,29 +7541,49 @@ VOS_STATUS wma_process_tsm_stats_req(tp_wma_handle wma_handler, ol_tx_delay_hist(pdev, bin_values, tid); ol_tx_packet_count(pdev, &packet_count, &packet_loss_count, tid ); - /* populate pTsmStats */ - pTsmStats->tsmMetrics.UplinkPktQueueDly = queue_delay_microsec; +#ifdef FEATURE_WLAN_CCX_UPLOAD + pTsmRspParams = + (tpAniGetTsmStatsRsp)vos_mem_malloc(sizeof(tAniGetTsmStatsRsp)); + if(NULL == pTsmRspParams) + { + VOS_TRACE( VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR, + "%s: VOS MEM Alloc Failure", __func__); + VOS_ASSERT(0); + vos_mem_free(pTsmStatsMsg); + return VOS_STATUS_E_NOMEM; + } + pTsmRspParams->staId = pStats->staId; + pTsmRspParams->rc = eSIR_FAILURE; + pTsmRspParams->tsmStatsReq = pStats; + pTsmMetric = &pTsmRspParams->tsmMetrics; +#else + pTsmMetric = &pStats->tsmMetrics; +#endif + /* populate pTsmMetric */ + pTsmMetric->UplinkPktQueueDly = queue_delay_microsec; /* store only required number of bin values */ for ( counter = 0; counter < TSM_DELAY_HISTROGRAM_BINS; counter++) { - pTsmStats->tsmMetrics.UplinkPktQueueDlyHist[counter] = - bin_values[counter]; + pTsmMetric->UplinkPktQueueDlyHist[counter] = bin_values[counter]; } - pTsmStats->tsmMetrics.UplinkPktTxDly = tx_delay_microsec; - pTsmStats->tsmMetrics.UplinkPktLoss = packet_loss_count; - pTsmStats->tsmMetrics.UplinkPktCount = packet_count; + pTsmMetric->UplinkPktTxDly = tx_delay_microsec; + pTsmMetric->UplinkPktLoss = packet_loss_count; + pTsmMetric->UplinkPktCount = packet_count; /* * No need to populate roaming delay and roaming count as they are * being populated just before sending IAPP frame out */ - /* post this message to LIM/PE */ - wma_send_msg(wma_handler, WDA_TSM_STATS_RSP, (void *)pTsmStats , 0) ; +#ifdef FEATURE_WLAN_CCX_UPLOAD + wma_send_msg(wma_handler, WDA_TSM_STATS_RSP, (void *)pTsmRspParams , 0) ; +#else + wma_send_msg(wma_handler, WDA_TSM_STATS_RSP, (void *)pTsmStatsMsg , 0) ; +#endif return VOS_STATUS_SUCCESS; } -#endif +#endif /* FEATURE_WLAN_CCX */ static void wma_add_ts_req(tp_wma_handle wma, tAddTsParams *msg) { @@ -8527,7 +8592,7 @@ VOS_STATUS wma_mc_process_msg(v_VOID_t *vos_context, vos_msg_t *msg) #ifdef FEATURE_WLAN_CCX case WDA_TSM_STATS_REQ: WMA_LOGA("McThread: WDA_TSM_STATS_REQ"); - wma_process_tsm_stats_req(wma_handle, (tTSMStats *)msg->bodyptr); + wma_process_tsm_stats_req(wma_handle, (void*)msg->bodyptr); break; #endif case WNI_CFG_DNLD_REQ: diff --git a/CORE/SME/inc/csrApi.h b/CORE/SME/inc/csrApi.h index 88eea1083e04..e5f226e9a779 100644 --- a/CORE/SME/inc/csrApi.h +++ b/CORE/SME/inc/csrApi.h @@ -1512,5 +1512,8 @@ eHalStatus csrSetBand(tHalHandle hHal, eCsrBand eBand); ---------------------------------------------------------------------------*/ eCsrBand csrGetCurrentBand (tHalHandle hHal); + +typedef void (*csrReadyToSuspendCallback)(void *pContext); + #endif diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h index cee18a1df35f..c44a18eef8ab 100644 --- a/CORE/SME/inc/sme_Api.h +++ b/CORE/SME/inc/sme_Api.h @@ -1854,8 +1854,10 @@ eHalStatus sme_ConfigureAppsCpuWakeupState( tHalHandle hHal, tANI_BOOLEAN isApp --------------------------------------------------------------------------- */ -eHalStatus sme_ConfigureSuspendInd( tHalHandle hHal, - tpSirWlanSuspendParam wlanSuspendParam); +eHalStatus sme_ConfigureSuspendInd( tHalHandle hHal, + tpSirWlanSuspendParam wlanSuspendParam, + csrReadyToSuspendCallback, + void *callbackContext); /* --------------------------------------------------------------------------- diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c index 76a3958d29c6..dd5a89cd446b 100644 --- a/CORE/SME/src/sme_common/sme_Api.c +++ b/CORE/SME/src/sme_common/sme_Api.c @@ -1503,6 +1503,39 @@ void sme_ProcessGetGtkInfoRsp( tHalHandle hHal, } #endif +/*-------------------------------------------------------------------------- + + \fn - sme_ProcessReadyToSuspend + \brief - On getting ready to suspend indication, this function calls + callback registered (HDD callbacks) with SME to inform + ready to suspend indication. + + \param hHal - Handle returned by macOpen. + + \return None + + \sa + + --------------------------------------------------------------------------*/ +void sme_ProcessReadyToSuspend( tHalHandle hHal, + tpSirReadyToSuspendInd pReadyToSuspend) +{ + tpAniSirGlobal pMac = PMAC_STRUCT( hHal ); + + if (NULL == pMac) + { + VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_FATAL, + "%s: pMac is null", __func__); + return ; + } + + if (NULL != pMac->readyToSuspendCallback) + { + pMac->readyToSuspendCallback (pMac->readyToSuspendContext); + pMac->readyToSuspendCallback = NULL; + } +} + /* --------------------------------------------------------------------------- \fn sme_ChangeConfigParams \brief The SME API exposed for HDD to provide config params to SME during @@ -2150,6 +2183,18 @@ eHalStatus sme_ProcessMsg(tHalHandle hHal, vos_msg_t* pMsg) } break ; #endif + case eWNI_SME_READY_TO_SUSPEND_IND: + if (pMsg->bodyptr) + { + sme_ProcessReadyToSuspend(pMac, pMsg->bodyptr); + vos_mem_free(pMsg->bodyptr); + } + else + { + smsLog(pMac, LOGE, "Empty rsp message for (eWNI_SME_READY_TO_SUSPEND_IND), nothing to process"); + } + break ; + default: if ( ( pMsg->type >= eWNI_SME_MSG_TYPES_BEGIN ) @@ -6268,7 +6313,9 @@ eHalStatus sme_ConfigureRxpFilter( tHalHandle hHal, --------------------------------------------------------------------------- */ eHalStatus sme_ConfigureSuspendInd( tHalHandle hHal, - tpSirWlanSuspendParam wlanSuspendParam) + tpSirWlanSuspendParam wlanSuspendParam, + csrReadyToSuspendCallback callback, + void *callbackContext) { eHalStatus status = eHAL_STATUS_SUCCESS; VOS_STATUS vosStatus = VOS_STATUS_SUCCESS; @@ -6287,6 +6334,13 @@ eHalStatus sme_ConfigureSuspendInd( tHalHandle hHal, } sme_ReleaseGlobalLock( &pMac->sme ); } + + if ( VOS_IS_STATUS_SUCCESS(vosStatus) ) + { + pMac->readyToSuspendCallback = callback; + pMac->readyToSuspendContext = callbackContext; + } + return(status); } diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c index 10e73f0565e1..f93842e89481 100644 --- a/CORE/VOSS/src/vos_api.c +++ b/CORE/VOSS/src/vos_api.c @@ -385,6 +385,8 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize ) */ macOpenParms.frameTransRequired = 1; macOpenParms.driverType = eDRIVER_TYPE_PRODUCTION; + macOpenParms.powersaveOffloadEnabled = + pHddCtx->cfg_ini->enablePowersaveOffload; vStatus = WDA_open( gpVosContext, gpVosContext->pHDDContext, #ifndef QCA_WIFI_ISOC hdd_update_tgt_cfg, @@ -460,22 +462,6 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize ) /* UMA is supported in hardware for performing the frame translation 802.11 <-> 802.3 */ macOpenParms.frameTransRequired = 1; - /* - * Set Whether Power save Offload enabled or not - * This info needs to updated to MAC - * before opening sme module - * Based on this capability SME decides - * whether to open pmc or pmc offload - * module. - */ - if(pHddCtx->cfg_ini->enablePowersaveOffload) - { - macOpenParms.powersaveOffloadEnabled = TRUE; - } - else - { - macOpenParms.powersaveOffloadEnabled = FALSE; - } sirStatus = macOpen(&(gpVosContext->pMACContext), gpVosContext->pHDDContext, &macOpenParms); |
