summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2014-04-26 11:53:41 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2014-04-26 11:53:41 -0700
commit6758f6e9e796c46f88a044ed01a5b942421087f7 (patch)
tree3884b881d7f0d62d5b183a904f66889532795517
parent7817f7012b978b3ff60933827676be3fb593594f (diff)
parent9978d6f1e07c043fdeb1c7aacfac135ddf702e3f (diff)
Merge "Release 1.0.0.100 QCACLD WLAN Driver"
-rw-r--r--CORE/CLD_TXRX/TLSHIM/tl_shim.c23
-rw-r--r--CORE/CLD_TXRX/TLSHIM/tl_shim.h2
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c10
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c40
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c2
-rw-r--r--CORE/HDD/src/wlan_hdd_ipa.c27
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c5
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c21
-rw-r--r--CORE/HDD/src/wlan_hdd_wmm.c4
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c10
-rw-r--r--CORE/MAC/src/pe/lim/limSendManagementFrames.c10
-rw-r--r--CORE/SERVICES/COMMON/dbglog_id.h4
-rw-r--r--CORE/SERVICES/COMMON/targaddrs.h2
-rw-r--r--CORE/SERVICES/COMMON/wmi_tlv_defs.h16
-rw-r--r--CORE/SERVICES/COMMON/wmi_unified.h53
-rw-r--r--CORE/SERVICES/COMMON/wmi_version.h2
-rw-r--r--CORE/SERVICES/HIF/USB/hif_usb.c5
-rw-r--r--CORE/SERVICES/HIF/USB/hif_usb_internal.h2
-rw-r--r--CORE/SERVICES/HIF/USB/if_usb.c29
-rw-r--r--CORE/SERVICES/HIF/USB/if_usb.h3
-rw-r--r--CORE/SERVICES/WMA/wma.c50
-rw-r--r--CORE/SERVICES/WMI/wmi_unified.c6
-rw-r--r--CORE/SERVICES/WMI/wmi_unified_priv.h1
-rw-r--r--CORE/TL/inc/wlan_qct_tl.h2
-rw-r--r--CORE/UTILS/FWLOG/dbglog_host.c24
-rw-r--r--CORE/VOSS/src/vos_nvitem.c3
-rw-r--r--Kbuild8
-rw-r--r--firmware_bin/WCNSS_qcom_cfg.usb.ini3
-rw-r--r--tools/fwdebuglog/cld-fwlog-parser.c24
-rw-r--r--tools/fwdebuglog/parser.c24
31 files changed, 316 insertions, 103 deletions
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
index e01c883fad56..7d86d3454140 100644
--- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c
+++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
@@ -45,9 +45,7 @@
#include "adf_nbuf.h"
#include "wma_api.h"
#include "vos_utils.h"
-#ifdef QCA_LL_TX_FLOW_CT
#include "wdi_out.h"
-#endif /* QCA_LL_TX_FLOW_CT */
#define ENTER() VOS_TRACE(VOS_MODULE_ID_TL, VOS_TRACE_LEVEL_INFO, "Enter:%s", __func__)
#define TLSHIM_LOGD(args...) \
@@ -932,6 +930,7 @@ void WLANTL_RegisterVdev(void *vos_ctx, void *vdev)
wdi_in_osif_vdev_register(vdev_handle, tl_shim, &txrx_ops);
/* TODO: Keep vdev specific tx callback, if needed */
tl_shim->tx = txrx_ops.tx.std;
+ adf_os_atomic_set(&tl_shim->vdev_active[vdev_handle->vdev_id], 1);
}
/*
@@ -948,6 +947,7 @@ void WLANTL_UnRegisterVdev(void *vos_ctx, u_int8_t vdev_id)
return;
}
+ adf_os_atomic_set(&tl_shim->vdev_active[vdev_id], 0);
#ifdef QCA_LL_TX_FLOW_CT
WLANTL_DeRegisterTXFlowControl(vos_ctx, vdev_id);
#endif /* QCA_LL_TX_FLOW_CT */
@@ -1032,7 +1032,7 @@ adf_nbuf_t WLANTL_SendSTA_DataFrame(void *vos_ctx, u_int8_t sta_id,
#ifdef IPA_OFFLOAD
adf_nbuf_t WLANTL_SendIPA_DataFrame(void *vos_ctx, void *vdev,
- adf_nbuf_t skb)
+ adf_nbuf_t skb, v_U8_t interface_id)
{
struct txrx_tl_shim_ctx *tl_shim = vos_get_context(VOS_MODULE_ID_TL,
vos_ctx);
@@ -1040,6 +1040,11 @@ adf_nbuf_t WLANTL_SendIPA_DataFrame(void *vos_ctx, void *vdev,
ENTER();
+ if (!adf_os_atomic_read(&tl_shim->vdev_active[interface_id])) {
+ TLSHIM_LOGW("INACTIVE VDEV");
+ return skb;
+ }
+
if ((tl_shim->ip_checksum_offload) && (skb->protocol == htons(ETH_P_IP))
&& (skb->ip_summed == CHECKSUM_PARTIAL))
skb->ip_summed = CHECKSUM_COMPLETE;
@@ -1648,7 +1653,7 @@ VOS_STATUS WLANTL_Close(void *vos_ctx)
}
adf_os_mem_free(tl_shim->session_flow_control);
#endif /* QCA_LL_TX_FLOW_CT */
-
+ adf_os_mem_free(tl_shim->vdev_active);
#ifdef FEATURE_WLAN_ESE
vos_flush_work(&tl_shim->iapp_work.deferred_work);
#endif
@@ -1671,9 +1676,7 @@ VOS_STATUS WLANTL_Open(void *vos_ctx, WLANTL_ConfigInfoType *tl_cfg)
struct txrx_tl_shim_ctx *tl_shim;
VOS_STATUS status;
u_int8_t i;
-#ifdef QCA_LL_TX_FLOW_CT
int max_vdev;
-#endif /* QCA_LL_TX_FLOW_CT */
ENTER();
status = vos_alloc_context(vos_ctx, VOS_MODULE_ID_TL,
@@ -1710,9 +1713,15 @@ VOS_STATUS WLANTL_Open(void *vos_ctx, WLANTL_ConfigInfoType *tl_cfg)
* TODO: Allocate memory for tx callback for maximum supported
* vdevs to maintain tx callbacks per vdev.
*/
+ max_vdev = wdi_out_cfg_max_vdevs(((pVosContextType)vos_ctx)->cfg_ctx);
+ tl_shim->vdev_active = adf_os_mem_alloc(NULL,
+ max_vdev * sizeof(adf_os_atomic_t));
+ for (i = 0; i < max_vdev; i++) {
+ adf_os_atomic_init(&tl_shim->vdev_active[i]);
+ adf_os_atomic_set(&tl_shim->vdev_active[i], 0);
+ }
#ifdef QCA_LL_TX_FLOW_CT
- max_vdev = wdi_out_cfg_max_vdevs(((pVosContextType)vos_ctx)->cfg_ctx);
tl_shim->session_flow_control = adf_os_mem_alloc(NULL,
max_vdev * sizeof(struct tlshim_session_flow_Control));
if (!tl_shim->session_flow_control) {
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.h b/CORE/CLD_TXRX/TLSHIM/tl_shim.h
index bbc400585cfe..bb675cc34618 100644
--- a/CORE/CLD_TXRX/TLSHIM/tl_shim.h
+++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.h
@@ -30,6 +30,7 @@
#include <ol_txrx_osif_api.h>
#include <adf_os_lock.h>
+#include <adf_os_atomic.h>
#ifdef FEATURE_WLAN_ESE
typedef struct deferred_iapp_work {
@@ -88,6 +89,7 @@ struct deferred_iapp_work iapp_work;
u_int32_t last_beacon_len;
u_int32_t delay_interval;
v_BOOL_t enable_rxthread;
+ adf_os_atomic_t *vdev_active;
#ifdef QCA_LL_TX_FLOW_CT
struct tlshim_session_flow_Control *session_flow_control;
#endif /* QCA_LL_TX_FLOW_CT */
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index 59465ed8eaf9..31ef227b0a41 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -2621,6 +2621,16 @@ eHalStatus hdd_RoamTdlsStatusUpdateHandler(hdd_adapter_t *pAdapter,
#ifdef CONFIG_TDLS_IMPLICIT
hddTdlsPeer_t *curr_peer;
+ /* ignore TDLS_SHOULD_DISCOVER if any concurrency detected */
+ if ((1 << VOS_STA_MODE) != pHddCtx->concurrency_mode)
+ {
+ VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
+ "%s: concurrency detected. ignore SHOULD_DISCOVER",
+ __func__);
+ status = eHAL_STATUS_FAILURE;
+ break;
+ }
+
curr_peer = wlan_hdd_tdls_get_peer(pAdapter, pRoamInfo->peerMac);
if (!curr_peer)
{
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index ce3a10fc5d02..651e859a8ed3 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -2487,10 +2487,20 @@ static int wlan_hdd_cfg80211_start_bss(hdd_adapter_t *pHostapdAdapter,
else
pConfig->SapHw_mode = eSAP_DOT11_MODE_11ac;
- /* Disable VHT support in 2.4 GHz band */
- if (iniConfig->apOperatingBand == eSAP_RF_SUBBAND_2_4_GHZ &&
- WLAN_HDD_GET_CTX(pHostapdAdapter)->
- cfg_ini->enableVhtFor24GHzBand == FALSE)
+ /*If ACS disable and selected channel <= 14
+ OR
+ ACS enabled and ACS operating band is choosen as 2.4
+ AND
+ VHT in 2.4G Disabled
+ THEN
+ Fallback to 11N mode
+ */
+ if (((AUTO_CHANNEL_SELECT != pConfig->channel && pConfig->channel <= 14)
+ || (AUTO_CHANNEL_SELECT == pConfig->channel &&
+ iniConfig->apOperatingBand == eSAP_RF_SUBBAND_2_4_GHZ))
+ &&
+ (WLAN_HDD_GET_CTX(pHostapdAdapter)->cfg_ini->enableVhtFor24GHzBand
+ == FALSE))
pConfig->SapHw_mode = eSAP_DOT11_MODE_11n;
}
#endif
@@ -7579,7 +7589,7 @@ static int wlan_hdd_cfg80211_set_wiphy_params(struct wiphy *wiphy,
if (changed & WIPHY_PARAM_RTS_THRESHOLD)
{
- u16 rts_threshold = (wiphy->rts_threshold == -1) ?
+ u32 rts_threshold = (wiphy->rts_threshold == -1) ?
WNI_CFG_RTS_THRESHOLD_STAMAX :
wiphy->rts_threshold;
@@ -7587,7 +7597,7 @@ static int wlan_hdd_cfg80211_set_wiphy_params(struct wiphy *wiphy,
(WNI_CFG_RTS_THRESHOLD_STAMAX < rts_threshold))
{
hddLog(VOS_TRACE_LEVEL_ERROR,
- "%s: Invalid RTS Threshold value %hu",
+ "%s: Invalid RTS Threshold value %u",
__func__, rts_threshold);
return -EINVAL;
}
@@ -7597,12 +7607,12 @@ static int wlan_hdd_cfg80211_set_wiphy_params(struct wiphy *wiphy,
eANI_BOOLEAN_TRUE))
{
hddLog(VOS_TRACE_LEVEL_ERROR,
- "%s: ccmCfgSetInt failed for rts_threshold value %hu",
+ "%s: ccmCfgSetInt failed for rts_threshold value %u",
__func__, rts_threshold);
return -EIO;
}
- hddLog(VOS_TRACE_LEVEL_INFO_MED, "%s: set rts threshold %hu", __func__,
+ hddLog(VOS_TRACE_LEVEL_INFO_MED, "%s: set rts threshold %u", __func__,
rts_threshold);
}
@@ -9368,7 +9378,8 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d
return -ENOTSUPP;
}
- /* other than teardown frame, other mgmt frames are not sent if disabled */
+ /* other than teardown frame, other mgmt frames are not sent if disabled
+ or concurrency is detected */
if (SIR_MAC_TDLS_TEARDOWN != action_code)
{
/* if tdls_mode is disabled to respond to peer's request */
@@ -9379,7 +9390,16 @@ static int wlan_hdd_cfg80211_tdls_mgmt(struct wiphy *wiphy, struct net_device *d
" TDLS mode is disabled. action %d declined.",
__func__, MAC_ADDR_ARRAY(peer), action_code);
- return -ENOTSUPP;
+ return -ENOTSUPP;
+ }
+
+ /* if any concurrency is detected */
+ if ((1 << VOS_STA_MODE) != pHddCtx->concurrency_mode)
+ {
+ VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO_HIGH,
+ "%s: concurrency detected. ignore TDLS MGMT frame. action_code=%d",
+ __func__, action_code);
+ return -ENOTSUPP;
}
}
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index 0da8dd01ab50..d7031cd21556 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -1804,7 +1804,7 @@ static iw_softap_setparam(struct net_device *dev,
ret = process_wma_set_command((int)pHostapdAdapter->sessionId,
(int)WMI_VDEV_PARAM_ENABLE_RTSCTS,
set_value, VDEV_CMD);
- if (!ret) {
+ if (ret) {
hddLog(LOGE, "FAILED TO SET RTSCTS at SAP");
ret = -EIO;
}
diff --git a/CORE/HDD/src/wlan_hdd_ipa.c b/CORE/HDD/src/wlan_hdd_ipa.c
index dd280110cbb9..12039ce9b2c8 100644
--- a/CORE/HDD/src/wlan_hdd_ipa.c
+++ b/CORE/HDD/src/wlan_hdd_ipa.c
@@ -156,6 +156,7 @@ struct hdd_ipa_iface_context {
uint8_t iface_id; /* This iface ID */
uint8_t sta_id; /* This iface station ID */
+ vos_spin_lock_t interface_lock;
};
@@ -867,6 +868,7 @@ static void hdd_ipa_i2w_cb(void *priv, enum ipa_dp_evt_type evt,
struct ipa_rx_data *ipa_tx_desc;
struct hdd_ipa_iface_context *iface_context;
adf_nbuf_t skb;
+ v_U8_t interface_id;
if (evt == IPA_RECEIVE) {
@@ -887,8 +889,20 @@ static void hdd_ipa_i2w_cb(void *priv, enum ipa_dp_evt_type evt,
hdd_ipa->stats.tx_ipa_recv++;
+ vos_spin_lock_acquire(&iface_context->interface_lock);
+ if (iface_context->adapter) {
+ interface_id = iface_context->adapter->sessionId;
+ }
+ else{
+ HDD_IPA_LOG(VOS_TRACE_LEVEL_WARN, "Interface Down");
+ ipa_free_skb(ipa_tx_desc);
+ vos_spin_lock_release(&iface_context->interface_lock);
+ return;
+ }
+ vos_spin_lock_release(&iface_context->interface_lock);
+
skb = WLANTL_SendIPA_DataFrame(hdd_ipa->hdd_ctx->pvosContext,
- iface_context->tl_context, ipa_tx_desc->skb);
+ iface_context->tl_context, ipa_tx_desc->skb, interface_id);
if (skb) {
HDD_IPA_LOG(VOS_TRACE_LEVEL_DEBUG, "TLSHIM tx fail");
ipa_free_skb(ipa_tx_desc);
@@ -1252,9 +1266,11 @@ static void hdd_ipa_cleanup_iface(struct hdd_ipa_iface_context *iface_context)
hdd_ipa_clean_hdr(iface_context->adapter);
+ vos_spin_lock_acquire(&iface_context->interface_lock);
iface_context->adapter->ipa_context = NULL;
iface_context->adapter = NULL;
iface_context->tl_context = NULL;
+ vos_spin_lock_release(&iface_context->interface_lock);
}
@@ -1677,6 +1693,7 @@ VOS_STATUS hdd_ipa_init(hdd_context_t *hdd_ctx)
iface_context->prod_client =
hdd_ipa_adapter_2_client[i].prod_client;
iface_context->iface_id = i;
+ vos_spin_lock_init(&iface_context->interface_lock);
}
ret = hdd_ipa_setup_rm(hdd_ipa);
@@ -1710,10 +1727,18 @@ fail_setup_rm:
VOS_STATUS hdd_ipa_cleanup(hdd_context_t *hdd_ctx)
{
struct hdd_ipa_priv *hdd_ipa = hdd_ctx->hdd_ipa;
+ int i;
+ struct hdd_ipa_iface_context *iface_context = NULL;
if (!hdd_ipa_is_enabled(hdd_ctx))
return VOS_STATUS_SUCCESS;
+ /* destory the interface lock */
+ for (i = 0; i < HDD_IPA_MAX_IFACE; i++) {
+ iface_context = &hdd_ipa->iface_context[i];
+ vos_spin_lock_destroy(&iface_context->interface_lock);
+ }
+
hdd_ipa_debugfs_remove(hdd_ipa);
if (hdd_ipa->pending_desc_cnt != 0) {
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index 8a62d25b9ed0..772f6fecd04f 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -286,6 +286,11 @@ extern int hdd_ftm_stop(hdd_context_t *pHddCtx);
v_VOID_t wlan_hdd_auto_shutdown_cb(v_PVOID_t data);
#endif
+/* Store WLAN driver version info in a global variable such that crash debugger
+ can extract it from driver debug symbol and crashdump for post processing */
+tANI_U8 g_wlan_driver_version[ ] = QWLAN_VERSIONSTR;
+
+
#if defined(FEATURE_WLAN_ESE) && defined(FEATURE_WLAN_ESE_UPLOAD)
VOS_STATUS hdd_parse_get_cckm_ie(tANI_U8 *pValue,
tANI_U8 **pCckmIe,
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index 0e051c2f07b6..be2092513e43 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -618,7 +618,7 @@ void hdd_wlan_get_version(hdd_adapter_t *pAdapter, union iwreq_data *wrqu,
tSirVersionString wcnss_SW_version;
const char *pSWversion;
const char *pHWversion;
- v_U32_t CBId = 0, CBSId = 0, CRMId = 0;
+ v_U32_t MSPId = 0, mSPId = 0, SIId = 0, CRMId = 0;
#ifndef QCA_WIFI_2_0
VOS_STATUS status;
tSirVersionString wcnss_HW_version;
@@ -640,8 +640,9 @@ void hdd_wlan_get_version(hdd_adapter_t *pAdapter, union iwreq_data *wrqu,
pHddContext->target_fw_version);
pSWversion = wcnss_SW_version;
- CBId = (pHddContext->target_fw_version & 0xf8000000) >> 27;
- CBSId = (pHddContext->target_fw_version & 0x07000000) >> 24;
+ MSPId = (pHddContext->target_fw_version & 0xf0000000) >> 28;
+ mSPId = (pHddContext->target_fw_version & 0xf000000) >> 24;
+ SIId = (pHddContext->target_fw_version & 0xf00000) >> 20;
CRMId = pHddContext->target_fw_version & 0x7fff;
for (i = 0; i < ARRAY_SIZE(qwlan_hw_list); i++) {
@@ -679,17 +680,19 @@ void hdd_wlan_get_version(hdd_adapter_t *pAdapter, union iwreq_data *wrqu,
if (wrqu) {
wrqu->data.length = scnprintf(extra, WE_MAX_STR_LEN,
- "Host SW:%s, FW:%d.%d.%d, HW:%s",
+ "Host SW:%s, FW:%d.%d.%d.%d, HW:%s",
QWLAN_VERSIONSTR,
- CBId,
- CBSId,
+ MSPId,
+ mSPId,
+ SIId,
CRMId,
pHWversion);
} else {
- pr_info("Host SW:%s, FW:%d.%d.%d, HW:%s\n",
+ pr_info("Host SW:%s, FW:%d.%d.%d.%d, HW:%s\n",
QWLAN_VERSIONSTR,
- CBId,
- CBSId,
+ MSPId,
+ mSPId,
+ SIId,
CRMId,
pHWversion);
}
diff --git a/CORE/HDD/src/wlan_hdd_wmm.c b/CORE/HDD/src/wlan_hdd_wmm.c
index 6d7fba2df744..55c51d510177 100644
--- a/CORE/HDD/src/wlan_hdd_wmm.c
+++ b/CORE/HDD/src/wlan_hdd_wmm.c
@@ -1883,7 +1883,7 @@ v_U16_t hdd_hostapd_select_queue(struct net_device * dev, struct sk_buff *skb)
/*Get the Station ID*/
if (VOS_STATUS_SUCCESS != hdd_softap_GetStaId(pAdapter, pDestMacAddress, &STAId))
{
- VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_ERROR,
+ VOS_TRACE( VOS_MODULE_ID_HDD_SOFTAP, VOS_TRACE_LEVEL_INFO,
"%s: Failed to find right station", __func__);
*pSTAId = HDD_WLAN_INVALID_STA_ID;
goto done;
@@ -1905,7 +1905,7 @@ v_U16_t hdd_hostapd_select_queue(struct net_device * dev, struct sk_buff *skb)
//If 3/4th of Tx queue is used then place the DHCP packet in VOICE AC queue
if (pAdapter->aStaInfo[STAId].vosLowResource && is_dhcp_packet(skb))
{
- VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_WARN,
+ VOS_TRACE(VOS_MODULE_ID_HDD, WMM_TRACE_LEVEL_INFO,
"%s: Making priority of DHCP packet as VOICE", __func__);
up = SME_QOS_WMM_UP_VO;
ac = hddWmmUpToAcMap[up];
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index fd5d85e989e2..b39955a81dfc 100644
--- a/CORE/MAC/inc/qwlan_version.h
+++ b/CORE/MAC/inc/qwlan_version.h
@@ -42,9 +42,9 @@ BRIEF DESCRIPTION:
#define QWLAN_VERSION_MINOR 0
#define QWLAN_VERSION_PATCH 0
#define QWLAN_VERSION_EXTRA ""
-#define QWLAN_VERSION_BUILD 99
+#define QWLAN_VERSION_BUILD 100
-#define QWLAN_VERSIONSTR "1.0.0.99"
+#define QWLAN_VERSIONSTR "1.0.0.100"
#ifdef QCA_WIFI_2_0
diff --git a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
index 10a813263733..00560216d8a6 100644
--- a/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
+++ b/CORE/MAC/src/pe/lim/limProcessAssocReqFrame.c
@@ -643,6 +643,12 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,
/* if additional IE is present, check if it has WscIE */
if( pAssocReq->addIEPresent && pAssocReq->addIE.length )
wpsIe = limGetWscIEPtr(pMac, pAssocReq->addIE.addIEdata, pAssocReq->addIE.length);
+ else
+ {
+ limLog(pMac, LOG1, FL("Assoc req addIEPresent = %d "
+ "addIE length = %d"), pAssocReq->addIEPresent,
+ pAssocReq->addIE.length);
+ }
/* when wpsIe is present, RSN/WPA IE is ignored */
if( wpsIe == NULL )
{
@@ -765,6 +771,10 @@ limProcessAssocReqFrame(tpAniSirGlobal pMac, tANI_U8 *pRxPacketInfo,
&& psessionEntry->pLimStartBssReq->rsnIE->length) */
} /* end of if( ! pAssocReq->wscInfo.present ) */
+ else
+ {
+ limLog(pMac, LOG1, FL("Assoc req WSE IE is present"));
+ }
/**
* Extract 'associated' context for STA, if any.
diff --git a/CORE/MAC/src/pe/lim/limSendManagementFrames.c b/CORE/MAC/src/pe/lim/limSendManagementFrames.c
index c8458ecbf30e..fa08d362955c 100644
--- a/CORE/MAC/src/pe/lim/limSendManagementFrames.c
+++ b/CORE/MAC/src/pe/lim/limSendManagementFrames.c
@@ -156,7 +156,7 @@ void limUpdateExtCapIEtoStruct(tpAniSirGlobal pMac,
if ( DOT11F_EID_EXTCAP != pBuf[0] ||
pBuf[1] > DOT11F_IE_EXTCAP_MAX_LEN )
{
- limLog( pMac, LOGE,
+ limLog( pMac, LOG1,
FL("Invalid IEs eid = %d elem_len=%d "),
pBuf[0],pBuf[1]);
return;
@@ -1692,6 +1692,8 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac,
vos_mem_set(( tANI_U8* )&extractedExtCap,
sizeof( tDot11fIEExtCap ), 0);
+
+ addStripoffIELen = addnIELen;
nSirStatus = limStripOffExtCapIEAndUpdateStruct(pMac,
&addIE[0],
&addStripoffIELen,
@@ -1710,8 +1712,12 @@ limSendAssocRspMgmtFrame(tpAniSirGlobal pMac,
}
}
}
+ else
+ {
+ limLog(pMac, LOG1, FL("addnIEPresent = %d for Assoc Resp : %d"),
+ addnIEPresent, pAssocReq->addIEPresent);
+ }
}
-
halstatus = palPktAlloc( pMac->hHdd, HAL_TXRX_FRM_802_11_MGMT,
( tANI_U16 )nBytes, ( void** ) &pFrame,
( void** ) &pPacket );
diff --git a/CORE/SERVICES/COMMON/dbglog_id.h b/CORE/SERVICES/COMMON/dbglog_id.h
index 5a62909b1b86..774499ef4d4f 100644
--- a/CORE/SERVICES/COMMON/dbglog_id.h
+++ b/CORE/SERVICES/COMMON/dbglog_id.h
@@ -681,7 +681,9 @@ extern "C" {
#define WAL_DBGID_SMPS_DISABLE 63
#define WAL_DBGID_SMPS_ENABLE_HW_CNTRL 64
#define WAL_DBGID_SMPS_SWSEL_CHAINMASK 65
-#define WAL_DBGID_DEFINITION_END 66
+#define WAL_DBGID_SUSPEND 66
+#define WAL_DBGID_RESUME 67
+#define WAL_DBGID_DEFINITION_END 68
#define ANI_DBGID_POLL 0
#define ANI_DBGID_CONTROL 1
diff --git a/CORE/SERVICES/COMMON/targaddrs.h b/CORE/SERVICES/COMMON/targaddrs.h
index 4c035562f5f8..aa655c3febab 100644
--- a/CORE/SERVICES/COMMON/targaddrs.h
+++ b/CORE/SERVICES/COMMON/targaddrs.h
@@ -357,6 +357,8 @@ PREPACK64 struct host_interest_s {
#define CDC_MAX_PERF_WAR_ENABLED() \
(!(HOST_INTEREST->hi_option_flag2 & HI_OPTION_DISABLE_CDC_MAX_PERF_WAR))
+#define HI_OPTION_USE_EXT_LDO 0x40 /* use LDO27 for 1.1V instead of PMU */
+
/* hi_reset_flag */
#define HI_RESET_FLAG_PRESERVE_APP_START 0x01 /* preserve App Start address */
#define HI_RESET_FLAG_PRESERVE_HOST_INTEREST 0x02 /* preserve host interest */
diff --git a/CORE/SERVICES/COMMON/wmi_tlv_defs.h b/CORE/SERVICES/COMMON/wmi_tlv_defs.h
index aae8b88e3095..cb55b0147760 100644
--- a/CORE/SERVICES/COMMON/wmi_tlv_defs.h
+++ b/CORE/SERVICES/COMMON/wmi_tlv_defs.h
@@ -423,6 +423,8 @@ typedef enum {
WMITLV_TAG_STRUC_wmi_pdev_l1ss_track_event_fixed_param,
WMITLV_TAG_STRUC_wmi_diag_data_container_event_fixed_param,
WMITLV_TAG_STRUC_wmi_modem_power_state_cmd_param,
+ WMITLV_TAG_STRUC_wmi_aggr_state_trig_event_fixed_param,
+ WMITLV_TAG_STRUC_wmi_mhf_offload_routing_table_entry,
} WMITLV_TAG_ID;
/*
@@ -638,7 +640,8 @@ typedef enum {
OP(WMI_THERMAL_MGMT_EVENTID) \
OP(WMI_NAN_EVENTID) \
OP(WMI_PDEV_L1SS_TRACK_EVENTID) \
- OP(WMI_DIAG_DATA_CONTAINER_EVENTID)
+ OP(WMI_DIAG_DATA_CONTAINER_EVENTID) \
+ OP(WMI_AGGR_STATE_TRIG_EVENTID)
/* TLV definitions of WMI commands */
@@ -1490,8 +1493,9 @@ WMITLV_CREATE_PARAM_STRUC(WMI_MHF_OFFLOAD_SET_MODE_CMDID);
#define WMITLV_TABLE_WMI_MHF_OFFLOAD_PLUMB_ROUTING_TBL_CMDID(id,op,buf,len) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_mhf_offload_plumb_routing_table_cmd_fixed_param, \
- wmi_mhf_offload_plumb_routing_table_cmd, fixed_param, WMITLV_SIZE_FIX)
-
+ wmi_mhf_offload_plumb_routing_table_cmd, fixed_param, WMITLV_SIZE_FIX) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_STRUC, wmi_mhf_offload_routing_table_entry, \
+ routing_tbl_entries, WMITLV_SIZE_VAR)
WMITLV_CREATE_PARAM_STRUC(WMI_MHF_OFFLOAD_PLUMB_ROUTING_TBL_CMDID)
#define WMITLV_TABLE_WMI_BATCH_SCAN_DISABLE_CMDID(id,op,buf,len) \
@@ -1620,6 +1624,12 @@ WMITLV_CREATE_PARAM_STRUC(WMI_TX_ADDBA_COMPLETE_EVENTID);
WMITLV_ELEM(id, op, buf, len, WMITLV_TAG_ARRAY_STRUC, wmi_ba_event_ssn, ba_event_ssn_list, WMITLV_SIZE_VAR)
WMITLV_CREATE_PARAM_STRUC(WMI_BA_RSP_SSN_EVENTID);
+
+/* Aggregation Request event */
+#define WMITLV_TABLE_WMI_AGGR_STATE_TRIG_EVENTID(id,op,buf,len) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_aggr_state_trig_event_fixed_param, wmi_aggr_state_trig_event_fixed_param, fixed_param, WMITLV_SIZE_FIX)
+WMITLV_CREATE_PARAM_STRUC(WMI_AGGR_STATE_TRIG_EVENTID);
+
/* Roam Event */
#define WMITLV_TABLE_WMI_ROAM_EVENTID(id,op,buf,len) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_roam_event_fixed_param, wmi_roam_event_fixed_param, fixed_param, WMITLV_SIZE_FIX)
diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h
index eb4cbb3f0bc3..03fbc537b860 100644
--- a/CORE/SERVICES/COMMON/wmi_unified.h
+++ b/CORE/SERVICES/COMMON/wmi_unified.h
@@ -675,6 +675,10 @@ typedef enum {
/* Seq num returned from hw for a sta/tid pair */
WMI_BA_RSP_SSN_EVENTID,
+
+ /* Aggregation state requested by BTC */
+ WMI_AGGR_STATE_TRIG_EVENTID,
+
/** Roam event to trigger roaming on host */
WMI_ROAM_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_ROAM),
@@ -3004,6 +3008,9 @@ typedef enum {
/* set ebt resync timeout value, in the unit of TU */
WMI_VDEV_PARAM_EBT_RESYNC_TIMEOUT,
+ /* Enable Aggregation State Trigger Event */
+ WMI_VDEV_PARAM_AGGR_TRIG_EVENT_ENABLE,
+
} WMI_VDEV_PARAM;
enum wmi_pkt_type {
@@ -5057,6 +5064,28 @@ typedef struct {
*/
} wmi_ba_rsp_ssn_event_fixed_param;
+
+enum wmi_aggr_state_req_type {
+ WMI_DISABLE_AGGREGATION,
+ WMI_ENABLE_AGGREGATION
+};
+
+/*
+ * This event is generated by the COEX module
+ * when esco call is begins the coex module in fw genrated this event to host to
+ * disable the RX aggregation and after completion of the esco call fw will indicate to
+ * enable back the Rx aggregation .
+*/
+
+typedef struct {
+ A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_aggr_state_trig_event_fixed_param */
+ /** unique id identifying the VDEV, generated by the caller */
+ A_UINT32 vdev_id;
+ /** req_type contains values from enum
+ * wmi_aggr_state_req_type; 0 (disable) 1(enable) */
+ A_UINT32 req_type;
+}wmi_aggr_state_trig_event_fixed_param;
+
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_vdev_install_key_complete_event_fixed_param */
/** unique id identifying the VDEV, generated by the caller */
@@ -6284,10 +6313,12 @@ typedef struct {
} wmi_mhf_offload_set_mode_cmd_fixed_param;
enum wmi_mhf_ofl_table_action {
- /** Add entry to multihop forwarding offload table */
- WMI_MHF_OFL_TBL_ADD_ENTRY = 0,
- /** Delete entry from multihop forwarding offload table */
- WMI_MHF_OFL_TBL_DEL_ENTRY = 1,
+ /** Create forwarding offload table in FW */
+ WMI_MHF_OFL_TBL_CREATE = 0,
+ /** Append to existing multihop forwarding offload table */
+ WMI_MHF_OFL_TBL_APPEND = 1,
+ /** Flush entire multihop forwarding offload table in FW */
+ WMI_MHF_OFL_TBL_FLUSH = 2,
};
typedef struct {
@@ -6297,13 +6328,21 @@ typedef struct {
/** action corresponds to values from enum
* wmi_mhf_ofl_table_action */
A_UINT32 action;
+ /** number of entries in the table */
+ A_UINT32 num_entries;
+/** Followed by the variable length TLV
+ * wmi_mhf_offload_routing_table_entry entries[] */
+}wmi_mhf_offload_plumb_routing_table_cmd;
+
+typedef struct {
+ /** TLV tag and len; tag equals
+ * WMITLV_TAG_STRUC_wmi_mhf_offload_routing_table_entry */
+ A_UINT32 tlv_header;
/** Destination node's IP address */
WMI_IPV4_ADDR dest_ipv4_addr;
- /** Next hop node's IP address */
- WMI_IPV4_ADDR next_hop_ipv4_addr;
/** Next hop node's MAC address */
wmi_mac_addr next_hop_mac_addr;
-} wmi_mhf_offload_plumb_routing_table_cmd;
+}wmi_mhf_offload_routing_table_entry;
typedef struct {
/** tlv tag and len, tag equals
diff --git a/CORE/SERVICES/COMMON/wmi_version.h b/CORE/SERVICES/COMMON/wmi_version.h
index c02750b48599..779b85966ffe 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_ 38
+#define __WMI_REVISION_ 40
/** 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/USB/hif_usb.c b/CORE/SERVICES/HIF/USB/hif_usb.c
index 4503af783eba..c2084de506d5 100644
--- a/CORE/SERVICES/HIF/USB/hif_usb.c
+++ b/CORE/SERVICES/HIF/USB/hif_usb.c
@@ -155,9 +155,6 @@ int HIF_USBDeviceInserted(struct usb_interface *interface, hif_handle_t hif_hdl)
return retval;
}
-A_STATUS HIFDiagWriteWARMRESET(struct usb_interface *interface,
- A_UINT32 address, A_UINT32 data);
-
void HIF_USBDeviceDetached(struct usb_interface *interface,
a_uint8_t surprise_removed)
{
@@ -173,8 +170,6 @@ void HIF_USBDeviceDetached(struct usb_interface *interface,
break;
}
- HIFDiagWriteWARMRESET(interface, 0, 0);
-
device->surpriseRemoved = surprise_removed;
/* inform upper layer if it is still interested */
if (surprise_removed
diff --git a/CORE/SERVICES/HIF/USB/hif_usb_internal.h b/CORE/SERVICES/HIF/USB/hif_usb_internal.h
index dae0cc624325..88b91d7cc745 100644
--- a/CORE/SERVICES/HIF/USB/hif_usb_internal.h
+++ b/CORE/SERVICES/HIF/USB/hif_usb_internal.h
@@ -161,4 +161,6 @@ extern void usb_hif_io_comp_work(struct work_struct *work);
/* Support for USB Suspend / Resume */
extern void usb_hif_suspend(struct usb_interface *interface);
extern void usb_hif_resume(struct usb_interface *interface);
+A_STATUS HIFDiagWriteWARMRESET(struct usb_interface *interface,
+ A_UINT32 address, A_UINT32 data);
#endif
diff --git a/CORE/SERVICES/HIF/USB/if_usb.c b/CORE/SERVICES/HIF/USB/if_usb.c
index 6786558db4fd..fcbcf0bd5b8d 100644
--- a/CORE/SERVICES/HIF/USB/if_usb.c
+++ b/CORE/SERVICES/HIF/USB/if_usb.c
@@ -85,6 +85,15 @@ static void hif_nointrs(struct hif_usb_softc *sc)
{
}
+static int hif_usb_reboot(struct notifier_block *nb, unsigned long val,
+ void *v)
+{
+ struct hif_usb_softc *sc;
+ sc = container_of(nb, struct hif_usb_softc, reboot_notifier);
+ HIFDiagWriteWARMRESET(sc->interface, 0, 0);
+ return NOTIFY_DONE;
+}
+
static int
hif_usb_probe(struct usb_interface *interface, const struct usb_device_id *id)
{
@@ -163,6 +172,10 @@ hif_usb_probe(struct usb_interface *interface, const struct usb_device_id *id)
if (ret) {
hif_nointrs(sc);
+ if (sc->hif_device != NULL) {
+ ((HIF_DEVICE_USB *)(sc->hif_device))->sc = NULL;
+ }
+ athdiag_procfs_remove();
goto err_config;
}
#ifndef REMOVE_PKT_LOG
@@ -182,6 +195,9 @@ hif_usb_probe(struct usb_interface *interface, const struct usb_device_id *id)
send_btc_nlink_msg(WLAN_MODULE_UP_IND, 0);
#endif
+ sc->interface = interface;
+ sc->reboot_notifier.notifier_call = hif_usb_reboot;
+ register_reboot_notifier(&sc->reboot_notifier);
return 0;
err_config:
@@ -202,15 +218,17 @@ static void hif_usb_remove(struct usb_interface *interface)
struct hif_usb_softc *sc = device->sc;
struct ol_softc *scn;
- usb_put_dev(interface_to_usbdev(interface));
/* Attach did not succeed, all resources have been
* freed in error handler
*/
if (!sc)
return;
- scn = sc->ol_sc;
+ HIFDiagWriteWARMRESET(interface, 0, 0);
+ unregister_reboot_notifier(&sc->reboot_notifier);
+ usb_put_dev(interface_to_usbdev(interface));
+ scn = sc->ol_sc;
#ifndef REMOVE_PKT_LOG
if (vos_get_conparam() != VOS_FTM_MODE)
pktlogmod_exit(scn);
@@ -314,14 +332,19 @@ void hif_init_adf_ctx(adf_os_device_t adf_dev, void *ol_sc)
sc->adf_dev = adf_dev;
}
+static int is_usb_driver_register = 0;
int hif_register_driver(void)
{
+ is_usb_driver_register = 1;
return usb_register(&hif_usb_drv_id);
}
void hif_unregister_driver(void)
{
- usb_deregister(&hif_usb_drv_id);
+ if (is_usb_driver_register) {
+ is_usb_driver_register = 0;
+ usb_deregister(&hif_usb_drv_id);
+ }
}
void hif_init_pdev_txrx_handle(void *ol_sc, void *txrx_handle)
diff --git a/CORE/SERVICES/HIF/USB/if_usb.h b/CORE/SERVICES/HIF/USB/if_usb.h
index 94537302fa26..976ab790a921 100644
--- a/CORE/SERVICES/HIF/USB/if_usb.h
+++ b/CORE/SERVICES/HIF/USB/if_usb.h
@@ -34,6 +34,7 @@
#include <linux/semaphore.h>
#endif
#include <linux/interrupt.h>
+#include <linux/reboot.h>
/*
* There may be some pending tx frames during platform suspend.
@@ -73,6 +74,8 @@ struct hif_usb_softc {
u16 devid;
struct targetdef_s *targetdef;
struct hostdef_s *hostdef;
+ struct usb_interface *interface;
+ struct notifier_block reboot_notifier; /* default mode before reboot */
};
#if defined(CONFIG_ATH_PROCFS_DIAG_SUPPORT)
int athdiag_procfs_init(void *scn);
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 4650c082462b..cd3e8b5720d1 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -1003,14 +1003,18 @@ static void wma_delete_all_ibss_peers(tp_wma_handle wma, A_UINT32 vdev_id)
return;
/* remove all IBSS remote peers first */
+ adf_os_spin_lock_bh(&vdev->pdev->peer_ref_mutex);
TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) {
if (peer != TAILQ_FIRST(&vdev->peer_list)) {
+ adf_os_spin_unlock_bh(&vdev->pdev->peer_ref_mutex);
adf_os_atomic_init(&peer->ref_cnt);
adf_os_atomic_inc(&peer->ref_cnt);
wma_remove_peer(wma, wma->interfaces[vdev_id].bssid,
vdev_id, peer);
+ adf_os_spin_lock_bh(&vdev->pdev->peer_ref_mutex);
}
}
+ adf_os_spin_unlock_bh(&vdev->pdev->peer_ref_mutex);
/* remove IBSS bss peer last */
peer = TAILQ_FIRST(&vdev->peer_list);
@@ -1020,26 +1024,31 @@ static void wma_delete_all_ibss_peers(tp_wma_handle wma, A_UINT32 vdev_id)
static void wma_delete_all_ap_remote_peers(tp_wma_handle wma, A_UINT32 vdev_id)
{
- ol_txrx_vdev_handle vdev;
- ol_txrx_peer_handle peer;
+ ol_txrx_vdev_handle vdev;
+ ol_txrx_peer_handle peer;
- if (!wma || vdev_id > wma->max_bssid)
- return;
+ if (!wma || vdev_id > wma->max_bssid)
+ return;
- vdev = wma->interfaces[vdev_id].handle;
- if (!vdev)
- return;
+ vdev = wma->interfaces[vdev_id].handle;
+ if (!vdev)
+ return;
- /* remove all remote peers of SAP */
- TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) {
+ /* remove all remote peers of SAP */
+ adf_os_spin_lock_bh(&vdev->pdev->peer_ref_mutex);
+ TAILQ_FOREACH(peer, &vdev->peer_list, peer_list_elem) {
if (peer != TAILQ_FIRST(&vdev->peer_list)) {
+ adf_os_spin_unlock_bh(&vdev->pdev->peer_ref_mutex);
adf_os_atomic_init(&peer->ref_cnt);
adf_os_atomic_inc(&peer->ref_cnt);
wma_remove_peer(wma, peer->mac_addr.raw,
vdev_id, peer);
+ adf_os_spin_lock_bh(&vdev->pdev->peer_ref_mutex);
}
}
+ adf_os_spin_unlock_bh(&vdev->pdev->peer_ref_mutex);
}
+
#ifdef QCA_IBSS_SUPPORT
static void wma_recreate_ibss_vdev_and_bss_peer(tp_wma_handle wma, u_int8_t vdev_id)
{
@@ -5138,6 +5147,12 @@ v_VOID_t wma_roam_scan_fill_scan_params(tp_wma_handle wma_handle,
wmi_start_scan_cmd_fixed_param *scan_params)
{
tANI_U8 channels_per_burst = 0;
+
+ if (NULL == pMac) {
+ WMA_LOGE("%s: pMac is NULL", __func__);
+ return;
+ }
+
vos_mem_zero(scan_params, sizeof(wmi_start_scan_cmd_fixed_param));
if (roam_req != NULL) {
/* Parameters updated after association is complete */
@@ -5376,6 +5391,12 @@ VOS_STATUS wma_roam_scan_offload_end_connect(tp_wma_handle wma_handle)
wma_handle->vos_context);
wmi_start_scan_cmd_fixed_param scan_params;
+ if (NULL == pMac)
+ {
+ WMA_LOGE("%s: pMac is NULL", __func__);
+ return VOS_STATUS_E_FAILURE;
+ }
+
/* If roam scan is running, stop it */
if (wma_handle->roam_offload_enabled) {
@@ -5402,6 +5423,13 @@ VOS_STATUS wma_process_roam_scan_req(tp_wma_handle wma_handle,
u_int32_t mode = 0;
WMA_LOGI("%s: command 0x%x", __func__, roam_req->Command);
+
+ if (NULL == pMac)
+ {
+ WMA_LOGE("%s: pMac is NULL", __func__);
+ return VOS_STATUS_E_FAILURE;
+ }
+
if (!wma_handle->roam_offload_enabled) {
/* roam scan offload is not enabled in firmware.
* Cannot initialize it in the middle of connection.
@@ -13774,6 +13802,10 @@ static void wma_start_oem_data_req(tp_wma_handle wma_handle,
}
out:
+ /* free oem data req buffer received from UMAC */
+ if (startOemDataReq)
+ vos_mem_free(startOemDataReq);
+
/* Now send data resp back to PE/SME with message sub-type of
* WMI_OEM_INTERNAL_RSP. This is required so that PE/SME clears
* up pending active command. Later when desired oem response(s)
diff --git a/CORE/SERVICES/WMI/wmi_unified.c b/CORE/SERVICES/WMI/wmi_unified.c
index a31fc730404a..d0814462a133 100644
--- a/CORE/SERVICES/WMI/wmi_unified.c
+++ b/CORE/SERVICES/WMI/wmi_unified.c
@@ -64,10 +64,11 @@ struct wmi_command_debug wmi_command_log_buffer[WMI_EVENT_DEBUG_MAX_ENTRY];
u_int32_t g_wmi_event_buf_idx = 0;
struct wmi_event_debug wmi_event_log_buffer[WMI_EVENT_DEBUG_MAX_ENTRY];
-#define WMI_COMMAND_RECORD(a) { \
+#define WMI_COMMAND_RECORD(a, b) { \
if (WMI_EVENT_DEBUG_MAX_ENTRY <= g_wmi_command_buf_idx) \
g_wmi_command_buf_idx = 0; \
wmi_command_log_buffer[g_wmi_command_buf_idx].command = a; \
+ adf_os_mem_copy(wmi_command_log_buffer[g_wmi_command_buf_idx].data, b , 8);\
wmi_command_log_buffer[g_wmi_command_buf_idx].time = \
adf_os_ticks(); \
g_wmi_command_buf_idx++; \
@@ -606,7 +607,8 @@ int wmi_unified_cmd_send(wmi_unified_t wmi_handle, wmi_buf_t buf, int len,
#ifdef WMI_INTERFACE_EVENT_LOGGING
adf_os_spin_lock_bh(&wmi_handle->wmi_record_lock);
- WMI_COMMAND_RECORD(cmd_id);
+ /*Record 8 bytes of WMI cmd data - exclude TLV and WMI headers*/
+ WMI_COMMAND_RECORD(cmd_id ,((u_int32_t *)adf_nbuf_data(buf) + 2));
adf_os_spin_unlock_bh(&wmi_handle->wmi_record_lock);
#endif
diff --git a/CORE/SERVICES/WMI/wmi_unified_priv.h b/CORE/SERVICES/WMI/wmi_unified_priv.h
index 885c926aff72..8921f83aef58 100644
--- a/CORE/SERVICES/WMI/wmi_unified_priv.h
+++ b/CORE/SERVICES/WMI/wmi_unified_priv.h
@@ -48,6 +48,7 @@ typedef adf_nbuf_t wmi_buf_t;
struct wmi_command_debug{
u_int32_t command;
+ u_int32_t data[2]; /*8 bytes of WMI cmd excluding TLV and WMI headers*/
unsigned long time;
};
diff --git a/CORE/TL/inc/wlan_qct_tl.h b/CORE/TL/inc/wlan_qct_tl.h
index 31b75e90b756..c75c8bd5bf68 100644
--- a/CORE/TL/inc/wlan_qct_tl.h
+++ b/CORE/TL/inc/wlan_qct_tl.h
@@ -1361,7 +1361,7 @@ adf_nbuf_t WLANTL_SendSTA_DataFrame(v_PVOID_t pvosGCtx, v_U8_t ucSTAId,
============================================================================*/
adf_nbuf_t WLANTL_SendIPA_DataFrame(void *vos_ctx, void *vdev,
- adf_nbuf_t buf);
+ adf_nbuf_t buf, v_U8_t interface_id);
#endif
diff --git a/CORE/UTILS/FWLOG/dbglog_host.c b/CORE/UTILS/FWLOG/dbglog_host.c
index d765d8e44127..ca80976229df 100644
--- a/CORE/UTILS/FWLOG/dbglog_host.c
+++ b/CORE/UTILS/FWLOG/dbglog_host.c
@@ -2354,28 +2354,28 @@ dbglog_wal_print_handler(
dbglog_printf(timestamp, vap_id, "WAL Tx enqueue discard msdu_id=0x%x", args[0]);
break;
case WAL_DBGID_SET_HW_CHAINMASK:
- dbglog_printf(timestamp, vap_id, "WAL set hw chainmask "
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SET_HW_CHAINMASK "
"pdev=%d, txchain=0x%x, rxchain=0x%x",
args[0], args[1], args[2]);
break;
case WAL_DBGID_SET_HW_CHAINMASK_TXRX_STOP_FAIL:
- dbglog_printf(timestamp, vap_id, "WAL hw chainmask tx stop fail rxstop=%d, txstop=%d",
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SET_HW_CHAINMASK_TXRX_STOP_FAIL rxstop=%d, txstop=%d",
args[0], args[1]);
break;
case WAL_DBGID_GET_HW_CHAINMASK:
- dbglog_printf(timestamp, vap_id, "WAL get hw chainmask "
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_GET_HW_CHAINMASK "
"txchain=0x%x, rxchain=0x%x",
args[0], args[1]);
break;
case WAL_DBGID_SMPS_DISABLE:
- dbglog_printf(timestamp, vap_id, "WAL smps disable");
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SMPS_DISABLE");
break;
case WAL_DBGID_SMPS_ENABLE_HW_CNTRL:
- dbglog_printf(timestamp, vap_id, "WAL enable hw ctrl low_pwr_mask=0x%x, high_pwr_mask=0x%x",
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SMPS_ENABLE_HW_CNTRL low_pwr_mask=0x%x, high_pwr_mask=0x%x",
args[0], args[1]);
break;
case WAL_DBGID_SMPS_SWSEL_CHAINMASK:
- dbglog_printf(timestamp, vap_id, "WAL smps swsel chainmask low_pwr=0x%x, chain_mask=0x%x",
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SMPS_SWSEL_CHAINMASK low_pwr=0x%x, chain_mask=0x%x",
args[0], args[1]);
break;
default:
@@ -2972,18 +2972,18 @@ A_BOOL dbglog_smps_print_handler(A_UINT32 mod_id,
args[2]);
break;
case STA_SMPS_DBGID_DTIM_EBT_EVENT_CHMASK_UPDATE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS ebt event chmask update");
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_EBT_EVENT_CHMASK_UPDATE");
break;
case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS dtim chmask update "
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE "
"tx_mask %#x rx_mask %#x arb_dtim_mask %#x",
args[0], args[1], args[2]);
break;
case STA_SMPS_DBGID_DTIM_BEACON_EVENT_CHMASK_UPDATE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS beacon event chmask update");
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_BEACON_EVENT_CHMASK_UPDATE");
break;
case STA_SMPS_DBGID_DTIM_POWER_STATE_CHANGE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS cur_pwr_state %s new_pwr_state %d",
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_POWER_STATE_CHANGE cur_pwr_state %s new_pwr_state %s",
(args[0] == 0x1 ? "SLEEP":
(args[0] == 0x2 ? "AWAKE":
(args[0] == 0x3 ? "FULL_SLEEP" : "UNKNOWN"))),
@@ -2992,12 +2992,12 @@ A_BOOL dbglog_smps_print_handler(A_UINT32 mod_id,
(args[1] == 0x3 ? "FULL_SLEEP" : "UNKNOWN"))));
break;
case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_SLEEP:
- dbglog_printf(timestamp, vap_id, "STA_SMPS chmask update sleep "
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_SLEEP "
"tx_mask %#x rx_mask %#x orig_rx %#x dtim_rx %#x",
args[0], args[1], args[2], args[3]);
break;
case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_AWAKE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS chmask update awake "
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_AWAKE "
"tx_mask %#x rx_mask %#x orig_rx %#x",
args[0], args[1], args[2]);
break;
diff --git a/CORE/VOSS/src/vos_nvitem.c b/CORE/VOSS/src/vos_nvitem.c
index c19304e84657..4ad1100a4cb4 100644
--- a/CORE/VOSS/src/vos_nvitem.c
+++ b/CORE/VOSS/src/vos_nvitem.c
@@ -3278,7 +3278,8 @@ static int create_linux_regulatory_entry(struct wiphy *wiphy,
wiphy->bands[i]->channels[j].flags &= ~IEEE80211_CHAN_NO_IBSS;
}
- wiphy->bands[i]->channels[j].max_power = reg_rule->power_rule.max_eirp;
+ wiphy->bands[i]->channels[j].max_power =
+ (int) MBM_TO_DBM(reg_rule->power_rule.max_eirp);
}
}
diff --git a/Kbuild b/Kbuild
index e926db22d990..aceb525c26e7 100644
--- a/Kbuild
+++ b/Kbuild
@@ -1291,6 +1291,14 @@ endif
KBUILD_CPPFLAGS += $(CDEFINES)
+# Currently, for versions of gcc which support it, the kernel Makefile
+# is disabling the maybe-uninitialized warning. Re-enable it for the
+# WLAN driver. Note that we must use EXTRA_CFLAGS here so that it
+# will override the kernel settings.
+ifeq ($(call cc-option-yn, -Wmaybe-uninitialized),y)
+EXTRA_CFLAGS += -Wmaybe-uninitialized
+endif
+
# Module information used by KBuild framework
obj-$(CONFIG_QCA_CLD_WLAN) += $(MODNAME).o
$(MODNAME)-y := $(OBJS)
diff --git a/firmware_bin/WCNSS_qcom_cfg.usb.ini b/firmware_bin/WCNSS_qcom_cfg.usb.ini
index f8a2c57fad45..78bdaf321fde 100644
--- a/firmware_bin/WCNSS_qcom_cfg.usb.ini
+++ b/firmware_bin/WCNSS_qcom_cfg.usb.ini
@@ -491,6 +491,9 @@ gEnableMCCAdaptiveScheduler=0
#Enable or Disable p2p device address administered
isP2pDeviceAddrAdministrated=0
+
+#Disable scan_pno by default
+gPNOScanSupport=0
END
# Note: Configuration parser would not read anything past the END marker
diff --git a/tools/fwdebuglog/cld-fwlog-parser.c b/tools/fwdebuglog/cld-fwlog-parser.c
index 29ad61b6273c..6b60123cca3e 100644
--- a/tools/fwdebuglog/cld-fwlog-parser.c
+++ b/tools/fwdebuglog/cld-fwlog-parser.c
@@ -1867,28 +1867,28 @@ dbglog_wal_print_handler(
dbglog_printf(timestamp, vap_id, "WAL Tx enqueue discard msdu_id=0x%x", args[0]);
break;
case WAL_DBGID_SET_HW_CHAINMASK:
- dbglog_printf(timestamp, vap_id, "WAL set hw chainmask "
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SET_HW_CHAINMASK "
"pdev=%d, txchain=0x%x, rxchain=0x%x",
args[0], args[1], args[2]);
break;
case WAL_DBGID_SET_HW_CHAINMASK_TXRX_STOP_FAIL:
- dbglog_printf(timestamp, vap_id, "WAL hw chainmask tx stop fail rxstop=%d, txstop=%d",
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SET_HW_CHAINMASK_TXRX_STOP_FAIL rxstop=%d, txstop=%d",
args[0], args[1]);
break;
case WAL_DBGID_GET_HW_CHAINMASK:
- dbglog_printf(timestamp, vap_id, "WAL get hw chainmask "
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_GET_HW_CHAINMASK "
"txchain=0x%x, rxchain=0x%x",
args[0], args[1]);
break;
case WAL_DBGID_SMPS_DISABLE:
- dbglog_printf(timestamp, vap_id, "WAL smps disable");
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SMPS_DISABLE");
break;
case WAL_DBGID_SMPS_ENABLE_HW_CNTRL:
- dbglog_printf(timestamp, vap_id, "WAL enable hw ctrl low_pwr_mask=0x%x, high_pwr_mask=0x%x",
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SMPS_ENABLE_HW_CNTRL low_pwr_mask=0x%x, high_pwr_mask=0x%x",
args[0], args[1]);
break;
case WAL_DBGID_SMPS_SWSEL_CHAINMASK:
- dbglog_printf(timestamp, vap_id, "WAL smps swsel chainmask low_pwr=0x%x, chain_mask=0x%x",
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SMPS_SWSEL_CHAINMASK low_pwr=0x%x, chain_mask=0x%x",
args[0], args[1]);
break;
default:
@@ -2486,18 +2486,18 @@ A_BOOL dbglog_smps_print_handler(A_UINT32 mod_id,
args[2]);
break;
case STA_SMPS_DBGID_DTIM_EBT_EVENT_CHMASK_UPDATE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS ebt event chmask update");
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_EBT_EVENT_CHMASK_UPDATE");
break;
case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS chmask update "
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE "
"tx_mask %#x rx_mask %#x arb_dtim_mask %#x",
args[0], args[1], args[2]);
break;
case STA_SMPS_DBGID_DTIM_BEACON_EVENT_CHMASK_UPDATE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS beacon event chmask update");
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_BEACON_EVENT_CHMASK_UPDATE");
break;
case STA_SMPS_DBGID_DTIM_POWER_STATE_CHANGE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS cur_pwr_state %s new_pwr_state %d",
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_POWER_STATE_CHANGE cur_pwr_state %s new_pwr_state %s",
(args[0] == 0x1 ? "SLEEP":
(args[0] == 0x2 ? "AWAKE":
(args[0] == 0x3 ? "FULL_SLEEP" : "UNKNOWN"))),
@@ -2506,12 +2506,12 @@ A_BOOL dbglog_smps_print_handler(A_UINT32 mod_id,
(args[1] == 0x3 ? "FULL_SLEEP" : "UNKNOWN"))));
break;
case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_SLEEP:
- dbglog_printf(timestamp, vap_id, "STA_SMPS chmask update sleep "
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_SLEEP "
"tx_mask %#x rx_mask %#x orig_rx %#x dtim_rx %#x",
args[0], args[1], args[2], args[3]);
break;
case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_AWAKE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS chmask update awake "
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_AWAKE "
"tx_mask %#x rx_mask %#x orig_rx %#x",
args[0], args[1], args[2]);
break;
diff --git a/tools/fwdebuglog/parser.c b/tools/fwdebuglog/parser.c
index f50ce82c74af..85548dc2edcd 100644
--- a/tools/fwdebuglog/parser.c
+++ b/tools/fwdebuglog/parser.c
@@ -1888,28 +1888,28 @@ dbglog_wal_print_handler(
dbglog_printf(timestamp, vap_id, "WAL Tx enqueue discard msdu_id=0x%x", args[0]);
break;
case WAL_DBGID_SET_HW_CHAINMASK:
- dbglog_printf(timestamp, vap_id, "WAL set hw chainmask "
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SET_HW_CHAINMASK "
"pdev=%d, txchain=0x%x, rxchain=0x%x",
args[0], args[1], args[2]);
break;
case WAL_DBGID_SET_HW_CHAINMASK_TXRX_STOP_FAIL:
- dbglog_printf(timestamp, vap_id, "WAL hw chainmask tx stop fail: rxstop=%d, txstop=%d",
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SET_HW_CHAINMASK_TXRX_STOP_FAIL: rxstop=%d, txstop=%d",
args[0], args[1]);
break;
case WAL_DBGID_GET_HW_CHAINMASK:
- dbglog_printf(timestamp, vap_id, "WAL get hw chainmask "
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_GET_HW_CHAINMASK "
"txchain=0x%x, rxchain=0x%x",
args[0], args[1]);
break;
case WAL_DBGID_SMPS_DISABLE:
- dbglog_printf(timestamp, vap_id, "WAL smps disable");
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SMPS_DISABLE");
break;
case WAL_DBGID_SMPS_ENABLE_HW_CNTRL:
- dbglog_printf(timestamp, vap_id, "WAL enable hw ctrl low_pwr_mask=0x%x, high_pwr_mask=0x%x",
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SMPS_ENABLE_HW_CNTRL low_pwr_mask=0x%x, high_pwr_mask=0x%x",
args[0], args[1]);
break;
case WAL_DBGID_SMPS_SWSEL_CHAINMASK:
- dbglog_printf(timestamp, vap_id, "WAL smps swsel chainmask low_pwr=0x%x, chain_mask=0x%x",
+ dbglog_printf(timestamp, vap_id, "WAL_DBGID_SMPS_SWSEL_CHAINMASK low_pwr=0x%x, chain_mask=0x%x",
args[0], args[1]);
break;
default:
@@ -2507,18 +2507,18 @@ A_BOOL dbglog_smps_print_handler(A_UINT32 mod_id,
args[2]);
break;
case STA_SMPS_DBGID_DTIM_EBT_EVENT_CHMASK_UPDATE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS ebt event chmask update");
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_EBT_EVENT_CHMASK_UPDATE");
break;
case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS chmask update "
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE "
"tx_mask %#x rx_mask %#x arb_dtim_mask %#x",
args[0], args[1], args[2]);
break;
case STA_SMPS_DBGID_DTIM_BEACON_EVENT_CHMASK_UPDATE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS beacon event chmask update");
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_BEACON_EVENT_CHMASK_UPDATE");
break;
case STA_SMPS_DBGID_DTIM_POWER_STATE_CHANGE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS cur_pwr_state %s new_pwr_state %d",
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_POWER_STATE_CHANGE cur_pwr_state %s new_pwr_state %s",
(args[0] == 0x1 ? "SLEEP":
(args[0] == 0x2 ? "AWAKE":
(args[0] == 0x3 ? "FULL_SLEEP" : "UNKNOWN"))),
@@ -2527,12 +2527,12 @@ A_BOOL dbglog_smps_print_handler(A_UINT32 mod_id,
(args[1] == 0x3 ? "FULL_SLEEP" : "UNKNOWN"))));
break;
case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_SLEEP:
- dbglog_printf(timestamp, vap_id, "STA_SMPS chmask update sleep "
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_SLEEP "
"tx_mask %#x rx_mask %#x orig_rx %#x dtim_rx %#x",
args[0], args[1], args[2], args[3]);
break;
case STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_AWAKE:
- dbglog_printf(timestamp, vap_id, "STA_SMPS chmask update awake "
+ dbglog_printf(timestamp, vap_id, "STA_SMPS_DBGID_DTIM_CHMASK_UPDATE_AWAKE "
"tx_mask %#x rx_mask %#x orig_rx %#x",
args[0], args[1], args[2]);
break;