summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-11-17 22:43:41 -0700
committerLinux Build Service Account <lnxbuild@localhost>2016-11-17 22:43:41 -0700
commit6e9c33b71d3bd32a8c99339141c302335e72fcc9 (patch)
treebb278bd70ea6822bf2ac5fe4d7a6c56096ed1ce3
parent8b4979a73e23c447bc29d0e3ca2c1eed4feeba67 (diff)
parent2e560850ce5208987a276044f1fd7bd1ab4dd14c (diff)
Promotion of wlan-cld3.driver.lnx.1.1-00116.
CRs Change ID Subject -------------------------------------------------------------------------------------------------------------- 1088579 I5676598a008f3a118206e40c244faf38648e0b01 qcacld-3.0: Do not overwrite cfg SU beam formee in lim_e 688141 Iadf97b08e57a880086d91f29104552ffa186c8a2 Release 5.1.0.36P 1089946 I9812b26636b1fd82320de323538777ac048ea824 qcacld-3.0: Fix memory leaks when cds_open fails 1075798 I0131f4f706bc76feb86894975ff9f3c30f873b9b qcacld-3.0: Enable crash dump for peer delete timeout 658580 I469bf11a506a2901eae2865a69b75a058e276e75 qcacld-3.0: Remove unused gLimSendDisassocFrameThreshold 1085760 I24452973cae7fed83efc26341eb66765fa19f7a5 qcacld-3.0: Make LIM TDLS "populate" functions static 688141 I9597c2d745780c57f7d66d4bce77283944f4be8a Release 5.1.0.36Q 688141 Idd4b0f8d7f789a16e1042228b7b7675fb031d864 Release 5.1.0.36R 688141 I110cf341d898fb71884cac68c2449547b1dc2dc7 Release 5.1.0.36O 688141 I3a3301e2a75b75f72feaea586a39089c2cbadf84 Release 5.1.0.36T 688141 I7a28c5b19e422501a4937c205586ac3a4761ad50 Release 5.1.0.36V 688141 I4820c70eda7fc1518690748c4291c62ccd8f0881 Release 5.1.0.36U 1079320 I3609bcdb67e0046fac5a22bba9cb6a5eb4bcbe84 qcacld-3.0: Add changes for per NAPI or per Rx CE LRO ma 1089908 I2bdfc3c91e6cd8cc9d517640755aab26a2d818c9 qcacld-3.0: Fix incorrect pointer assignment in CSR Scan 1085760 Ic2e544232cc450fc9d8f706573b4e29144348170 qcacld-3.0: Remove obsolete lim_update_default_scan_ies( 1090473 I287487d865f3ef5386e8f8649a8bba42df5b56ac qcacld-3.0: Fix use-after-freed when sending WMI command 688141 Ib21d010bb3b01d6b0677fa4942edfe485136d3d2 Release 5.1.0.36W 1085760 Ie9931f972a3126fdc08c54f497aa46ef91d746cd qcacld-3.0: Properly import lim_get_htcb_state() 1085760 I493480bddd6302257123eea4bf1e7d1af5487c0d qcacld-3.0: Properly export lim_log_vht_cap() 1089287 I2068e358928fa7157625cf35b3de4ee552299fdb qcacld-3.0: Scan request sent on wrong vdev id 688141 Iccd86ef4f99c296e1b59baf3ae1c68b3c065dc4c Release 5.1.0.36S Change-Id: Iba2accf0078e3bc2ecbdbf14beb1442980d35313 CRs-Fixed: 1089908, 1079320, 1089287, 658580, 688141, 1089946, 1090473, 1075798, 1085760, 1088579
-rw-r--r--core/cds/src/cds_api.c1
-rw-r--r--core/dp/htt/htt_rx.c5
-rw-r--r--core/dp/txrx/ol_txrx.c81
-rw-r--r--core/dp/txrx/ol_txrx_types.h2
-rw-r--r--core/hdd/inc/wlan_hdd_lro.h4
-rw-r--r--core/hdd/src/wlan_hdd_lro.c337
-rw-r--r--core/hdd/src/wlan_hdd_main.c3
-rw-r--r--core/mac/inc/ani_global.h7
-rw-r--r--core/mac/inc/qwlan_version.h4
-rw-r--r--core/mac/src/include/parser_api.h2
-rw-r--r--core/mac/src/include/sir_params.h1
-rw-r--r--core/mac/src/pe/include/lim_global.h4
-rw-r--r--core/mac/src/pe/lim/lim_api.c5
-rw-r--r--core/mac/src/pe/lim/lim_process_message_queue.c59
-rw-r--r--core/mac/src/pe/lim/lim_process_tdls.c396
-rw-r--r--core/mac/src/pe/lim/lim_prop_exts_utils.c21
-rw-r--r--core/mac/src/pe/lim/lim_timer_utils.c51
-rw-r--r--core/mac/src/pe/lim/lim_timer_utils.h1
-rw-r--r--core/mac/src/pe/lim/lim_utils.c6
-rw-r--r--core/mac/src/sys/legacy/src/utils/src/mac_trace.c1
-rw-r--r--core/sme/src/csr/csr_api_scan.c10
-rw-r--r--core/wma/src/wma_dev_if.c4
-rw-r--r--core/wma/src/wma_features.c22
23 files changed, 365 insertions, 662 deletions
diff --git a/core/cds/src/cds_api.c b/core/cds/src/cds_api.c
index ff84def298ec..4475b5751480 100644
--- a/core/cds/src/cds_api.c
+++ b/core/cds/src/cds_api.c
@@ -422,6 +422,7 @@ err_bmi_close:
err_sched_close:
cds_sched_close(gp_cds_context);
+ cds_shutdown_notifier_purge();
err_concurrency_lock:
qdf_mutex_destroy(&cds_ctx->qdf_conc_list_lock);
diff --git a/core/dp/htt/htt_rx.c b/core/dp/htt/htt_rx.c
index b3bae10b0a6a..1d131e40cb80 100644
--- a/core/dp/htt/htt_rx.c
+++ b/core/dp/htt/htt_rx.c
@@ -1994,14 +1994,16 @@ htt_rx_amsdu_rx_in_order_pop_ll(htt_pdev_handle pdev,
qdf_nbuf_t msdu, next, prev = NULL;
uint8_t *rx_ind_data;
uint32_t *msg_word;
+ uint32_t rx_ctx_id;
unsigned int msdu_count = 0;
uint8_t offload_ind, frag_ind;
- struct htt_host_rx_desc_base *rx_desc;
uint8_t peer_id;
+ struct htt_host_rx_desc_base *rx_desc;
HTT_ASSERT1(htt_rx_in_order_ring_elems(pdev) != 0);
rx_ind_data = qdf_nbuf_data(rx_ind_msg);
+ rx_ctx_id = QDF_NBUF_CB_RX_CTX_ID(rx_ind_msg);
msg_word = (uint32_t *) rx_ind_data;
peer_id = HTT_RX_IN_ORD_PADDR_IND_PEER_ID_GET(
*(u_int32_t *)rx_ind_data);
@@ -2059,6 +2061,7 @@ htt_rx_amsdu_rx_in_order_pop_ll(htt_pdev_handle pdev,
QDF_NBUF_CB_DP_TRACE_PRINT(msdu) = false;
qdf_dp_trace_set_track(msdu, QDF_RX);
QDF_NBUF_CB_TX_PACKET_TRACK(msdu) = QDF_NBUF_TX_PKT_DATA_TRACK;
+ QDF_NBUF_CB_RX_CTX_ID(msdu) = rx_ctx_id;
ol_rx_log_packet(pdev, peer_id, msdu);
DPTRACE(qdf_dp_trace(msdu,
QDF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD,
diff --git a/core/dp/txrx/ol_txrx.c b/core/dp/txrx/ol_txrx.c
index 457b494b7800..60a806839ac4 100644
--- a/core/dp/txrx/ol_txrx.c
+++ b/core/dp/txrx/ol_txrx.c
@@ -70,6 +70,7 @@
#include <ol_tx_queue.h>
#include <ol_tx_sched.h> /* ol_tx_sched_attach, etc. */
#include <ol_txrx.h>
+#include <ol_txrx_types.h>
#include <cdp_txrx_flow_ctrl_legacy.h>
#include <cdp_txrx_ipa.h>
#include "wma.h"
@@ -2128,6 +2129,8 @@ ol_txrx_peer_attach(ol_txrx_vdev_handle vdev, uint8_t *peer_mac_addr)
TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
"error waiting for peer(%d) deletion, status %d\n",
vdev->wait_on_peer_id, (int) rc);
+ /* Added for debugging only */
+ QDF_BUG(0);
vdev->wait_on_peer_id = OL_TXRX_INVALID_LOCAL_PEER_ID;
return NULL;
}
@@ -4637,7 +4640,7 @@ void ol_txrx_lro_flush_handler(void *context,
void *rxpkt,
uint16_t staid)
{
- ol_txrx_pdev_handle pdev = (ol_txrx_pdev_handle)context;
+ ol_txrx_pdev_handle pdev = cds_get_context(QDF_MODULE_ID_TXRX);
if (qdf_unlikely(!pdev)) {
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
@@ -4647,7 +4650,7 @@ void ol_txrx_lro_flush_handler(void *context,
}
if (pdev->lro_info.lro_flush_cb)
- pdev->lro_info.lro_flush_cb(pdev->lro_info.lro_data);
+ pdev->lro_info.lro_flush_cb(context);
else
QDF_TRACE(QDF_MODULE_ID_TXRX, QDF_TRACE_LEVEL_ERROR,
"%s: lro_flush_cb NULL", __func__);
@@ -4666,13 +4669,13 @@ void ol_txrx_lro_flush(void *data)
{
p_cds_sched_context sched_ctx = get_cds_sched_ctxt();
struct cds_ol_rx_pkt *pkt;
- ol_txrx_pdev_handle pdev = (ol_txrx_pdev_handle)data;
+ ol_txrx_pdev_handle pdev = cds_get_context(QDF_MODULE_ID_TXRX);
if (qdf_unlikely(!sched_ctx))
return;
if (!ol_cfg_is_rx_thread_enabled(pdev->ctrl_pdev)) {
- ol_txrx_lro_flush_handler((void *)pdev, NULL, 0);
+ ol_txrx_lro_flush_handler(data, NULL, 0);
} else {
pkt = cds_alloc_ol_rx_pkt(sched_ctx);
if (qdf_unlikely(!pkt)) {
@@ -4683,7 +4686,7 @@ void ol_txrx_lro_flush(void *data)
pkt->callback =
(cds_ol_rx_thread_cb) ol_txrx_lro_flush_handler;
- pkt->context = pdev;
+ pkt->context = data;
pkt->Rxpkt = NULL;
pkt->staId = 0;
cds_indicate_rxpkt(sched_ctx, pkt);
@@ -4692,51 +4695,77 @@ void ol_txrx_lro_flush(void *data)
/**
* ol_register_lro_flush_cb() - register the LRO flush callback
- * @handler: callback function
- * @data: opaque data pointer to be passed back
+ * @lro_flush_cb: flush callback function
+ * @lro_init_cb: Allocate and initialize LRO data structure.
*
* Store the LRO flush callback provided and in turn
* register OL's LRO flush handler with CE
*
* Return: none
*/
-void ol_register_lro_flush_cb(void (handler)(void *), void *data)
+void ol_register_lro_flush_cb(void (lro_flush_cb)(void *),
+ void *(lro_init_cb)(void))
{
- struct hif_opaque_softc *hif_device =
- (struct hif_opaque_softc *)cds_get_context(QDF_MODULE_ID_HIF);
+ struct hif_opaque_softc *hif_device;
struct ol_txrx_pdev_t *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
- if (pdev != NULL) {
- pdev->lro_info.lro_flush_cb = handler;
- pdev->lro_info.lro_data = data;
- } else
+ if (pdev == NULL) {
TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, "%s: pdev NULL!", __func__);
+ TXRX_ASSERT2(0);
+ goto out;
+ }
+ if (pdev->lro_info.lro_flush_cb != NULL) {
+ TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
+ "%s: LRO already initialised\n", __func__);
+ if (pdev->lro_info.lro_flush_cb != lro_flush_cb) {
+ TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
+ "lro_flush_cb is differ to previously registered callback\n")
+ TXRX_ASSERT2(0);
+ goto out;
+ }
+ qdf_atomic_inc(&pdev->lro_info.lro_dev_cnt);
+ goto out;
+ }
+ pdev->lro_info.lro_flush_cb = lro_flush_cb;
+ hif_device = (struct hif_opaque_softc *)
+ cds_get_context(QDF_MODULE_ID_HIF);
- hif_lro_flush_cb_register(hif_device, ol_txrx_lro_flush, pdev);
+ hif_lro_flush_cb_register(hif_device, ol_txrx_lro_flush, lro_init_cb);
+ qdf_atomic_inc(&pdev->lro_info.lro_dev_cnt);
+
+out:
+ return;
}
/**
- * ol_deregister_lro_flush_cb() - deregister the LRO flush
- * callback
+ * ol_deregister_lro_flush_cb() - deregister the LRO flush callback
+ * @lro_deinit_cb: callback function for deregistration.
*
* Remove the LRO flush callback provided and in turn
* deregister OL's LRO flush handler with CE
*
* Return: none
*/
-void ol_deregister_lro_flush_cb(void)
+void ol_deregister_lro_flush_cb(void (lro_deinit_cb)(void *))
{
- struct hif_opaque_softc *hif_device =
- (struct hif_opaque_softc *)cds_get_context(QDF_MODULE_ID_HIF);
+ struct hif_opaque_softc *hif_device;
struct ol_txrx_pdev_t *pdev = cds_get_context(QDF_MODULE_ID_TXRX);
- hif_lro_flush_cb_deregister(hif_device);
-
- if (pdev != NULL) {
- pdev->lro_info.lro_flush_cb = NULL;
- pdev->lro_info.lro_data = NULL;
- } else
+ if (pdev == NULL) {
TXRX_PRINT(TXRX_PRINT_LEVEL_ERR, "%s: pdev NULL!", __func__);
+ return;
+ }
+ if (qdf_atomic_dec_and_test(&pdev->lro_info.lro_dev_cnt) == 0) {
+ TXRX_PRINT(TXRX_PRINT_LEVEL_ERR,
+ "%s: Other LRO enabled modules still exist, do not unregister the lro_flush_cb\n", __func__);
+ return;
+ }
+ hif_device =
+ (struct hif_opaque_softc *)cds_get_context(QDF_MODULE_ID_HIF);
+
+ hif_lro_flush_cb_deregister(hif_device, lro_deinit_cb);
+
+ pdev->lro_info.lro_flush_cb = NULL;
}
#endif /* FEATURE_LRO */
diff --git a/core/dp/txrx/ol_txrx_types.h b/core/dp/txrx/ol_txrx_types.h
index 898fb983660c..cc0dd07387e5 100644
--- a/core/dp/txrx/ol_txrx_types.h
+++ b/core/dp/txrx/ol_txrx_types.h
@@ -948,8 +948,8 @@ struct ol_txrx_pdev_t {
ol_tx_pause_callback_fp pause_cb;
struct {
- void *lro_data;
void (*lro_flush_cb)(void *);
+ qdf_atomic_t lro_dev_cnt;
} lro_info;
struct ol_txrx_peer_t *self_peer;
};
diff --git a/core/hdd/inc/wlan_hdd_lro.h b/core/hdd/inc/wlan_hdd_lro.h
index 0eaecdba83e9..4706526f111b 100644
--- a/core/hdd/inc/wlan_hdd_lro.h
+++ b/core/hdd/inc/wlan_hdd_lro.h
@@ -72,7 +72,6 @@ struct hdd_lro_desc_entry {
struct hdd_lro_desc_pool {
struct hdd_lro_desc_entry *lro_desc_array;
struct list_head lro_free_list_head;
- qdf_spinlock_t lro_pool_lock;
};
/**
@@ -93,7 +92,6 @@ struct hdd_lro_desc_table {
*/
struct hdd_lro_desc_info {
struct hdd_lro_desc_table *lro_hash_table;
- qdf_spinlock_t lro_hash_lock;
struct hdd_lro_desc_pool lro_desc_pool;
};
@@ -151,8 +149,6 @@ struct hdd_lro_stats {
struct hdd_lro_s {
struct net_lro_mgr *lro_mgr;
struct hdd_lro_desc_info lro_desc_info;
- qdf_spinlock_t lro_mgr_arr_access_lock;
- struct hdd_lro_stats lro_stats;
};
int hdd_lro_init(hdd_context_t *hdd_ctx);
diff --git a/core/hdd/src/wlan_hdd_lro.c b/core/hdd/src/wlan_hdd_lro.c
index 1f4a8f0256a2..586e0b717135 100644
--- a/core/hdd/src/wlan_hdd_lro.c
+++ b/core/hdd/src/wlan_hdd_lro.c
@@ -53,14 +53,6 @@
(LRO_DESC | LRO_ELIGIBILITY_CHECKED | LRO_TCP_ACK_NUM | \
LRO_TCP_DATA_CSUM | LRO_TCP_SEQ_NUM | LRO_TCP_WIN)
-#define LRO_HIST_UPDATE(lro_desc, adapter) \
- do { \
- uint8_t bucket = lro_desc->pkt_aggr_cnt >> 3; \
- if (unlikely(bucket > HDD_LRO_BUCKET_MAX)) \
- bucket = HDD_LRO_BUCKET_MAX; \
- adapter->lro_info.lro_stats.pkt_aggr_hist[bucket]++; \
- } while (0);
-
/**
* hdd_lro_get_skb_header() - LRO callback function
* @skb: network buffer
@@ -110,7 +102,6 @@ static void hdd_lro_desc_pool_init(struct hdd_lro_desc_pool *lro_desc_pool,
list_add_tail(&lro_desc_pool->lro_desc_array[i].lro_node,
&lro_desc_pool->lro_free_list_head);
}
- qdf_spinlock_create(&lro_desc_pool->lro_pool_lock);
}
/**
@@ -137,41 +128,6 @@ static void hdd_lro_desc_info_init(struct hdd_lro_s *hdd_info)
lro_hash_table[i].lro_desc_list);
}
- qdf_spinlock_create(&hdd_info->lro_desc_info.lro_hash_lock);
- qdf_spinlock_create(&hdd_info->lro_mgr_arr_access_lock);
-}
-
-/**
- * hdd_lro_desc_pool_deinit() - Free the LRO descriptor list
- * @hdd_info: HDD LRO data structure
- *
- * Free the pool of LRO descriptors
- *
- * Return: none
- */
-static void hdd_lro_desc_pool_deinit(struct hdd_lro_desc_pool *lro_desc_pool)
-{
- INIT_LIST_HEAD(&lro_desc_pool->lro_free_list_head);
- qdf_spinlock_destroy(&lro_desc_pool->lro_pool_lock);
-}
-
-/**
- * hdd_lro_desc_info_deinit() - Deinitialize the LRO descriptors
- *
- * @hdd_info: HDD LRO data structure
- *
- * Deinitialize the free pool of LRO descriptors and the entries
- * of the hash table
- *
- * Return: none
- */
-static void hdd_lro_desc_info_deinit(struct hdd_lro_s *hdd_info)
-{
- struct hdd_lro_desc_info *desc_info = &hdd_info->lro_desc_info;
-
- hdd_lro_desc_pool_deinit(&desc_info->lro_desc_pool);
- qdf_spinlock_destroy(&desc_info->lro_hash_lock);
- qdf_spinlock_destroy(&hdd_info->lro_mgr_arr_access_lock);
}
/**
@@ -214,7 +170,7 @@ static inline bool hdd_lro_tcp_flow_match(struct net_lro_desc *lro_desc,
*
* Return: 0 - success, < 0 - failure
*/
-static int hdd_lro_desc_find(hdd_adapter_t *adapter,
+static int hdd_lro_desc_find(struct hdd_lro_s *lro_info,
struct sk_buff *skb, struct iphdr *iph, struct tcphdr *tcph,
struct net_lro_desc **lro_desc)
{
@@ -223,7 +179,7 @@ static int hdd_lro_desc_find(hdd_adapter_t *adapter,
struct list_head *ptr;
struct hdd_lro_desc_entry *entry;
struct hdd_lro_desc_pool *free_pool;
- struct hdd_lro_desc_info *desc_info = &adapter->lro_info.lro_desc_info;
+ struct hdd_lro_desc_info *desc_info = &lro_info->lro_desc_info;
*lro_desc = NULL;
i = QDF_NBUF_CB_RX_FLOW_ID_TOEPLITZ(skb) & LRO_DESC_TABLE_SZ_MASK;
@@ -236,7 +192,6 @@ static int hdd_lro_desc_find(hdd_adapter_t *adapter,
return -EINVAL;
}
- qdf_spin_lock_bh(&desc_info->lro_hash_lock);
/* Check if this flow exists in the descriptor list */
list_for_each(ptr, &lro_hash_table->lro_desc_list) {
struct net_lro_desc *tmp_lro_desc = NULL;
@@ -245,27 +200,22 @@ static int hdd_lro_desc_find(hdd_adapter_t *adapter,
if (tmp_lro_desc->active) {
if (hdd_lro_tcp_flow_match(tmp_lro_desc, iph, tcph)) {
*lro_desc = entry->lro_desc;
- qdf_spin_unlock_bh(&desc_info->lro_hash_lock);
return 0;
}
}
}
- qdf_spin_unlock_bh(&desc_info->lro_hash_lock);
/* no existing flow found, a new LRO desc needs to be allocated */
- free_pool = &adapter->lro_info.lro_desc_info.lro_desc_pool;
- qdf_spin_lock_bh(&free_pool->lro_pool_lock);
+ free_pool = &lro_info->lro_desc_info.lro_desc_pool;
entry = list_first_entry_or_null(
&free_pool->lro_free_list_head,
struct hdd_lro_desc_entry, lro_node);
if (NULL == entry) {
hdd_err("Could not allocate LRO desc!");
- qdf_spin_unlock_bh(&free_pool->lro_pool_lock);
return -ENOMEM;
}
list_del_init(&entry->lro_node);
- qdf_spin_unlock_bh(&free_pool->lro_pool_lock);
if (NULL == entry->lro_desc) {
hdd_err("entry->lro_desc is NULL!");
@@ -278,10 +228,8 @@ static int hdd_lro_desc_find(hdd_adapter_t *adapter,
* lro_desc->active should be 0 and lro_desc->tcp_rcv_tsval
* should be 0 for newly allocated lro descriptors
*/
- qdf_spin_lock_bh(&desc_info->lro_hash_lock);
list_add_tail(&entry->lro_node,
&lro_hash_table->lro_desc_list);
- qdf_spin_unlock_bh(&desc_info->lro_hash_lock);
*lro_desc = entry->lro_desc;
return 0;
@@ -327,7 +275,7 @@ static struct net_lro_desc *hdd_lro_get_desc(struct net_lro_mgr *lro_mgr,
* Return: true - LRO eligible frame, false - frame is not LRO
* eligible
*/
-static bool hdd_lro_eligible(hdd_adapter_t *adapter, struct sk_buff *skb,
+static bool hdd_lro_eligible(struct hdd_lro_s *lro_info, struct sk_buff *skb,
struct iphdr *iph, struct tcphdr *tcph, struct net_lro_desc **desc)
{
struct net_lro_desc *lro_desc = NULL;
@@ -338,7 +286,7 @@ static bool hdd_lro_eligible(hdd_adapter_t *adapter, struct sk_buff *skb,
if (!hw_lro_eligible)
return false;
- if (0 != hdd_lro_desc_find(adapter, skb, iph, tcph, desc)) {
+ if (0 != hdd_lro_desc_find(lro_info, skb, iph, tcph, desc)) {
hdd_err("finding the LRO desc failed");
return false;
}
@@ -384,11 +332,12 @@ static bool hdd_lro_eligible(hdd_adapter_t *adapter, struct sk_buff *skb,
* Return: none
*/
static void hdd_lro_desc_free(struct net_lro_desc *desc,
- hdd_adapter_t *adapter)
+ struct hdd_lro_s *lro_info)
{
struct hdd_lro_desc_entry *entry;
- struct net_lro_desc *arr_base = adapter->lro_info.lro_mgr->lro_arr;
- struct hdd_lro_desc_info *desc_info = &adapter->lro_info.lro_desc_info;
+ struct net_lro_mgr *lro_mgr = lro_info->lro_mgr;
+ struct net_lro_desc *arr_base = lro_mgr->lro_arr;
+ struct hdd_lro_desc_info *desc_info = &lro_info->lro_desc_info;
int i = desc - arr_base;
if (i >= LRO_DESC_POOL_SZ) {
@@ -398,14 +347,10 @@ static void hdd_lro_desc_free(struct net_lro_desc *desc,
entry = &desc_info->lro_desc_pool.lro_desc_array[i];
- qdf_spin_lock_bh(&desc_info->lro_hash_lock);
list_del_init(&entry->lro_node);
- qdf_spin_unlock_bh(&desc_info->lro_hash_lock);
- qdf_spin_lock_bh(&desc_info->lro_desc_pool.lro_pool_lock);
list_add_tail(&entry->lro_node, &desc_info->
lro_desc_pool.lro_free_list_head);
- qdf_spin_unlock_bh(&desc_info->lro_desc_pool.lro_pool_lock);
}
/**
@@ -422,7 +367,7 @@ static void hdd_lro_desc_free(struct net_lro_desc *desc,
*/
static void hdd_lro_flush_pkt(struct net_lro_mgr *lro_mgr,
struct iphdr *iph, struct tcphdr *tcph,
- hdd_adapter_t *adapter)
+ struct hdd_lro_s *lro_info)
{
struct net_lro_desc *lro_desc;
@@ -430,9 +375,7 @@ static void hdd_lro_flush_pkt(struct net_lro_mgr *lro_mgr,
if (lro_desc) {
/* statistics */
- LRO_HIST_UPDATE(lro_desc, adapter);
-
- hdd_lro_desc_free(lro_desc, adapter);
+ hdd_lro_desc_free(lro_desc, lro_info);
lro_flush_desc(lro_mgr, lro_desc);
}
}
@@ -448,51 +391,15 @@ static void hdd_lro_flush_pkt(struct net_lro_mgr *lro_mgr,
*/
static void hdd_lro_flush(void *data)
{
- hdd_adapter_t *adapter = (hdd_adapter_t *)data;
- struct hdd_lro_s *hdd_lro;
- struct hdd_context_s *ctx;
- QDF_STATUS status;
- hdd_adapter_list_node_t *adapter_node = NULL, *next = NULL;
+ struct hdd_lro_s *hdd_lro = data;
+ struct net_lro_mgr *lro_mgr = hdd_lro->lro_mgr;
int i;
- /*
- * There is a more comprehensive solution that refactors
- * lro_mgr in the adapter into multiple instances, that
- * will replace this solution. The following is an interim
- * fix.
- */
-
- /* Loop over all adapters and flush them all */
- ctx = (struct hdd_context_s *)cds_get_context(QDF_MODULE_ID_HDD);
- if (unlikely(ctx == NULL)) {
- hdd_err("%s: cannot get hdd_ctx. Flushing failed", __func__);
- return;
- }
-
- status = hdd_get_front_adapter(ctx, &adapter_node);
- while (NULL != adapter_node && QDF_STATUS_SUCCESS == status) {
- adapter = adapter_node->pAdapter;
- hdd_lro = &adapter->lro_info;
- if (adapter->dev == NULL) {
- hdd_err("vdev interface going down");
- } else if (adapter->dev->features & NETIF_F_LRO) {
- qdf_spin_lock_bh(&hdd_lro->lro_mgr_arr_access_lock);
- for (i = 0; i < hdd_lro->lro_mgr->max_desc; i++) {
- if (hdd_lro->lro_mgr->lro_arr[i].active) {
- hdd_lro_desc_free(
- &hdd_lro->lro_mgr->lro_arr[i],
- (void *)adapter);
- lro_flush_desc(
- hdd_lro->lro_mgr,
- &hdd_lro->lro_mgr->lro_arr[i]);
- LRO_HIST_UPDATE((&hdd_lro->lro_mgr->lro_arr[i]),
- adapter);
- }
- }
- qdf_spin_unlock_bh(&hdd_lro->lro_mgr_arr_access_lock);
+ for (i = 0; i < lro_mgr->max_desc; i++) {
+ if (lro_mgr->lro_arr[i].active) {
+ hdd_lro_desc_free(&lro_mgr->lro_arr[i], hdd_lro);
+ lro_flush_desc(lro_mgr, &lro_mgr->lro_arr[i]);
}
- status = hdd_get_next_adapter(ctx, adapter_node, &next);
- adapter_node = next;
}
}
@@ -541,53 +448,39 @@ int hdd_lro_init(hdd_context_t *hdd_ctx)
return 0;
}
-/**
- * hdd_lro_enable() - enable LRO
- * @hdd_ctx: HDD context
- * @adapter: HDD adapter
- *
- * This function enables LRO in the network device attached to
- * the HDD adapter. It also allocates the HDD LRO instance for
- * that network device
- *
- * Return: 0 - success, < 0 - failure
- */
-int hdd_lro_enable(hdd_context_t *hdd_ctx,
- hdd_adapter_t *adapter)
+static void *hdd_init_lro_mgr(void)
{
struct hdd_lro_s *hdd_lro;
- size_t lro_mgr_sz, desc_arr_sz, desc_pool_sz, hash_table_sz;
+ hdd_context_t *hdd_ctx = cds_get_context(QDF_MODULE_ID_HDD);
+ size_t lro_info_sz, lro_mgr_sz, desc_arr_sz, desc_pool_sz;
+ size_t hash_table_sz;
uint8_t *lro_mem_ptr;
- if (!hdd_ctx->config->lro_enable ||
- QDF_STA_MODE != adapter->device_mode) {
- hdd_info("LRO Disabled");
- return 0;
+ if (NULL == hdd_ctx) {
+ hdd_err("hdd_ctx is NULL");
+ return NULL;
}
-
- hdd_info("LRO Enabled");
-
- hdd_lro = &adapter->lro_info;
- qdf_mem_zero((void *)hdd_lro, sizeof(struct hdd_lro_s));
-
/*
* Allocate all the LRO data structures at once and then carve
* them up as needed
*/
+ lro_info_sz = sizeof(struct hdd_lro_s);
lro_mgr_sz = sizeof(struct net_lro_mgr);
desc_arr_sz = (LRO_DESC_POOL_SZ * sizeof(struct net_lro_desc));
desc_pool_sz = (LRO_DESC_POOL_SZ * sizeof(struct hdd_lro_desc_entry));
hash_table_sz = (sizeof(struct hdd_lro_desc_table) * LRO_DESC_TABLE_SZ);
- lro_mem_ptr = qdf_mem_malloc(lro_mgr_sz + desc_arr_sz + desc_pool_sz +
- hash_table_sz);
+ lro_mem_ptr = qdf_mem_malloc(lro_info_sz + lro_mgr_sz + desc_arr_sz +
+ desc_pool_sz + hash_table_sz);
if (NULL == lro_mem_ptr) {
hdd_err("Unable to allocate memory for LRO");
hdd_ctx->config->lro_enable = 0;
- return -ENOMEM;
+ return NULL;
}
+ hdd_lro = (struct hdd_lro_s *)lro_mem_ptr;
+ lro_mem_ptr += lro_info_sz;
/* LRO manager */
hdd_lro->lro_mgr = (struct net_lro_mgr *)lro_mem_ptr;
lro_mem_ptr += lro_mgr_sz;
@@ -606,9 +499,8 @@ int hdd_lro_enable(hdd_context_t *hdd_ctx,
(struct hdd_lro_desc_table *)lro_mem_ptr;
/* Initialize the LRO descriptors */
- hdd_lro_desc_info_init(hdd_lro);
+ hdd_lro_desc_info_init(hdd_lro);
- hdd_lro->lro_mgr->dev = adapter->dev;
if (hdd_ctx->enableRxThread)
hdd_lro->lro_mgr->features = LRO_F_NI;
@@ -621,14 +513,46 @@ int hdd_lro_enable(hdd_context_t *hdd_ctx,
hdd_lro->lro_mgr->ip_summed = CHECKSUM_UNNECESSARY;
hdd_lro->lro_mgr->max_desc = LRO_DESC_POOL_SZ;
- adapter->dev->features |= NETIF_F_LRO;
+ return hdd_lro;
+}
+
+/**
+ * hdd_lro_enable() - enable LRO
+ * @hdd_ctx: HDD context
+ * @adapter: HDD adapter
+ *
+ * This function enables LRO in the network device attached to
+ * the HDD adapter. It also allocates the HDD LRO instance for
+ * that network device
+ *
+ * Return: 0 - success, < 0 - failure
+ */
+int hdd_lro_enable(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter)
+{
+
+ if (!hdd_ctx->config->lro_enable ||
+ QDF_STA_MODE != adapter->device_mode) {
+ hdd_info("LRO Disabled");
+ return 0;
+ }
/* Register the flush callback */
- ol_register_lro_flush_cb(hdd_lro_flush, adapter);
+ ol_register_lro_flush_cb(hdd_lro_flush, hdd_init_lro_mgr);
+ adapter->dev->features |= NETIF_F_LRO;
+
+ hdd_info("LRO Enabled");
return 0;
}
+void hdd_deinit_lro_mgr(void *lro_info)
+{
+ if (lro_info) {
+ hdd_err("LRO instance %p is being freed", lro_info);
+ qdf_mem_free(lro_info);
+ }
+}
+
/**
* hdd_lro_disable() - disable LRO
* @hdd_ctx: HDD context
@@ -646,17 +570,8 @@ void hdd_lro_disable(hdd_context_t *hdd_ctx, hdd_adapter_t *adapter)
return;
/* Deregister the flush callback */
- ol_deregister_lro_flush_cb();
-
- if (adapter->lro_info.lro_mgr) {
- hdd_lro_desc_info_deinit(&adapter->lro_info);
- qdf_mem_free(adapter->lro_info.lro_mgr);
- adapter->lro_info.lro_mgr = NULL;
- adapter->lro_info.lro_desc_info.
- lro_desc_pool.lro_desc_array = NULL;
- adapter->lro_info.lro_desc_info.
- lro_hash_table = NULL;
- }
+ ol_deregister_lro_flush_cb(hdd_deinit_lro_mgr);
+
return;
}
@@ -681,12 +596,26 @@ enum hdd_lro_rx_status hdd_lro_rx(hdd_context_t *hdd_ctx,
struct iphdr *iph;
struct tcphdr *tcph;
struct net_lro_desc *lro_desc = NULL;
- struct hdd_lro_s *hdd_lro = &adapter->lro_info;
+ struct hdd_lro_s *lro_info;
+ struct hif_opaque_softc *hif_hdl =
+ (struct hif_opaque_softc *)cds_get_context(
+ QDF_MODULE_ID_HIF);
+ if (hif_hdl == NULL) {
+ hdd_err("hif_hdl is NULL");
+ return status;
+ }
+
+ lro_info = hif_get_lro_info(QDF_NBUF_CB_RX_CTX_ID(skb),
+ hif_hdl);
+ if (lro_info == NULL) {
+ hdd_err("LRO mgr is NULL, vdev could be going down");
+ return status;
+ }
+
iph = (struct iphdr *)skb->data;
tcph = (struct tcphdr *)(skb->data + QDF_NBUF_CB_RX_TCP_OFFSET(skb));
- qdf_spin_lock_bh(
- &hdd_lro->lro_mgr_arr_access_lock);
- if (hdd_lro_eligible(adapter, skb, iph, tcph, &lro_desc)) {
+ lro_info->lro_mgr->dev = adapter->dev;
+ if (hdd_lro_eligible(lro_info, skb, iph, tcph, &lro_desc)) {
struct net_lro_info hdd_lro_info;
hdd_lro_info.valid_fields = LRO_VALID_FIELDS;
@@ -699,53 +628,23 @@ enum hdd_lro_rx_status hdd_lro_rx(hdd_context_t *hdd_ctx,
hdd_lro_info.tcp_seq_num = QDF_NBUF_CB_RX_TCP_SEQ_NUM(skb);
hdd_lro_info.tcp_win = QDF_NBUF_CB_RX_TCP_WIN(skb);
- lro_receive_skb_ext(adapter->lro_info.lro_mgr, skb,
+ lro_receive_skb_ext(lro_info->lro_mgr, skb,
(void *)adapter, &hdd_lro_info);
if (!hdd_lro_info.lro_desc->active) {
- hdd_lro_desc_free(lro_desc, adapter);
+ hdd_lro_desc_free(lro_desc, lro_info);
}
status = HDD_LRO_RX;
- adapter->lro_info.lro_stats.lro_eligible_tcp++;
} else {
- hdd_lro_flush_pkt(adapter->lro_info.lro_mgr,
- iph, tcph, adapter);
- adapter->lro_info.lro_stats.lro_ineligible_tcp++;
+ hdd_lro_flush_pkt(lro_info->lro_mgr,
+ iph, tcph, lro_info);
}
- qdf_spin_unlock_bh(
- &hdd_lro->lro_mgr_arr_access_lock);
}
return status;
}
/**
- * hdd_lro_bucket_to_string() - return string conversion of
- * bucket
- * @bucket: bucket
- *
- * This utility function helps log string conversion of bucket
- * enum
- *
- * Return: string conversion of the LRO bucket, if match found;
- * "Invalid" otherwise.
- */
-static const char *hdd_lro_bucket_to_string(enum hdd_lro_pkt_aggr_bucket bucket)
-{
- switch (bucket) {
- CASE_RETURN_STRING(HDD_LRO_BUCKET_0_7);
- CASE_RETURN_STRING(HDD_LRO_BUCKET_8_15);
- CASE_RETURN_STRING(HDD_LRO_BUCKET_16_23);
- CASE_RETURN_STRING(HDD_LRO_BUCKET_24_31);
- CASE_RETURN_STRING(HDD_LRO_BUCKET_32_39);
- CASE_RETURN_STRING(HDD_LRO_BUCKET_40_47);
- CASE_RETURN_STRING(HDD_LRO_BUCKET_48_OR_MORE);
- default:
- return "Invalid";
- }
-}
-
-/**
* wlan_hdd_display_lro_stats() - display LRO statistics
* @hdd_ctx: hdd context
*
@@ -753,61 +652,5 @@ static const char *hdd_lro_bucket_to_string(enum hdd_lro_pkt_aggr_bucket bucket)
*/
void hdd_lro_display_stats(hdd_context_t *hdd_ctx)
{
-
- hdd_adapter_t *adapter = NULL;
- hdd_adapter_list_node_t *adapter_node = NULL, *next = NULL;
- QDF_STATUS status;
- int i;
-
- if (!hdd_ctx->config->lro_enable) {
- hdd_err("LRO Disabled");
- return;
- }
-
- status = hdd_get_front_adapter(hdd_ctx, &adapter_node);
- while (NULL != adapter_node && QDF_STATUS_SUCCESS == status) {
- struct hdd_lro_stats *stats;
- hdd_err("\nLRO statistics:");
-
- adapter = adapter_node->pAdapter;
- if (!adapter) {
- status = hdd_get_next_adapter(hdd_ctx,
- adapter_node, &next);
- adapter_node = next;
- continue;
- }
-
- stats = &adapter->lro_info.lro_stats;
- hdd_err("Session_id %d device mode %d",
- adapter->sessionId, adapter->device_mode);
-
- if (NL80211_IFTYPE_STATION != adapter->wdev.iftype) {
- hdd_err("No LRO on interface type %d",
- adapter->wdev.iftype);
- status = hdd_get_next_adapter(hdd_ctx,
- adapter_node, &next);
- adapter_node = next;
- continue;
- }
-
- for (i = 0; i <= HDD_LRO_BUCKET_MAX; i++) {
- if (stats && stats->pkt_aggr_hist)
- hdd_err("bucket %s: %d packets",
- hdd_lro_bucket_to_string(i),
- stats->pkt_aggr_hist[i]);
- }
-
- hdd_err("LRO eligible TCP packets %d\n"
- "LRO ineligible TCP packets %d",
- stats->lro_eligible_tcp, stats->lro_ineligible_tcp);
-
- if (adapter->lro_info.lro_mgr)
- hdd_err("LRO manager aggr %lu flushed %lu no desc %lu",
- adapter->lro_info.lro_mgr->stats.aggregated,
- adapter->lro_info.lro_mgr->stats.flushed,
- adapter->lro_info.lro_mgr->stats.no_desc);
-
- status = hdd_get_next_adapter(hdd_ctx, adapter_node, &next);
- adapter_node = next;
- }
+ hdd_err("LRO stats is broken, will fix it");
}
diff --git a/core/hdd/src/wlan_hdd_main.c b/core/hdd/src/wlan_hdd_main.c
index 5ba5817050b0..4ec62ecfba51 100644
--- a/core/hdd/src/wlan_hdd_main.c
+++ b/core/hdd/src/wlan_hdd_main.c
@@ -2663,6 +2663,7 @@ QDF_STATUS hdd_init_station_mode(hdd_adapter_t *adapter)
if (!rc) {
hdd_alert("Session is not opened within timeout period code %ld",
rc);
+ adapter->sessionId = HDD_SESSION_ID_INVALID;
status = QDF_STATUS_E_FAILURE;
goto error_sme_open;
}
@@ -8173,10 +8174,12 @@ err_stop_modules:
}
err_exit_nl_srv:
+ hdd_green_ap_deinit(hdd_ctx);
hdd_exit_netlink_services(hdd_ctx);
cds_deinit_ini_config();
err_hdd_free_context:
+ wlan_hdd_deinit_tx_rx_histogram(hdd_ctx);
qdf_mc_timer_destroy(&hdd_ctx->iface_change_timer);
mutex_destroy(&hdd_ctx->iface_change_lock);
hdd_context_destroy(hdd_ctx);
diff --git a/core/mac/inc/ani_global.h b/core/mac/inc/ani_global.h
index b1f76939dd1f..7c3397dc7dd7 100644
--- a/core/mac/inc/ani_global.h
+++ b/core/mac/inc/ani_global.h
@@ -290,9 +290,6 @@ typedef struct sLimTimers {
/* CNF_WAIT timer */
TX_TIMER *gpLimCnfWaitTimer;
- /* Send Disassociate frame threshold parameters */
- TX_TIMER gLimSendDisassocFrameThresholdTimer;
-
TX_TIMER gLimAddtsRspTimer; /* max wait for a response */
/* Update OLBC Cache Timer */
@@ -674,10 +671,6 @@ typedef struct sAniSirLim {
/* Place holder for Pre-authentication node list */
struct tLimPreAuthNode *pLimPreAuthList;
- /* Send Disassociate frame threshold parameters */
- uint16_t gLimDisassocFrameThreshold;
- uint16_t gLimDisassocFrameCredit;
-
/* Assoc or ReAssoc Response Data/Frame */
void *gLimAssocResponseData;
diff --git a/core/mac/inc/qwlan_version.h b/core/mac/inc/qwlan_version.h
index 547c64d223e0..cacc176b99ff 100644
--- a/core/mac/inc/qwlan_version.h
+++ b/core/mac/inc/qwlan_version.h
@@ -41,9 +41,9 @@
#define QWLAN_VERSION_MAJOR 5
#define QWLAN_VERSION_MINOR 1
#define QWLAN_VERSION_PATCH 0
-#define QWLAN_VERSION_EXTRA "N"
+#define QWLAN_VERSION_EXTRA "W"
#define QWLAN_VERSION_BUILD 36
-#define QWLAN_VERSIONSTR "5.1.0.36N"
+#define QWLAN_VERSIONSTR "5.1.0.36W"
#endif /* QWLAN_VERSION_H */
diff --git a/core/mac/src/include/parser_api.h b/core/mac/src/include/parser_api.h
index bede0ad11946..839ab35acc0a 100644
--- a/core/mac/src/include/parser_api.h
+++ b/core/mac/src/include/parser_api.h
@@ -915,6 +915,8 @@ void populate_dot11f_assoc_rsp_rates(tpAniSirGlobal pMac,
int find_ie_location(tpAniSirGlobal pMac, tpSirRSNie pRsnIe, uint8_t EID);
+void lim_log_vht_cap(tpAniSirGlobal pMac, tDot11fIEVHTCaps *pDot11f);
+
tSirRetStatus
populate_dot11f_vht_caps(tpAniSirGlobal pMac, tpPESession psessionEntry,
tDot11fIEVHTCaps *pDot11f);
diff --git a/core/mac/src/include/sir_params.h b/core/mac/src/include/sir_params.h
index b050354d6501..3fe1af30659f 100644
--- a/core/mac/src/include/sir_params.h
+++ b/core/mac/src/include/sir_params.h
@@ -695,7 +695,6 @@ typedef struct sSirMbMsgP2p {
#define SIR_LIM_PROBE_HB_FAILURE_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0xB)
#define SIR_LIM_ADDTS_RSP_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0xC)
#define SIR_LIM_LINK_TEST_DURATION_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x13)
-#define SIR_LIM_HASH_MISS_THRES_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x16)
#define SIR_LIM_CNF_WAIT_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x17)
/* currently unused (SIR_LIM_TIMEOUT_MSG_START + 0x18) */
#define SIR_LIM_UPDATE_OLBC_CACHEL_TIMEOUT (SIR_LIM_TIMEOUT_MSG_START + 0x19)
diff --git a/core/mac/src/pe/include/lim_global.h b/core/mac/src/pe/include/lim_global.h
index a563601a600b..be0efaf94f0d 100644
--- a/core/mac/src/pe/include/lim_global.h
+++ b/core/mac/src/pe/include/lim_global.h
@@ -51,10 +51,6 @@
#include "dot11f.h"
#include "wma_if.h"
-/* Sending Disassociate frames threshold */
-#define LIM_SEND_DISASSOC_FRAME_THRESHOLD 2
-#define LIM_HASH_MISS_TIMER_MS 10000
-
/* Deferred Message Queue Length */
#define MAX_DEFERRED_QUEUE_LEN 80
diff --git a/core/mac/src/pe/lim/lim_api.c b/core/mac/src/pe/lim/lim_api.c
index 901c564df9da..e1ee86334f6c 100644
--- a/core/mac/src/pe/lim/lim_api.c
+++ b/core/mac/src/pe/lim/lim_api.c
@@ -285,11 +285,6 @@ static void __lim_init_assoc_vars(tpAniSirGlobal pMac)
/* Place holder for Pre-authentication node list */
pMac->lim.pLimPreAuthList = NULL;
- /* Send Disassociate frame threshold parameters */
- pMac->lim.gLimDisassocFrameThreshold =
- LIM_SEND_DISASSOC_FRAME_THRESHOLD;
- pMac->lim.gLimDisassocFrameCredit = 0;
-
/* One cache for each overlap and associated case. */
qdf_mem_set(pMac->lim.protStaOverlapCache,
sizeof(tCacheParams) * LIM_PROT_STA_OVERLAP_CACHE_SIZE, 0);
diff --git a/core/mac/src/pe/lim/lim_process_message_queue.c b/core/mac/src/pe/lim/lim_process_message_queue.c
index b3c3f44723ae..f447c6e79d7d 100644
--- a/core/mac/src/pe/lim/lim_process_message_queue.c
+++ b/core/mac/src/pe/lim/lim_process_message_queue.c
@@ -242,63 +242,6 @@ static void lim_process_set_antenna_resp(tpAniSirGlobal mac, void *body)
}
/**
- * lim_update_default_scan_ies() - Update Extended capabilities IE(if present)
- * with capabilities of Fine Time measurements(FTM) if set in driver
- *
- * @mac_ctx: Pointer to Global MAC structure
- * @ie_data: Default Scan IE data
- * @local_ie_buf: Local Scan IE data
- * @local_ie_len: Pointer to length of @ie_data
- *
- * Return: eSIR_SUCCESS on success, eSIR_FAILURE otherwise
- */
-tSirRetStatus lim_update_default_scan_ies(tpAniSirGlobal mac_ctx,
- uint8_t *ie_data, uint8_t *local_ie_buf, uint16_t *local_ie_len)
-{
- uint32_t dot11mode;
- bool vht_enabled = false;
- tDot11fIEExtCap default_scan_ext_cap = {0}, driver_ext_cap = {0};
- uint8_t ext_cap_ie_hdr[EXT_CAP_IE_HDR_LEN] = {
- DOT11F_EID_EXTCAP, DOT11F_IE_EXTCAP_MAX_LEN};
- tSirRetStatus status;
-
- status = lim_strip_extcap_update_struct(mac_ctx, ie_data,
- local_ie_len, &default_scan_ext_cap);
- if (eSIR_SUCCESS != status ||
- (((*local_ie_len) + EXT_CAP_IE_HDR_LEN
- + DOT11F_IE_EXTCAP_MAX_LEN) > MAX_DEFAULT_SCAN_IE_LEN)) {
- lim_log(mac_ctx, LOGE, FL("Strip ext cap fails(%d)"), status);
- return eSIR_FAILURE;
- }
-
- qdf_mem_copy(local_ie_buf, ie_data, (*local_ie_len));
- qdf_mem_copy(local_ie_buf + (*local_ie_len),
- ext_cap_ie_hdr, EXT_CAP_IE_HDR_LEN);
- (*local_ie_len) += EXT_CAP_IE_HDR_LEN;
-
- wlan_cfg_get_int(mac_ctx, WNI_CFG_DOT11_MODE, &dot11mode);
- if (IS_DOT11_MODE_VHT(dot11mode))
- vht_enabled = true;
-
- status = populate_dot11f_ext_cap(mac_ctx, vht_enabled,
- &driver_ext_cap, NULL);
- if (eSIR_SUCCESS != status) {
- lim_log(mac_ctx, LOGE, FL("Update ext cap fails"));
- qdf_mem_copy(local_ie_buf + (*local_ie_len),
- default_scan_ext_cap.bytes,
- DOT11F_IE_EXTCAP_MAX_LEN);
- (*local_ie_len) += DOT11F_IE_EXTCAP_MAX_LEN;
- return eSIR_SUCCESS;
- }
- lim_merge_extcap_struct(&driver_ext_cap, &default_scan_ext_cap);
-
- qdf_mem_copy(local_ie_buf + (*local_ie_len),
- driver_ext_cap.bytes, DOT11F_IE_EXTCAP_MAX_LEN);
- (*local_ie_len) += DOT11F_IE_EXTCAP_MAX_LEN;
- return eSIR_SUCCESS;
-}
-
-/**
* lim_process_set_default_scan_ie_request() - Process the Set default
* Scan IE request from HDD.
* @mac_ctx: Pointer to Global MAC structure
@@ -1713,8 +1656,6 @@ static void lim_process_messages(tpAniSirGlobal mac_ctx, tpSirMsgQ msg)
case SIR_LIM_PROBE_HB_FAILURE_TIMEOUT:
lim_handle_heart_beat_failure_timeout(mac_ctx);
break;
- case SIR_LIM_HASH_MISS_THRES_TIMEOUT:
- mac_ctx->lim.gLimDisassocFrameCredit = 0;
break;
case SIR_LIM_CNF_WAIT_TIMEOUT:
/* Does not receive CNF or dummy packet */
diff --git a/core/mac/src/pe/lim/lim_process_tdls.c b/core/mac/src/pe/lim/lim_process_tdls.c
index 6c16ae4b4dbb..50dafa863ef3 100644
--- a/core/mac/src/pe/lim/lim_process_tdls.c
+++ b/core/mac/src/pe/lim/lim_process_tdls.c
@@ -73,6 +73,7 @@
#include "lim_send_messages.h"
#include "utils_parser.h"
#include "lim_assoc_utils.h"
+#include "lim_prop_exts_utils.h"
#include "dph_hash_table.h"
#include "wma_types.h"
#include "cds_regdomain.h"
@@ -91,25 +92,6 @@
static tSirRetStatus lim_tdls_setup_add_sta(tpAniSirGlobal pMac,
tSirTdlsAddStaReq * pAddStaReq, tpPESession psessionEntry);
-void populate_dot11f_link_iden(tpAniSirGlobal pMac, tpPESession psessionEntry,
- tDot11fIELinkIdentifier *linkIden,
- struct qdf_mac_addr peer_mac, uint8_t reqType);
-void populate_dot11f_tdls_ext_capability(tpAniSirGlobal pMac,
- tpPESession psessionEntry,
- tDot11fIEExtCap *extCapability);
-
-void populate_dot11f_tdls_offchannel_params(tpAniSirGlobal pMac,
- tpPESession psessionEntry,
- tDot11fIESuppChannels *suppChannels,
- tDot11fIESuppOperatingClasses *
- suppOperClasses);
-void lim_log_vht_cap(tpAniSirGlobal pMac, tDot11fIEVHTCaps *pDot11f);
-tSirRetStatus lim_populate_vht_mcs_set(tpAniSirGlobal pMac,
- tpSirSupportedRates pRates,
- tDot11fIEVHTCaps *pPeerVHTCaps,
- tpPESession psessionEntry,
- uint8_t nss);
-ePhyChanBondState lim_get_htcb_state(ePhyChanBondState aniCBMode);
/*
* TDLS data frames will go out/come in as non-qos data.
@@ -230,6 +212,195 @@ void lim_init_tdls_data(tpAniSirGlobal pMac, tpPESession pSessionEntry)
return;
}
+static void populate_dot11f_tdls_offchannel_params(
+ tpAniSirGlobal pMac,
+ tpPESession psessionEntry,
+ tDot11fIESuppChannels *suppChannels,
+ tDot11fIESuppOperatingClasses *suppOperClasses)
+{
+ uint32_t numChans = WNI_CFG_VALID_CHANNEL_LIST_LEN;
+ uint8_t validChan[WNI_CFG_VALID_CHANNEL_LIST_LEN];
+ uint8_t i;
+ uint8_t valid_count = 0;
+ uint8_t chanOffset;
+ uint8_t op_class;
+ uint8_t numClasses;
+ uint8_t classes[CDS_MAX_SUPP_OPER_CLASSES];
+ uint32_t band;
+ uint8_t nss_2g;
+ uint8_t nss_5g;
+
+ if (wlan_cfg_get_str(pMac, WNI_CFG_VALID_CHANNEL_LIST,
+ validChan, &numChans) != eSIR_SUCCESS) {
+ /**
+ * Could not get Valid channel list from CFG.
+ * Log error.
+ */
+ lim_log(pMac, LOGE,
+ FL("could not retrieve Valid channel list"));
+ return;
+ }
+
+ if (IS_5G_CH(psessionEntry->currentOperChannel))
+ band = eCSR_BAND_5G;
+ else
+ band = eCSR_BAND_24;
+
+ nss_5g = QDF_MIN(pMac->vdev_type_nss_5g.tdls,
+ pMac->user_configured_nss);
+ nss_2g = QDF_MIN(pMac->vdev_type_nss_2g.tdls,
+ pMac->user_configured_nss);
+
+ /* validating the channel list for DFS and 2G channels */
+ for (i = 0U; i < numChans; i++) {
+ if ((band == eCSR_BAND_5G) &&
+ (NSS_2x2_MODE == nss_5g) &&
+ (NSS_1x1_MODE == nss_2g) &&
+ (true == CDS_IS_DFS_CH(validChan[i]))) {
+ lim_log(pMac, LOG1,
+ FL("skipping channel %d, nss_5g: %d, nss_2g: %d"),
+ validChan[i], nss_5g, nss_2g);
+ continue;
+ } else {
+ if (true == cds_is_dsrc_channel(
+ cds_chan_to_freq(validChan[i]))) {
+ lim_log(pMac, LOG1,
+ FL("skipping channel %d from the valid channel list"),
+ validChan[i]);
+ continue;
+ }
+ }
+
+ if (valid_count >= ARRAY_SIZE(suppChannels->bands))
+ break;
+ suppChannels->bands[valid_count][0] = validChan[i];
+ suppChannels->bands[valid_count][1] = 1;
+ valid_count++;
+ }
+
+ suppChannels->num_bands = valid_count;
+ suppChannels->present = 1;
+
+ /* find channel offset and get op class for current operating channel */
+ switch (psessionEntry->htSecondaryChannelOffset) {
+ case PHY_SINGLE_CHANNEL_CENTERED:
+ chanOffset = BW20;
+ break;
+
+ case PHY_DOUBLE_CHANNEL_LOW_PRIMARY:
+ chanOffset = BW40_LOW_PRIMARY;
+ break;
+
+ case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY:
+ chanOffset = BW40_HIGH_PRIMARY;
+ break;
+
+ default:
+ chanOffset = BWALL;
+ break;
+
+ }
+
+ op_class = cds_reg_dmn_get_opclass_from_channel(
+ pMac->scan.countryCodeCurrent,
+ psessionEntry->currentOperChannel,
+ chanOffset);
+
+ if (op_class == 0) {
+ lim_log(pMac, LOGE,
+ FL(
+ "Present Operating class is wrong, countryCodeCurrent: %s, currentOperChannel: %d, htSecondaryChannelOffset: %d, chanOffset: %d"
+ ),
+ pMac->scan.countryCodeCurrent,
+ psessionEntry->currentOperChannel,
+ psessionEntry->htSecondaryChannelOffset,
+ chanOffset);
+ } else {
+ lim_log(pMac, LOG1,
+ FL(
+ "Present Operating channel: %d chanOffset: %d, op class=%d"
+ ),
+ psessionEntry->currentOperChannel, chanOffset,
+ op_class);
+ }
+ suppOperClasses->present = 1;
+ suppOperClasses->classes[0] = op_class;
+
+ cds_reg_dmn_get_curr_opclasses(&numClasses, &classes[0]);
+
+ for (i = 0; i < numClasses; i++) {
+ suppOperClasses->classes[i + 1] = classes[i];
+ }
+ /* add one for present operating class, added in the beginning */
+ suppOperClasses->num_classes = numClasses + 1;
+
+ return;
+}
+
+/*
+ * FUNCTION: Populate Link Identifier element IE
+ *
+ */
+
+static void populate_dot11f_link_iden(tpAniSirGlobal pMac,
+ tpPESession psessionEntry,
+ tDot11fIELinkIdentifier *linkIden,
+ struct qdf_mac_addr peer_mac,
+ uint8_t reqType)
+{
+ uint8_t *initStaAddr = NULL;
+ uint8_t *respStaAddr = NULL;
+
+ (reqType == TDLS_INITIATOR) ? ((initStaAddr = linkIden->InitStaAddr),
+ (respStaAddr = linkIden->RespStaAddr))
+ : ((respStaAddr = linkIden->InitStaAddr),
+ (initStaAddr = linkIden->RespStaAddr));
+ qdf_mem_copy((uint8_t *) linkIden->bssid,
+ (uint8_t *) psessionEntry->bssId, QDF_MAC_ADDR_SIZE);
+
+ qdf_mem_copy((uint8_t *) initStaAddr,
+ psessionEntry->selfMacAddr, QDF_MAC_ADDR_SIZE);
+
+ qdf_mem_copy((uint8_t *) respStaAddr, (uint8_t *) peer_mac.bytes,
+ QDF_MAC_ADDR_SIZE);
+
+ linkIden->present = 1;
+ return;
+
+}
+
+static void populate_dot11f_tdls_ext_capability(tpAniSirGlobal pMac,
+ tpPESession psessionEntry,
+ tDot11fIEExtCap *extCapability)
+{
+ struct s_ext_cap *p_ext_cap = (struct s_ext_cap *)extCapability->bytes;
+
+ p_ext_cap->tdls_peer_psm_supp = PEER_PSM_SUPPORT;
+ p_ext_cap->tdls_peer_uapsd_buffer_sta = pMac->lim.gLimTDLSBufStaEnabled;
+
+ /*
+ * Set TDLS channel switching bits only if offchannel is enabled
+ * and TDLS Channel Switching is not prohibited by AP in ExtCap
+ * IE in assoc/re-assoc response.
+ */
+ if ((1 == pMac->lim.gLimTDLSOffChannelEnabled) &&
+ (!psessionEntry->tdls_chan_swit_prohibited)) {
+ p_ext_cap->tdls_channel_switching = 1;
+ p_ext_cap->tdls_chan_swit_prohibited = 0;
+ } else {
+ p_ext_cap->tdls_channel_switching = 0;
+ p_ext_cap->tdls_chan_swit_prohibited = TDLS_CH_SWITCH_PROHIBITED;
+ }
+ p_ext_cap->tdls_support = TDLS_SUPPORT;
+ p_ext_cap->tdls_prohibited = TDLS_PROHIBITED;
+
+ extCapability->present = 1;
+ /* For STA cases we alwasy support 11mc - Allow MAX length */
+ extCapability->num_bytes = DOT11F_IE_EXTCAP_MAX_LEN;
+
+ return;
+}
+
/*
* prepare TDLS frame header, it includes
* | | | |
@@ -2696,193 +2867,6 @@ add_sta_error:
return status;
}
-void populate_dot11f_tdls_offchannel_params(tpAniSirGlobal pMac,
- tpPESession psessionEntry,
- tDot11fIESuppChannels *suppChannels,
- tDot11fIESuppOperatingClasses *
- suppOperClasses)
-{
- uint32_t numChans = WNI_CFG_VALID_CHANNEL_LIST_LEN;
- uint8_t validChan[WNI_CFG_VALID_CHANNEL_LIST_LEN];
- uint8_t i;
- uint8_t valid_count = 0;
- uint8_t chanOffset;
- uint8_t op_class;
- uint8_t numClasses;
- uint8_t classes[CDS_MAX_SUPP_OPER_CLASSES];
- uint32_t band;
- uint8_t nss_2g;
- uint8_t nss_5g;
-
- if (wlan_cfg_get_str(pMac, WNI_CFG_VALID_CHANNEL_LIST,
- validChan, &numChans) != eSIR_SUCCESS) {
- /**
- * Could not get Valid channel list from CFG.
- * Log error.
- */
- lim_log(pMac, LOGE,
- FL("could not retrieve Valid channel list"));
- return;
- }
-
- if (IS_5G_CH(psessionEntry->currentOperChannel))
- band = eCSR_BAND_5G;
- else
- band = eCSR_BAND_24;
-
- nss_5g = QDF_MIN(pMac->vdev_type_nss_5g.tdls,
- pMac->user_configured_nss);
- nss_2g = QDF_MIN(pMac->vdev_type_nss_2g.tdls,
- pMac->user_configured_nss);
-
- /* validating the channel list for DFS and 2G channels */
- for (i = 0U; i < numChans; i++) {
- if ((band == eCSR_BAND_5G) &&
- (NSS_2x2_MODE == nss_5g) &&
- (NSS_1x1_MODE == nss_2g) &&
- (true == CDS_IS_DFS_CH(validChan[i]))) {
- lim_log(pMac, LOG1,
- FL("skipping channel %d, nss_5g: %d, nss_2g: %d"),
- validChan[i], nss_5g, nss_2g);
- continue;
- } else {
- if (true == cds_is_dsrc_channel(
- cds_chan_to_freq(validChan[i]))) {
- lim_log(pMac, LOG1,
- FL("skipping channel %d from the valid channel list"),
- validChan[i]);
- continue;
- }
- }
-
- if (valid_count >= ARRAY_SIZE(suppChannels->bands))
- break;
- suppChannels->bands[valid_count][0] = validChan[i];
- suppChannels->bands[valid_count][1] = 1;
- valid_count++;
- }
-
- suppChannels->num_bands = valid_count;
- suppChannels->present = 1;
-
- /* find channel offset and get op class for current operating channel */
- switch (psessionEntry->htSecondaryChannelOffset) {
- case PHY_SINGLE_CHANNEL_CENTERED:
- chanOffset = BW20;
- break;
-
- case PHY_DOUBLE_CHANNEL_LOW_PRIMARY:
- chanOffset = BW40_LOW_PRIMARY;
- break;
-
- case PHY_DOUBLE_CHANNEL_HIGH_PRIMARY:
- chanOffset = BW40_HIGH_PRIMARY;
- break;
-
- default:
- chanOffset = BWALL;
- break;
-
- }
-
- op_class = cds_reg_dmn_get_opclass_from_channel(
- pMac->scan.countryCodeCurrent,
- psessionEntry->currentOperChannel,
- chanOffset);
-
- if (op_class == 0) {
- lim_log(pMac, LOGE,
- FL(
- "Present Operating class is wrong, countryCodeCurrent: %s, currentOperChannel: %d, htSecondaryChannelOffset: %d, chanOffset: %d"
- ),
- pMac->scan.countryCodeCurrent,
- psessionEntry->currentOperChannel,
- psessionEntry->htSecondaryChannelOffset,
- chanOffset);
- } else {
- lim_log(pMac, LOG1,
- FL(
- "Present Operating channel: %d chanOffset: %d, op class=%d"
- ),
- psessionEntry->currentOperChannel, chanOffset,
- op_class);
- }
- suppOperClasses->present = 1;
- suppOperClasses->classes[0] = op_class;
-
- cds_reg_dmn_get_curr_opclasses(&numClasses, &classes[0]);
-
- for (i = 0; i < numClasses; i++) {
- suppOperClasses->classes[i + 1] = classes[i];
- }
- /* add one for present operating class, added in the beginning */
- suppOperClasses->num_classes = numClasses + 1;
-
- return;
-}
-
-/*
- * FUNCTION: Populate Link Identifier element IE
- *
- */
-
-void populate_dot11f_link_iden(tpAniSirGlobal pMac, tpPESession psessionEntry,
- tDot11fIELinkIdentifier *linkIden,
- struct qdf_mac_addr peer_mac, uint8_t reqType)
-{
- uint8_t *initStaAddr = NULL;
- uint8_t *respStaAddr = NULL;
-
- (reqType == TDLS_INITIATOR) ? ((initStaAddr = linkIden->InitStaAddr),
- (respStaAddr = linkIden->RespStaAddr))
- : ((respStaAddr = linkIden->InitStaAddr),
- (initStaAddr = linkIden->RespStaAddr));
- qdf_mem_copy((uint8_t *) linkIden->bssid,
- (uint8_t *) psessionEntry->bssId, QDF_MAC_ADDR_SIZE);
-
- qdf_mem_copy((uint8_t *) initStaAddr,
- psessionEntry->selfMacAddr, QDF_MAC_ADDR_SIZE);
-
- qdf_mem_copy((uint8_t *) respStaAddr, (uint8_t *) peer_mac.bytes,
- QDF_MAC_ADDR_SIZE);
-
- linkIden->present = 1;
- return;
-
-}
-
-void populate_dot11f_tdls_ext_capability(tpAniSirGlobal pMac,
- tpPESession psessionEntry,
- tDot11fIEExtCap *extCapability)
-{
- struct s_ext_cap *p_ext_cap = (struct s_ext_cap *)extCapability->bytes;
-
- p_ext_cap->tdls_peer_psm_supp = PEER_PSM_SUPPORT;
- p_ext_cap->tdls_peer_uapsd_buffer_sta = pMac->lim.gLimTDLSBufStaEnabled;
-
- /*
- * Set TDLS channel switching bits only if offchannel is enabled
- * and TDLS Channel Switching is not prohibited by AP in ExtCap
- * IE in assoc/re-assoc response.
- */
- if ((1 == pMac->lim.gLimTDLSOffChannelEnabled) &&
- (!psessionEntry->tdls_chan_swit_prohibited)) {
- p_ext_cap->tdls_channel_switching = 1;
- p_ext_cap->tdls_chan_swit_prohibited = 0;
- } else {
- p_ext_cap->tdls_channel_switching = 0;
- p_ext_cap->tdls_chan_swit_prohibited = TDLS_CH_SWITCH_PROHIBITED;
- }
- p_ext_cap->tdls_support = TDLS_SUPPORT;
- p_ext_cap->tdls_prohibited = TDLS_PROHIBITED;
-
- extCapability->present = 1;
- /* For STA cases we alwasy support 11mc - Allow MAX length */
- extCapability->num_bytes = DOT11F_IE_EXTCAP_MAX_LEN;
-
- return;
-}
-
/**
* lim_process_sme_tdls_mgmt_send_req() - send out tdls management frames
*
diff --git a/core/mac/src/pe/lim/lim_prop_exts_utils.c b/core/mac/src/pe/lim/lim_prop_exts_utils.c
index 629f32b8a002..62823ea4b3bc 100644
--- a/core/mac/src/pe/lim/lim_prop_exts_utils.c
+++ b/core/mac/src/pe/lim/lim_prop_exts_utils.c
@@ -111,7 +111,6 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie,
{
tSirProbeRespBeacon *beacon_struct;
uint32_t enable_txbf_20mhz;
- tSirRetStatus cfg_set_status = eSIR_FAILURE;
tSirRetStatus cfg_get_status = eSIR_FAILURE;
uint8_t ap_bcon_ch_width;
bool new_ch_width_dfn = false;
@@ -178,15 +177,6 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie,
}
if (session->vhtCapabilityPresentInBeacon == 1 &&
- session->vht_config.su_beam_formee == 0) {
- cfg_set_status = cfg_set_int(mac_ctx,
- WNI_CFG_VHT_SU_BEAMFORMEE_CAP,
- 0);
- if (cfg_set_status != eSIR_SUCCESS)
- lim_log(mac_ctx, LOGP, FL(
- "Set VHT_SU_BEAMFORMEE_CAP Fail"));
- }
- if (session->vhtCapabilityPresentInBeacon == 1 &&
!session->htSupportedChannelWidthSet) {
cfg_get_status = wlan_cfg_get_int(mac_ctx,
WNI_CFG_VHT_ENABLE_TXBF_20MHZ,
@@ -290,16 +280,7 @@ lim_extract_ap_capability(tpAniSirGlobal mac_ctx, uint8_t *p_ie,
session->nss = 1;
}
}
- if (session->vhtCapabilityPresentInBeacon == 1 &&
- !session->htSupportedChannelWidthSet &&
- session->vht_config.su_beam_formee == 0) {
- cfg_set_status = cfg_set_int(mac_ctx,
- WNI_CFG_VHT_SU_BEAMFORMEE_CAP,
- 0);
- if (cfg_set_status != eSIR_SUCCESS)
- lim_log(mac_ctx, LOGP,
- FL("Set VHT_SU_BEAMFORMEE_CAP Fail"));
- }
+
if (session->vhtCapability &&
session->vhtCapabilityPresentInBeacon &&
beacon_struct->ext_cap.present) {
diff --git a/core/mac/src/pe/lim/lim_timer_utils.c b/core/mac/src/pe/lim/lim_timer_utils.c
index cb244dd65d96..2111ac540c82 100644
--- a/core/mac/src/pe/lim/lim_timer_utils.c
+++ b/core/mac/src/pe/lim/lim_timer_utils.c
@@ -265,20 +265,6 @@ uint32_t lim_create_timers(tpAniSirGlobal pMac)
if (false == lim_create_non_ap_timers(pMac))
goto err_timer;
- cfgValue = SYS_MS_TO_TICKS(LIM_HASH_MISS_TIMER_MS);
-
- if (tx_timer_create(pMac,
- &pMac->lim.limTimers.gLimSendDisassocFrameThresholdTimer,
- "Disassoc throttle TIMEOUT",
- lim_send_disassoc_frame_threshold_handler,
- SIR_LIM_HASH_MISS_THRES_TIMEOUT, cfgValue, cfgValue,
- TX_AUTO_ACTIVATE) != TX_SUCCESS) {
- lim_log(pMac, LOGP,
- FL("create Disassociate throttle timer failed"));
- goto err_timer;
- }
- PELOG1(lim_log(pMac, LOG1, FL("Created Disassociate throttle timer "));)
-
/* Create all CNF_WAIT Timers upfront */
if (wlan_cfg_get_int(pMac, WNI_CFG_WT_CNF_TIMEOUT, &cfgValue)
!= eSIR_SUCCESS) {
@@ -409,8 +395,6 @@ err_timer:
while (((int32_t)-- i) >= 0) {
tx_timer_delete(&pMac->lim.limTimers.gpLimCnfWaitTimer[i]);
}
- tx_timer_delete(&pMac->lim.limTimers.
- gLimSendDisassocFrameThresholdTimer);
tx_timer_delete(&pMac->lim.limTimers.gLimProbeAfterHBTimer);
tx_timer_delete(&pMac->lim.limTimers.gLimAuthFailureTimer);
tx_timer_delete(&pMac->lim.limTimers.gLimAddtsRspTimer);
@@ -1221,41 +1205,6 @@ void lim_activate_auth_rsp_timer(tpAniSirGlobal pMac, tLimPreAuthNode *pAuthNode
}
/**
- * lim_send_disassoc_frame_threshold_handler()
- *
- ***FUNCTION:
- * This function reloads the credit to the send disassociate frame bucket
- *
- ***LOGIC:
- *
- ***ASSUMPTIONS:
- *
- ***NOTE:
- * NA
- *
- * @param
- *
- * @return None
- */
-
-void lim_send_disassoc_frame_threshold_handler(void *pMacGlobal, uint32_t param)
-{
- tSirMsgQ msg;
- uint32_t statusCode;
- tpAniSirGlobal pMac = (tpAniSirGlobal) pMacGlobal;
-
- msg.type = SIR_LIM_HASH_MISS_THRES_TIMEOUT;
- msg.bodyval = 0;
- msg.bodyptr = NULL;
-
- statusCode = lim_post_msg_api(pMac, &msg);
- if (statusCode != eSIR_SUCCESS)
- lim_log(pMac, LOGE,
- FL("posting to LIM failed, reason=%d"), statusCode);
-
-}
-
-/**
* limAssocCnfWaitTmerHandler()
*
***FUNCTION:
diff --git a/core/mac/src/pe/lim/lim_timer_utils.h b/core/mac/src/pe/lim/lim_timer_utils.h
index 50f3ef4d0899..c4fa19711445 100644
--- a/core/mac/src/pe/lim/lim_timer_utils.h
+++ b/core/mac/src/pe/lim/lim_timer_utils.h
@@ -83,7 +83,6 @@ void limReassocFailureTimerHandler(void *, uint32_t);
void lim_deactivate_and_change_timer(tpAniSirGlobal, uint32_t);
void limDummyPktExpTimerHandler(void *, uint32_t);
-void lim_send_disassoc_frame_threshold_handler(void *, uint32_t);
void lim_cnf_wait_tmer_handler(void *, uint32_t);
void lim_deactivate_and_change_per_sta_id_timer(tpAniSirGlobal, uint32_t, uint16_t);
void lim_activate_cnf_timer(tpAniSirGlobal, uint16_t, tpPESession);
diff --git a/core/mac/src/pe/lim/lim_utils.c b/core/mac/src/pe/lim/lim_utils.c
index ba731b8ff299..e0fa701f5376 100644
--- a/core/mac/src/pe/lim/lim_utils.c
+++ b/core/mac/src/pe/lim/lim_utils.c
@@ -663,12 +663,6 @@ void lim_cleanup_mlm(tpAniSirGlobal mac_ctx)
n++)
tx_timer_delete(&pAuthNode[n]->timer);
- /* Deactivate and delete Hash Miss throttle timer */
- tx_timer_deactivate(&lim_timer->
- gLimSendDisassocFrameThresholdTimer);
- tx_timer_delete(&lim_timer->
- gLimSendDisassocFrameThresholdTimer);
-
tx_timer_deactivate(&lim_timer->gLimUpdateOlbcCacheTimer);
tx_timer_delete(&lim_timer->gLimUpdateOlbcCacheTimer);
tx_timer_deactivate(&lim_timer->gLimPreAuthClnupTimer);
diff --git a/core/mac/src/sys/legacy/src/utils/src/mac_trace.c b/core/mac/src/sys/legacy/src/utils/src/mac_trace.c
index 63acd730a64f..0845d33f82c9 100644
--- a/core/mac/src/sys/legacy/src/utils/src/mac_trace.c
+++ b/core/mac/src/sys/legacy/src/utils/src/mac_trace.c
@@ -681,7 +681,6 @@ uint8_t *mac_trace_get_lim_msg_string(uint16_t lim_msg)
CASE_RETURN_STRING(SIR_LIM_PROBE_HB_FAILURE_TIMEOUT);
CASE_RETURN_STRING(SIR_LIM_ADDTS_RSP_TIMEOUT);
CASE_RETURN_STRING(SIR_LIM_LINK_TEST_DURATION_TIMEOUT);
- CASE_RETURN_STRING(SIR_LIM_HASH_MISS_THRES_TIMEOUT);
CASE_RETURN_STRING(SIR_LIM_CNF_WAIT_TIMEOUT);
CASE_RETURN_STRING(SIR_LIM_UPDATE_OLBC_CACHEL_TIMEOUT);
CASE_RETURN_STRING(SIR_LIM_CHANNEL_SWITCH_TIMEOUT);
diff --git a/core/sme/src/csr/csr_api_scan.c b/core/sme/src/csr/csr_api_scan.c
index bab275d3e41e..1b7fbddaab4c 100644
--- a/core/sme/src/csr/csr_api_scan.c
+++ b/core/sme/src/csr/csr_api_scan.c
@@ -422,7 +422,7 @@ csr_issue_11d_scan(tpAniSirGlobal mac_ctx, tSmeCmd *scan_cmd,
status = qdf_mc_timer_init(&scan_cmd->u.scanCmd.csr_scan_timer,
QDF_TIMER_TYPE_SW,
- csr_scan_active_list_timeout_handle, &scan_11d_cmd);
+ csr_scan_active_list_timeout_handle, scan_11d_cmd);
if (csr_is11d_supported(mac_ctx)) {
tmp_rq.bcnRptReqScan = scan_req->bcnRptReqScan;
@@ -809,7 +809,7 @@ csr_update_lost_link1_cmd(tpAniSirGlobal mac_ctx, tSmeCmd *cmd,
wma_get_scan_id(&cmd->u.scanCmd.scanID);
status = qdf_mc_timer_init(&cmd->u.scanCmd.csr_scan_timer,
QDF_TIMER_TYPE_SW,
- csr_scan_active_list_timeout_handle, &cmd);
+ csr_scan_active_list_timeout_handle, cmd);
cmd->u.scanCmd.u.scanRequest.scan_id =
cmd->u.scanCmd.scanID;
@@ -981,7 +981,7 @@ csr_update_lost_link2_cmd(tpAniSirGlobal mac_ctx, tSmeCmd *cmd,
return QDF_STATUS_SUCCESS;
status = qdf_mc_timer_init(&cmd->u.scanCmd.csr_scan_timer,
QDF_TIMER_TYPE_SW,
- csr_scan_active_list_timeout_handle, &cmd);
+ csr_scan_active_list_timeout_handle, cmd);
scan_fltr = qdf_mem_malloc(sizeof(tCsrScanResultFilter));
if (NULL == scan_fltr)
return QDF_STATUS_E_NOMEM;
@@ -1116,7 +1116,7 @@ csr_scan_request_lost_link3(tpAniSirGlobal mac_ctx, uint32_t session_id)
wma_get_scan_id(&cmd->u.scanCmd.scanID);
status = qdf_mc_timer_init(&cmd->u.scanCmd.csr_scan_timer,
QDF_TIMER_TYPE_SW,
- csr_scan_active_list_timeout_handle, &cmd);
+ csr_scan_active_list_timeout_handle, cmd);
cmd->u.scanCmd.u.scanRequest.scan_id =
cmd->u.scanCmd.scanID;
qdf_set_macaddr_broadcast(&cmd->u.scanCmd.u.scanRequest.bssid);
@@ -6247,7 +6247,7 @@ QDF_STATUS csr_scan_for_ssid(tpAniSirGlobal mac_ctx, uint32_t session_id,
sizeof(tCsrScanRequest), 0);
status = qdf_mc_timer_init(&scan_cmd->u.scanCmd.csr_scan_timer,
QDF_TIMER_TYPE_SW,
- csr_scan_active_list_timeout_handle, &scan_cmd);
+ csr_scan_active_list_timeout_handle, scan_cmd);
scan_req = &scan_cmd->u.scanCmd.u.scanRequest;
scan_req->scanType = eSIR_ACTIVE_SCAN;
scan_req->BSSType = profile->BSSType;
diff --git a/core/wma/src/wma_dev_if.c b/core/wma/src/wma_dev_if.c
index ed4b923d9e64..10eef2fb38eb 100644
--- a/core/wma/src/wma_dev_if.c
+++ b/core/wma/src/wma_dev_if.c
@@ -1492,9 +1492,7 @@ int wma_vdev_stop_resp_handler(void *handle, uint8_t *cmd_param_info,
0);
}
- if ((iface->del_staself_req != NULL) &&
- (iface->type == WMI_VDEV_TYPE_AP) &&
- (iface->sub_type == WMI_UNIFIED_VDEV_SUBTYPE_P2P_GO)) {
+ if (iface->del_staself_req != NULL) {
WMA_LOGA("scheduling defered deletion (vdev id %x)",
resp_event->vdev_id);
wma_vdev_detach(wma, iface->del_staself_req, 1);
diff --git a/core/wma/src/wma_features.c b/core/wma/src/wma_features.c
index 091c5c68ae8f..9c0dcd93fd76 100644
--- a/core/wma/src/wma_features.c
+++ b/core/wma/src/wma_features.c
@@ -5505,7 +5505,7 @@ QDF_STATUS wma_process_get_peer_info_req
WMA_LOGE("IBSS get peer info cmd sent len: %d, vdev %d"
" command id: %d, status: %d", len,
- p_get_peer_info_cmd->vdev_id, WMI_PEER_INFO_REQ_CMDID, ret);
+ vdev_id, WMI_PEER_INFO_REQ_CMDID, ret);
return QDF_STATUS_SUCCESS;
}
@@ -5595,8 +5595,7 @@ QDF_STATUS wma_process_rmc_enable_ind(tp_wma_handle wma)
WMI_RMC_SET_MODE_CMDID);
WMA_LOGE("Enable RMC cmd sent len: %d, vdev %d" " command id: %d,"
- " status: %d", len, p_rmc_enable_cmd->vdev_id,
- WMI_RMC_SET_MODE_CMDID, ret);
+ " status: %d", len, vdev_id, WMI_RMC_SET_MODE_CMDID, ret);
return QDF_STATUS_SUCCESS;
}
@@ -5646,8 +5645,7 @@ QDF_STATUS wma_process_rmc_disable_ind(tp_wma_handle wma)
WMI_RMC_SET_MODE_CMDID);
WMA_LOGE("Disable RMC cmd sent len: %d, vdev %d" " command id: %d,"
- " status: %d", len, p_rmc_disable_cmd->vdev_id,
- WMI_RMC_SET_MODE_CMDID, ret);
+ " status: %d", len, vdev_id, WMI_RMC_SET_MODE_CMDID, ret);
return QDF_STATUS_SUCCESS;
}
@@ -5663,7 +5661,7 @@ QDF_STATUS wma_process_rmc_action_period_ind(tp_wma_handle wma)
int ret;
uint8_t *p;
uint16_t len;
- uint32_t val;
+ uint32_t periodicity_msec;
wmi_buf_t buf;
int32_t vdev_id;
wmi_rmc_set_action_period_cmd_fixed_param *p_rmc_cmd;
@@ -5697,21 +5695,21 @@ QDF_STATUS wma_process_rmc_action_period_ind(tp_wma_handle wma)
WMITLV_GET_STRUCT_TLVLEN
(wmi_rmc_set_action_period_cmd_fixed_param));
- if (wlan_cfg_get_int(mac, WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY, &val)
- != eSIR_SUCCESS) {
+ if (wlan_cfg_get_int(mac, WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY,
+ &periodicity_msec) != eSIR_SUCCESS) {
WMA_LOGE("Failed to get value for RMC action period using default");
- val = WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STADEF;
+ periodicity_msec = WNI_CFG_RMC_ACTION_PERIOD_FREQUENCY_STADEF;
}
p_rmc_cmd->vdev_id = vdev_id;
- p_rmc_cmd->periodicity_msec = val;
+ p_rmc_cmd->periodicity_msec = periodicity_msec;
ret = wmi_unified_cmd_send(wma->wmi_handle, buf, len,
WMI_RMC_SET_ACTION_PERIOD_CMDID);
WMA_LOGE("RMC action period %d cmd sent len: %d, vdev %d"
- " command id: %d, status: %d", p_rmc_cmd->periodicity_msec,
- len, p_rmc_cmd->vdev_id, WMI_RMC_SET_ACTION_PERIOD_CMDID, ret);
+ " command id: %d, status: %d", periodicity_msec,
+ len, vdev_id, WMI_RMC_SET_ACTION_PERIOD_CMDID, ret);
return QDF_STATUS_SUCCESS;
}