Merge "wlan: Add time stamp info log for suspend failure" into wlan-driver.lnx.1.0-dev.1.0
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index d58daae..7a51475 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -3768,10 +3768,20 @@
pReqMsg->numBssid = nla_get_u32(
tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BSSID_HOTLIST_PARAMS_NUM_AP]);
+ if (pReqMsg->numBssid > WLAN_EXTSCAN_MAX_HOTLIST_APS) {
+ hddLog(LOGE, FL("Number of AP: %u exceeds max: %u"),
+ pReqMsg->numBssid, WLAN_EXTSCAN_MAX_HOTLIST_APS);
+ goto fail;
+ }
hddLog(VOS_TRACE_LEVEL_INFO, FL("Number of AP (%d)"), pReqMsg->numBssid);
nla_for_each_nested(apTh,
tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_AP_THRESHOLD_PARAM], rem) {
+ if (i == pReqMsg->numBssid) {
+ hddLog(LOGW, FL("Ignoring excess AP"));
+ break;
+ }
+
if(nla_parse(tb2, QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX,
nla_data(apTh), nla_len(apTh),
NULL)) {
@@ -3810,6 +3820,12 @@
i++;
}
+ if (i < pReqMsg->numBssid) {
+ hddLog(LOGW, FL("Number of AP %u less than expected %u"),
+ i, pReqMsg->numBssid);
+ pReqMsg->numBssid = i;
+ }
+
context = &pHddCtx->ext_scan_context;
spin_lock(&hdd_context_lock);
INIT_COMPLETION(context->response_event);
@@ -8305,7 +8321,7 @@
},
- {
+ [QCA_NL80211_VENDOR_SUBCMD_NAN_INDEX] = {
.vendor_id = QCA_NL80211_VENDOR_ID,
.subcmd = QCA_NL80211_VENDOR_SUBCMD_NAN
},
diff --git a/CORE/HDD/src/wlan_hdd_early_suspend.c b/CORE/HDD/src/wlan_hdd_early_suspend.c
index 850a9a9..87722c6 100644
--- a/CORE/HDD/src/wlan_hdd_early_suspend.c
+++ b/CORE/HDD/src/wlan_hdd_early_suspend.c
@@ -98,7 +98,7 @@
static eHalStatus g_standby_status;
extern VOS_STATUS hdd_post_voss_start_config(hdd_context_t* pHddCtx);
-extern void hdd_wlan_initial_scan(hdd_context_t *pHddCtx);
+extern void hdd_wlan_initial_scan(hdd_adapter_t *pAdapter);
extern struct notifier_block hdd_netdev_notifier;
extern tVOS_CON_MODE hdd_get_conparam ( void );
@@ -489,7 +489,7 @@
pHddCtx->hdd_ps_state = eHDD_SUSPEND_NONE;
//Trigger the initial scan
- hdd_wlan_initial_scan(pHddCtx);
+ hdd_wlan_initial_scan(pAdapter);
return VOS_STATUS_SUCCESS;
@@ -2162,6 +2162,30 @@
ssr_timer_started = true;
}
+#ifdef FEATURE_WLAN_DIAG_SUPPORT
+/**
+ * hdd_wlan_ssr_shutdown_event()- send ssr shutdown state
+ *
+ * This Function send send ssr shutdown state diag event
+ *
+ * Return: void.
+ */
+static void hdd_wlan_ssr_shutdown_event(void)
+{
+ WLAN_VOS_DIAG_EVENT_DEF(ssr_shutdown,
+ struct host_event_wlan_ssr_shutdown);
+ vos_mem_zero(&ssr_shutdown, sizeof(ssr_shutdown));
+ ssr_shutdown.status = SSR_SUB_SYSTEM_SHUTDOWN;
+ WLAN_VOS_DIAG_EVENT_REPORT(&ssr_shutdown,
+ EVENT_WLAN_SSR_SHUTDOWN_SUBSYSTEM);
+}
+#else
+static inline void hdd_wlan_ssr_shutdown_event(void)
+{
+
+};
+#endif
+
/* the HDD interface to WLAN driver shutdown,
* the primary shutdown function in SSR
*/
@@ -2198,7 +2222,6 @@
{
vos_timer_stop(&pHddCtx->tx_rx_trafficTmr);
}
-
vos_flush_delayed_work(&pHddCtx->spoof_mac_addr_work);
vos_flush_work(&pHddCtx->sap_start_work);
hdd_reset_all_adapters(pHddCtx);
@@ -2347,6 +2370,7 @@
hddLog(VOS_TRACE_LEVEL_ERROR, "%s: failed to free power on lock",
__func__);
}
+ hdd_wlan_ssr_shutdown_event();
hddLog(VOS_TRACE_LEVEL_FATAL, "%s: WLAN driver shutdown complete"
,__func__);
return VOS_STATUS_SUCCESS;
@@ -2454,6 +2478,29 @@
EXIT();
}
+#ifdef FEATURE_WLAN_DIAG_SUPPORT
+/**
+* hdd_wlan_ssr_reinit_event()- send ssr reinit state
+*
+* This Function send send ssr reinit state diag event
+*
+* Return: void.
+*/
+static void hdd_wlan_ssr_reinit_event(void)
+{
+ WLAN_VOS_DIAG_EVENT_DEF(ssr_reinit, struct host_event_wlan_ssr_reinit);
+ vos_mem_zero(&ssr_reinit, sizeof(ssr_reinit));
+ ssr_reinit.status = SSR_SUB_SYSTEM_REINIT;
+ WLAN_VOS_DIAG_EVENT_REPORT(&ssr_reinit,
+ EVENT_WLAN_SSR_REINIT_SUBSYSTEM);
+}
+#else
+static inline void hdd_wlan_ssr_reinit_event(void)
+{
+
+}
+#endif
+
/* the HDD interface to WLAN driver re-init.
* This is called to initialize/start WLAN driver after a shutdown.
*/
@@ -2751,6 +2798,7 @@
return -EPERM;
success:
+ hdd_wlan_ssr_reinit_event();
/* Trigger replay of BTC events */
send_btc_nlink_msg(WLAN_MODULE_DOWN_IND, 0);
diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c
index 089282a..9a42301 100644
--- a/CORE/HDD/src/wlan_hdd_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_tx_rx.c
@@ -903,6 +903,24 @@
return NETDEV_TX_OK;
}
}
+
+ if (pHddCtx->bad_sta[STAId]) {
+ hdd_list_node_t *anchor = NULL;
+ skb_list_node_t *pktNode = NULL;
+ struct sk_buff *fskb = NULL;
+
+ if (pAdapter->wmm_tx_queue[qid].count >=
+ pAdapter->wmm_tx_queue[qid].max_size / 2) {
+ hdd_list_remove_front(&pAdapter->wmm_tx_queue[qid],
+ &anchor);
+ pktNode = list_entry(anchor, skb_list_node_t, anchor);
+ fskb = pktNode->skb;
+ kfree_skb(fskb);
+ ++pAdapter->stats.tx_dropped;
+ ++pAdapter->hdd_stats.hddTxRxStats.txXmitDropped;
+ }
+ }
+
//If we have already reached the max queue size, disable the TX queue
if ( pAdapter->wmm_tx_queue[qid].count == pAdapter->wmm_tx_queue[qid].max_size)
{
diff --git a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
index 1a26981..f749a8c 100644
--- a/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
+++ b/CORE/MAC/src/pe/lim/limProcessSmeReqMessages.c
@@ -2092,6 +2092,14 @@
" max tx = %d", regMax, localPowerConstraint,
psessionEntry->maxTxPower );
+ if (pSmeJoinReq->powerCap.maxTxPower > psessionEntry->maxTxPower)
+ {
+ pSmeJoinReq->powerCap.maxTxPower = psessionEntry->maxTxPower;
+ VOS_TRACE(VOS_MODULE_ID_PE, VOS_TRACE_LEVEL_INFO,
+ "Update MaxTxPower in join Req to %d",
+ pSmeJoinReq->powerCap.maxTxPower);
+ }
+
if (pMac->lim.gLimCurrentBssUapsd)
{
pMac->lim.gUapsdPerAcBitmask = psessionEntry->pLimJoinReq->uapsdPerAcBitmask;
diff --git a/CORE/TL/src/wlan_qct_tl.c b/CORE/TL/src/wlan_qct_tl.c
index eebc2d3..73eb6f1 100755
--- a/CORE/TL/src/wlan_qct_tl.c
+++ b/CORE/TL/src/wlan_qct_tl.c
@@ -6078,9 +6078,11 @@
if (pTLCb->atlSTAClients[staid[i]]->weight <
WLANTL_RATE_RATIO_THRESHOLD) {
if (pTLCb->atlSTAClients[staid[i]]->per >= WLANTL_PER_THRESHOLD &&
- pTLCb->atlSTAClients[staid[i]]->queue > WLANTL_QUEUE_THRESHOLD) {
- vos_set_hdd_bad_sta(staid[i]);
- pTLCb->atlSTAClients[staid[i]]->set_flag = true;
+ pTLCb->atlSTAClients[staid[i]]->queue > WLANTL_QUEUE_THRESHOLD
+ && !pTLCb->atlSTAClients[staid[i]]->set_flag) {
+ pTLCb->atlSTAClients[staid[i]]->weight *= 2;
+ vos_set_hdd_bad_sta(staid[i]);
+ pTLCb->atlSTAClients[staid[i]]->set_flag = true;
}
else if (pTLCb->atlSTAClients[staid[i]]->set_flag) {
vos_reset_hdd_bad_sta(staid[i]);
diff --git a/CORE/VOSS/inc/event_defs.h b/CORE/VOSS/inc/event_defs.h
index 6907456..8690172 100644
--- a/CORE/VOSS/inc/event_defs.h
+++ b/CORE/VOSS/inc/event_defs.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2012-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2012-2017 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -1911,6 +1911,8 @@
EVENT_OFFLOAD_REQ = 0xAB8,
EVENT_TDLS_SCAN_BLOCK = 0xAB9,
EVENT_WLAN_TX_RX_MGMT = 0xABA,
+ EVENT_WLAN_SSR_REINIT_SUBSYSTEM = 0xB3C,
+ EVENT_WLAN_SSR_SHUTDOWN_SUBSYSTEM = 0xB3D,
EVENT_NEXT_UNUSED_EVENT,
EVENT_RSVD_START = 0x0800,
EVENT_RSVD_END = 0x083F,
diff --git a/CORE/VOSS/inc/vos_diag_core_event.h b/CORE/VOSS/inc/vos_diag_core_event.h
index c52a6f5..6fdb45c 100644
--- a/CORE/VOSS/inc/vos_diag_core_event.h
+++ b/CORE/VOSS/inc/vos_diag_core_event.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2014-2016 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2014-2017 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -385,6 +385,47 @@
uint32_t reserved;
};
+/*-------------------------------------------------------------------------
+ Event ID: EVENT_WLAN_SSR_REINIT_SUBSYSTEM
+ ------------------------------------------------------------------------*/
+/**
+ * struct host_event_wlan_css - Holds diag event details
+ * @status: Indicates the status of event
+ *
+ * This structure holds the host diag event related information
+ */
+
+struct host_event_wlan_ssr_reinit {
+ uint32_t status;
+};
+
+/*-------------------------------------------------------------------------
+ Event ID: EVENT_WLAN_SSR_SHUTDOWN_SUBSYSTEM
+ ------------------------------------------------------------------------*/
+/**
+ * struct host_event_wlan_ssr_shutdown - Holds diag event details
+ * @status: Indicates the status of event
+ *
+ * This structure holds the host diag event related information
+ */
+
+struct host_event_wlan_ssr_shutdown {
+ uint32_t status;
+};
+
+/*-------------------------------------------------------------------------
+ Function declarations and documenation
+ ------------------------------------------------------------------------*/
+/**
+ * enum host_ssr_events - Enum containing ssr subtype
+ * @SSR_SUB_SYSTEM_REINIT: Indicate ssr reinit state
+ * @SSR_SUB_SYSTEM_SHUTDOWN: Indicate ssr shutdown state
+ *
+ */
+enum host_ssr_events {
+ SSR_SUB_SYSTEM_REINIT,
+ SSR_SUB_SYSTEM_SHUTDOWN,
+};
/*-------------------------------------------------------------------------
Function declarations and documenation
diff --git a/CORE/WDA/inc/legacy/halTypes.h b/CORE/WDA/inc/legacy/halTypes.h
index f2f1b1f..67becef 100644
--- a/CORE/WDA/inc/legacy/halTypes.h
+++ b/CORE/WDA/inc/legacy/halTypes.h
@@ -358,7 +358,7 @@
* supported by rome/prima hardware
*/
#define MIN_TX_PWR_CAP 8
-#define MAX_TX_PWR_CAP 30
+#define MAX_TX_PWR_CAP 22
/* Moving the miscellaneous defination required by UMAC are moved here from
* volansdefs.h */