summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2013-11-20 15:29:45 -0800
committerGerrit - the friendly Code Review server <code-review@localhost>2013-11-20 15:29:45 -0800
commite433288fc1c0189c90ed73b1cd88389e6ccc3174 (patch)
treed52cd763553718bf61a3b7f8132775e57cee309c
parentcba53bb8875a2109e1f05d138eca51609d88a1f7 (diff)
parent977071b82b62e755411210a4dbbc16c5452e2d30 (diff)
Merge "Merge remote-tracking branch 'origin/caf/caf-wlan/master'"
-rw-r--r--CORE/CLD_TXRX/TLSHIM/tl_shim.c8
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h6
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg80211.h6
-rw-r--r--CORE/HDD/inc/wlan_hdd_main.h4
-rw-r--r--CORE/HDD/inc/wlan_hdd_wowl.h9
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c6
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c30
-rw-r--r--CORE/HDD/src/wlan_hdd_early_suspend.c14
-rw-r--r--CORE/HDD/src/wlan_hdd_ftm.c37
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c5
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c5
-rw-r--r--CORE/HDD/src/wlan_hdd_wowl.c9
-rw-r--r--CORE/MAC/inc/aniGlobal.h4
-rw-r--r--CORE/MAC/inc/sirApi.h7
-rw-r--r--CORE/MAC/inc/wniApi.h1
-rw-r--r--CORE/SAP/src/sapFsm.c3
-rw-r--r--CORE/SERVICES/COMMON/dbglog_id.h59
-rw-r--r--CORE/SERVICES/COMMON/wlan_defs.h5
-rw-r--r--CORE/SERVICES/COMMON/wmi_tlv_defs.h28
-rw-r--r--CORE/SERVICES/COMMON/wmi_unified.h420
-rw-r--r--CORE/SERVICES/COMMON/wmi_version.h2
-rw-r--r--CORE/SERVICES/HIF/PCIe/if_pci.c40
-rw-r--r--CORE/SERVICES/WMA/wma.c103
-rw-r--r--CORE/SME/inc/csrApi.h3
-rw-r--r--CORE/SME/inc/sme_Api.h6
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c56
-rw-r--r--CORE/VOSS/src/vos_api.c18
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);