summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-06-09 11:53:20 -0600
committerLinux Build Service Account <lnxbuild@localhost>2016-06-09 11:53:20 -0600
commitd6b021b5825fd8bd97c75ac6aa0bf7a0e7bc24e7 (patch)
tree5fdd9b957313c2f5aafe7e1325538908867c0c6d
parentca3abbc1896a35df69db22bd80874596067f5206 (diff)
parent85f92847cb6db9e0aedbdc4a8398ebebd23d086d (diff)
Promotion of wlan-cld2.driver.lnx.1.0-00031.
CRs Change ID Subject -------------------------------------------------------------------------------------------------------------- 688141 I3044b9ccc2c5850fdde2d0b5de5d1fc4de2c2695 Release 4.0.11.96 865207 Ie7c14aadf124a0aaaad1470e678e99f2fb5d436b qcacld-2.0: CL 1524393 – update fw common interface file 688141 Ice1fda9bad14e42f774d4c6849755e507b194512 Release 4.0.11.97 1020123 I175f984a1bdb0c0f245c60f32bcc5af8ea1802a7 qcacld-2.0: Add support for dynamically disable BT/WLAN 1025291 Ia5aa53e9f9ec30f675efe9989b124201f4f15e97 qcacld-2.0: Fix tlv length assignment in WMI int message 1025261 Ibf35df89a5bfbbc24f0166878c6aea48838c1a83 qcacld-2.0: Ensure that phy mode from ini is considered 1025828 I72100df664e7defe616cd78450c1941a39dc393b qcacld-2.0: Don't enable 2.4 GHz social channels in 5 GH 1025272 I6b2fd40a5466fe5dd72d394abb682229a550e0b1 qcacld-2.0: Fix stack corruption issue in sme_RrmProcess 1006544 I579b83afa09d0cc3cb629dab4f7cc210f1237f96 qcacld-2.0: Validate watchdog context 1025185 Ie64a642abdd7923e91801186aa5743094a739fc9 qcacld-2.0: Validate CCXBEACONREQ IE fields 1021796 Ia003d02b142dcd51582c20359ee44a181620e4e3 qcacld-2.0: Set chainmask to 2x2 once TDLS is connected 1023457 Ic521c23b4001f15a382e9435413cdafca0c8b49f qcacld-2.0: Add argument to ol_tx_queue_free for vdev or 1025669 I78fd23a384590c740c0147c3f2e7ec5b0da7aea8 qcacld-2.0: Unpause all vdevs when host resumes Change-Id: Id69a4478e5cce937f9fe5fc408c2323b10781738 CRs-Fixed: 1006544, 1021796, 1025272, 688141, 1025261, 1025828, 865207, 1020123, 1023457, 1025669, 1025185, 1025291
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx_queue.c24
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx_queue.h7
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_txrx.c6
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h22
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c20
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c6
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c28
-rw-r--r--CORE/HDD/src/wlan_hdd_tdls.c9
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/SERVICES/COMMON/wlan_module_ids.h1
-rw-r--r--CORE/SERVICES/COMMON/wmi_unified.h11
-rw-r--r--CORE/SERVICES/COMMON/wmi_version.h2
-rw-r--r--CORE/SERVICES/WMA/wma.c6
-rw-r--r--CORE/SME/inc/csrInternal.h2
-rw-r--r--CORE/SME/inc/sme_Api.h2
-rw-r--r--CORE/SME/src/csr/csrApiRoam.c11
-rw-r--r--CORE/SME/src/rrm/sme_rrm.c4
-rw-r--r--CORE/SME/src/sme_common/sme_Api.c39
-rw-r--r--CORE/VOSS/src/vos_sched.c6
19 files changed, 165 insertions, 45 deletions
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_queue.c b/CORE/CLD_TXRX/TXRX/ol_tx_queue.c
index 965380909287..23bc63c5782e 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx_queue.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx_queue.c
@@ -69,7 +69,7 @@ void
ol_tx_queue_log_free(
struct ol_txrx_pdev_t *pdev,
struct ol_tx_frms_queue_t *txq,
- int tid, int frms, int bytes);
+ int tid, int frms, int bytes, bool is_peer_txq);
#define OL_TX_QUEUE_LOG_ENQUEUE ol_tx_queue_log_enqueue
#define OL_TX_QUEUE_LOG_DEQUEUE ol_tx_queue_log_dequeue
#define OL_TX_QUEUE_LOG_FREE ol_tx_queue_log_free
@@ -78,7 +78,8 @@ ol_tx_queue_log_free(
#define OL_TX_QUEUE_LOG_ENQUEUE(pdev, msdu_info, frms, bytes) /* no-op */
#define OL_TX_QUEUE_LOG_DEQUEUE(pdev, txq, frms, bytes) /* no-op */
-#define OL_TX_QUEUE_LOG_FREE(pdev, txq, tid, frms, bytes) /* no-op */
+/* no-op */
+#define OL_TX_QUEUE_LOG_FREE(pdev, txq, tid, frms, bytes, is_peer_txq)
#endif /* TXRX_DEBUG_LEVEL > 5 */
@@ -118,11 +119,12 @@ ol_tx_queue_vdev_flush(struct ol_txrx_pdev_t *pdev, struct ol_txrx_vdev_t *vdev)
* into scheduler, so use same tid when we flush them
*/
if (i == OL_TX_VDEV_MCAST_BCAST)
- ol_tx_queue_free(pdev, txq, HTT_TX_EXT_TID_NON_QOS_MCAST_BCAST);
+ ol_tx_queue_free(pdev, txq, HTT_TX_EXT_TID_NON_QOS_MCAST_BCAST,
+ false);
else if (i == OL_TX_VDEV_DEFAULT_MGMT)
- ol_tx_queue_free(pdev, txq, HTT_TX_EXT_TID_MGMT);
+ ol_tx_queue_free(pdev, txq, HTT_TX_EXT_TID_MGMT, false);
else
- ol_tx_queue_free(pdev, txq, (i + OL_TX_NUM_TIDS));
+ ol_tx_queue_free(pdev, txq, (i + OL_TX_NUM_TIDS), false);
}
/* flush PEER TX queues */
do {
@@ -148,7 +150,7 @@ ol_tx_queue_vdev_flush(struct ol_txrx_pdev_t *pdev, struct ol_txrx_vdev_t *vdev)
for (j = 0; j < OL_TX_NUM_TIDS; j++) {
txq = &peers[i]->txqs[j];
if (txq->frms) {
- ol_tx_queue_free(pdev, txq, j);
+ ol_tx_queue_free(pdev, txq, j, true);
}
}
TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
@@ -330,7 +332,7 @@ void
ol_tx_queue_free(
struct ol_txrx_pdev_t *pdev,
struct ol_tx_frms_queue_t *txq,
- int tid)
+ int tid, bool is_peer_txq)
{
int frms = 0, bytes = 0;
struct ol_tx_desc_t *tx_desc;
@@ -353,9 +355,9 @@ ol_tx_queue_free(
txq->frms--;
tx_desc = TAILQ_NEXT(tx_desc, tx_desc_list_elem);
}
- OL_TX_QUEUE_LOG_FREE(pdev, txq, tid, frms, bytes);
+ OL_TX_QUEUE_LOG_FREE(pdev, txq, tid, frms, bytes, is_peer_txq);
txq->bytes -= bytes;
- OL_TX_QUEUE_LOG_FREE(pdev, txq, tid, frms, bytes);
+ OL_TX_QUEUE_LOG_FREE(pdev, txq, tid, frms, bytes, is_peer_txq);
txq->flag = ol_tx_queue_empty;
/* txq->head gets reset during the TAILQ_CONCAT call */
TAILQ_CONCAT(&tx_tmp_list, &txq->head, tx_desc_list_elem);
@@ -1738,7 +1740,7 @@ void
ol_tx_queue_log_free(
struct ol_txrx_pdev_t *pdev,
struct ol_tx_frms_queue_t *txq,
- int tid, int frms, int bytes)
+ int tid, int frms, int bytes, bool is_peer_txq)
{
u_int16_t peer_id;
struct ol_tx_log_queue_add_t *log_elem;
@@ -1750,7 +1752,7 @@ ol_tx_queue_log_free(
return;
}
- if (tid < OL_TX_NUM_TIDS) {
+ if ((tid < OL_TX_NUM_TIDS) && is_peer_txq) {
struct ol_txrx_peer_t *peer;
struct ol_tx_frms_queue_t *txq_base;
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_queue.h b/CORE/CLD_TXRX/TXRX/ol_tx_queue.h
index 4b6500403322..19d3001f0bc7 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx_queue.h
+++ b/CORE/CLD_TXRX/TXRX/ol_tx_queue.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -95,12 +95,13 @@ ol_tx_dequeue(
* @param pdev - the physical device object, which stores the txqs
* @param txq - which tx queue to free frames from
* @param tid - the extended TID that the queue belongs to
+ * @param is_peer_txq - peer queue or not
*/
void
ol_tx_queue_free(
struct ol_txrx_pdev_t *pdev,
struct ol_tx_frms_queue_t *txq,
- int tid);
+ int tid, bool is_peer_txq);
/**
* @brief - discard pending tx frames from the tx queue
@@ -124,7 +125,7 @@ ol_tx_queue_discard(
#define ol_tx_enqueue(pdev, txq, tx_desc, tx_msdu_info) /* no-op */
#define ol_tx_dequeue(pdev, ext_tid, txq, head, num_frames, credit, bytes) 0
-#define ol_tx_queue_free(pdev, txq, tid) /* no-op */
+#define ol_tx_queue_free(pdev, txq, tid, is_peer_txq) /* no-op */
#define ol_tx_queue_discard(pdev, flush, tx_descs) /* no-op */
#endif /* defined(CONFIG_HL_SUPPORT) */
diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx.c b/CORE/CLD_TXRX/TXRX/ol_txrx.c
index f61d6ed5b87e..7add94714be6 100644
--- a/CORE/CLD_TXRX/TXRX/ol_txrx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_txrx.c
@@ -1204,10 +1204,10 @@ ol_txrx_vdev_detach(
for (i = 0; i < OL_TX_VDEV_NUM_QUEUES; i++) {
txq = &vdev->txqs[i];
- ol_tx_queue_free(pdev, txq, (i + OL_TX_NUM_TIDS));
+ ol_tx_queue_free(pdev, txq, (i + OL_TX_NUM_TIDS), false);
}
}
- #endif /* defined(CONFIG_HL_SUPPORT) */
+#endif /* defined(CONFIG_HL_SUPPORT) */
adf_os_spin_lock_bh(&vdev->ll_pause.mutex);
adf_os_timer_cancel(&vdev->ll_pause.timer);
@@ -1772,7 +1772,7 @@ ol_txrx_peer_unref_delete(ol_txrx_peer_handle peer)
for (i = 0; i < OL_TX_NUM_TIDS; i++) {
txq = &peer->txqs[i];
- ol_tx_queue_free(pdev, txq, i);
+ ol_tx_queue_free(pdev, txq, i, true);
}
}
#endif /* defined(CONFIG_HL_SUPPORT) */
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 5c13303563e7..55ead60a0f10 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -3397,6 +3397,26 @@ enum dot11p_mode {
#define CFG_BTC_WLAN_INTERVAL_PAGE_SAP_MAX (200)
#define CFG_BTC_WLAN_INTERVAL_PAGE_SAP_DEFAULT (30)
+/**
+ * Config to set BT WLAN co-existing
+ * 0: enable BT WLAN co-existing
+ * 1: dynamically disable BT WLAN co-existing
+ */
+#define CFG_BTC_DYNAMIC_WLAN_BT_COEX "gDynamicBTCOEX"
+#define CFG_BTC_DYNAMIC_WLAN_BT_COEX_MIN (0)
+#define CFG_BTC_DYNAMIC_WLAN_BT_COEX_MAX (1)
+#define CFG_BTC_DYNAMIC_WLAN_BT_COEX_DEFAULT (0)
+
+/**
+ * Config to set antenna isolation
+ * range: 0 - 100 db
+ * default: 0 db
+ */
+#define CFG_BTC_ANTENNA_ISOLATION "gAntennaIsolation"
+#define CFG_BTC_ANTENNA_ISOLATION_MIN (0)
+#define CFG_BTC_ANTENNA_ISOLATION_MAX (100)
+#define CFG_BTC_ANTENNA_ISOLATION_DEFAULT (0)
+
/* Parameters for roaming scans performed at high RSSI */
@@ -4576,6 +4596,8 @@ struct hdd_config {
uint32_t coex_page_sap_bt_interval;
uint32_t coex_page_sap_wlan_interval;
+ uint32_t dynamic_wlan_bt_coex;
+ uint32_t antenna_isolation;
uint8_t inform_bss_rssi_raw;
#ifdef WLAN_FEATURE_TSF
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index cbb0bf8b4310..af88009372fb 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -4197,6 +4197,20 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_BTC_WLAN_INTERVAL_PAGE_SAP_MIN,
CFG_BTC_WLAN_INTERVAL_PAGE_SAP_MAX),
+ REG_VARIABLE(CFG_BTC_DYNAMIC_WLAN_BT_COEX, WLAN_PARAM_Integer,
+ hdd_config_t, dynamic_wlan_bt_coex,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_DYNAMIC_WLAN_BT_COEX_DEFAULT,
+ CFG_BTC_DYNAMIC_WLAN_BT_COEX_MIN,
+ CFG_BTC_DYNAMIC_WLAN_BT_COEX_MAX),
+
+ REG_VARIABLE(CFG_BTC_ANTENNA_ISOLATION, WLAN_PARAM_Integer,
+ hdd_config_t, antenna_isolation,
+ VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
+ CFG_BTC_ANTENNA_ISOLATION_DEFAULT,
+ CFG_BTC_ANTENNA_ISOLATION_MIN,
+ CFG_BTC_ANTENNA_ISOLATION_MAX),
+
REG_VARIABLE(CFG_INFORM_BSS_RSSI_RAW_NAME, WLAN_PARAM_Integer,
hdd_config_t, inform_bss_rssi_raw,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -7902,4 +7916,10 @@ void hdd_set_btc_bt_wlan_interval(hdd_context_t *hdd_ctx)
if (VOS_STATUS_SUCCESS != status)
hddLog(LOGE, "Fail to set coex page sap bt interval parameters");
}
+
+ status = sme_set_btc_dynamic_bt_wlan_coex(
+ config->dynamic_wlan_bt_coex, config->antenna_isolation);
+
+ if (VOS_STATUS_SUCCESS != status)
+ hddLog(LOGE, "Fail to set enable bt wlan coex parameters");
}
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index 4749917bafe1..98bb836c6bfb 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -11983,9 +11983,9 @@ int wlan_hdd_cfg80211_init(struct device *dev,
&hdd_channels_2_4_GHZ[0],
sizeof(hdd_channels_2_4_GHZ));
if (hdd_is_5g_supported(pHddCtx) &&
- ((eHDD_DOT11_MODE_11b != pCfg->dot11Mode) ||
- (eHDD_DOT11_MODE_11g != pCfg->dot11Mode) ||
- (eHDD_DOT11_MODE_11b_ONLY != pCfg->dot11Mode) ||
+ ((eHDD_DOT11_MODE_11b != pCfg->dot11Mode) &&
+ (eHDD_DOT11_MODE_11g != pCfg->dot11Mode) &&
+ (eHDD_DOT11_MODE_11b_ONLY != pCfg->dot11Mode) &&
(eHDD_DOT11_MODE_11g_ONLY != pCfg->dot11Mode)))
{
wiphy->bands[IEEE80211_BAND_5GHZ] = &wlan_hdd_band_5_GHZ;
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index b3e855aad8a7..bd5c69dd5311 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -4201,7 +4201,8 @@ static VOS_STATUS hdd_parse_ese_beacon_req(tANI_U8 *pValue,
tCsrEseBeaconReq *pEseBcnReq)
{
tANI_U8 *inPtr = pValue;
- int tempInt = 0;
+ uint8_t input = 0;
+ uint32_t tempInt = 0;
int j = 0, i = 0, v = 0;
char buf[32];
@@ -4224,11 +4225,11 @@ static VOS_STATUS hdd_parse_ese_beacon_req(tANI_U8 *pValue,
v = sscanf(inPtr, "%31s ", buf);
if (1 != v) return -EINVAL;
- v = kstrtos32(buf, 10, &tempInt);
+ v = kstrtou8(buf, 10, &input);
if (v < 0) return -EINVAL;
- tempInt = VOS_MIN(tempInt, SIR_ESE_MAX_MEAS_IE_REQS);
- pEseBcnReq->numBcnReqIe = tempInt;
+ input = VOS_MIN(input, SIR_ESE_MAX_MEAS_IE_REQS);
+ pEseBcnReq->numBcnReqIe = input;
hddLog(LOG1, "Number of Bcn Req Ie fields: %d", pEseBcnReq->numBcnReqIe);
@@ -4249,24 +4250,24 @@ static VOS_STATUS hdd_parse_ese_beacon_req(tANI_U8 *pValue,
v = sscanf(inPtr, "%31s ", buf);
if (1 != v) return -EINVAL;
- v = kstrtos32(buf, 10, &tempInt);
+ v = kstrtou32(buf, 10, &tempInt);
if (v < 0) return -EINVAL;
switch (i) {
case 0: /* Measurement token */
- if (tempInt <= 0) {
+ if (!tempInt) {
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "Invalid Measurement Token(%d)", tempInt);
+ "Invalid Measurement Token: %d", tempInt);
return -EINVAL;
}
pEseBcnReq->bcnReq[j].measurementToken = tempInt;
break;
case 1: /* Channel number */
- if ((tempInt <= 0) ||
+ if ((!tempInt) ||
(tempInt > WNI_CFG_CURRENT_CHANNEL_STAMAX)) {
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "Invalid Channel Number(%d)", tempInt);
+ "Invalid Channel Number: %d", tempInt);
return -EINVAL;
}
pEseBcnReq->bcnReq[j].channel = tempInt;
@@ -4276,19 +4277,18 @@ static VOS_STATUS hdd_parse_ese_beacon_req(tANI_U8 *pValue,
if ((tempInt < eSIR_PASSIVE_SCAN) ||
(tempInt > eSIR_BEACON_TABLE)) {
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "Invalid Scan Mode(%d) Expected{0|1|2}", tempInt);
+ "Invalid Scan Mode: %d Expected{0|1|2}", tempInt);
return -EINVAL;
}
pEseBcnReq->bcnReq[j].scanMode= tempInt;
break;
case 3: /* Measurement duration */
- if (((tempInt <= 0) &&
+ if (((!tempInt) &&
(pEseBcnReq->bcnReq[j].scanMode != eSIR_BEACON_TABLE)) ||
- ((tempInt < 0) &&
- (pEseBcnReq->bcnReq[j].scanMode == eSIR_BEACON_TABLE))) {
+ ((pEseBcnReq->bcnReq[j].scanMode == eSIR_BEACON_TABLE))) {
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- "Invalid Measurement Duration(%d)", tempInt);
+ "Invalid Measurement Duration: %d", tempInt);
return -EINVAL;
}
pEseBcnReq->bcnReq[j].measurementDuration = tempInt;
diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c
index 4c6acb27ec17..403c44eccbb7 100644
--- a/CORE/HDD/src/wlan_hdd_tdls.c
+++ b/CORE/HDD/src/wlan_hdd_tdls.c
@@ -2255,6 +2255,11 @@ void wlan_hdd_tdls_increment_peer_count(hdd_adapter_t *pAdapter)
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: %d",
__func__, pHddCtx->connected_peer_count);
+ if (pHddCtx->cfg_ini->enable_dynamic_sta_chainmask &&
+ (HDD_ANTENNA_MODE_2X2 != pHddCtx->current_antenna_mode))
+ hdd_decide_dynamic_chain_mask(pHddCtx,
+ HDD_ANTENNA_MODE_2X2);
+
mutex_unlock(&pHddCtx->tdls_lock);
EXIT();
}
@@ -2277,6 +2282,10 @@ void wlan_hdd_tdls_decrement_peer_count(hdd_adapter_t *pAdapter)
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO, "%s: %d",
__func__, pHddCtx->connected_peer_count);
+ if (!pHddCtx->connected_peer_count &&
+ pHddCtx->cfg_ini->enable_dynamic_sta_chainmask)
+ hdd_decide_dynamic_chain_mask(pHddCtx,
+ HDD_ANTENNA_MODE_INVALID);
mutex_unlock(&pHddCtx->tdls_lock);
EXIT();
}
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index bc3a01579cc6..35d07b75f0ee 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 11
#define QWLAN_VERSION_EXTRA ""
-#define QWLAN_VERSION_BUILD 95
+#define QWLAN_VERSION_BUILD 97
-#define QWLAN_VERSIONSTR "4.0.11.95"
+#define QWLAN_VERSIONSTR "4.0.11.97"
#define AR6320_REV1_VERSION 0x5000000
diff --git a/CORE/SERVICES/COMMON/wlan_module_ids.h b/CORE/SERVICES/COMMON/wlan_module_ids.h
index ac69a90da7e2..716a4f68fac1 100644
--- a/CORE/SERVICES/COMMON/wlan_module_ids.h
+++ b/CORE/SERVICES/COMMON/wlan_module_ids.h
@@ -99,6 +99,7 @@ typedef enum {
WLAN_MODULE_NAN20, /* 0x40 */
WLAN_MODULE_QBOOST, /* 0x41 */
WLAN_MODULE_P2P_LISTEN_OFFLOAD, /* 0x42 */
+ WLAN_MODULE_HALPHY, /* 0x43 */
WLAN_MODULE_ID_MAX,
WLAN_MODULE_ID_INVALID = WLAN_MODULE_ID_MAX,
diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h
index 96d3a4ca2aaf..fcfba3b5de9e 100644
--- a/CORE/SERVICES/COMMON/wmi_unified.h
+++ b/CORE/SERVICES/COMMON/wmi_unified.h
@@ -5288,6 +5288,17 @@ typedef enum {
WMI_VDEV_PARAM_MGMT_TX_POWER,
/*
+ * Vdev level non aggregration/11g sw retry threshold.
+ * 0-disable, min:0, max:31, default:15
+ */
+ WMI_VDEV_PARAM_NON_AGG_SW_RETRY_TH,
+ /*
+ * Vdev level aggregration sw retry threshold.
+ * 0-disable, min:0, max:31, default:15
+ */
+ WMI_VDEV_PARAM_AGG_SW_RETRY_TH,
+
+ /*
* === ADD NEW VDEV PARAM TYPES ABOVE THIS LINE ===
* The below vdev param types are used for prototyping, and are
* prone to change.
diff --git a/CORE/SERVICES/COMMON/wmi_version.h b/CORE/SERVICES/COMMON/wmi_version.h
index 57c2ed41c3da..f2e272c931e4 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_ 259
+#define __WMI_REVISION_ 260
/** The Version Namespace should not be normally changed. Only
* host and firmware of the same WMI namespace will work
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 743f7a4bea60..d05dd39224ca 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -22675,14 +22675,14 @@ static void wma_unpause_vdev(tp_wma_handle wma) {
if (!wma->interfaces[vdev_id].handle)
continue;
- #ifdef QCA_SUPPORT_TXRX_VDEV_PAUSE_LL
+#if defined(CONFIG_HL_SUPPORT) || defined(QCA_SUPPORT_TXRX_VDEV_PAUSE_LL)
/* When host resume, by default, unpause all active vdev */
if (wma->interfaces[vdev_id].pause_bitmap) {
wdi_in_vdev_unpause(wma->interfaces[vdev_id].handle,
0xffffffff);
wma->interfaces[vdev_id].pause_bitmap = 0;
}
- #endif /* QCA_SUPPORT_TXRX_VDEV_PAUSE_LL */
+#endif /* QCA_SUPPORT_TXRX_VDEV_PAUSE_LL || CONFIG_HL_SUPPORT */
iface = &wma->interfaces[vdev_id];
iface->conn_state = FALSE;
@@ -33465,7 +33465,7 @@ static wmi_buf_t wma_setup_wmi_init_msg(tp_wma_handle wma_handle,
host_mem_chunks[idx].ptr) ;
}
cmd->num_host_mem_chunks = wma_handle->num_mem_chunks;
- len += (wma_handle->num_mem_chunks * sizeof(wlan_host_memory_chunk));
+ *len += (wma_handle->num_mem_chunks * sizeof(wlan_host_memory_chunk));
WMITLV_SET_HDR((buf_ptr + sizeof(*cmd) + sizeof(wmi_resource_config)),
WMITLV_TAG_ARRAY_STRUC,
(sizeof(wlan_host_memory_chunk) *
diff --git a/CORE/SME/inc/csrInternal.h b/CORE/SME/inc/csrInternal.h
index 1cb1d7b8914c..06d30b57e5dd 100644
--- a/CORE/SME/inc/csrInternal.h
+++ b/CORE/SME/inc/csrInternal.h
@@ -1521,7 +1521,7 @@ tANI_BOOLEAN csrRoamIs11rAssoc(tpAniSirGlobal pMac, tANI_U8 sessionId);
//Returns whether the current association is a ESE assoc or not
tANI_BOOLEAN csrRoamIsESEAssoc(tpAniSirGlobal pMac, tANI_U8 sessionId);
tANI_BOOLEAN csrRoamIsEseIniFeatureEnabled(tpAniSirGlobal pMac);
-tANI_BOOLEAN csrNeighborRoamIsESEAssoc(tpAniSirGlobal pMac, tANI_U8 sessionId);
+tANI_BOOLEAN csrNeighborRoamIsESEAssoc(tpAniSirGlobal pMac, tANI_U32 sessionId);
#endif
//Remove this code once SLM_Sessionization is supported
diff --git a/CORE/SME/inc/sme_Api.h b/CORE/SME/inc/sme_Api.h
index 02a42b743ccf..6d2e201679e5 100644
--- a/CORE/SME/inc/sme_Api.h
+++ b/CORE/SME/inc/sme_Api.h
@@ -4460,6 +4460,8 @@ VOS_STATUS sme_set_btc_bt_wlan_interval_page_sta(uint32_t bt_interval,
uint32_t sta_interval);
VOS_STATUS sme_set_btc_bt_wlan_interval_page_sap(uint32_t bt_interval,
uint32_t sap_interval);
+VOS_STATUS sme_set_btc_dynamic_bt_wlan_coex(uint32_t dynamic_wlan_bt_coex,
+ uint32_t antenna_isolation);
uint8_t sme_is_any_session_in_connected_state(tHalHandle h_hal);
diff --git a/CORE/SME/src/csr/csrApiRoam.c b/CORE/SME/src/csr/csrApiRoam.c
index 43c43262f0fa..055599fcaee0 100644
--- a/CORE/SME/src/csr/csrApiRoam.c
+++ b/CORE/SME/src/csr/csrApiRoam.c
@@ -466,18 +466,22 @@ eHalStatus csrUpdateChannelList(tpAniSirGlobal pMac)
tANI_U8 num_channel = 0;
tANI_U32 bufLen;
vos_msg_t msg;
- tANI_U8 i, j, social_channel[MAX_SOCIAL_CHANNELS] = {1,6,11};
+ tANI_U8 i;
tANI_U8 channel_state;
uint16_t unsafe_chan[NUM_20MHZ_RF_CHANNELS];
uint16_t unsafe_chan_cnt = 0;
uint16_t cnt = 0;
uint8_t channel;
bool is_unsafe_chan;
+#ifdef WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY
+ int j, social_channel[MAX_SOCIAL_CHANNELS] = {1,6,11};
+#endif
vos_get_wlan_unsafe_channel(unsafe_chan,
&unsafe_chan_cnt,
sizeof(unsafe_chan));
+#ifdef WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY
if (CSR_IS_5G_BAND_ONLY(pMac))
{
for (i = 0; i < MAX_SOCIAL_CHANNELS; i++)
@@ -490,6 +494,7 @@ eHalStatus csrUpdateChannelList(tpAniSirGlobal pMac)
numChan++;
}
}
+#endif
bufLen = sizeof(tSirUpdateChanList) +
(sizeof(tSirUpdateChanParam) * (numChan));
@@ -569,6 +574,7 @@ eHalStatus csrUpdateChannelList(tpAniSirGlobal pMac)
}
+#ifdef WLAN_ENABLE_SOCIAL_CHANNELS_5G_ONLY
if (CSR_IS_5G_BAND_ONLY(pMac))
{
for (j = 0; j < MAX_SOCIAL_CHANNELS; j++)
@@ -585,6 +591,7 @@ eHalStatus csrUpdateChannelList(tpAniSirGlobal pMac)
}
}
}
+#endif
if ((pMac->roam.configParam.uCfgDot11Mode == eCSR_CFG_DOT11_MODE_AUTO) ||
(pMac->roam.configParam.uCfgDot11Mode ==
@@ -5663,7 +5670,7 @@ tANI_BOOLEAN csrRoamIsFastRoamEnabled(tpAniSirGlobal pMac, tANI_U32 sessionId)
\return eANI_BOOLEAN_TRUE if current assoc is ESE, eANI_BOOLEAN_FALSE
otherwise
---------------------------------------------------------------------------*/
-tANI_BOOLEAN csrNeighborRoamIsESEAssoc(tpAniSirGlobal pMac, tANI_U8 sessionId)
+tANI_BOOLEAN csrNeighborRoamIsESEAssoc(tpAniSirGlobal pMac, tANI_U32 sessionId)
{
return pMac->roam.neighborRoamInfo[sessionId].isESEAssoc;
}
diff --git a/CORE/SME/src/rrm/sme_rrm.c b/CORE/SME/src/rrm/sme_rrm.c
index feff4e197490..a8aa27a39a1c 100644
--- a/CORE/SME/src/rrm/sme_rrm.c
+++ b/CORE/SME/src/rrm/sme_rrm.c
@@ -1228,11 +1228,11 @@ eHalStatus sme_RrmProcessNeighborReport(tpAniSirGlobal pMac, void *pMsgBuf)
tpRrmNeighborReportDesc pNeighborReportDesc;
tANI_U8 i = 0;
VOS_STATUS vosStatus = VOS_STATUS_SUCCESS;
- tANI_U8 sessionId;
+ tANI_U32 sessionId;
/* Get the session id */
status = csrRoamGetSessionIdFromBSSID(pMac, (tCsrBssid *)pNeighborRpt->bssId,
- (tANI_U32*) &sessionId);
+ &sessionId);
if (HAL_STATUS_SUCCESS(status)) {
#ifdef FEATURE_WLAN_ESE
/* Clear the cache for ESE. */
diff --git a/CORE/SME/src/sme_common/sme_Api.c b/CORE/SME/src/sme_common/sme_Api.c
index 7e74be03beb5..30438b7470d7 100644
--- a/CORE/SME/src/sme_common/sme_Api.c
+++ b/CORE/SME/src/sme_common/sme_Api.c
@@ -18903,6 +18903,45 @@ VOS_STATUS sme_set_btc_bt_wlan_interval_page_sap(uint32_t bt_interval,
}
/**
+ * sme_set_btc_bt_wlan_coex() - Set the btc bt wlan coex
+ * @dynamic_wlan_bt_coex: enable bt wlan co-exist
+ *
+ * Return: Return VOS_STATUS.
+ */
+VOS_STATUS sme_set_btc_dynamic_bt_wlan_coex(uint32_t dynamic_wlan_bt_coex,
+ uint32_t antenna_isolation)
+{
+ vos_msg_t msg = {0};
+ VOS_STATUS vos_status;
+ WMI_COEX_CONFIG_CMD_fixed_param *sme_interval;
+
+ sme_interval = vos_mem_malloc(sizeof(*sme_interval));
+ if (!sme_interval) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Malloc failed"));
+ return VOS_STATUS_E_NOMEM;
+ }
+
+ sme_interval->config_type = WMI_COEX_CONFIG_BTC_ENABLE;
+ sme_interval->config_arg1 = dynamic_wlan_bt_coex;
+ sme_interval->config_arg2 = antenna_isolation;
+
+ msg.type = WDA_BTC_BT_WLAN_INTERVAL_CMD;
+ msg.reserved = 0;
+ msg.bodyptr = sme_interval;
+
+ vos_status = vos_mq_post_message(VOS_MODULE_ID_WDA,&msg);
+ if (!VOS_IS_STATUS_SUCCESS(vos_status)) {
+ VOS_TRACE(VOS_MODULE_ID_SME, VOS_TRACE_LEVEL_ERROR,
+ FL("Not able to post message to WDA"));
+ vos_mem_free(sme_interval);
+ return VOS_STATUS_E_FAILURE;
+ }
+
+ return vos_status;
+}
+
+/**
* sme_send_disassoc_req_frame - send disassoc req
* @hal: handler to hal
* @session_id: session id
diff --git a/CORE/VOSS/src/vos_sched.c b/CORE/VOSS/src/vos_sched.c
index b76963a44f8f..03ce10e62e7e 100644
--- a/CORE/VOSS/src/vos_sched.c
+++ b/CORE/VOSS/src/vos_sched.c
@@ -1964,6 +1964,12 @@ VOS_STATUS vos_watchdog_wlan_shutdown(void)
*/
VOS_STATUS vos_watchdog_wlan_re_init(void)
{
+ /* Make sure that Vos Watchdog context has been initialized */
+ if (gpVosWatchdogContext == NULL) {
+ VOS_TRACE(VOS_MODULE_ID_VOSS, VOS_TRACE_LEVEL_INFO,
+ "%s: gpVosWatchdogContext == NULL", __func__);
+ return VOS_STATUS_SUCCESS;
+ }
/* watchdog task is still running, it is not closed in shutdown */
set_bit(WD_WLAN_REINIT_EVENT_MASK, &gpVosWatchdogContext->wdEventFlag);
set_bit(WD_POST_EVENT_MASK, &gpVosWatchdogContext->wdEventFlag);