summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-06-07 15:02:06 -0600
committerLinux Build Service Account <lnxbuild@localhost>2016-06-07 15:02:06 -0600
commitca3abbc1896a35df69db22bd80874596067f5206 (patch)
treecbeb049f1f91ae6d1975d4da66d7e942787237f4
parentb9f17d272a5f4726765603053fe2ef7453e7abf3 (diff)
parent978f6205793ca29f1c1e92472bba50dc38017220 (diff)
Promotion of wlan-cld2.driver.lnx.1.0-00030.
CRs Change ID Subject -------------------------------------------------------------------------------------------------------------- 865207 Ib7f2e5ed41c8ea889192814aed10e94e7ecf11e3 qcacld-2.0: CL 1517922 – update fw common interface file 1022448 Id35282eb2768f531459b618e2d134f1236f619dc qcacld-2.0: Reduce SKB CB size to defined limit 688141 I5532b2b134a6a7eec021d5efdad26ced7a21df08 Release 4.0.11.95 688141 I7f4d93b6662d026fca0a36fa0e4332e08a02b2ad Release 4.0.11.94 1020141 I5c34b604297d83673ea065243cc58c3f2180ff3e qcacld-2.0: Add ini keys for WRR tx scheduler tuning 1008087 Ibbf57cf4b3de0ce45e9caeb408c12aa9241d404a qcacld-2.0: Enhance DPTRACE to support RX path 1023179 I92b197f9578aa003bf622617c363fea7334dbcb2 qcacld-2.0: Refactor support to get per chain rssi stats 1022238 I5c5903bc5eded417ede670025c241daf73b96700 qcacld-2.0: Fix P2P GO vdev start failure 1017213 I9d2c9b2d4916552d37aba05b4beb0ac6d3fc2d75 qcacld-2.0: Resolve mem_alloc failure for FW dump 1023527 Idfa13fa0cfa45e028b6d843b1c782384310dda4f Revert "qcacld-2.0: Implement get_wireless_stats IOCTL" 1022956 Ie5b63b6885fd7f2d4f941b6ffad43cbac57040e5 qcacld-2.0: Fix 32 clients support issue in AP+AP mode 1023548 Ib844dd88f3a8b4496f9878b8a1fcddd72acc6a57 Revert "qcacld-2.0: Fix sme active list timeout casued b 1020665 I2e0ae4d5cae8ad991f060d1276dcae6a4a46bdce qcacld-2.0: Fix compilation errors when enable OL_TX_SCH 1023036 I9ddacd8be0f88c6024787c9417e734ef2d5b6cb1 qcacld-2.0: Send proper reason code and originator of di 1023849 Ibf9fdf0a92cc71644f02d6890574eeed0d175d6f qcacld-2.0: extscan: Logs cleanup 1023043 Idd63385a657d1af550cf07bbfe052ce465d30608 qcacld-2.0: Enhance logging for MC address list 1023094 If6d98a5646d259143614726cf8e7b71b46fedef1 qcacld-2.0: update Kbuild for skb pre-alloc support for 1023524 I7c6faa8594a5168d78c1fbba7b8f968411093e0f qcacld-2.0: Avoid pkt trace deinit in FTM and EEPING mod 865207 I0f591f9a620587ef77be09e3714c7156d4189172 qcacld-2.0: CL 1519524 – update fw common interface file 990645 I33369320de5b0aadae661d7d27fbc5ba18e9e409 qcacld-2.0: Fix crash in wlan_hdd_tdls_check_power_save_ 1024097 I6a26dbb0707b7981ea091526d1e49dc5bf8c9e91 qcacld-2.0: Restore 802.11 header pointer for PMF case 865207 I427fef8d8f2503c52d511fdae58fe410420e67a0 qcacld-2.0: CL 1522096 – update fw common interface file 865207 I68367a8d688cdc9f85efe01a7c48856c8bab7220 qcacld-2.0: CL 1521398 – update fw common interface file 688141 If8fd526acc5d692c990881d0dd11900b827dae70 Release 4.0.11.93 1021800 I2ea3c2068ffe01c5ff57dd93e9ea9442a5761a59 Revert "wlan: UI still show interface when unplug Card i 1001142 I5ba0268e978c7ddadabc96a4eba18140ff7db3c6 qcacld 2.0: Prevent buffer overflow in QCSAP_IOCTL_VERSI Change-Id: I86f72ec3a8eae1cb3659f95c2ab65c7c089d4522 CRs-Fixed: 1017213, 1020141, 1023036, 990645, 865207, 1023179, 1020665, 1023094, 1001142, 688141, 1023527, 1023524, 1023849, 1022448, 1022238, 1023548, 1008087, 1023043, 1024097, 1022956, 1021800
-rw-r--r--CORE/CLD_TXRX/HTT/htt_rx.c14
-rw-r--r--CORE/CLD_TXRX/HTT/htt_tx.c2
-rw-r--r--CORE/CLD_TXRX/TLSHIM/tl_shim.c4
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_cfg.c102
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_rx.c31
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_rx.h5
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx.c8
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx_sched.c157
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx_send.c4
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_tx_send.h4
-rw-r--r--CORE/CLD_TXRX/TXRX/ol_txrx_types.h7
-rw-r--r--CORE/EPPING/src/epping_main.c4
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg.h48
-rw-r--r--CORE/HDD/inc/wlan_hdd_cfg80211.h6
-rw-r--r--CORE/HDD/inc/wlan_hdd_wext.h2
-rw-r--r--CORE/HDD/src/wlan_hdd_assoc.c6
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg.c33
-rw-r--r--CORE/HDD/src/wlan_hdd_cfg80211.c128
-rw-r--r--CORE/HDD/src/wlan_hdd_hostapd.c7
-rw-r--r--CORE/HDD/src/wlan_hdd_main.c12
-rw-r--r--CORE/HDD/src/wlan_hdd_softap_tx_rx.c23
-rw-r--r--CORE/HDD/src/wlan_hdd_tdls.c17
-rw-r--r--CORE/HDD/src/wlan_hdd_tx_rx.c33
-rw-r--r--CORE/HDD/src/wlan_hdd_wext.c51
-rw-r--r--CORE/MAC/inc/aniGlobal.h4
-rw-r--r--CORE/MAC/inc/qwlan_version.h4
-rw-r--r--CORE/SERVICES/BMI/ol_fw.c12
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_trace.c194
-rw-r--r--CORE/SERVICES/COMMON/adf/adf_trace.h46
-rw-r--r--CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h23
-rw-r--r--CORE/SERVICES/COMMON/ol_cfg.h15
-rw-r--r--CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h36
-rw-r--r--CORE/SERVICES/COMMON/wlan_module_ids.h135
-rw-r--r--CORE/SERVICES/COMMON/wmi_services.h6
-rw-r--r--CORE/SERVICES/COMMON/wmi_tlv_defs.h23
-rw-r--r--CORE/SERVICES/COMMON/wmi_unified.h155
-rw-r--r--CORE/SERVICES/COMMON/wmi_version.h2
-rw-r--r--CORE/SERVICES/HIF/PCIe/copy_engine.c2
-rw-r--r--CORE/SERVICES/HIF/PCIe/hif_pci.c2
-rw-r--r--CORE/SERVICES/HIF/USB/if_usb.c3
-rw-r--r--CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c16
-rw-r--r--CORE/SERVICES/HTC/htc_send.c2
-rw-r--r--CORE/SERVICES/WMA/wma.c97
-rw-r--r--CORE/SERVICES/WMI/wmi_unified.c2
-rw-r--r--CORE/VOSS/src/vos_api.c69
-rw-r--r--Kbuild8
46 files changed, 1152 insertions, 412 deletions
diff --git a/CORE/CLD_TXRX/HTT/htt_rx.c b/CORE/CLD_TXRX/HTT/htt_rx.c
index 3fe3ad69ad5a..ba34bce3caca 100644
--- a/CORE/CLD_TXRX/HTT/htt_rx.c
+++ b/CORE/CLD_TXRX/HTT/htt_rx.c
@@ -50,6 +50,7 @@
#include <ol_htt_rx_api.h>
#include <htt_internal.h> /* HTT_ASSERT, htt_pdev_t, HTT_RX_BUF_SIZE */
#include "regtable.h"
+#include "adf_trace.h"
#include <ieee80211_common.h> /* ieee80211_frame, ieee80211_qoscntl */
#include <ieee80211_defines.h> /* ieee80211_rx_status */
@@ -1858,6 +1859,8 @@ htt_rx_amsdu_rx_in_order_pop_ll(
/* Get the total number of MSDUs */
msdu_count = HTT_RX_IN_ORD_PADDR_IND_MSDU_CNT_GET(*(msg_word + 1));
HTT_RX_CHECK_MSDU_COUNT(msdu_count);
+ peer_id = HTT_RX_IN_ORD_PADDR_IND_PEER_ID_GET(
+ *(u_int32_t *)rx_ind_data);
msg_word = (u_int32_t *)(rx_ind_data + HTT_RX_IN_ORD_PADDR_IND_HDR_BYTES);
if (offload_ind) {
@@ -1899,6 +1902,14 @@ htt_rx_amsdu_rx_in_order_pop_ll(
*/
adf_nbuf_pull_head(msdu, HTT_RX_STD_DESC_RESERVATION);
+ adf_dp_trace_set_track(msdu, ADF_RX);
+ ADF_NBUF_CB_RX_PACKET_TRACE(msdu) = NBUF_TX_PKT_DATA_TRACK;
+ ol_rx_log_packet(pdev, peer_id, msdu);
+ DPTRACE(adf_dp_trace(msdu,
+ ADF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD,
+ adf_nbuf_data_addr(msdu),
+ sizeof(adf_nbuf_data(msdu)), ADF_RX));
+
adf_nbuf_trim_tail(
msdu, HTT_RX_BUF_SIZE - (RX_STD_DESC_SIZE +
HTT_RX_IN_ORD_PADDR_IND_MSDU_LEN_GET(*(msg_word + 1))));
@@ -1916,8 +1927,7 @@ htt_rx_amsdu_rx_in_order_pop_ll(
msdu_count--;
/* calling callback function for packet logging */
- peer_id = HTT_RX_IN_ORD_PADDR_IND_PEER_ID_GET(
- *(u_int32_t *)rx_ind_data);
+
if (adf_os_unlikely((*((u_int8_t *) &rx_desc->fw_desc.u.val)) &
FW_RX_DESC_MIC_ERR_M))
status = RX_PKT_FATE_FW_DROP_INVALID;
diff --git a/CORE/CLD_TXRX/HTT/htt_tx.c b/CORE/CLD_TXRX/HTT/htt_tx.c
index 3a2fa5e0b3d0..392424f05948 100644
--- a/CORE/CLD_TXRX/HTT/htt_tx.c
+++ b/CORE/CLD_TXRX/HTT/htt_tx.c
@@ -475,7 +475,7 @@ htt_tx_send_std(
NBUF_UPDATE_TX_PKT_COUNT(msdu, NBUF_TX_PKT_HTT);
DPTRACE(adf_dp_trace(msdu, ADF_DP_TRACE_HTT_PACKET_PTR_RECORD,
adf_nbuf_data_addr(msdu),
- sizeof(adf_nbuf_data(msdu))));
+ sizeof(adf_nbuf_data(msdu)), ADF_TX));
if (adf_nbuf_queue_len(&pdev->txnbufq) > 0) {
HTT_TX_NBUF_QUEUE_ADD(pdev, msdu);
diff --git a/CORE/CLD_TXRX/TLSHIM/tl_shim.c b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
index 80ab2d5260a1..9bc1e5bb3bdb 100644
--- a/CORE/CLD_TXRX/TLSHIM/tl_shim.c
+++ b/CORE/CLD_TXRX/TLSHIM/tl_shim.c
@@ -796,6 +796,10 @@ static int tlshim_mgmt_rx_process(void *context, u_int8_t *data,
adf_nbuf_pull_head(wbuf, IEEE80211_CCMP_HEADERLEN);
adf_nbuf_trim_tail(wbuf, IEEE80211_CCMP_MICLEN);
+ /* wh is moved, restore wh with relocated
+ * ieee80211_frame header.
+ */
+ wh = (struct ieee80211_frame *) adf_nbuf_data(wbuf);
rx_pkt->pkt_meta.mpdu_hdr_ptr = adf_nbuf_data(wbuf);
rx_pkt->pkt_meta.mpdu_len = adf_nbuf_len(wbuf);
rx_pkt->pkt_meta.mpdu_data_len =
diff --git a/CORE/CLD_TXRX/TXRX/ol_cfg.c b/CORE/CLD_TXRX/TXRX/ol_cfg.c
index 1f9a054d2b46..84466ce74547 100644
--- a/CORE/CLD_TXRX/TXRX/ol_cfg.c
+++ b/CORE/CLD_TXRX/TXRX/ol_cfg.c
@@ -64,6 +64,7 @@ ol_pdev_handle ol_pdev_cfg_attach(adf_os_device_t osdev,
struct txrx_pdev_cfg_param_t cfg_param)
{
struct txrx_pdev_cfg_t *cfg_ctx;
+ int i;
cfg_ctx = adf_os_mem_alloc(osdev, sizeof(*cfg_ctx));
if (!cfg_ctx) {
@@ -115,6 +116,20 @@ ol_pdev_handle ol_pdev_cfg_attach(adf_os_device_t osdev,
#endif /* IPA_UC_OFFLOAD */
ol_cfg_update_bundle_params(cfg_ctx, cfg_param);
+
+ for (i = 0; i < OL_TX_NUM_WMM_AC; i++) {
+ cfg_ctx->ac_specs[i].wrr_skip_weight =
+ cfg_param.ac_specs[i].wrr_skip_weight;
+ cfg_ctx->ac_specs[i].credit_threshold =
+ cfg_param.ac_specs[i].credit_threshold;
+ cfg_ctx->ac_specs[i].send_limit =
+ cfg_param.ac_specs[i].send_limit;
+ cfg_ctx->ac_specs[i].credit_reserve =
+ cfg_param.ac_specs[i].credit_reserve;
+ cfg_ctx->ac_specs[i].discard_weight =
+ cfg_param.ac_specs[i].discard_weight;
+ }
+
return (ol_pdev_handle) cfg_ctx;
}
@@ -319,3 +334,90 @@ unsigned int ol_cfg_ipa_uc_tx_partition_base(ol_pdev_handle pdev)
}
#endif /* IPA_UC_OFFLOAD */
+/**
+ * ol_cfg_get_wrr_skip_weight() - brief Query for the param of wrr_skip_weight
+ * @pdev: handle to the physical device.
+ * @ac: access control, it will be BE, BK, VI, VO
+ *
+ * Return: wrr_skip_weight for specified ac.
+ */
+int ol_cfg_get_wrr_skip_weight(ol_pdev_handle pdev, int ac)
+{
+ struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)pdev;
+
+ if (ac >= OL_TX_WMM_AC_BE && ac <= OL_TX_WMM_AC_VO)
+ return cfg->ac_specs[ac].wrr_skip_weight;
+ else
+ return 0;
+}
+
+/**
+ * ol_cfg_get_credit_threshold() - Query for the param of credit_threshold
+ * @pdev: handle to the physical device.
+ * @ac: access control, it will be BE, BK, VI, VO
+ *
+ * Return: credit_threshold for specified ac.
+ */
+uint32_t ol_cfg_get_credit_threshold(ol_pdev_handle pdev, int ac)
+{
+ struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)pdev;
+
+ if (ac >= OL_TX_WMM_AC_BE && ac <= OL_TX_WMM_AC_VO)
+ return cfg->ac_specs[ac].credit_threshold;
+ else
+ return 0;
+}
+
+
+/**
+ * ol_cfg_get_send_limit() - Query for the param of send_limit
+ * @pdev: handle to the physical device.
+ * @ac: access control, it will be BE, BK, VI, VO
+ *
+ * Return: send_limit for specified ac.
+ */
+uint16_t ol_cfg_get_send_limit(ol_pdev_handle pdev, int ac)
+{
+ struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)pdev;
+
+ if (ac >= OL_TX_WMM_AC_BE && ac <= OL_TX_WMM_AC_VO)
+ return cfg->ac_specs[ac].send_limit;
+ else
+ return 0;
+}
+
+
+/**
+ * ol_cfg_get_credit_reserve() - Query for the param of credit_reserve
+ * @pdev: handle to the physical device.
+ * @ac: access control, it will be BE, BK, VI, VO
+ *
+ * Return: credit_reserve for specified ac.
+ */
+int ol_cfg_get_credit_reserve(ol_pdev_handle pdev, int ac)
+{
+ struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)pdev;
+
+ if (ac >= OL_TX_WMM_AC_BE && ac <= OL_TX_WMM_AC_VO)
+ return cfg->ac_specs[ac].credit_reserve;
+ else
+ return 0;
+}
+
+/**
+ * ol_cfg_get_discard_weight() - Query for the param of discard_weight
+ * @pdev: handle to the physical device.
+ * @ac: access control, it will be BE, BK, VI, VO
+ *
+ * Return: discard_weight for specified ac.
+ */
+int ol_cfg_get_discard_weight(ol_pdev_handle pdev, int ac)
+{
+ struct txrx_pdev_cfg_t *cfg = (struct txrx_pdev_cfg_t *)pdev;
+
+ if (ac >= OL_TX_WMM_AC_BE && ac <= OL_TX_WMM_AC_VO)
+ return cfg->ac_specs[ac].discard_weight;
+ else
+ return 0;
+}
+
diff --git a/CORE/CLD_TXRX/TXRX/ol_rx.c b/CORE/CLD_TXRX/TXRX/ol_rx.c
index 769e72b522b0..0c452fd55805 100644
--- a/CORE/CLD_TXRX/TXRX/ol_rx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_rx.c
@@ -60,6 +60,7 @@
#include <ol_vowext_dbg_defs.h>
#include <wma.h>
#include "pktlog_ac_fmt.h"
+#include "adf_trace.h"
#ifdef HTT_RX_RESTORE
#include "vos_cnss.h"
@@ -1317,6 +1318,11 @@ ol_rx_in_order_deliver(
while (msdu) {
adf_nbuf_t next = adf_nbuf_next(msdu);
+ DPTRACE(adf_dp_trace(msdu,
+ ADF_DP_TRACE_RX_TXRX_PACKET_PTR_RECORD,
+ adf_nbuf_data_addr(msdu),
+ sizeof(adf_nbuf_data(msdu)), ADF_RX));
+
OL_RX_PEER_STATS_UPDATE(peer, msdu);
OL_RX_ERR_STATISTICS_1(vdev->pdev, vdev, peer, rx_desc, OL_RX_ERR_NONE);
TXRX_STATS_MSDU_INCR(vdev->pdev, rx.delivered, msdu);
@@ -1333,6 +1339,24 @@ ol_rx_in_order_deliver(
OL_RX_OSIF_DELIVER(vdev, peer, msdu_list);
}
+/**
+ * ol_rx_log_packet() - log rx packet
+ * @htt_pdev: htt pdev
+ * @peer_id: peer_id
+ * @msdu: skb
+ *
+ * Return: none
+ */
+void ol_rx_log_packet(htt_pdev_handle htt_pdev,
+ uint8_t peer_id, adf_nbuf_t msdu)
+{
+ struct ol_txrx_peer_t *peer;
+
+ peer = ol_txrx_peer_find_by_id(htt_pdev->txrx_pdev, peer_id);
+ if (peer)
+ adf_dp_trace_log_pkt(peer->vdev->vdev_id, msdu, ADF_RX);
+}
+
void
ol_rx_offload_paddr_deliver_ind_handler(
htt_pdev_handle htt_pdev,
@@ -1353,6 +1377,13 @@ ol_rx_offload_paddr_deliver_ind_handler(
peer = ol_txrx_peer_find_by_id(htt_pdev->txrx_pdev, peer_id);
if (peer && peer->vdev) {
+ adf_dp_trace_set_track(head_buf, ADF_RX);
+ adf_dp_trace_log_pkt(peer->vdev->vdev_id,
+ head_buf, ADF_RX);
+ DPTRACE(adf_dp_trace(head_buf,
+ ADF_DP_TRACE_RX_OFFLOAD_HTT_PACKET_PTR_RECORD,
+ adf_nbuf_data_addr(head_buf),
+ sizeof(adf_nbuf_data(head_buf)), ADF_RX));
vdev = peer->vdev;
OL_RX_OSIF_DELIVER(vdev, peer, head_buf);
} else {
diff --git a/CORE/CLD_TXRX/TXRX/ol_rx.h b/CORE/CLD_TXRX/TXRX/ol_rx.h
index b1890025ed30..19676a626306 100644
--- a/CORE/CLD_TXRX/TXRX/ol_rx.h
+++ b/CORE/CLD_TXRX/TXRX/ol_rx.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011, 2014, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -63,6 +63,9 @@ ol_rx_in_order_deliver(
unsigned tid,
adf_nbuf_t head_msdu);
+void ol_rx_log_packet(htt_pdev_handle htt_pdev,
+ uint8_t peer_id, adf_nbuf_t msdu);
+
void
ol_rx_offload_paddr_deliver_ind_handler(
htt_pdev_handle htt_pdev,
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx.c b/CORE/CLD_TXRX/TXRX/ol_tx.c
index f55ddfe9efd1..a2bd003e2502 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx.c
@@ -111,7 +111,7 @@ ol_tx_ll(ol_txrx_vdev_handle vdev, adf_nbuf_t msdu_list)
* tx_send call.
*/
next = adf_nbuf_next(msdu);
- ol_tx_send(vdev->pdev, tx_desc, msdu);
+ ol_tx_send(vdev->pdev, tx_desc, msdu, vdev->vdev_id);
msdu = next;
}
return NULL; /* all MSDUs were accepted */
@@ -242,7 +242,7 @@ ol_tx_vdev_pause_queue_append(
DPTRACE(adf_dp_trace(msdu_list,
ADF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD,
adf_nbuf_data_addr(msdu_list),
- sizeof(adf_nbuf_data(msdu_list))));
+ sizeof(adf_nbuf_data(msdu_list)), ADF_TX));
vdev->ll_pause.txq.depth++;
if (!vdev->ll_pause.txq.head) {
@@ -514,7 +514,7 @@ ol_tx_non_std_ll(
* downloaded to the target via the HTT tx descriptor.
*/
htt_tx_desc_display(tx_desc->htt_tx_desc);
- ol_tx_send(vdev->pdev, tx_desc, msdu);
+ ol_tx_send(vdev->pdev, tx_desc, msdu, vdev->vdev_id);
msdu = next;
}
return NULL; /* all MSDUs were accepted */
@@ -1275,7 +1275,7 @@ adf_nbuf_t ol_tx_reinject(
htt_tx_desc_set_peer_id(tx_desc->htt_tx_desc, peer_id);
- ol_tx_send(vdev->pdev, tx_desc, msdu);
+ ol_tx_send(vdev->pdev, tx_desc, msdu, vdev->vdev_id);
return NULL;
}
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_sched.c b/CORE/CLD_TXRX/TXRX/ol_tx_sched.c
index 58779e43a72d..567729d4fe25 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx_sched.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx_sched.c
@@ -195,12 +195,13 @@ ol_tx_sched_select_batch_rr(
struct ol_tx_sched_rr_t *scheduler = pdev->tx_sched.scheduler;
struct ol_tx_active_queues_in_tid_t *txq_queue;
struct ol_tx_frms_queue_t *next_tq;
- u_int16_t frames, used_credits, tx_limit, tx_limit_flag = 0;
+ u_int16_t frames, used_credits = 0, tx_limit, tx_limit_flag = 0;
int bytes;
TX_SCHED_DEBUG_PRINT("Enter %s\n", __func__);
- if (TAILQ_EMPTY(&scheduler->tx_active_tids_list)) return;
+ if (TAILQ_EMPTY(&scheduler->tx_active_tids_list))
+ return used_credits;
txq_queue = TAILQ_FIRST(&scheduler->tx_active_tids_list);
@@ -212,10 +213,10 @@ ol_tx_sched_select_batch_rr(
credit = OL_A_MIN(credit, TX_SCH_MAX_CREDIT_FOR_THIS_TID(next_tq));
frames = next_tq->frms; /* download as many frames as credit allows */
- tx_limit = ol_tx_bad_peer_dequeue_check(txq, category->specs.send_limit, &tx_limit_flag);
+ tx_limit = ol_tx_bad_peer_dequeue_check(next_tq, frames, &tx_limit_flag);
frames = ol_tx_dequeue(
- pdev, txq, &sctx->head, tx_limit, &credit, &bytes);
- ol_tx_bad_peer_update_tx_limit(pdev, txq, frames, tx_limit_flag);
+ pdev, next_tq, &sctx->head, tx_limit, &credit, &bytes);
+ ol_tx_bad_peer_update_tx_limit(pdev, next_tq, frames, tx_limit_flag);
used_credits = credit;
txq_queue->frms -= frames;
@@ -425,6 +426,36 @@ ol_txrx_set_wmm_param(ol_txrx_pdev_handle data_pdev, struct ol_tx_wmm_param_t wm
"Dummy function when OL_TX_SCHED_RR is enabled\n");
}
+/**
+ * ol_tx_sched_stats_display() - tx sched stats display
+ * @pdev: Pointer to the PDEV structure.
+ *
+ * Return: none.
+ */
+void ol_tx_sched_stats_display(struct ol_txrx_pdev_t *pdev)
+{
+}
+
+/**
+ * ol_tx_sched_cur_state_display() - tx sched cur stat display
+ * @pdev: Pointer to the PDEV structure.
+ *
+ * Return: none.
+ */
+void ol_tx_sched_cur_state_display(struct ol_txrx_pdev_t *pdev)
+{
+}
+
+/**
+ * ol_tx_sched_cur_state_display() - reset tx sched stats
+ * @pdev: Pointer to the PDEV structure.
+ *
+ * Return: none.
+ */
+void ol_tx_sched_stats_clear(struct ol_txrx_pdev_t *pdev)
+{
+}
+
#endif /* OL_TX_SCHED == OL_TX_SCHED_RR */
/*--- advanced scheduler ----------------------------------------------------*/
@@ -937,6 +968,72 @@ ol_tx_sched_category_info_wrr_adv(
*bytes = category->state.bytes;
}
+
+/**
+ * ol_tx_sched_wrr_param_update() - update the WRR TX sched params
+ * @pdev: Pointer to PDEV structure.
+ * @scheduler: Pointer to tx scheduler.
+ *
+ * Update the WRR TX schedule parameters for each category if it is
+ * specified in the ini file by user.
+ *
+ * Return: none
+ */
+void ol_tx_sched_wrr_param_update(struct ol_txrx_pdev_t *pdev,
+ struct ol_tx_sched_wrr_adv_t *scheduler)
+{
+ int i;
+ char *tx_sched_wrr_name[4] = {
+ "BE",
+ "BK",
+ "VI",
+ "VO"
+ };
+
+ if (NULL == scheduler)
+ return;
+
+ VOS_TRACE(VOS_MODULE_ID_TXRX, VOS_TRACE_LEVEL_INFO,
+ "%s: Tuning the TX scheduler wrr parameters by ini file:",
+ __func__);
+ VOS_TRACE(VOS_MODULE_ID_TXRX, VOS_TRACE_LEVEL_INFO,
+ " skip credit limit credit disc");
+
+ for (i = OL_TX_SCHED_WRR_ADV_CAT_BE;
+ i <= OL_TX_SCHED_WRR_ADV_CAT_VO; i++) {
+ if (ol_cfg_get_wrr_skip_weight(pdev->ctrl_pdev, i)) {
+ scheduler->categories[i].specs.wrr_skip_weight =
+ ol_cfg_get_wrr_skip_weight(pdev->ctrl_pdev, i);
+ scheduler->categories[i].specs.credit_threshold =
+ ol_cfg_get_credit_threshold(pdev->ctrl_pdev, i);
+ scheduler->categories[i].specs.send_limit =
+ ol_cfg_get_send_limit(pdev->ctrl_pdev, i);
+ scheduler->categories[i].specs.credit_reserve =
+ ol_cfg_get_credit_reserve(pdev->ctrl_pdev, i);
+ scheduler->categories[i].specs.discard_weight =
+ ol_cfg_get_discard_weight(pdev->ctrl_pdev, i);
+
+ VOS_TRACE(VOS_MODULE_ID_TXRX, VOS_TRACE_LEVEL_INFO,
+ "%s-update: %d, %d, %d, %d, %d",
+ tx_sched_wrr_name[i],
+ scheduler->categories[i].specs.wrr_skip_weight,
+ scheduler->categories[i].specs.credit_threshold,
+ scheduler->categories[i].specs.send_limit,
+ scheduler->categories[i].specs.credit_reserve,
+ scheduler->categories[i].specs.discard_weight);
+ } else {
+ VOS_TRACE(VOS_MODULE_ID_TXRX, VOS_TRACE_LEVEL_INFO,
+ "%s-orig: %d, %d, %d, %d, %d",
+ tx_sched_wrr_name[i],
+ scheduler->categories[i].specs.wrr_skip_weight,
+ scheduler->categories[i].specs.credit_threshold,
+ scheduler->categories[i].specs.send_limit,
+ scheduler->categories[i].specs.credit_reserve,
+ scheduler->categories[i].specs.discard_weight);
+ }
+ }
+}
+
void *
ol_tx_sched_init_wrr_adv(
struct ol_txrx_pdev_t *pdev)
@@ -960,6 +1057,8 @@ ol_tx_sched_init_wrr_adv(
OL_TX_SCHED_WRR_ADV_CAT_CFG_STORE(MCAST_DATA, scheduler);
OL_TX_SCHED_WRR_ADV_CAT_CFG_STORE(MCAST_MGMT, scheduler);
+ ol_tx_sched_wrr_param_update(pdev, scheduler);
+
for (i = 0; i < OL_TX_SCHED_WRR_ADV_NUM_CATEGORIES; i++) {
scheduler->categories[i].state.active = 0;
scheduler->categories[i].state.frms = 0;
@@ -1042,6 +1141,39 @@ ol_txrx_set_wmm_param(ol_txrx_pdev_handle data_pdev, struct ol_tx_wmm_param_t wm
}
}
+/**
+ * ol_tx_sched_stats_display() - tx sched stats display
+ * @pdev: Pointer to the PDEV structure.
+ *
+ * Return: none.
+ */
+void ol_tx_sched_stats_display(struct ol_txrx_pdev_t *pdev)
+{
+ OL_TX_SCHED_WRR_ADV_CAT_STAT_DUMP(pdev->tx_sched.scheduler);
+}
+
+/**
+ * ol_tx_sched_cur_state_display() - tx sched cur stat display
+ * @pdev: Pointer to the PDEV structure.
+ *
+ * Return: none.
+ */
+void ol_tx_sched_cur_state_display(struct ol_txrx_pdev_t *pdev)
+{
+ OL_TX_SCHED_WRR_ADV_CAT_CUR_STATE_DUMP(pdev->tx_sched.scheduler);
+}
+
+/**
+ * ol_tx_sched_cur_state_display() - reset tx sched stats
+ * @pdev: Pointer to the PDEV structure.
+ *
+ * Return: none.
+ */
+void ol_tx_sched_stats_clear(struct ol_txrx_pdev_t *pdev)
+{
+ OL_TX_SCHED_WRR_ADV_CAT_STAT_CLEAR(pdev->tx_sched.scheduler);
+}
+
#endif /* OL_TX_SCHED == OL_TX_SCHED_WRR_ADV */
/*--- congestion control discard --------------------------------------------*/
@@ -1413,19 +1545,4 @@ ol_tx_sched_log(struct ol_txrx_pdev_t *pdev)
#endif /* defined(DEBUG_HL_LOGGING) */
-void ol_tx_sched_stats_display(struct ol_txrx_pdev_t *pdev)
-{
- OL_TX_SCHED_WRR_ADV_CAT_STAT_DUMP(pdev->tx_sched.scheduler);
-}
-
-void ol_tx_sched_cur_state_display(struct ol_txrx_pdev_t *pdev)
-{
- OL_TX_SCHED_WRR_ADV_CAT_CUR_STATE_DUMP(pdev->tx_sched.scheduler);
-}
-
-void ol_tx_sched_stats_clear(struct ol_txrx_pdev_t *pdev)
-{
- OL_TX_SCHED_WRR_ADV_CAT_STAT_CLEAR(pdev->tx_sched.scheduler);
-}
-
#endif /* defined(CONFIG_HL_SUPPORT) */
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_send.c b/CORE/CLD_TXRX/TXRX/ol_tx_send.c
index b35dc99af25c..8616dea07206 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx_send.c
+++ b/CORE/CLD_TXRX/TXRX/ol_tx_send.c
@@ -211,7 +211,7 @@ void
ol_tx_send(
struct ol_txrx_pdev_t *pdev,
struct ol_tx_desc_t *tx_desc,
- adf_nbuf_t msdu)
+ adf_nbuf_t msdu, uint8_t vdev_id)
{
int msdu_credit_consumed;
u_int16_t id;
@@ -222,7 +222,7 @@ ol_tx_send(
NBUF_UPDATE_TX_PKT_COUNT(msdu, NBUF_TX_PKT_TXRX);
DPTRACE(adf_dp_trace_ptr(msdu, ADF_DP_TRACE_TXRX_PACKET_PTR_RECORD,
adf_nbuf_data_addr(msdu),
- sizeof(adf_nbuf_data(msdu)), tx_desc->id, 0));
+ sizeof(adf_nbuf_data(msdu)), tx_desc->id, vdev_id));
failed = htt_tx_send_std(pdev->htt_pdev, msdu, id);
if (adf_os_unlikely(failed)) {
diff --git a/CORE/CLD_TXRX/TXRX/ol_tx_send.h b/CORE/CLD_TXRX/TXRX/ol_tx_send.h
index 2d20da995b4d..5eb08abd34ad 100644
--- a/CORE/CLD_TXRX/TXRX/ol_tx_send.h
+++ b/CORE/CLD_TXRX/TXRX/ol_tx_send.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011, 2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -60,7 +60,7 @@ void
ol_tx_send(
struct ol_txrx_pdev_t *pdev,
struct ol_tx_desc_t *tx_desc,
- adf_nbuf_t msdu);
+ adf_nbuf_t msdu, uint8_t vdev_id);
/**
* @brief Send a tx batch download to the target.
diff --git a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
index 37894217dd8d..466db8462415 100644
--- a/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
+++ b/CORE/CLD_TXRX/TXRX/ol_txrx_types.h
@@ -360,7 +360,12 @@ struct ol_tx_sched_t;
typedef struct ol_tx_sched_t *ol_tx_sched_handle;
#ifndef OL_TXRX_NUM_LOCAL_PEER_IDS
-#define OL_TXRX_NUM_LOCAL_PEER_IDS 33 /* default */
+
+/*
+ * Each AP will occupy one ID, so it will occupy two IDs for AP-AP mode.
+ * And the remainder IDs will be assigned to other 32 clients.
+ */
+#define OL_TXRX_NUM_LOCAL_PEER_IDS (2 + 32)
#endif
#ifndef ol_txrx_local_peer_id_t
diff --git a/CORE/EPPING/src/epping_main.c b/CORE/EPPING/src/epping_main.c
index b56077bbdb7f..ddb466ed59d1 100644
--- a/CORE/EPPING/src/epping_main.c
+++ b/CORE/EPPING/src/epping_main.c
@@ -249,10 +249,6 @@ void epping_driver_exit(v_CONTEXT_t pVosContext)
}
else
{
-#ifdef QCA_PKT_PROTO_TRACE
- vos_pkt_proto_trace_close();
-#endif /* QCA_PKT_PROTO_TRACE */
- //pHddCtx->isUnloadInProgress = TRUE;
vos_set_unload_in_progress(TRUE);
vos_set_load_unload_in_progress(VOS_MODULE_ID_VOSS, TRUE);
}
diff --git a/CORE/HDD/inc/wlan_hdd_cfg.h b/CORE/HDD/inc/wlan_hdd_cfg.h
index 1ae35c8abba3..5c13303563e7 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg.h
@@ -48,6 +48,8 @@
#include <wlan_hdd_tgt_cfg.h>
#define FW_MODULE_LOG_LEVEL_STRING_LENGTH (255)
+#define TX_SCHED_WRR_PARAM_STRING_LENGTH (50)
+#define TX_SCHED_WRR_PARAMS_NUM (5)
#ifdef DHCP_SERVER_OFFLOAD
#define IPADDR_NUM_ENTRIES (4)
@@ -3829,6 +3831,43 @@ enum dot11p_mode {
#define CFG_EDCA_BE_AIFS_VALUE_MAX (15)
#define CFG_EDCA_BE_AIFS_VALUE_DEFAULT (3)
+
+/*
+ * This key is mapping to VO defined in data path module through
+ * OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC. The user can tune the
+ * WRR TX sched parameters such as skip, credit, limit, credit, disc for VO.
+ * e.g., gEnableTxSchedWrrVO = 10, 9, 8, 1, 8
+ */
+#define CFG_ENABLE_TX_SCHED_WRR_VO "gEnableTxSchedWrrVO"
+#define CFG_ENABLE_TX_SCHED_WRR_VO_DEFAULT ""
+
+/*
+ * This key is mapping to VI defined in data path module through
+ * OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC. The user can tune the
+ * WRR TX sched parameters such as skip, credit, limit, credit, disc for VI.
+ * e.g., gEnableTxSchedWrrVI = 10, 9, 8, 1, 8
+ */
+#define CFG_ENABLE_TX_SCHED_WRR_VI "gEnableTxSchedWrrVI"
+#define CFG_ENABLE_TX_SCHED_WRR_VI_DEFAULT ""
+
+/*
+ * This key is mapping to BE defined in data path module through
+ * OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC. The user can tune the
+ * WRR TX sched parameters such as skip, credit, limit, credit, disc for BE.
+ * e.g., gEnableTxSchedWrrBE = 10, 9, 8, 1, 8
+ */
+#define CFG_ENABLE_TX_SCHED_WRR_BE "gEnableTxSchedWrrBE"
+#define CFG_ENABLE_TX_SCHED_WRR_BE_DEFAULT ""
+
+/*
+ * This key is mapping to BK defined in data path module through
+ * OL_TX_SCHED_WRR_ADV_CAT_CFG_SPEC. The user can tune the
+ * WRR TX sched parameters such as skip, credit, limit, credit, disc for BK.
+ * e.g., gEnableTxSchedWrrBK = 10, 9, 8, 1, 8
+ */
+#define CFG_ENABLE_TX_SCHED_WRR_BK "gEnableTxSchedWrrBK"
+#define CFG_ENABLE_TX_SCHED_WRR_BK_DEFAULT ""
+
#define CFG_TGT_GTX_USR_CFG_NAME "tgt_gtx_usr_cfg"
#define CFG_TGT_GTX_USR_CFG_MIN (0)
#define CFG_TGT_GTX_USR_CFG_MAX (32)
@@ -4607,6 +4646,15 @@ struct hdd_config {
uint32_t edca_be_aifs;
bool enable_dynamic_sta_chainmask;
+ /* Tuning TX sched parameters for VO (skip credit limit credit disc) */
+ uint8_t tx_sched_wrr_vo[TX_SCHED_WRR_PARAM_STRING_LENGTH];
+ /* Tuning TX sched parameters for VI (skip credit limit credit disc) */
+ uint8_t tx_sched_wrr_vi[TX_SCHED_WRR_PARAM_STRING_LENGTH];
+ /* Tuning TX sched parameters for BE (skip credit limit credit disc) */
+ uint8_t tx_sched_wrr_be[TX_SCHED_WRR_PARAM_STRING_LENGTH];
+ /* Tuning TX sched parameters for BK (skip credit limit credit disc) */
+ uint8_t tx_sched_wrr_bk[TX_SCHED_WRR_PARAM_STRING_LENGTH];
+
/* parameter to control GTX */
uint32_t tgt_gtx_usr_cfg;
bool sap_restrt_ch_avoid;
diff --git a/CORE/HDD/inc/wlan_hdd_cfg80211.h b/CORE/HDD/inc/wlan_hdd_cfg80211.h
index 94f5a8c78173..6fc13ed3588f 100644
--- a/CORE/HDD/inc/wlan_hdd_cfg80211.h
+++ b/CORE/HDD/inc/wlan_hdd_cfg80211.h
@@ -2089,15 +2089,15 @@ struct cfg80211_bss *wlan_hdd_cfg80211_inform_bss_frame(hdd_adapter_t *pAdapter,
#if defined(CFG80211_DISCONNECTED_V2) || \
(LINUX_VERSION_CODE >= KERNEL_VERSION(4, 2, 0))
static inline void wlan_hdd_cfg80211_indicate_disconnect(struct net_device *dev,
- bool from_ap,
+ bool locally_generated,
int reason)
{
cfg80211_disconnected(dev, reason, NULL, 0,
- from_ap, GFP_KERNEL);
+ locally_generated, GFP_KERNEL);
}
#else
static inline void wlan_hdd_cfg80211_indicate_disconnect(struct net_device *dev,
- bool from_ap,
+ bool locally_generated,
int reason)
{
cfg80211_disconnected(dev, reason, NULL, 0,
diff --git a/CORE/HDD/inc/wlan_hdd_wext.h b/CORE/HDD/inc/wlan_hdd_wext.h
index e18f7f25b663..c4b54031ac3c 100644
--- a/CORE/HDD/inc/wlan_hdd_wext.h
+++ b/CORE/HDD/inc/wlan_hdd_wext.h
@@ -334,8 +334,6 @@ typedef struct hdd_wext_state_s
v_BOOL_t isESEConnection;
eCsrAuthType collectedAuthType; /* Collected from ALL SIOCSIWAUTH Ioctls. Will be negotiatedAuthType - in tCsrProfile */
#endif
- /* Wireless statistics */
- struct iw_statistics iw_stats;
}hdd_wext_state_t;
typedef struct ccp_freq_chan_map_s{
diff --git a/CORE/HDD/src/wlan_hdd_assoc.c b/CORE/HDD/src/wlan_hdd_assoc.c
index ae548cc08030..2b2538f3e402 100644
--- a/CORE/HDD/src/wlan_hdd_assoc.c
+++ b/CORE/HDD/src/wlan_hdd_assoc.c
@@ -1034,11 +1034,11 @@ static eHalStatus hdd_DisConnectHandler( hdd_adapter_t *pAdapter, tCsrRoamInfo *
pr_info(
"wlan: disconnected due to poor signal, rssi is %d dB\n",
pRoamInfo->rxRssi);
- wlan_hdd_cfg80211_indicate_disconnect(dev, true,
- WLAN_REASON_UNSPECIFIED);
+ wlan_hdd_cfg80211_indicate_disconnect(dev, false,
+ pRoamInfo->reasonCode);
}
else
- wlan_hdd_cfg80211_indicate_disconnect(dev, true,
+ wlan_hdd_cfg80211_indicate_disconnect(dev, false,
WLAN_REASON_UNSPECIFIED);
hddLog(VOS_TRACE_LEVEL_INFO_HIGH,
diff --git a/CORE/HDD/src/wlan_hdd_cfg.c b/CORE/HDD/src/wlan_hdd_cfg.c
index 984d187a0bf6..cbb0bf8b4310 100644
--- a/CORE/HDD/src/wlan_hdd_cfg.c
+++ b/CORE/HDD/src/wlan_hdd_cfg.c
@@ -4569,6 +4569,26 @@ REG_TABLE_ENTRY g_registry_table[] =
CFG_EDCA_BE_AIFS_VALUE_MIN,
CFG_EDCA_BE_AIFS_VALUE_MAX),
+ REG_VARIABLE_STRING(CFG_ENABLE_TX_SCHED_WRR_VO, WLAN_PARAM_String,
+ hdd_config_t, tx_sched_wrr_vo,
+ VAR_FLAGS_OPTIONAL,
+ (void *) CFG_ENABLE_TX_SCHED_WRR_VO_DEFAULT),
+
+ REG_VARIABLE_STRING(CFG_ENABLE_TX_SCHED_WRR_VI, WLAN_PARAM_String,
+ hdd_config_t, tx_sched_wrr_vi,
+ VAR_FLAGS_OPTIONAL,
+ (void *) CFG_ENABLE_TX_SCHED_WRR_VI_DEFAULT),
+
+ REG_VARIABLE_STRING(CFG_ENABLE_TX_SCHED_WRR_BE, WLAN_PARAM_String,
+ hdd_config_t, tx_sched_wrr_be,
+ VAR_FLAGS_OPTIONAL,
+ (void *) CFG_ENABLE_TX_SCHED_WRR_BE_DEFAULT),
+
+ REG_VARIABLE_STRING(CFG_ENABLE_TX_SCHED_WRR_BK, WLAN_PARAM_String,
+ hdd_config_t, tx_sched_wrr_bk,
+ VAR_FLAGS_OPTIONAL,
+ (void *) CFG_ENABLE_TX_SCHED_WRR_BK_DEFAULT),
+
REG_VARIABLE(CFG_TGT_GTX_USR_CFG_NAME, WLAN_PARAM_Integer,
hdd_config_t, tgt_gtx_usr_cfg,
VAR_FLAGS_OPTIONAL | VAR_FLAGS_RANGE_CHECK_ASSUME_DEFAULT,
@@ -5410,6 +5430,19 @@ void print_hdd_cfg(hdd_context_t *pHddCtx)
CFG_BUG_ON_REINIT_FAILURE_NAME,
pHddCtx->cfg_ini->bug_on_reinit_failure);
+ hddLog(LOG2, "Name = [%s] Value = [%s]",
+ CFG_ENABLE_TX_SCHED_WRR_VO,
+ pHddCtx->cfg_ini->tx_sched_wrr_vo);
+ hddLog(LOG2, "Name = [%s] Value = [%s]",
+ CFG_ENABLE_TX_SCHED_WRR_VI,
+ pHddCtx->cfg_ini->tx_sched_wrr_vi);
+ hddLog(LOG2, "Name = [%s] Value = [%s]",
+ CFG_ENABLE_TX_SCHED_WRR_BK,
+ pHddCtx->cfg_ini->tx_sched_wrr_bk);
+ hddLog(LOG2, "Name = [%s] Value = [%s]",
+ CFG_ENABLE_TX_SCHED_WRR_BE,
+ pHddCtx->cfg_ini->tx_sched_wrr_be);
+
hddLog(LOG2, "Name = [%s] Value = [%u]",
CFG_TGT_GTX_USR_CFG_NAME,
pHddCtx->cfg_ini->tgt_gtx_usr_cfg);
diff --git a/CORE/HDD/src/wlan_hdd_cfg80211.c b/CORE/HDD/src/wlan_hdd_cfg80211.c
index e6c47345251b..4749917bafe1 100644
--- a/CORE/HDD/src/wlan_hdd_cfg80211.c
+++ b/CORE/HDD/src/wlan_hdd_cfg80211.c
@@ -1407,13 +1407,13 @@ __wlan_hdd_cfg80211_get_supported_features(struct wiphy *wiphy,
tANI_U32 fset = 0;
int ret;
+ /* ENTER() intentionally not used in a frequently invoked API */
+
if (VOS_FTM_MODE == hdd_get_conparam()) {
hddLog(LOGE, FL("Command not allowed in FTM mode"));
return -EINVAL;
}
- ENTER();
-
ret = wlan_hdd_validate_context(pHddCtx);
if (0 != ret)
return -EINVAL;
@@ -1514,7 +1514,6 @@ __wlan_hdd_cfg80211_get_supported_features(struct wiphy *wiphy,
}
ret = cfg80211_vendor_cmd_reply(skb);
- EXIT();
return ret;
nla_put_failure:
@@ -2511,7 +2510,7 @@ static int __wlan_hdd_cfg80211_extscan_get_cached_results(struct wiphy *wiphy,
int retval = 0;
unsigned long rc;
- ENTER();
+ /* ENTER() intentionally not used in a frequently invoked API */
if (VOS_FTM_MODE == hdd_get_conparam()) {
hddLog(LOGE, FL("Command not allowed in FTM mode"));
@@ -2546,8 +2545,6 @@ static int __wlan_hdd_cfg80211_extscan_get_cached_results(struct wiphy *wiphy,
pReqMsg->requestId = nla_get_u32(tb[PARAM_REQUEST_ID]);
pReqMsg->sessionId = pAdapter->sessionId;
- hddLog(LOG1, FL("Req Id %u Session Id %d"),
- pReqMsg->requestId, pReqMsg->sessionId);
/* Parse and fetch flush parameter */
if (!tb[PARAM_FLUSH]) {
@@ -2555,7 +2552,8 @@ static int __wlan_hdd_cfg80211_extscan_get_cached_results(struct wiphy *wiphy,
goto fail;
}
pReqMsg->flush = nla_get_u8(tb[PARAM_FLUSH]);
- hddLog(LOG1, FL("Flush %d"), pReqMsg->flush);
+ hddLog(LOG1, FL("Req Id: %u Session Id: %d Flush: %d"),
+ pReqMsg->requestId, pReqMsg->sessionId, pReqMsg->flush);
spin_lock(&hdd_context_lock);
context = &pHddCtx->ext_scan_context;
@@ -2584,7 +2582,6 @@ static int __wlan_hdd_cfg80211_extscan_get_cached_results(struct wiphy *wiphy,
retval = context->response_status;
spin_unlock(&hdd_context_lock);
}
- EXIT();
return retval;
fail:
@@ -3253,17 +3250,15 @@ static int __wlan_hdd_cfg80211_extscan_get_valid_channels(struct wiphy *wiphy,
struct net_device *dev = wdev->netdev;
hdd_adapter_t *pAdapter = WLAN_HDD_GET_PRIV_PTR(dev);
uint32_t chan_list[WNI_CFG_VALID_CHANNEL_LIST_LEN] = {0};
- uint8_t num_channels = 0;
- uint8_t num_chan_new = 0;
+ uint8_t num_channels = 0, num_chan_new = 0, buf[256] = {0};
struct nlattr *tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_MAX + 1];
tANI_U32 requestId, maxChannels;
tWifiBand wifiBand;
eHalStatus status;
struct sk_buff *reply_skb;
- tANI_U8 i, j, k;
- int retval;
+ int i, j, k, retval, len = 0;
- ENTER();
+ /* ENTER() intentionally not used in a frequently invoked API */
if (VOS_FTM_MODE == hdd_get_conparam()) {
hddLog(LOGE, FL("Command not allowed in FTM mode"));
@@ -3288,7 +3283,6 @@ static int __wlan_hdd_cfg80211_extscan_get_valid_channels(struct wiphy *wiphy,
}
requestId = nla_get_u32(
tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_SUBCMD_CONFIG_PARAM_REQUEST_ID]);
- hddLog(LOG1, FL("Req Id %d"), requestId);
/* Parse and fetch wifi band */
if (!tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_GET_VALID_CHANNELS_CONFIG_PARAM_WIFI_BAND]) {
@@ -3297,7 +3291,6 @@ static int __wlan_hdd_cfg80211_extscan_get_valid_channels(struct wiphy *wiphy,
}
wifiBand = nla_get_u32(
tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_GET_VALID_CHANNELS_CONFIG_PARAM_WIFI_BAND]);
- hddLog(LOG1, FL("Wifi band %d"), wifiBand);
/* Parse and fetch max channels */
if (!tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_GET_VALID_CHANNELS_CONFIG_PARAM_MAX_CHANNELS]) {
@@ -3306,7 +3299,8 @@ static int __wlan_hdd_cfg80211_extscan_get_valid_channels(struct wiphy *wiphy,
}
maxChannels = nla_get_u32(
tb[QCA_WLAN_VENDOR_ATTR_EXTSCAN_GET_VALID_CHANNELS_CONFIG_PARAM_MAX_CHANNELS]);
- hddLog(LOG1, FL("Max channels %d"), maxChannels);
+ hddLog(LOG1, FL("Req Id: %d Wifi band: %d Max channels: %d"),
+ requestId, wifiBand, maxChannels);
status = sme_GetValidChannelsByBand((tHalHandle)(pHddCtx->hHal),
wifiBand, chan_list,
@@ -3350,9 +3344,10 @@ static int __wlan_hdd_cfg80211_extscan_get_valid_channels(struct wiphy *wiphy,
}
}
- hddLog(LOG1, FL("Number of channels %d"), num_chan_new);
+ hddLog(LOG1, FL("Number of channels: %d"), num_chan_new);
for (i = 0; i < num_chan_new; i++)
- hddLog(LOG1, "Channel: %u ", chan_list[i]);
+ len += scnprintf(buf + len, sizeof(buf) - len, "%u ", chan_list[i]);
+ hddLog(LOG1, "Channels: %s", buf);
reply_skb = cfg80211_vendor_cmd_alloc_reply_skb(wiphy, sizeof(u32) +
sizeof(u32) * num_chan_new +
@@ -3370,7 +3365,6 @@ static int __wlan_hdd_cfg80211_extscan_get_valid_channels(struct wiphy *wiphy,
}
retval = cfg80211_vendor_cmd_reply(reply_skb);
- EXIT();
return retval;
}
hddLog(LOGE, FL("valid channels: buffer alloc fail"));
@@ -3530,8 +3524,6 @@ static int hdd_extscan_start_fill_bucket_channel_spec(
}
pReqMsg->buckets[bktIndex].bucket = nla_get_u8(
bucket[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BUCKET_SPEC_INDEX]);
- hddLog(LOG1, FL("Bucket spec Index %d"),
- pReqMsg->buckets[bktIndex].bucket);
/* Parse and fetch wifi band */
if (!bucket[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BUCKET_SPEC_BAND]) {
@@ -3540,8 +3532,6 @@ static int hdd_extscan_start_fill_bucket_channel_spec(
}
pReqMsg->buckets[bktIndex].band = nla_get_u8(
bucket[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BUCKET_SPEC_BAND]);
- hddLog(LOG1, FL("Wifi band %d"),
- pReqMsg->buckets[bktIndex].band);
/* Parse and fetch period */
if (!bucket[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BUCKET_SPEC_PERIOD]) {
@@ -3550,8 +3540,6 @@ static int hdd_extscan_start_fill_bucket_channel_spec(
}
pReqMsg->buckets[bktIndex].period = nla_get_u32(
bucket[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BUCKET_SPEC_PERIOD]);
- hddLog(LOG1, FL("period %d"),
- pReqMsg->buckets[bktIndex].period);
/* Parse and fetch report events */
if (!bucket[
@@ -3562,8 +3550,6 @@ static int hdd_extscan_start_fill_bucket_channel_spec(
pReqMsg->buckets[bktIndex].reportEvents = nla_get_u8(
bucket[
QCA_WLAN_VENDOR_ATTR_EXTSCAN_BUCKET_SPEC_REPORT_EVENTS]);
- hddLog(LOG1, FL("report events %d"),
- pReqMsg->buckets[bktIndex].reportEvents);
/* Parse and fetch max period */
if (!bucket[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BUCKET_SPEC_MAX_PERIOD]) {
@@ -3572,8 +3558,6 @@ static int hdd_extscan_start_fill_bucket_channel_spec(
}
pReqMsg->buckets[bktIndex].max_period = nla_get_u32(
bucket[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BUCKET_SPEC_MAX_PERIOD]);
- hddLog(LOG1, FL("max period %u"),
- pReqMsg->buckets[bktIndex].max_period);
/* Parse and fetch base */
if (!bucket[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BUCKET_SPEC_BASE]) {
@@ -3582,8 +3566,6 @@ static int hdd_extscan_start_fill_bucket_channel_spec(
}
pReqMsg->buckets[bktIndex].exponent = nla_get_u32(
bucket[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BUCKET_SPEC_BASE]);
- hddLog(LOG1, FL("base %u"),
- pReqMsg->buckets[bktIndex].exponent);
/* Parse and fetch step count */
if (!bucket[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BUCKET_SPEC_STEP_COUNT]) {
@@ -3592,8 +3574,14 @@ static int hdd_extscan_start_fill_bucket_channel_spec(
}
pReqMsg->buckets[bktIndex].step_count = nla_get_u32(
bucket[QCA_WLAN_VENDOR_ATTR_EXTSCAN_BUCKET_SPEC_STEP_COUNT]);
- hddLog(LOG1, FL("Step count %u"),
- pReqMsg->buckets[bktIndex].step_count);
+ hddLog(LOG1, FL("Bucket spec Index: %d Wifi band: %d period: %d report events: %d max period: %u base: %u Step count: %u"),
+ pReqMsg->buckets[bktIndex].bucket,
+ pReqMsg->buckets[bktIndex].band,
+ pReqMsg->buckets[bktIndex].period,
+ pReqMsg->buckets[bktIndex].reportEvents,
+ pReqMsg->buckets[bktIndex].max_period,
+ pReqMsg->buckets[bktIndex].exponent,
+ pReqMsg->buckets[bktIndex].step_count);
/* start with known good values for bucket dwell times */
pReqMsg->buckets[bktIndex].min_dwell_time_active =
@@ -3977,8 +3965,6 @@ static int __wlan_hdd_cfg80211_extscan_start(struct wiphy *wiphy,
pReqMsg->requestId = nla_get_u32(tb[PARAM_REQUEST_ID]);
pReqMsg->sessionId = pAdapter->sessionId;
- hddLog(LOG1, FL("Req Id %d Session Id %d"),
- pReqMsg->requestId, pReqMsg->sessionId);
/* Parse and fetch base period */
if (!tb[PARAM_BASE_PERIOD]) {
@@ -3986,7 +3972,6 @@ static int __wlan_hdd_cfg80211_extscan_start(struct wiphy *wiphy,
goto fail;
}
pReqMsg->basePeriod = nla_get_u32(tb[PARAM_BASE_PERIOD]);
- hddLog(LOG1, FL("Base Period %d"), pReqMsg->basePeriod);
/* Parse and fetch max AP per scan */
if (!tb[PARAM_MAX_AP_PER_SCAN]) {
@@ -3994,7 +3979,6 @@ static int __wlan_hdd_cfg80211_extscan_start(struct wiphy *wiphy,
goto fail;
}
pReqMsg->maxAPperScan = nla_get_u32(tb[PARAM_MAX_AP_PER_SCAN]);
- hddLog(LOG1, FL("Max AP per Scan %d"), pReqMsg->maxAPperScan);
/* Parse and fetch report threshold percent */
if (!tb[PARAM_RPT_THRHLD_PERCENT]) {
@@ -4003,8 +3987,6 @@ static int __wlan_hdd_cfg80211_extscan_start(struct wiphy *wiphy,
}
pReqMsg->report_threshold_percent = nla_get_u8(
tb[PARAM_RPT_THRHLD_PERCENT]);
- hddLog(LOG1, FL("Report Threshold percent %d"),
- pReqMsg->report_threshold_percent);
/* Parse and fetch report threshold num scans */
if (!tb[PARAM_RPT_THRHLD_NUM_SCANS]) {
@@ -4013,7 +3995,10 @@ static int __wlan_hdd_cfg80211_extscan_start(struct wiphy *wiphy,
}
pReqMsg->report_threshold_num_scans = nla_get_u8(
tb[PARAM_RPT_THRHLD_NUM_SCANS]);
- hddLog(LOG1, FL("Report Threshold num scans %d"),
+ hddLog(LOG1, FL("Req Id: %d Session Id: %d Base Period: %d Max AP per Scan: %d Rpt Thld percent: %d Rpt Thld num scans: %d"),
+ pReqMsg->requestId, pReqMsg->sessionId,
+ pReqMsg->basePeriod, pReqMsg->maxAPperScan,
+ pReqMsg->report_threshold_percent,
pReqMsg->report_threshold_num_scans);
/* Parse and fetch number of buckets */
@@ -14174,6 +14159,15 @@ static int __wlan_hdd_cfg80211_add_beacon(struct wiphy *wiphy,
hddLog(VOS_TRACE_LEVEL_DEBUG, FL("Reached max concurrent connections"));
return -EINVAL;
}
+ if (pAdapter->device_mode == WLAN_HDD_P2P_GO) {
+ hdd_adapter_t *pP2pAdapter = NULL;
+ pP2pAdapter = hdd_get_adapter(pHddCtx, WLAN_HDD_P2P_DEVICE);
+ if (pP2pAdapter) {
+ hddLog(VOS_TRACE_LEVEL_DEBUG,
+ FL("cancel active p2p device ROC before GO starting"));
+ wlan_hdd_cancel_existing_remain_on_channel(pP2pAdapter);
+ }
+ }
if ((pAdapter->device_mode == WLAN_HDD_SOFTAP) ||
(pAdapter->device_mode == WLAN_HDD_P2P_GO)) {
@@ -14257,6 +14251,15 @@ static int __wlan_hdd_cfg80211_set_beacon(struct wiphy *wiphy,
hddLog(LOGE, FL("Command not allowed in FTM mode"));
return -EINVAL;
}
+ if (pAdapter->device_mode == WLAN_HDD_P2P_GO) {
+ hdd_adapter_t *pP2pAdapter = NULL;
+ pP2pAdapter = hdd_get_adapter(pHddCtx, WLAN_HDD_P2P_DEVICE);
+ if (pP2pAdapter) {
+ hddLog(VOS_TRACE_LEVEL_DEBUG,
+ FL("cancel active p2p device ROC before GO starting"));
+ wlan_hdd_cancel_existing_remain_on_channel(pP2pAdapter);
+ }
+ }
if ((pAdapter->device_mode == WLAN_HDD_SOFTAP) ||
(pAdapter->device_mode == WLAN_HDD_P2P_GO)) {
@@ -14565,6 +14568,15 @@ static int __wlan_hdd_cfg80211_start_ap(struct wiphy *wiphy,
hddLog(VOS_TRACE_LEVEL_DEBUG, FL("Reached max concurrent connections"));
return -EINVAL;
}
+ if (pAdapter->device_mode == WLAN_HDD_P2P_GO) {
+ hdd_adapter_t *pP2pAdapter = NULL;
+ pP2pAdapter = hdd_get_adapter(pHddCtx, WLAN_HDD_P2P_DEVICE);
+ if (pP2pAdapter) {
+ hddLog(VOS_TRACE_LEVEL_DEBUG,
+ FL("cancel active p2p device ROC before GO starting"));
+ wlan_hdd_cancel_existing_remain_on_channel(pP2pAdapter);
+ }
+ }
if ((pAdapter->device_mode == WLAN_HDD_SOFTAP)
|| (pAdapter->device_mode == WLAN_HDD_P2P_GO)
@@ -14699,6 +14711,15 @@ static int __wlan_hdd_cfg80211_change_beacon(struct wiphy *wiphy,
pAdapter->device_mode == WLAN_HDD_P2P_GO)) {
return -EOPNOTSUPP;
}
+ if (pAdapter->device_mode == WLAN_HDD_P2P_GO) {
+ hdd_adapter_t *pP2pAdapter = NULL;
+ pP2pAdapter = hdd_get_adapter(pHddCtx, WLAN_HDD_P2P_DEVICE);
+ if (pP2pAdapter) {
+ hddLog(VOS_TRACE_LEVEL_DEBUG,
+ FL("cancel active p2p device ROC before GO starting"));
+ wlan_hdd_cancel_existing_remain_on_channel(pP2pAdapter);
+ }
+ }
old = pAdapter->sessionCtx.ap.beacon;
@@ -19190,7 +19211,7 @@ disconnected:
*/
hddLog(LOG1, FL("Send disconnected event to userspace"));
- wlan_hdd_cfg80211_indicate_disconnect(pAdapter->dev, false,
+ wlan_hdd_cfg80211_indicate_disconnect(pAdapter->dev, true,
WLAN_REASON_UNSPECIFIED);
#endif
@@ -24188,7 +24209,7 @@ wlan_hdd_cfg80211_extscan_cached_results_ind(void *ctx,
uint32_t i, j, nl_buf_len;
bool ignore_cached_results = false;
- ENTER();
+ /* ENTER() intentionally not used in a frequently invoked API */
if (wlan_hdd_validate_context(pHddCtx))
return;
@@ -24256,7 +24277,6 @@ wlan_hdd_cfg80211_extscan_cached_results_ind(void *ctx,
}
}
- hddLog(LOG2, FL("nl_buf_len = %u"), nl_buf_len);
skb = cfg80211_vendor_cmd_alloc_reply_skb(pHddCtx->wiphy, nl_buf_len);
if (!skb) {
@@ -24386,7 +24406,6 @@ wlan_hdd_cfg80211_extscan_cached_results_ind(void *ctx,
complete(&context->response_event);
spin_unlock(&hdd_context_lock);
}
- EXIT();
return;
fail:
@@ -24866,18 +24885,18 @@ wlan_hdd_cfg80211_extscan_full_scan_result_event(void *ctx,
tpSirWifiFullScanResultEvent pData)
{
hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
- struct sk_buff *skb = NULL;
+ struct sk_buff *skb;
struct timespec ts;
int flags = vos_get_gfp_flags();
struct hdd_ext_scan_context *context;
- ENTER();
+ /* ENTER() intentionally not used in a frequently invoked API */
if (wlan_hdd_validate_context(pHddCtx))
return;
if (!pData) {
- hddLog(VOS_TRACE_LEVEL_ERROR, FL("pData is null"));
+ hddLog(LOGE, FL("pData is null"));
return;
}
/*
@@ -24905,8 +24924,6 @@ wlan_hdd_cfg80211_extscan_full_scan_result_event(void *ctx,
Instead it wants a monotonic increasing value since boot */
vos_get_monotonic_boottime_ts(&ts);
pData->ap.ts = ((u64)ts.tv_sec * 1000000) + (ts.tv_nsec / 1000);
- hddLog(LOG1, "Req Id %u More Data %u",
- pData->requestId, pData->moreData);
hddLog(LOG1, "AP Info: Timestamp %llu Ssid: %s "
"Bssid (" MAC_ADDRESS_STR ") "
"Channel %u "
@@ -24980,12 +24997,9 @@ wlan_hdd_cfg80211_extscan_full_scan_result_event(void *ctx,
hddLog(LOGE, FL("Failed to include buckets_scanned"));
goto nla_put_failure;
}
- hddLog(LOG1, FL("Full scan buckets_scanned: %u"),
- context->buckets_scanned);
spin_unlock(&hdd_context_lock);
cfg80211_vendor_event(skb, flags);
- EXIT();
return;
nla_put_failure:
@@ -25189,14 +25203,13 @@ wlan_hdd_cfg80211_extscan_scan_progress_event(void *ctx,
int flags = vos_get_gfp_flags();
struct hdd_ext_scan_context *context;
- ENTER();
+ /* ENTER() intentionally not used in a frequently invoked API */
if (wlan_hdd_validate_context(pHddCtx))
return;
if (!data) {
hddLog(LOGE, FL("data is null"));
- EXIT();
return;
}
@@ -25214,7 +25227,6 @@ wlan_hdd_cfg80211_extscan_scan_progress_event(void *ctx,
context->buckets_scanned = data->buckets_scanned;
/* No need to report to user space */
spin_unlock(&hdd_context_lock);
- EXIT();
return;
} else {
spin_unlock(&hdd_context_lock);
@@ -25228,7 +25240,6 @@ wlan_hdd_cfg80211_extscan_scan_progress_event(void *ctx,
if (!skb) {
hddLog(LOGE, FL("cfg80211_vendor_event_alloc failed"));
- EXIT();
return;
}
@@ -25241,12 +25252,10 @@ wlan_hdd_cfg80211_extscan_scan_progress_event(void *ctx,
}
cfg80211_vendor_event(skb, flags);
- EXIT();
return;
nla_put_failure:
kfree_skb(skb);
- EXIT();
return;
}
@@ -25389,7 +25398,7 @@ void wlan_hdd_cfg80211_extscan_callback(void *ctx, const tANI_U16 evType,
{
hdd_context_t *pHddCtx = (hdd_context_t *)ctx;
- ENTER();
+ /* ENTER() intentionally not used in a frequently invoked API */
if (wlan_hdd_validate_context(pHddCtx))
return;
@@ -25467,7 +25476,6 @@ void wlan_hdd_cfg80211_extscan_callback(void *ctx, const tANI_U16 evType,
hddLog(LOGE, FL("Unknown event type %u"), evType);
break;
}
- EXIT();
}
#endif /* FEATURE_WLAN_EXTSCAN */
diff --git a/CORE/HDD/src/wlan_hdd_hostapd.c b/CORE/HDD/src/wlan_hdd_hostapd.c
index dceb6103dab3..62cb37d28e84 100644
--- a/CORE/HDD/src/wlan_hdd_hostapd.c
+++ b/CORE/HDD/src/wlan_hdd_hostapd.c
@@ -120,7 +120,6 @@ extern int process_wma_set_command(int sessid, int paramid,
/* EID byte + length byte + four byte WiFi OUI */
#define DOT11F_EID_HEADER_LEN (6)
-#define DUMP_DP_TRACE 0
/*---------------------------------------------------------------------------
* Function definitions
@@ -2638,6 +2637,10 @@ static int __iw_softap_set_two_ints_getnone(struct net_device *dev,
value[1], value[2]);
if (value[1] == DUMP_DP_TRACE)
adf_dp_trace_dump_all(value[2]);
+ else if (value[1] == ENABLE_DP_TRACE_LIVE_MODE)
+ adf_dp_trace_enable_live_mode();
+ else if (value[1] == CLEAR_DP_TRACE_BUFFER)
+ adf_dp_trace_clear_buffer();
else
hddLog(LOGE, "unexpected value for dump_dp_trace");
break;
@@ -6339,7 +6342,7 @@ static const struct iw_priv_args hostapd_private_args[] = {
{ QCSAP_IOCTL_STOPBSS,
IW_PRIV_TYPE_BYTE | IW_PRIV_SIZE_FIXED, 0, "stopbss" },
{ QCSAP_IOCTL_VERSION, 0,
- IW_PRIV_TYPE_CHAR | QCSAP_MAX_WSC_IE, "version" },
+ IW_PRIV_TYPE_CHAR | WE_MAX_STR_LEN, "version" },
{ QCSAP_IOCTL_GET_STA_INFO, 0,
IW_PRIV_TYPE_CHAR | WE_SAP_MAX_STA_INFO, "get_sta_info" },
{ QCSAP_IOCTL_GET_WPS_PBC_PROBE_REQ_IES,
diff --git a/CORE/HDD/src/wlan_hdd_main.c b/CORE/HDD/src/wlan_hdd_main.c
index f30ef00eb49d..b3e855aad8a7 100644
--- a/CORE/HDD/src/wlan_hdd_main.c
+++ b/CORE/HDD/src/wlan_hdd_main.c
@@ -9871,9 +9871,14 @@ static void __hdd_set_multicast_list(struct net_device *dev)
{
mc_count = netdev_mc_count(dev);
hddLog(VOS_TRACE_LEVEL_INFO,
- "%s: mc_count = %u", __func__, mc_count);
+ "%s: mc_count : %u, max_mc_addr_list : %d",
+ __func__, mc_count, pHddCtx->max_mc_addr_list);
netdev_for_each_mc_addr(ha, dev) {
+ hddLog(VOS_TRACE_LEVEL_INFO,
+ FL("ha_addr[%d] "MAC_ADDRESS_STR),
+ i, MAC_ADDR_ARRAY(ha->addr));
+
if (i == mc_count || i == pHddCtx->max_mc_addr_list)
break;
/*
@@ -11807,7 +11812,7 @@ VOS_STATUS hdd_start_all_adapters( hdd_context_t *pHddCtx )
pAdapter->sessionCtx.station.hdd_ReassocScenario = VOS_FALSE;
/* indicate disconnected event to nl80211 */
- wlan_hdd_cfg80211_indicate_disconnect(pAdapter->dev, true,
+ wlan_hdd_cfg80211_indicate_disconnect(pAdapter->dev, false,
WLAN_REASON_UNSPECIFIED);
}
else if (eConnectionState_Connecting == connState)
@@ -15859,7 +15864,8 @@ static void hdd_driver_exit(void)
pHddCtx->driver_being_stopped = false;
#ifdef QCA_PKT_PROTO_TRACE
- vos_pkt_proto_trace_close();
+ if (VOS_FTM_MODE != hdd_get_conparam())
+ vos_pkt_proto_trace_close();
#endif /* QCA_PKT_PROTO_TRACE */
while(pHddCtx->isLogpInProgress ||
vos_is_logp_in_progress(VOS_MODULE_ID_VOSS, NULL)) {
diff --git a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
index e0adb662ee3a..abccb6fe25c6 100644
--- a/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_softap_tx_rx.c
@@ -390,15 +390,15 @@ int __hdd_softap_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
NBUF_SET_PACKET_TRACK(skb, NBUF_TX_PKT_DATA_TRACK);
NBUF_UPDATE_TX_PKT_COUNT(skb, NBUF_TX_PKT_HDD);
- adf_dp_trace_set_track(skb);
- DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_HDD_PACKET_PTR_RECORD,
- (uint8_t *)&skb->data, sizeof(skb->data)));
- DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_HDD_PACKET_RECORD,
- (uint8_t *)skb->data, skb->len));
+ adf_dp_trace_set_track(skb, ADF_TX);
+ DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD,
+ (uint8_t *)&skb->data, sizeof(skb->data), ADF_TX));
+ DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_HDD_TX_PACKET_RECORD,
+ (uint8_t *)skb->data, skb->len, ADF_TX));
if (skb->len > ADF_DP_TRACE_RECORD_SIZE)
- DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_HDD_PACKET_RECORD,
+ DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_HDD_TX_PACKET_RECORD,
(uint8_t *)&skb->data[ADF_DP_TRACE_RECORD_SIZE],
- (skb->len - ADF_DP_TRACE_RECORD_SIZE)));
+ (skb->len - ADF_DP_TRACE_RECORD_SIZE), ADF_TX));
skb = skb_next;
continue;
@@ -468,7 +468,7 @@ static void __hdd_softap_tx_timeout(struct net_device *dev)
int i = 0;
DPTRACE(adf_dp_trace(NULL, ADF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT,
- NULL, 0));
+ NULL, 0, ADF_TX));
hdd_ctx = WLAN_HDD_GET_CTX(adapter);
if (hdd_ctx->isLogpInProgress) {
@@ -835,8 +835,11 @@ VOS_STATUS hdd_softap_rx_packet_cbk(v_VOID_t *vosContext,
++pAdapter->stats.rx_packets;
pAdapter->stats.rx_bytes += skb->len;
- adf_dp_trace_log_pkt(pAdapter->sessionId, skb,
- WIFI_EVENT_DRIVER_EAPOL_FRAME_RECEIVED);
+ DPTRACE(adf_dp_trace(rxBuf,
+ ADF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD,
+ adf_nbuf_data_addr(rxBuf),
+ sizeof(adf_nbuf_data(rxBuf)), ADF_RX));
+
#ifdef QCA_PKT_PROTO_TRACE
if ((pHddCtx->cfg_ini->gEnableDebugLog & VOS_PKT_TRAC_TYPE_EAPOL) ||
(pHddCtx->cfg_ini->gEnableDebugLog & VOS_PKT_TRAC_TYPE_DHCP)) {
diff --git a/CORE/HDD/src/wlan_hdd_tdls.c b/CORE/HDD/src/wlan_hdd_tdls.c
index ed7016db4b80..4c6acb27ec17 100644
--- a/CORE/HDD/src/wlan_hdd_tdls.c
+++ b/CORE/HDD/src/wlan_hdd_tdls.c
@@ -2198,20 +2198,19 @@ void wlan_hdd_tdls_connection_callback(hdd_adapter_t *pAdapter)
void wlan_hdd_tdls_disconnection_callback(hdd_adapter_t *pAdapter)
{
- tdlsCtx_t *pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter);
- hdd_context_t *pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
-
- if ((NULL == pHddCtx) || (NULL == pHddTdlsCtx))
- {
- VOS_TRACE(VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_ERROR,
- FL("pHddCtx or pHddTdlsCtx points to NULL"));
- return;
- }
+ tdlsCtx_t *pHddTdlsCtx;
+ hdd_context_t *pHddCtx;
VOS_TRACE( VOS_MODULE_ID_HDD, VOS_TRACE_LEVEL_INFO,"%s", __func__);
+ pHddCtx = WLAN_HDD_GET_CTX(pAdapter);
+
+ if (0 != wlan_hdd_validate_context(pHddCtx))
+ return;
+
mutex_lock(&pHddCtx->tdls_lock);
+ pHddTdlsCtx = WLAN_HDD_GET_TDLS_CTX_PTR(pAdapter);
if (NULL == pHddTdlsCtx)
{
mutex_unlock(&pHddCtx->tdls_lock);
diff --git a/CORE/HDD/src/wlan_hdd_tx_rx.c b/CORE/HDD/src/wlan_hdd_tx_rx.c
index 7cd0b3f1a2b0..f5df394f8927 100644
--- a/CORE/HDD/src/wlan_hdd_tx_rx.c
+++ b/CORE/HDD/src/wlan_hdd_tx_rx.c
@@ -358,11 +358,11 @@ void hdd_tx_resume_cb(void *adapter_context,
void hdd_drop_skb(hdd_adapter_t *adapter, struct sk_buff *skb)
{
DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_DROP_PACKET_RECORD,
- (uint8_t *)skb->data, skb->len));
+ (uint8_t *)skb->data, skb->len, ADF_TX));
if (skb->len > ADF_DP_TRACE_RECORD_SIZE)
DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_DROP_PACKET_RECORD,
(uint8_t *)&skb->data[ADF_DP_TRACE_RECORD_SIZE],
- (skb->len - ADF_DP_TRACE_RECORD_SIZE)));
+ (skb->len - ADF_DP_TRACE_RECORD_SIZE), ADF_TX));
++adapter->stats.tx_dropped;
++adapter->hdd_stats.hddTxRxStats.txXmitDropped;
@@ -385,12 +385,12 @@ void hdd_drop_skb_list(hdd_adapter_t *adapter, struct sk_buff *skb,
while (skb) {
DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_DROP_PACKET_RECORD,
- (uint8_t *)skb->data, skb->len));
+ (uint8_t *)skb->data, skb->len, ADF_TX));
if (skb->len > ADF_DP_TRACE_RECORD_SIZE)
DPTRACE(adf_dp_trace(skb,
ADF_DP_TRACE_DROP_PACKET_RECORD,
(uint8_t *)&skb->data[ADF_DP_TRACE_RECORD_SIZE],
- (skb->len - ADF_DP_TRACE_RECORD_SIZE)));
+ (skb->len - ADF_DP_TRACE_RECORD_SIZE), ADF_TX));
++adapter->stats.tx_dropped;
++adapter->hdd_stats.hddTxRxStats.txXmitDropped;
@@ -633,20 +633,19 @@ int __hdd_hard_start_xmit(struct sk_buff *skb, struct net_device *dev)
list_tail = list_tail->next;
}
vos_mem_zero(skb->cb, sizeof(skb->cb));
- adf_dp_trace_log_pkt(pAdapter->sessionId, skb,
- WIFI_EVENT_DRIVER_EAPOL_FRAME_TRANSMIT_REQUESTED);
+ adf_dp_trace_log_pkt(pAdapter->sessionId, skb, ADF_TX);
NBUF_SET_PACKET_TRACK(skb, NBUF_TX_PKT_DATA_TRACK);
NBUF_UPDATE_TX_PKT_COUNT(skb, NBUF_TX_PKT_HDD);
- adf_dp_trace_set_track(skb);
- DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_HDD_PACKET_PTR_RECORD,
- (uint8_t *)&skb->data, sizeof(skb->data)));
- DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_HDD_PACKET_RECORD,
- (uint8_t *)skb->data, skb->len));
+ adf_dp_trace_set_track(skb, ADF_TX);
+ DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD,
+ (uint8_t *)&skb->data, sizeof(skb->data), ADF_TX));
+ DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_HDD_TX_PACKET_RECORD,
+ (uint8_t *)skb->data, skb->len, ADF_TX));
if (skb->len > ADF_DP_TRACE_RECORD_SIZE)
- DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_HDD_PACKET_RECORD,
+ DPTRACE(adf_dp_trace(skb, ADF_DP_TRACE_HDD_TX_PACKET_RECORD,
(uint8_t *)&skb->data[ADF_DP_TRACE_RECORD_SIZE],
- (skb->len - ADF_DP_TRACE_RECORD_SIZE)));
+ (skb->len - ADF_DP_TRACE_RECORD_SIZE), ADF_TX));
skb = skb_next;
continue;
@@ -824,7 +823,7 @@ static void __hdd_tx_timeout(struct net_device *dev)
hddLog(LOGE, FL("Transmission timeout occurred jiffies %lu trans_start %lu"),
jiffies, dev->trans_start);
DPTRACE(adf_dp_trace(NULL, ADF_DP_TRACE_HDD_TX_TIMEOUT,
- NULL, 0));
+ NULL, 0, ADF_TX));
/*
* Getting here implies we disabled the TX queues for too long. Queues are
* disabled either because of disassociation or low resource scenarios. In
@@ -1229,8 +1228,10 @@ VOS_STATUS hdd_rx_packet_cbk(v_VOID_t *vosContext,
continue;
}
- adf_dp_trace_log_pkt(pAdapter->sessionId, skb,
- WIFI_EVENT_DRIVER_EAPOL_FRAME_RECEIVED);
+ DPTRACE(adf_dp_trace(rxBuf,
+ ADF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD,
+ adf_nbuf_data_addr(rxBuf),
+ sizeof(adf_nbuf_data(rxBuf)), ADF_RX));
#ifdef QCA_PKT_PROTO_TRACE
if ((pHddCtx->cfg_ini->gEnableDebugLog & VOS_PKT_TRAC_TYPE_EAPOL) ||
diff --git a/CORE/HDD/src/wlan_hdd_wext.c b/CORE/HDD/src/wlan_hdd_wext.c
index e49ea8ed4996..fd738dac6bce 100644
--- a/CORE/HDD/src/wlan_hdd_wext.c
+++ b/CORE/HDD/src/wlan_hdd_wext.c
@@ -458,7 +458,6 @@ static const hdd_freq_chan_map_t freq_chan_map[] = { {2412, 1}, {2417, 2},
#endif
#define WE_SET_MON_MODE_CHAN 3
#define WE_DUMP_DP_TRACE_LEVEL 4
-#define DUMP_DP_TRACE 0
#define WLAN_STATS_INVALID 0
#define WLAN_STATS_RETRY_CNT 1
@@ -4793,48 +4792,12 @@ static int iw_get_nick(struct net_device *dev,
* __get_wireless_stats() - get wireless stats
* @dev: pointer to net_device
*
- * Return: pointer to iw_statistics on success, NULL otherwise
+ * Return: %NULL
*/
static struct iw_statistics *__get_wireless_stats(struct net_device *dev)
{
- hdd_adapter_t *adapter = WLAN_HDD_GET_PRIV_PTR(dev);
- hdd_context_t *hdd_ctx = WLAN_HDD_GET_CTX(adapter);
- hdd_wext_state_t *wext_state = WLAN_HDD_GET_WEXT_STATE_PTR(adapter);
- hdd_station_ctx_t *hdd_sta_ctx;
- v_S7_t snr = 0, rssi = 0;
- int status;
-
ENTER();
-
- status = wlan_hdd_validate_context(hdd_ctx);
- if (0 != status)
- return NULL;
-
- hdd_sta_ctx = WLAN_HDD_GET_STATION_CTX_PTR(adapter);
- if (eConnectionState_Associated != hdd_sta_ctx->conn_info.connState) {
- hddLog(VOS_TRACE_LEVEL_INFO,
- FL("not in associated state: %d"),
- hdd_sta_ctx->conn_info.connState);
- return NULL;
- }
-
- wlan_hdd_get_station_stats(adapter);
- wlan_hdd_get_snr(adapter, &snr);
- wlan_hdd_get_rssi(adapter, &rssi);
-
- vos_mem_zero(&wext_state->iw_stats, sizeof(wext_state->iw_stats));
- wext_state->iw_stats.status = 0;
- wext_state->iw_stats.qual.qual = snr;
- wext_state->iw_stats.qual.level = rssi;
- wext_state->iw_stats.qual.noise = rssi - snr;
- wext_state->iw_stats.discard.code = 0;
- wext_state->iw_stats.discard.retries = 0;
- wext_state->iw_stats.miss.beacon = 0;
- wext_state->iw_stats.qual.updated =
- IW_QUAL_ALL_UPDATED | IW_QUAL_DBM;
-
- EXIT();
- return &(wext_state->iw_stats);
+ return NULL;
}
/**
@@ -4855,6 +4818,7 @@ static struct iw_statistics *get_wireless_stats(struct net_device *dev)
return iw_stats;
}
+
/**
* __iw_set_encode() - SIOCSIWENCODE ioctl handler
* @dev: device upon which the ioctl was received
@@ -10335,6 +10299,11 @@ void wlan_hdd_set_mc_addr_list(hdd_adapter_t *pAdapter, v_U8_t set)
sme_8023MulticastList(hHal, pAdapter->sessionId,
pMulticastAddrs);
}
+ else {
+ hddLog(VOS_TRACE_LEVEL_INFO,
+ FL("MC address list not sent to FW, cnt: %d"),
+ pAdapter->mc_addr_list.mc_cnt);
+ }
}
else
{
@@ -11397,6 +11366,10 @@ static int __iw_set_two_ints_getnone(struct net_device *dev,
value[1], value[2]);
if (value[1] == DUMP_DP_TRACE)
adf_dp_trace_dump_all(value[2]);
+ else if (value[1] == ENABLE_DP_TRACE_LIVE_MODE)
+ adf_dp_trace_enable_live_mode();
+ else if (value[1] == CLEAR_DP_TRACE_BUFFER)
+ adf_dp_trace_clear_buffer();
else
hddLog(LOGE, "unexpected value for dump_dp_trace");
break;
diff --git a/CORE/MAC/inc/aniGlobal.h b/CORE/MAC/inc/aniGlobal.h
index af55de9950a1..aac66ec46068 100644
--- a/CORE/MAC/inc/aniGlobal.h
+++ b/CORE/MAC/inc/aniGlobal.h
@@ -99,6 +99,8 @@ typedef struct sAniSirGlobal *tpAniSirGlobal;
// New HAL API interface defs.
#include "logDump.h"
+#include "ol_txrx_ctrl_api.h"
+
//Check if this definition can actually move here from halInternal.h even for Volans. In that case
//this featurization can be removed.
#define PMAC_STRUCT( _hHal ) ( (tpAniSirGlobal)_hHal )
@@ -1131,6 +1133,8 @@ typedef struct sMacOpenParameters
bool force_target_assert_enabled;
uint16_t pkt_bundle_timer_value;
uint16_t pkt_bundle_size;
+
+ struct ol_tx_sched_wrr_ac_specs_t ac_specs[OL_TX_NUM_WMM_AC];
} tMacOpenParameters;
typedef struct sHalMacStartParameters
diff --git a/CORE/MAC/inc/qwlan_version.h b/CORE/MAC/inc/qwlan_version.h
index ff53ffd151a7..bc3a01579cc6 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 92
+#define QWLAN_VERSION_BUILD 95
-#define QWLAN_VERSIONSTR "4.0.11.92"
+#define QWLAN_VERSIONSTR "4.0.11.95"
#define AR6320_REV1_VERSION 0x5000000
diff --git a/CORE/SERVICES/BMI/ol_fw.c b/CORE/SERVICES/BMI/ol_fw.c
index b8373d4878a6..7b194bab0e73 100644
--- a/CORE/SERVICES/BMI/ol_fw.c
+++ b/CORE/SERVICES/BMI/ol_fw.c
@@ -1087,10 +1087,7 @@ static void ramdump_work_handler(struct work_struct *ramdump)
goto out_fail;
}
- ramdump_scn->ramdump_size = DRAM_SIZE + IRAM_SIZE + AXI_SIZE;
- ramdump_scn->ramdump_base =
- vos_mem_malloc(ramdump_scn->ramdump_size);
-
+ /* Buffer for ramdump should be pre-allocated when probing SDIO */
if (!ramdump_scn->ramdump_base) {
pr_err("%s: fail to alloc mem for FW RAM dump\n",
__func__);
@@ -1141,13 +1138,6 @@ out_fail:
#endif
#endif
-#ifdef TARGET_DUMP_FOR_NON_QC_PLATFORM
- if (ramdump_scn->ramdump_base) {
- vfree(ramdump_scn->ramdump_base);
- ramdump_scn->ramdump_base = NULL;
- ramdump_scn->ramdump_size = 0;
- }
-#endif
vos_set_logp_in_progress(VOS_MODULE_ID_VOSS, FALSE);
return;
}
diff --git a/CORE/SERVICES/COMMON/adf/adf_trace.c b/CORE/SERVICES/COMMON/adf/adf_trace.c
index 8311147a7aec..0a4fddb95ff3 100644
--- a/CORE/SERVICES/COMMON/adf/adf_trace.c
+++ b/CORE/SERVICES/COMMON/adf/adf_trace.c
@@ -75,9 +75,10 @@ void adf_dp_trace_init(void)
g_adf_dp_trace_data.head = INVALID_ADF_DP_TRACE_ADDR;
g_adf_dp_trace_data.tail = INVALID_ADF_DP_TRACE_ADDR;
g_adf_dp_trace_data.num = 0;
- g_adf_dp_trace_data.proto_bitmap = 0;
+ g_adf_dp_trace_data.proto_bitmap = NBUF_PKT_TRAC_TYPE_DHCP |
+ NBUF_PKT_TRAC_TYPE_EAPOL;
g_adf_dp_trace_data.no_of_record = 0;
- g_adf_dp_trace_data.verbosity = ADF_DP_TRACE_VERBOSITY_DEFAULT;
+ g_adf_dp_trace_data.verbosity = ADF_DP_TRACE_VERBOSITY_LOW;
g_adf_dp_trace_data.enable = true;
for (i = 0; i < ADF_DP_TRACE_MAX; i++)
@@ -155,17 +156,26 @@ uint8_t adf_dp_get_proto_bitmap(void)
/**
* adf_dp_trace_set_track() - Marks whether the packet needs to be traced
* @nbuf : defines the netbuf
+ * @dir: direction
*
* Return: None
*/
-void adf_dp_trace_set_track(adf_nbuf_t nbuf)
+void adf_dp_trace_set_track(adf_nbuf_t nbuf, enum adf_proto_dir dir)
{
+ uint32_t count = 0;
+
spin_lock_bh(&l_dp_trace_lock);
- g_adf_dp_trace_data.count++;
+ if (ADF_TX == dir)
+ count = ++g_adf_dp_trace_data.tx_count;
+ else if (ADF_RX == dir)
+ count = ++g_adf_dp_trace_data.rx_count;
+
if ((g_adf_dp_trace_data.no_of_record != 0) &&
- (g_adf_dp_trace_data.count %
- g_adf_dp_trace_data.no_of_record == 0)) {
- ADF_NBUF_SET_DP_TRACE(nbuf, 1);
+ (count % g_adf_dp_trace_data.no_of_record == 0)) {
+ if (ADF_TX == dir)
+ ADF_NBUF_CB_TX_DP_TRACE(nbuf) = 1;
+ else if (ADF_RX == dir)
+ ADF_NBUF_CB_RX_DP_TRACE(nbuf) = 1;
}
spin_unlock_bh(&l_dp_trace_lock);
}
@@ -183,10 +193,10 @@ static void dump_hex_trace(char *str, uint8_t *buf, uint8_t buf_len)
uint8_t i;
/* Dump the bytes in the last line */
- printk("%s: ", str);
+ adf_os_print("%s: ", str);
for (i = 0; i < buf_len; i++)
- printk("%02x ", buf[i]);
- printk("\n");
+ adf_os_print("%02x ", buf[i]);
+ adf_os_print("\n");
}
/**
@@ -206,32 +216,40 @@ const char *adf_dp_code_to_string(enum ADF_DP_TRACE_ID code)
return "DHCP:";
case ADF_DP_TRACE_ARP_PACKET_RECORD:
return "ARP:";
- case ADF_DP_TRACE_HDD_PACKET_PTR_RECORD:
- return "HDD: PTR:";
- case ADF_DP_TRACE_HDD_PACKET_RECORD:
- return "HDD: DATA:";
+ case ADF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD:
+ return "HDD: TX: PTR:";
+ case ADF_DP_TRACE_HDD_TX_PACKET_RECORD:
+ return "HDD: TX: DATA:";
case ADF_DP_TRACE_CE_PACKET_PTR_RECORD:
- return "CE: PTR:";
+ return "CE: TX: PTR:";
case ADF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD:
- return "CE:F: PTR:";
+ return "CE: TX: FAST: PTR:";
case ADF_DP_TRACE_FREE_PACKET_PTR_RECORD:
- return "FREE: PTR:";
+ return "FREE: TX: PTR:";
+ case ADF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD:
+ return "HTT: RX: PTR:";
+ case ADF_DP_TRACE_RX_OFFLOAD_HTT_PACKET_PTR_RECORD:
+ return "HTT: RX: OF: PTR:";
+ case ADF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD:
+ return "HDD: RX: PTR:";
case ADF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD:
- return "TX:Q: PTR:";
+ return "TXRX: TX: Q: PTR:";
case ADF_DP_TRACE_TXRX_PACKET_PTR_RECORD:
- return "TX: PTR:";
+ return "TXRX: TX: PTR:";
case ADF_DP_TRACE_TXRX_FAST_PACKET_PTR_RECORD:
- return "TX:F: PTR:";
+ return "TXRX: TX: FAST: PTR:";
case ADF_DP_TRACE_HTT_PACKET_PTR_RECORD:
- return "HTT: PTR:";
+ return "HTT: TX: PTR:";
case ADF_DP_TRACE_HTC_PACKET_PTR_RECORD:
- return "HTC: PTR:";
+ return "HTC: TX: PTR:";
case ADF_DP_TRACE_HIF_PACKET_PTR_RECORD:
- return "HIF: PTR:";
+ return "HIF: TX: PTR:";
+ case ADF_DP_TRACE_RX_TXRX_PACKET_PTR_RECORD:
+ return "TXRX: RX: PTR:";
case ADF_DP_TRACE_HDD_TX_TIMEOUT:
- return "STA: TO:";
+ return "HDD: STA: TO:";
case ADF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT:
- return "SAP: TO:";
+ return "HDD: SAP: TO:";
default:
return "Invalid";
}
@@ -247,9 +265,9 @@ const char *adf_dp_dir_to_str(enum adf_proto_dir dir)
{
switch (dir) {
case ADF_TX:
- return "->";
+ return " --> ";
case ADF_RX:
- return "<-";
+ return " <-- ";
default:
return "invalid";
}
@@ -324,7 +342,8 @@ const char *adf_dp_subtype_to_str(enum adf_proto_subtype subtype)
*
* Return: true/false
*/
-bool adf_dp_enable_check(adf_nbuf_t nbuf, enum ADF_DP_TRACE_ID code)
+bool adf_dp_enable_check(adf_nbuf_t nbuf, enum ADF_DP_TRACE_ID code,
+ enum adf_proto_dir dir)
{
/* Return when Dp trace is not enabled */
if (!g_adf_dp_trace_data.enable)
@@ -335,7 +354,8 @@ bool adf_dp_enable_check(adf_nbuf_t nbuf, enum ADF_DP_TRACE_ID code)
if ((nbuf) && ((NBUF_GET_PACKET_TRACK(nbuf) !=
NBUF_TX_PKT_DATA_TRACK) ||
- (!ADF_NBUF_GET_DP_TRACE(nbuf))))
+ ((dir == ADF_TX) && (ADF_NBUF_CB_TX_DP_TRACE(nbuf) == 0)) ||
+ ((dir == ADF_RX) && (ADF_NBUF_CB_RX_DP_TRACE(nbuf) == 0))))
return false;
return true;
@@ -346,13 +366,15 @@ bool adf_dp_enable_check(adf_nbuf_t nbuf, enum ADF_DP_TRACE_ID code)
* @code: dptrace code
* @data: data pointer
* @size: size of buffer
+ * @print: print it in kmsg
*
* Return: none
*/
void adf_dp_add_record(enum ADF_DP_TRACE_ID code,
- uint8_t *data, uint8_t size)
+ uint8_t *data, uint8_t size, bool print)
{
struct adf_dp_trace_record_s *rec = NULL;
+ int index;
spin_lock_bh(&l_dp_trace_lock);
@@ -381,6 +403,7 @@ void adf_dp_add_record(enum ADF_DP_TRACE_ID code,
}
rec = &g_adf_dp_trace_tbl[g_adf_dp_trace_data.tail];
+ index = g_adf_dp_trace_data.tail;
rec->code = code;
rec->size = 0;
if (data != NULL && size > 0) {
@@ -394,18 +417,21 @@ void adf_dp_add_record(enum ADF_DP_TRACE_ID code,
rec->time = adf_os_gettimestamp();
rec->pid = (in_interrupt() ? 0 : current->pid);
spin_unlock_bh(&l_dp_trace_lock);
+
+ if (g_adf_dp_trace_data.live_mode || print == true)
+ adf_dp_trace_cb_table[rec->code] (rec, index);
}
/**
* adf_log_eapol_pkt() - log EAPOL packet
* @session_id: vdev_id
* @skb: skb pointer
- * @event_type: event_type
+ * @dir: direction
*
* Return: true/false
*/
bool adf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb,
- uint8_t event_type)
+ enum adf_proto_dir dir)
{
enum adf_proto_subtype subtype;
@@ -417,9 +443,11 @@ bool adf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb,
session_id, (skb->data + ADF_NBUF_SRC_MAC_OFFSET),
(skb->data + ADF_NBUF_DEST_MAC_OFFSET),
ADF_PROTO_TYPE_EAPOL, subtype,
- event_type == ADF_RX ?
- ADF_RX : ADF_TX));
- ADF_NBUF_SET_DP_TRACE(skb, 1);
+ dir));
+ if (ADF_TX == dir)
+ ADF_NBUF_CB_TX_DP_TRACE(skb) = 1;
+ else if (ADF_RX == dir)
+ ADF_NBUF_CB_RX_DP_TRACE(skb) = 1;
return true;
}
return false;
@@ -429,12 +457,12 @@ bool adf_log_eapol_pkt(uint8_t session_id, struct sk_buff *skb,
* adf_log_dhcp_pkt() - log DHCP packet
* @session_id: vdev_id
* @skb: skb pointer
- * @event_type: event_type
+ * @dir: direction
*
* Return: true/false
*/
bool adf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb,
- uint8_t event_type)
+ enum adf_proto_dir dir)
{
enum adf_proto_subtype subtype = ADF_PROTO_INVALID;
@@ -446,9 +474,12 @@ bool adf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb,
session_id, (skb->data + ADF_NBUF_SRC_MAC_OFFSET),
(skb->data + ADF_NBUF_DEST_MAC_OFFSET),
ADF_PROTO_TYPE_DHCP, subtype,
- event_type == ADF_RX ?
- ADF_RX : ADF_TX));
- ADF_NBUF_SET_DP_TRACE(skb, 1);
+ dir));
+ if (ADF_TX == dir)
+ ADF_NBUF_CB_TX_DP_TRACE(skb) = 1;
+ else if (ADF_RX == dir)
+ ADF_NBUF_CB_RX_DP_TRACE(skb) = 1;
+
return true;
}
return false;
@@ -458,12 +489,12 @@ bool adf_log_dhcp_pkt(uint8_t session_id, struct sk_buff *skb,
* adf_log_arp_pkt() - log ARP packet
* @session_id: vdev_id
* @skb: skb pointer
- * @event_type: event_type
+ * @dir: direction
*
* Return: true/false
*/
bool adf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb,
- uint8_t event_type)
+ enum adf_proto_dir dir)
{
enum adf_proto_subtype proto_subtype;
@@ -476,9 +507,12 @@ bool adf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb,
session_id, (skb->data + ADF_NBUF_SRC_MAC_OFFSET),
(skb->data + ADF_NBUF_DEST_MAC_OFFSET),
ADF_PROTO_TYPE_ARP, proto_subtype,
- event_type == ADF_RX ?
- ADF_RX : ADF_TX));
- ADF_NBUF_SET_DP_TRACE(skb, 1);
+ dir));
+ if (ADF_TX == dir)
+ ADF_NBUF_CB_TX_DP_TRACE(skb) = 1;
+ else if (ADF_RX == dir)
+ ADF_NBUF_CB_RX_DP_TRACE(skb) = 1;
+
return true;
}
return false;
@@ -488,20 +522,20 @@ bool adf_log_arp_pkt(uint8_t session_id, struct sk_buff *skb,
* adf_dp_trace_log_pkt() - log packet type enabled through iwpriv
* @session_id: vdev_id
* @skb: skb pointer
- * @event_type: event type
+ * @dir: direction
*
* Return: none
*/
void adf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb,
- uint8_t event_type)
+ enum adf_proto_dir dir)
{
if (adf_dp_get_proto_bitmap()) {
if (adf_log_arp_pkt(session_id,
- skb, event_type) == false) {
+ skb, dir) == false) {
if (adf_log_dhcp_pkt(session_id,
- skb, event_type) == false) {
+ skb, dir) == false) {
if (adf_log_eapol_pkt(session_id,
- skb, event_type) == false) {
+ skb, dir) == false) {
return;
}
}
@@ -522,10 +556,10 @@ void adf_dp_display_proto_pkt(struct adf_dp_trace_record_s *record,
struct adf_dp_trace_proto_buf *buf =
(struct adf_dp_trace_proto_buf *)record->data;
- adf_os_print("%04d: %012llu: %s vdev_id %d\n", index,
+ adf_os_print("DPT: %04d: %012llu: %s vdev_id %d\n", index,
record->time, adf_dp_code_to_string(record->code),
buf->vdev_id);
- adf_os_print("SA: " MAC_ADDRESS_STR " %s DA: " MAC_ADDRESS_STR
+ adf_os_print("DPT: SA: " MAC_ADDRESS_STR " %s DA: " MAC_ADDRESS_STR
" Type %s Subtype %s\n",
MAC_ADDR_ARRAY(buf->sa.bytes), adf_dp_dir_to_str(buf->dir),
MAC_ADDR_ARRAY(buf->da.bytes), adf_dp_type_to_str(buf->type),
@@ -551,7 +585,7 @@ void adf_dp_trace_proto_pkt(enum ADF_DP_TRACE_ID code, uint8_t vdev_id,
struct adf_dp_trace_proto_buf buf;
int buf_size = sizeof(struct adf_dp_trace_ptr_buf);
- if (adf_dp_enable_check(NULL, code) == false)
+ if (adf_dp_enable_check(NULL, code, dir) == false)
return;
if (buf_size > ADF_DP_TRACE_RECORD_SIZE)
@@ -563,7 +597,7 @@ void adf_dp_trace_proto_pkt(enum ADF_DP_TRACE_ID code, uint8_t vdev_id,
buf.type = type;
buf.subtype = subtype;
buf.vdev_id = vdev_id;
- adf_dp_add_record(code, (uint8_t *)&buf, buf_size);
+ adf_dp_add_record(code, (uint8_t *)&buf, buf_size, true);
}
/**
@@ -579,9 +613,15 @@ void adf_dp_display_ptr_record(struct adf_dp_trace_record_s *record,
struct adf_dp_trace_ptr_buf *buf =
(struct adf_dp_trace_ptr_buf *)record->data;
- adf_os_print("%04d: %012llu: %s msdu_id: %d, status: %d", index,
- record->time, adf_dp_code_to_string(record->code),
- buf->msdu_id, buf->status);
+ if (record->code == ADF_DP_TRACE_FREE_PACKET_PTR_RECORD)
+ adf_os_print("%04d: %012llu: %s msdu_id: %d, status: %d\n", index,
+ record->time, adf_dp_code_to_string(record->code),
+ buf->msdu_id, buf->status);
+ else
+ adf_os_print("%04d: %012llu: %s msdu_id: %d, vdev_id: %d\n", index,
+ record->time, adf_dp_code_to_string(record->code),
+ buf->msdu_id, buf->status);
+
dump_hex_trace("cookie", (uint8_t *)&buf->cookie, sizeof(buf->cookie));
}
@@ -601,7 +641,7 @@ void adf_dp_trace_ptr(adf_nbuf_t nbuf, enum ADF_DP_TRACE_ID code,
struct adf_dp_trace_ptr_buf buf;
int buf_size = sizeof(struct adf_dp_trace_ptr_buf);
- if (adf_dp_enable_check(nbuf, code) == false)
+ if (adf_dp_enable_check(nbuf, code, ADF_TX) == false)
return;
if (buf_size > ADF_DP_TRACE_RECORD_SIZE)
@@ -610,7 +650,7 @@ void adf_dp_trace_ptr(adf_nbuf_t nbuf, enum ADF_DP_TRACE_ID code,
adf_os_mem_copy(&buf.cookie, data, size);
buf.msdu_id = msdu_id;
buf.status = status;
- adf_dp_add_record(code, (uint8_t *)&buf, buf_size);
+ adf_dp_add_record(code, (uint8_t *)&buf, buf_size, false);
}
/**
@@ -623,7 +663,7 @@ void adf_dp_trace_ptr(adf_nbuf_t nbuf, enum ADF_DP_TRACE_ID code,
void adf_dp_display_record(struct adf_dp_trace_record_s *pRecord,
uint16_t recIndex)
{
- adf_os_print("%04d: %012llu: %s", recIndex,
+ adf_os_print("DPT: %04d: %012llu: %s\n", recIndex,
pRecord->time, adf_dp_code_to_string(pRecord->code));
switch (pRecord->code) {
case ADF_DP_TRACE_HDD_TX_TIMEOUT:
@@ -634,7 +674,7 @@ void adf_dp_display_record(struct adf_dp_trace_record_s *pRecord,
VOS_TRACE(VOS_MODULE_ID_ADF, VOS_TRACE_LEVEL_ERROR,
"HDD SoftAP TX Timeout\n");
break;
- case ADF_DP_TRACE_HDD_PACKET_RECORD:
+ case ADF_DP_TRACE_HDD_TX_PACKET_RECORD:
dump_hex_trace("DATA", pRecord->data, pRecord->size);
break;
default:
@@ -652,12 +692,38 @@ void adf_dp_display_record(struct adf_dp_trace_record_s *pRecord,
* Return: None
*/
void adf_dp_trace(adf_nbuf_t nbuf, enum ADF_DP_TRACE_ID code,
- uint8_t *data, uint8_t size)
+ uint8_t *data, uint8_t size, enum adf_proto_dir dir)
{
- if (adf_dp_enable_check(nbuf, code) == false)
+
+ if (adf_dp_enable_check(nbuf, code, dir) == false)
return;
- adf_dp_add_record(code, data, size);
+ adf_dp_add_record(code, data, size, false);
+}
+
+/**
+ * adf_dp_trace_enable_live_mode() - enable live mode
+ *
+ * Return: none
+ */
+void adf_dp_trace_enable_live_mode(void)
+{
+ g_adf_dp_trace_data.live_mode = 1;
+}
+
+void adf_dp_trace_clear_buffer(void)
+{
+ g_adf_dp_trace_data.head = INVALID_ADF_DP_TRACE_ADDR;
+ g_adf_dp_trace_data.tail = INVALID_ADF_DP_TRACE_ADDR;
+ g_adf_dp_trace_data.num = 0;
+ g_adf_dp_trace_data.proto_bitmap = 0;
+ g_adf_dp_trace_data.no_of_record = 0;
+ g_adf_dp_trace_data.verbosity = ADF_DP_TRACE_VERBOSITY_DEFAULT;
+ g_adf_dp_trace_data.enable = true;
+
+ memset(g_adf_dp_trace_tbl, 0,
+ MAX_ADF_DP_TRACE_RECORDS * sizeof(struct adf_dp_trace_record_s));
+
}
/**
diff --git a/CORE/SERVICES/COMMON/adf/adf_trace.h b/CORE/SERVICES/COMMON/adf/adf_trace.h
index b426edd26ae2..e01cfbc17f7c 100644
--- a/CORE/SERVICES/COMMON/adf/adf_trace.h
+++ b/CORE/SERVICES/COMMON/adf/adf_trace.h
@@ -56,6 +56,11 @@
#define ADF_DP_TRACE_VERBOSITY_LOW 1
#define ADF_DP_TRACE_VERBOSITY_DEFAULT 0
+#define DUMP_DP_TRACE 0
+#define ENABLE_DP_TRACE_LIVE_MODE 1
+#define CLEAR_DP_TRACE_BUFFER 2
+
+
/**
* struct adf_mac_addr - mac address array
* @bytes: MAC address bytes
@@ -68,8 +73,8 @@ struct adf_mac_addr {
* enum ADF_DP_TRACE_ID - Generic ID to identify various events in data path
* @ADF_DP_TRACE_INVALID: Invalid ID
* @ADF_DP_TRACE_DROP_PACKET_RECORD: Dropped packet stored with this id
- * @ADF_DP_TRACE_HDD_PACKET_PTR_RECORD: nbuf->data ptr of HDD
- * @ADF_DP_TRACE_HDD_PACKET_RECORD: nbuf->data stored with this id
+ * @ADF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD: nbuf->data ptr of HDD
+ * @ADF_DP_TRACE_HDD_TX_PACKET_RECORD: nbuf->data stored with this id
* @ADF_DP_TRACE_CE_PACKET_PTR_RECORD: nbuf->data ptr of CE
* @ADF_DP_TRACE_CE_PACKET_RECORD: nbuf->data stored with this id
* @ADF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD: nbuf->data ptr of txrx queue
@@ -91,10 +96,13 @@ enum ADF_DP_TRACE_ID {
ADF_DP_TRACE_DEFAULT_VERBOSITY,
ADF_DP_TRACE_HDD_TX_TIMEOUT,
ADF_DP_TRACE_HDD_SOFTAP_TX_TIMEOUT,
- ADF_DP_TRACE_HDD_PACKET_PTR_RECORD,
+ ADF_DP_TRACE_HDD_TX_PACKET_PTR_RECORD,
ADF_DP_TRACE_CE_PACKET_PTR_RECORD,
ADF_DP_TRACE_CE_FAST_PACKET_PTR_RECORD,
ADF_DP_TRACE_FREE_PACKET_PTR_RECORD,
+ ADF_DP_TRACE_RX_HTT_PACKET_PTR_RECORD,
+ ADF_DP_TRACE_RX_OFFLOAD_HTT_PACKET_PTR_RECORD,
+ ADF_DP_TRACE_RX_HDD_PACKET_PTR_RECORD,
ADF_DP_TRACE_LOW_VERBOSITY,
ADF_DP_TRACE_TXRX_QUEUE_PACKET_PTR_RECORD,
ADF_DP_TRACE_TXRX_PACKET_PTR_RECORD,
@@ -102,8 +110,9 @@ enum ADF_DP_TRACE_ID {
ADF_DP_TRACE_HTT_PACKET_PTR_RECORD,
ADF_DP_TRACE_HTC_PACKET_PTR_RECORD,
ADF_DP_TRACE_HIF_PACKET_PTR_RECORD,
+ ADF_DP_TRACE_RX_TXRX_PACKET_PTR_RECORD,
ADF_DP_TRACE_MED_VERBOSITY,
- ADF_DP_TRACE_HDD_PACKET_RECORD,
+ ADF_DP_TRACE_HDD_TX_PACKET_RECORD,
ADF_DP_TRACE_HIGH_VERBOSITY,
ADF_DP_TRACE_MAX
};
@@ -166,7 +175,9 @@ struct s_adf_dp_trace_data {
uint8_t no_of_record;
uint8_t verbosity;
bool enable;
- uint32_t count;
+ uint32_t tx_count;
+ uint32_t rx_count;
+ bool live_mode;
};
/* Function declarations and documenation */
@@ -174,9 +185,9 @@ struct s_adf_dp_trace_data {
void adf_dp_trace_init(void);
void adf_dp_trace_set_value(uint8_t proto_bitmap, uint8_t no_of_records,
uint8_t verbosity);
-void adf_dp_trace_set_track(adf_nbuf_t nbuf);
+void adf_dp_trace_set_track(adf_nbuf_t nbuf, enum adf_proto_dir dir);
void adf_dp_trace(adf_nbuf_t nbuf, enum ADF_DP_TRACE_ID code,
- uint8_t *data, uint8_t size);
+ uint8_t *data, uint8_t size, enum adf_proto_dir dir);
void adf_dp_trace_dump_all(uint32_t count);
typedef void (*tp_adf_dp_trace_cb)(struct adf_dp_trace_record_s* , uint16_t);
void adf_dp_display_record(struct adf_dp_trace_record_s *record,
@@ -194,7 +205,9 @@ adf_dp_trace_proto_pkt(enum ADF_DP_TRACE_ID code, uint8_t vdev_id,
void adf_dp_display_proto_pkt(struct adf_dp_trace_record_s *record,
uint16_t index);
void adf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb,
- uint8_t event_type);
+ enum adf_proto_dir dir);
+void adf_dp_trace_enable_live_mode(void);
+void adf_dp_trace_clear_buffer(void);
#else
static inline void adf_dp_trace_init(void)
@@ -206,12 +219,14 @@ static inline void adf_dp_trace_set_value(uint8_t proto_bitmap,
{
}
-static inline void adf_dp_trace_set_track(adf_nbuf_t nbuf)
+static inline void adf_dp_trace_set_track(adf_nbuf_t nbuf,
+ enum adf_proto_dir dir)
{
}
static inline void adf_dp_trace(adf_nbuf_t nbuf,
- enum ADF_DP_TRACE_ID code, uint8_t *data, uint8_t size)
+ enum ADF_DP_TRACE_ID code, uint8_t *data, uint8_t size,
+ enum adf_proto_dir dir)
{
}
@@ -254,10 +269,19 @@ adf_dp_display_proto_pkt(struct adf_dp_trace_record_s *record,
}
static inline void adf_dp_trace_log_pkt(uint8_t session_id, struct sk_buff *skb,
- uint8_t event_type)
+ enum adf_proto_dir dir)
{
}
+static inline
+void adf_dp_trace_enable_live_mode(void)
+{
+}
+
+static inline
+void adf_dp_trace_clear_buffer(void)
+{
+}
#endif
#endif /* __ADF_TRACE_H */
diff --git a/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h b/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h
index 1a48042bd43e..70fd459f891b 100644
--- a/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h
+++ b/CORE/SERVICES/COMMON/adf/linux/adf_nbuf_pvt.h
@@ -65,6 +65,17 @@ typedef void (*__adf_nbuf_callback_fn) (struct sk_buff *skb);
#define CVG_NBUF_MAX_EXTRA_FRAGS 2
typedef void (*adf_nbuf_trace_update_t)(char *);
+struct nbuf_rx_cb {
+ uint8_t dp_trace:1,
+ reserved:7;
+ uint8_t packet_trace;
+};
+
+#define ADF_NBUF_CB_RX_DP_TRACE(skb) \
+ (((struct nbuf_rx_cb*)((skb)->cb))->dp_trace)
+
+#define ADF_NBUF_CB_RX_PACKET_TRACE(skb) \
+ (((struct nbuf_rx_cb*)((skb)->cb))->packet_trace)
struct cvg_nbuf_cb {
/*
@@ -88,9 +99,10 @@ struct cvg_nbuf_cb {
* Store info for data path tracing
*/
struct {
- uint8_t packet_state;
- uint8_t packet_track;
- uint8_t dp_trace;
+ uint8_t packet_state: 4;
+ uint8_t packet_track: 2;
+ uint8_t dp_trace: 1;
+ uint8_t dp_trace_reserved: 1;
} trace;
/*
@@ -218,10 +230,7 @@ struct cvg_nbuf_cb {
#define NBUF_UPDATE_TX_PKT_COUNT(skb, PACKET_STATE) \
adf_nbuf_set_state(skb, PACKET_STATE)
-#define ADF_NBUF_SET_DP_TRACE(skb, enable) \
- (((struct cvg_nbuf_cb *)((skb)->cb))->trace.dp_trace \
- = enable)
-#define ADF_NBUF_GET_DP_TRACE(skb) \
+#define ADF_NBUF_CB_TX_DP_TRACE(skb) \
(((struct cvg_nbuf_cb *)((skb)->cb))->trace.dp_trace)
#define __adf_nbuf_get_num_frags(skb) \
diff --git a/CORE/SERVICES/COMMON/ol_cfg.h b/CORE/SERVICES/COMMON/ol_cfg.h
index 1aa590eb8a77..f6c562342783 100644
--- a/CORE/SERVICES/COMMON/ol_cfg.h
+++ b/CORE/SERVICES/COMMON/ol_cfg.h
@@ -39,6 +39,8 @@
#include "wlan_tgt_def_config.h"
#endif
+#include "ol_txrx_ctrl_api.h"
+
/**
* @brief format of data frames delivered to/from the WLAN driver by/to the OS
*/
@@ -92,6 +94,8 @@ struct txrx_pdev_cfg_t {
#endif /* IPA_UC_OFFLOAD */
uint16_t pkt_bundle_timer_value;
uint16_t pkt_bundle_size;
+
+ struct ol_tx_sched_wrr_ac_specs_t ac_specs[OL_TX_NUM_WMM_AC];
};
/**
@@ -537,4 +541,15 @@ int ol_cfg_get_bundle_size(ol_pdev_handle pdev)
}
#endif
+
+int ol_cfg_get_wrr_skip_weight(ol_pdev_handle pdev, int ac);
+
+uint32_t ol_cfg_get_credit_threshold(ol_pdev_handle pdev, int ac);
+
+uint16_t ol_cfg_get_send_limit(ol_pdev_handle pdev, int ac);
+
+int ol_cfg_get_credit_reserve(ol_pdev_handle pdev, int ac);
+
+int ol_cfg_get_discard_weight(ol_pdev_handle pdev, int ac);
+
#endif /* _OL_CFG__H_ */
diff --git a/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h b/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h
index 260c7b70b65f..cd2e7fed0ecd 100644
--- a/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h
+++ b/CORE/SERVICES/COMMON/ol_txrx_ctrl_api.h
@@ -247,12 +247,12 @@ ol_txrx_peer_update(ol_txrx_vdev_handle data_vdev, u_int8_t *peer_mac,
ol_txrx_peer_update_select_t select);
enum {
- OL_TX_WMM_AC_BE,
- OL_TX_WMM_AC_BK,
- OL_TX_WMM_AC_VI,
- OL_TX_WMM_AC_VO,
+ OL_TX_WMM_AC_BE,
+ OL_TX_WMM_AC_BK,
+ OL_TX_WMM_AC_VI,
+ OL_TX_WMM_AC_VO,
- OL_TX_NUM_WMM_AC
+ OL_TX_NUM_WMM_AC
};
/**
@@ -967,6 +967,30 @@ ol_txrx_peer_stats_copy(
#define ol_txrx_peer_stats_copy(pdev, peer, stats) A_ERROR /* failure */
#endif /* QCA_ENABLE_OL_TXRX_PEER_STATS */
+/**
+ * struct ol_tx_sched_wrr_ac_specs_t - the wrr ac specs params structure
+ * @wrr_skip_weight: map to ol_tx_sched_wrr_adv_category_info_t.specs.
+ * wrr_skip_weight
+ * @credit_threshold: map to ol_tx_sched_wrr_adv_category_info_t.specs.
+ * credit_threshold
+ * @send_limit: map to ol_tx_sched_wrr_adv_category_info_t.specs.
+ * send_limit
+ * @credit_reserve: map to ol_tx_sched_wrr_adv_category_info_t.specs.
+ * credit_reserve
+ * @discard_weight: map to ol_tx_sched_wrr_adv_category_info_t.specs.
+ * discard_weight
+ *
+ * This structure is for wrr ac specs params set from user, it will update
+ * its content corresponding to the ol_tx_sched_wrr_adv_category_info_t.specs.
+ */
+struct ol_tx_sched_wrr_ac_specs_t {
+ int wrr_skip_weight;
+ uint32_t credit_threshold;
+ uint16_t send_limit;
+ int credit_reserve;
+ int discard_weight;
+};
+
/* Config parameters for txrx_pdev */
struct txrx_pdev_cfg_param_t {
u_int8_t is_full_reorder_offload;
@@ -982,6 +1006,8 @@ struct txrx_pdev_cfg_param_t {
u_int32_t uc_tx_partition_base;
uint16_t pkt_bundle_timer_value;
uint16_t pkt_bundle_size;
+
+ struct ol_tx_sched_wrr_ac_specs_t ac_specs[OL_TX_NUM_WMM_AC];
};
/**
diff --git a/CORE/SERVICES/COMMON/wlan_module_ids.h b/CORE/SERVICES/COMMON/wlan_module_ids.h
index 5573f75d28b2..ac69a90da7e2 100644
--- a/CORE/SERVICES/COMMON/wlan_module_ids.h
+++ b/CORE/SERVICES/COMMON/wlan_module_ids.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2011, 2014-2015 The Linux Foundation. All rights reserved.
+ * Copyright (c) 2011, 2014-2016 The Linux Foundation. All rights reserved.
*
* Previously licensed under the ISC license by Qualcomm Atheros, Inc.
*
@@ -32,72 +32,73 @@
/* Wlan module ids , global across all the modules */
typedef enum {
WLAN_MODULE_ID_MIN = 0,
- WLAN_MODULE_INF = WLAN_MODULE_ID_MIN, /* 0x00 */
- WLAN_MODULE_WMI,
- WLAN_MODULE_STA_PWRSAVE,
- WLAN_MODULE_WHAL,
- WLAN_MODULE_COEX,
- WLAN_MODULE_ROAM,
- WLAN_MODULE_RESMGR_CHAN_MANAGER,
- WLAN_MODULE_RESMGR,
- WLAN_MODULE_VDEV_MGR,
- WLAN_MODULE_SCAN,
- WLAN_MODULE_RATECTRL,
- WLAN_MODULE_AP_PWRSAVE,
- WLAN_MODULE_BLOCKACK,
- WLAN_MODULE_MGMT_TXRX,
- WLAN_MODULE_DATA_TXRX,
- WLAN_MODULE_HTT,
- WLAN_MODULE_HOST, /* 0x10 */
- WLAN_MODULE_BEACON,
- WLAN_MODULE_OFFLOAD,
- WLAN_MODULE_WAL,
- WAL_MODULE_DE,
- WLAN_MODULE_PCIELP,
- WLAN_MODULE_RTT,
- WLAN_MODULE_RESOURCE,
- WLAN_MODULE_DCS,
- WLAN_MODULE_CACHEMGR,
- WLAN_MODULE_ANI,
- WLAN_MODULE_P2P,
- WLAN_MODULE_CSA,
- WLAN_MODULE_NLO,
- WLAN_MODULE_CHATTER,
- WLAN_MODULE_WOW,
- WLAN_MODULE_WAL_VDEV, /* 0x20 */
- WLAN_MODULE_WAL_PDEV,
- WLAN_MODULE_TEST,
- WLAN_MODULE_STA_SMPS,
- WLAN_MODULE_SWBMISS,
- WLAN_MODULE_WMMAC,
- WLAN_MODULE_TDLS,
- WLAN_MODULE_HB,
- WLAN_MODULE_TXBF,
- WLAN_MODULE_BATCH_SCAN,
- WLAN_MODULE_THERMAL_MGR,
- WLAN_MODULE_PHYERR_DFS,
- WLAN_MODULE_RMC,
- WLAN_MODULE_STATS,
- WLAN_MODULE_NAN,
- WLAN_MODULE_IBSS_PWRSAVE,
- WLAN_MODULE_HIF_UART, /* 0x30 */
- WLAN_MODULE_LPI,
- WLAN_MODULE_EXTSCAN,
- WLAN_MODULE_UNIT_TEST,
- WLAN_MODULE_MLME,
- WLAN_MODULE_SUPPL,
- WLAN_MODULE_ERE,
- WLAN_MODULE_OCB,
- WLAN_MODULE_RSSI_MONITOR,
- WLAN_MODULE_WPM,
- WLAN_MODULE_CSS, /* 0x3a */
- WLAN_MODULE_PPS, /* 0x3b */
- WLAN_MODULE_SCAN_CH_PREDICT, /* 0x3c */
- WLAN_MODULE_MAWC,
- WLAN_MODULE_CMC_QMIC, /* 0x3e */
- WLAN_MODULE_EGAP, /* 0x3f */
- WLAN_MODULE_NAN20,
- WLAN_MODULE_QBOOST,
+ WLAN_MODULE_INF = WLAN_MODULE_ID_MIN, /* 0x0 */
+ WLAN_MODULE_WMI, /* 0x1 */
+ WLAN_MODULE_STA_PWRSAVE, /* 0x2 */
+ WLAN_MODULE_WHAL, /* 0x3 */
+ WLAN_MODULE_COEX, /* 0x4 */
+ WLAN_MODULE_ROAM, /* 0x5 */
+ WLAN_MODULE_RESMGR_CHAN_MANAGER, /* 0x6 */
+ WLAN_MODULE_RESMGR, /* 0x7 */
+ WLAN_MODULE_VDEV_MGR, /* 0x8 */
+ WLAN_MODULE_SCAN, /* 0x9 */
+ WLAN_MODULE_RATECTRL, /* 0xa */
+ WLAN_MODULE_AP_PWRSAVE, /* 0xb */
+ WLAN_MODULE_BLOCKACK, /* 0xc */
+ WLAN_MODULE_MGMT_TXRX, /* 0xd */
+ WLAN_MODULE_DATA_TXRX, /* 0xe */
+ WLAN_MODULE_HTT, /* 0xf */
+ WLAN_MODULE_HOST, /* 0x10 */
+ WLAN_MODULE_BEACON, /* 0x11 */
+ WLAN_MODULE_OFFLOAD, /* 0x12 */
+ WLAN_MODULE_WAL, /* 0x13 */
+ WAL_MODULE_DE, /* 0x14 */
+ WLAN_MODULE_PCIELP, /* 0x15 */
+ WLAN_MODULE_RTT, /* 0x16 */
+ WLAN_MODULE_RESOURCE, /* 0x17 */
+ WLAN_MODULE_DCS, /* 0x18 */
+ WLAN_MODULE_CACHEMGR, /* 0x19 */
+ WLAN_MODULE_ANI, /* 0x1a */
+ WLAN_MODULE_P2P, /* 0x1b */
+ WLAN_MODULE_CSA, /* 0x1c */
+ WLAN_MODULE_NLO, /* 0x1d */
+ WLAN_MODULE_CHATTER, /* 0x1e */
+ WLAN_MODULE_WOW, /* 0x1f */
+ WLAN_MODULE_WAL_VDEV, /* 0x20 */
+ WLAN_MODULE_WAL_PDEV, /* 0x21 */
+ WLAN_MODULE_TEST, /* 0x22 */
+ WLAN_MODULE_STA_SMPS, /* 0x23 */
+ WLAN_MODULE_SWBMISS, /* 0x24 */
+ WLAN_MODULE_WMMAC, /* 0x25 */
+ WLAN_MODULE_TDLS, /* 0x26 */
+ WLAN_MODULE_HB, /* 0x27 */
+ WLAN_MODULE_TXBF, /* 0x28 */
+ WLAN_MODULE_BATCH_SCAN, /* 0x29 */
+ WLAN_MODULE_THERMAL_MGR, /* 0x2a */
+ WLAN_MODULE_PHYERR_DFS, /* 0x2b */
+ WLAN_MODULE_RMC, /* 0x2c */
+ WLAN_MODULE_STATS, /* 0x2d */
+ WLAN_MODULE_NAN, /* 0x2e */
+ WLAN_MODULE_IBSS_PWRSAVE, /* 0x2f */
+ WLAN_MODULE_HIF_UART, /* 0x30 */
+ WLAN_MODULE_LPI, /* 0x31 */
+ WLAN_MODULE_EXTSCAN, /* 0x32 */
+ WLAN_MODULE_UNIT_TEST, /* 0x33 */
+ WLAN_MODULE_MLME, /* 0x34 */
+ WLAN_MODULE_SUPPL, /* 0x35 */
+ WLAN_MODULE_ERE, /* 0x36 */
+ WLAN_MODULE_OCB, /* 0x37 */
+ WLAN_MODULE_RSSI_MONITOR, /* 0x38 */
+ WLAN_MODULE_WPM, /* 0x39 */
+ WLAN_MODULE_CSS, /* 0x3a */
+ WLAN_MODULE_PPS, /* 0x3b */
+ WLAN_MODULE_SCAN_CH_PREDICT, /* 0x3c */
+ WLAN_MODULE_MAWC, /* 0x3d */
+ WLAN_MODULE_CMC_QMIC, /* 0x3e */
+ WLAN_MODULE_EGAP, /* 0x3f */
+ WLAN_MODULE_NAN20, /* 0x40 */
+ WLAN_MODULE_QBOOST, /* 0x41 */
+ WLAN_MODULE_P2P_LISTEN_OFFLOAD, /* 0x42 */
WLAN_MODULE_ID_MAX,
WLAN_MODULE_ID_INVALID = WLAN_MODULE_ID_MAX,
diff --git a/CORE/SERVICES/COMMON/wmi_services.h b/CORE/SERVICES/COMMON/wmi_services.h
index 102c0210972e..37dc6f93eb1c 100644
--- a/CORE/SERVICES/COMMON/wmi_services.h
+++ b/CORE/SERVICES/COMMON/wmi_services.h
@@ -160,6 +160,12 @@ typedef enum {
WMI_SERVICE_MESH_11S,
WMI_SERVICE_HALF_RATE_QUARTER_RATE_SUPPORT, /* FW+HW supports 10 MHz (half rate) and 5 MHz (quarter rate) channel bandwidth */
WMI_SERVICE_VDEV_RX_FILTER, /* Support per-vdev specs of which rx frames to filter out */
+ WMI_SERVICE_P2P_LISTEN_OFFLOAD_SUPPORT,
+ /*
+ * FW supports marking the first data packet which wakes
+ * the host from suspend
+ */
+ WMI_SERVICE_MARK_FIRST_WAKEUP_PACKET,
WMI_MAX_SERVICE=128 /* max service */
} WMI_SERVICE;
diff --git a/CORE/SERVICES/COMMON/wmi_tlv_defs.h b/CORE/SERVICES/COMMON/wmi_tlv_defs.h
index 4fb2f7cfa854..640244e4d260 100644
--- a/CORE/SERVICES/COMMON/wmi_tlv_defs.h
+++ b/CORE/SERVICES/COMMON/wmi_tlv_defs.h
@@ -711,6 +711,9 @@ typedef enum {
_place_holder_tlv_tag_2,
WMITLV_TAG_STRUC_wmi_per_chain_rssi_stats,
WMITLV_TAG_STRUC_wmi_rssi_stats,
+ WMITLV_TAG_STRUC_wmi_p2p_lo_start_cmd_fixed_param,
+ WMITLV_TAG_STRUC_wmi_p2p_lo_stop_cmd_fixed_param,
+ WMITLV_TAG_STRUC_wmi_p2p_lo_stopped_event_fixed_param,
} WMITLV_TAG_ID;
/*
@@ -998,6 +1001,8 @@ typedef enum {
OP(WMI_WOW_SET_ACTION_WAKE_UP_CMDID) \
OP(WMI_PEER_BWF_REQUEST_CMDID) \
OP(WMI_DBGLOG_TIME_STAMP_SYNC_CMDID) \
+ OP(WMI_P2P_LISTEN_OFFLOAD_START_CMDID) \
+ OP(WMI_P2P_LISTEN_OFFLOAD_STOP_CMDID) \
/* add new CMD_LIST elements above this line */
/*
@@ -1148,6 +1153,7 @@ typedef enum {
OP(WMI_PDEV_HW_MODE_TRANSITION_EVENTID) \
OP(WMI_PDEV_SET_MAC_CONFIG_RESP_EVENTID) \
OP(WMI_RADIO_TX_POWER_LEVEL_STATS_EVENTID) \
+ OP(WMI_P2P_LISTEN_OFFLOAD_STOPPED_EVENTID) \
/* add new EVT_LIST elements above this line */
@@ -1417,6 +1423,23 @@ WMITLV_CREATE_PARAM_STRUC(WMI_P2P_SET_VENDOR_IE_DATA_CMDID);
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_p2p_set_oppps_cmd_fixed_param, wmi_p2p_set_oppps_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)
WMITLV_CREATE_PARAM_STRUC(WMI_P2P_SET_OPPPS_PARAM_CMDID);
+/* P2P set listen offload start parameters Cmd */
+#define WMITLV_TABLE_WMI_P2P_LISTEN_OFFLOAD_START_CMDID(id,op,buf,len) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_p2p_lo_start_cmd_fixed_param, wmi_p2p_lo_start_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, device_types_data, WMITLV_SIZE_VAR) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_ARRAY_BYTE, A_UINT8, prob_resp_data, WMITLV_SIZE_VAR)
+WMITLV_CREATE_PARAM_STRUC(WMI_P2P_LISTEN_OFFLOAD_START_CMDID);
+
+/* P2P set listen offload stop parameters Cmd */
+#define WMITLV_TABLE_WMI_P2P_LISTEN_OFFLOAD_STOP_CMDID(id,op,buf,len) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_p2p_lo_stop_cmd_fixed_param, wmi_p2p_lo_stop_cmd_fixed_param, fixed_param, WMITLV_SIZE_FIX)
+WMITLV_CREATE_PARAM_STRUC(WMI_P2P_LISTEN_OFFLOAD_STOP_CMDID);
+
+/* P2P set listen offload stopped parameters Event */
+#define WMITLV_TABLE_WMI_P2P_LISTEN_OFFLOAD_STOPPED_EVENTID(id,op,buf,len) \
+ WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_p2p_lo_stopped_event_fixed_param, wmi_p2p_lo_stopped_event_fixed_param, fixed_param, WMITLV_SIZE_FIX)
+WMITLV_CREATE_PARAM_STRUC(WMI_P2P_LISTEN_OFFLOAD_STOPPED_EVENTID);
+
/* Pdev set channel Cmd */
#define WMITLV_TABLE_WMI_PDEV_SET_CHANNEL_CMDID(id,op,buf,len) \
WMITLV_ELEM(id,op,buf,len, WMITLV_TAG_STRUC_wmi_channel, wmi_channel, chan, WMITLV_SIZE_FIX)
diff --git a/CORE/SERVICES/COMMON/wmi_unified.h b/CORE/SERVICES/COMMON/wmi_unified.h
index 5a4dc3f68f48..96d3a4ca2aaf 100644
--- a/CORE/SERVICES/COMMON/wmi_unified.h
+++ b/CORE/SERVICES/COMMON/wmi_unified.h
@@ -78,7 +78,7 @@ extern "C" {
#define MAX_TX_RATE_VALUES 10 /*Max Tx Rates*/
#define MAX_RSSI_VALUES 10 /*Max Rssi values*/
-#define MAX_CHAINS 8
+#define WMI_MAX_CHAINS 8
/* The WLAN_MAX_AC macro cannot be changed without breaking
WMI compatibility. */
@@ -551,8 +551,12 @@ typedef enum {
WMI_P2P_DISC_OFFLOAD_APPIE_CMDID,
/** set the BSSID/device name pattern of p2p find offload */
WMI_P2P_DISC_OFFLOAD_PATTERN_CMDID,
- /** set OppPS related parameters **/
- WMI_P2P_SET_OPPPS_PARAM_CMDID,
+ /** set OppPS related parameters **/
+ WMI_P2P_SET_OPPPS_PARAM_CMDID,
+ /** set listen offload start related parameters */
+ WMI_P2P_LISTEN_OFFLOAD_START_CMDID,
+ /** set listen offload stop related parameters */
+ WMI_P2P_LISTEN_OFFLOAD_STOP_CMDID,
/** AP power save specific config */
/** set AP power save specific param */
@@ -1103,9 +1107,10 @@ typedef enum {
/** P2P disc found */
WMI_P2P_DISC_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_P2P),
-
/*send noa info to host when noa is changed for beacon tx offload enable*/
WMI_P2P_NOA_EVENTID,
+ /** send p2p listen offload stopped event with different reason */
+ WMI_P2P_LISTEN_OFFLOAD_STOPPED_EVENTID,
/** Send EGAP Info to host */
WMI_AP_PS_EGAP_INFO_EVENTID = WMI_EVT_GRP_START_ID(WMI_GRP_AP_PS),
@@ -1393,6 +1398,7 @@ WMI_CHANNEL_CHANGE_CAUSE_CSA,
#define WMI_CHAN_FLAG_HALF_RATE 14 /* Indicates half rate channel */
#define WMI_CHAN_FLAG_QUARTER_RATE 15 /* Indicates quarter rate channel */
#define WMI_CHAN_FLAG_DFS_CFREQ2 16 /* Enable radar event reporting for sec80 in VHT80p80 */
+#define WMI_CHAN_FLAG_ALLOW_HE 17 /* HE (11ax) is allowed on this channel */
#define WMI_SET_CHANNEL_FLAG(pwmi_channel,flag) do { \
(pwmi_channel)->info |= (1 << flag); \
@@ -1563,12 +1569,12 @@ enum {
* we pack PPET16 and PPT8 for four RU's in one element of array.
*
* ppet16_ppet8_ru3_ru0 array element 0 holds:
- * | PPET16 | PPET8 | PPET16 | PPET8 | PPET16 | PPET8 | PPET16 | PPET8 |
+ * | PPET8 | PPET16 | PPET8 | PPET16 | PPET8 | PPET16 | PPET8 | PPET16 |
*rsvd |NSS1,RU4|NSS1,RU4|NSS1,RU3|NSS1,RU3|NSS1,RU2|NSS1,RU2|NSS1,RU1|NSS1,RU1|
*31:23| 22:20 | 19:17 | 17:15 | 14:12 | 11:9 | 8:6 | 5:3 | 2:0 |
*
* ppet16_ppet8_ru3_ru0 array element 1 holds:
- * | PPET16 | PPET8 | PPET16 | PPET8 | PPET16 | PPET8 | PPET16 | PPET8 |
+ * | PPET8 | PPET16 | PPET8 | PPET16 | PPET8 | PPET16 | PPET8 | PPET16 |
*rsvd |NSS2,RU4|NSS2,RU4|NSS2,RU3|NSS2,RU3|NSS2,RU2|NSS2,RU2|NSS2,RU1|NSS2,RU1|
*31:23| 22:20 | 19:17 | 17:15 | 14:12 | 11:9 | 8:6 | 5:3 | 2:0 |
*
@@ -1579,22 +1585,22 @@ enum {
* Note that in these macros, "ru" is one-based, not zero-based, while
* nssm1 is zero-based.
*/
-#define WMI_SET_PPET8(ppet16_ppet8_ru3_ru0, ppet, ru, nssm1) \
+#define WMI_SET_PPET16(ppet16_ppet8_ru3_ru0, ppet, ru, nssm1) \
do { \
ppet16_ppet8_ru3_ru0[nssm1] &= ~(7 << (((ru-1)%4)*6)); \
ppet16_ppet8_ru3_ru0[nssm1] |= ((ppet&7) << (((ru-1)%4)*6)); \
} while (0)
-#define WMI_GET_PPET8(ppet16_ppet8_ru3_ru0, ru, nssm1) \
+#define WMI_GET_PPET16(ppet16_ppet8_ru3_ru0, ru, nssm1) \
((ppet16_ppet8_ru3_ru0[nssm1] >> (((ru-1)%4)*6))&7)
-#define WMI_SET_PPET16(ppet16_ppet8_ru3_ru0, ppet, ru, nssm1) \
+#define WMI_SET_PPET8(ppet16_ppet8_ru3_ru0, ppet, ru, nssm1) \
do { \
ppet16_ppet8_ru3_ru0[nssm1] &= ~(7 << (((ru-1)%4)*6+3)); \
ppet16_ppet8_ru3_ru0[nssm1] |= ((ppet&7) << (((ru-1)%4)*6+3)); \
} while (0)
-#define WMI_GET_PPET16(ppet16_ppet8_ru3_ru0, ru, nssm1) \
+#define WMI_GET_PPET8(ppet16_ppet8_ru3_ru0, ru, nssm1) \
((ppet16_ppet8_ru3_ru0[nssm1] >> (((ru-1)%4)*6+3))&7)
typedef struct _wmi_ppe_threshold {
@@ -4670,8 +4676,8 @@ typedef struct {
/* TLV tag and len; tag equals WMITLV_TAG_STRUC_wmi_rssi_stats */
A_UINT32 tlv_header;
A_UINT32 vdev_id;
- A_INT32 rssi_avg_beacon[MAX_CHAINS];
- A_INT32 rssi_avg_data[MAX_CHAINS];
+ A_INT32 rssi_avg_beacon[WMI_MAX_CHAINS];
+ A_INT32 rssi_avg_data[WMI_MAX_CHAINS];
wmi_mac_addr peer_macaddr;
} wmi_rssi_stats;
@@ -5280,6 +5286,46 @@ typedef enum {
/* vdev-specific mgmt tx power in dBm units (signed integer value) */
WMI_VDEV_PARAM_MGMT_TX_POWER,
+
+ /*
+ * === ADD NEW VDEV PARAM TYPES ABOVE THIS LINE ===
+ * The below vdev param types are used for prototyping, and are
+ * prone to change.
+ */
+ WMI_VDEV_PARAM_PROTOTYPE = 0x8000,
+ /* 11AX SPECIFIC defines */
+ WMI_VDEV_PARAM_BSS_COLOR,
+ /* In case of AP this will enable / disable MU-MIMO mode */
+ WMI_VDEV_PARAM_SET_UL_MU_MIMO,
+ /*
+ * set fragmentation level of the vdev's peers.
+ * Values can be WMI_HE_FRAG_SUPPORT_LEVEL0..WMI_HE_FRAG_SUPPORT_LEVEL3
+ */
+ WMI_VDEV_PARAM_SET_FRAG_LEVEL,
+ /*
+ * control different features of HEControl:
+ * Bit 0:- 1/0-> Enable/Disable transmssion of UL scheduling.
+ * Bit 1:- 1/0-> Enable / disable honoring of ROMI from a peer.
+ * Applicable in AP mode only.
+ */
+ WMI_VDEV_PARAM_SET_HECONTROL,
+ /*
+ * enable / disable trigger access for a AP vdev's peers.
+ * For a STA mode vdev this will enable/disable triggered access
+ * and enable/disable Multi User mode of operation.
+ */
+ WMI_VDEV_PARAM_SET_HEMU_MODE,
+ /*
+ * For Tx OFDMA this will set values of CP length or guard interval
+ * to be
+ * 0: Auto
+ * 1: 0.8 us
+ * 2: 1.6 us
+ * 3: 3.2 us
+ * Similar to Guard Interval
+ */
+ WMI_VDEV_PARAM_TX_OFDMA_CPLEN,
+ /*=== END VDEV_PARAM_PROTOTYPE SECTION ===*/
} WMI_VDEV_PARAM;
/* vdev capabilities bit mask */
@@ -7645,6 +7691,68 @@ typedef struct {
WMI_F_RMW((hdr)->oppps_attr, (v) & 0x7f, \
WMI_UNIFIED_OPPPS_ATTR_CTWIN);
+typedef enum p2p_lo_start_ctrl_flags_e {
+ /* flush prob. req when host is awake */
+ P2P_LO_START_CTRL_FLAG_FLUSH_LISTEN_RESULT = 1 << 0,
+} p2p_lo_start_ctrl_flags;
+
+typedef struct {
+ A_UINT32 tlv_header;
+ A_UINT32 vdev_id;
+ A_UINT32 ctl_flags; /* refer to enum_p2p_lo_start_ctrl_flags_e */
+ A_UINT32 channel; /* MHz */
+ A_UINT32 period; /* ms */
+ A_UINT32 interval; /* ms, interval should be larger than period */
+ A_UINT32 count; /* 0 means forever */
+ /*
+ * device_types_len specifies the number of bytes in the
+ * device_types_data[] byte-array TLV that follows this TLV.
+ * The data in device_types_data[] is in 8-byte elements, so
+ * device_types_len will be a multiple of 8.
+ */
+ A_UINT32 device_types_len;
+ /*
+ * prob_resp_len specifies the number of bytes in the
+ * prob_resp_data[] byte-array TLV that follows this TLV.
+ */
+ A_UINT32 prob_resp_len;
+ /*
+ * Two other TLVs follow this TLV:
+ * A_UINT8 device_types_data[device_types_len];
+ * A_UINT8 prob_resp_data[prob_resp_len];
+ * The information in device_types_data[] and prob_resp_data[]
+ * needs to be provided to the target in over-the-air byte order.
+ * On a big-endian host, if device_types_data and prob_resp_data
+ * are initially in the correct over-the-air byte order,
+ * the automatic byteswap for endianness-correction during WMI
+ * message download will mess up the byte order.
+ * Thus, a big-endian host needs to explicitly byte-swap the bytes
+ * within each quad-byte segment of device_types_data[] and
+ * prob_resp_data[], so that the automatic byte-swap applied during
+ * WMI download from a big-endian host to the little-endian target
+ * will restore device_types_data and prob_resp_data into the
+ * correct byte ordering.
+ */
+} wmi_p2p_lo_start_cmd_fixed_param;
+
+typedef struct {
+ A_UINT32 tlv_header;
+ A_UINT32 vdev_id;
+} wmi_p2p_lo_stop_cmd_fixed_param;
+
+typedef enum p2p_lo_stopped_reason_e {
+ P2P_LO_STOPPED_REASON_COMPLETE = 0, /* finished as scheduled */
+ P2P_LO_STOPPED_REASON_RECV_STOP_CMD, /* host stops it */
+ P2P_LO_STOPPED_REASON_INVALID_LO_PAR, /* invalid listen offload par */
+ P2P_LO_STOPPED_REASON_FW_NOT_SUPPORT, /* vdev cannot support it right now */
+} p2p_lo_stopped_reason;
+
+typedef struct {
+ A_UINT32 tlv_header;
+ A_UINT32 vdev_id;
+ A_UINT32 reason;/* refer to p2p_lo_stopped_reason_e */
+} wmi_p2p_lo_stopped_event_fixed_param;
+
typedef struct {
A_UINT32 time32; //upper 32 bits of time stamp
A_UINT32 time0; //lower 32 bits of time stamp
@@ -7843,6 +7951,7 @@ typedef enum wake_reason_e {
WOW_REASON_OEM_RESPONSE_EVENT = WOW_REASON_NAN_RTT, /* reuse deprecated reason value */
WOW_REASON_TDLS_CONN_TRACKER_EVENT,
WOW_REASON_CRITICAL_LOG,
+ WOW_REASON_P2P_LISTEN_OFFLOAD,
WOW_REASON_DEBUG_TEST = 0xFF,
} WOW_WAKE_REASON_TYPE;
@@ -8026,11 +8135,16 @@ typedef struct {
A_UINT32 pattern_type;
}WMI_WOW_DEL_PATTERN_CMD_fixed_param;
+#define WMI_WOW_MAX_EVENT_BM_LEN 4
+
typedef struct {
A_UINT32 tlv_header; /* TLV tag and len; tag equals WMITLV_TAG_STRUC_WMI_WOW_ADD_DEL_EVT_CMD_fixed_param */
A_UINT32 vdev_id;
A_UINT32 is_add;
- A_UINT32 event_bitmap;
+ union {
+ A_UINT32 event_bitmap;
+ A_UINT32 event_bitmaps[WMI_WOW_MAX_EVENT_BM_LEN];
+ };
}WMI_WOW_ADD_DEL_EVT_CMD_fixed_param;
/*
@@ -9249,6 +9363,11 @@ enum wmm_ac_downgrade_policy {
WMM_AC_DOWNGRADE_INVALID,
};
+/* WMM EDCA Params type */
+#define WMM_PARAM_TYPE_LEGACY 0
+/* Relaxed EDCA parameters for 11ax to be used in case of triggered access */
+#define WMM_PARAM_TYPE_11AX_EDCA 1
+
typedef struct {
A_UINT32 tlv_header;
A_UINT32 cwmin;
@@ -9263,6 +9382,7 @@ typedef struct {
A_UINT32 tlv_header;
A_UINT32 vdev_id;
wmi_wmm_vparams wmm_params[4]; /* 0 be, 1 bk, 2 vi, 3 vo */
+ A_UINT32 wmm_param_type; /* see WMM_PARAM_TYPE_xxx defs */
} wmi_vdev_set_wmm_params_cmd_fixed_param;
typedef struct {
@@ -13785,7 +13905,7 @@ typedef struct {
} wmi_roam_configure_mawc_cmd_fixed_param;
#define WMI_PACKET_FILTER_COMPARE_DATA_LEN_DWORD 2
-#define WMI_PACKET_FILTER_MAX_CMP_PER_PACKET_FILTER 10
+#define WMI_PACKET_FILTER_MAX_CMP_PER_PACKET_FILTER 5
typedef enum {
PACKET_FILTER_TYPE_INVALID = 0,
@@ -13853,6 +13973,13 @@ typedef struct {
A_UINT32 coalesce_time; // not currently used - fill with 0x0
WMI_PACKET_FILTER_PARAMS_TYPE paramsData[
WMI_PACKET_FILTER_MAX_CMP_PER_PACKET_FILTER];
+ /*
+ * deprecated0:
+ * This field simply provides filler space to retain the original message
+ * format while reducing WMI_PACKET_FILTER_MAX_CMP_PER_PACKET_FILTER
+ * from 10 to 5.
+ */
+ WMI_PACKET_FILTER_PARAMS_TYPE deprecated0[5];
} WMI_PACKET_FILTER_CONFIG_CMD_fixed_param;
/* enable / disable all filters within the specified vdev */
diff --git a/CORE/SERVICES/COMMON/wmi_version.h b/CORE/SERVICES/COMMON/wmi_version.h
index 864a5bf2e1c5..57c2ed41c3da 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_ 254
+#define __WMI_REVISION_ 259
/** The Version Namespace should not be normally changed. Only
* host and firmware of the same WMI namespace will work
diff --git a/CORE/SERVICES/HIF/PCIe/copy_engine.c b/CORE/SERVICES/HIF/PCIe/copy_engine.c
index 7ade81b38786..c2047c2af24b 100644
--- a/CORE/SERVICES/HIF/PCIe/copy_engine.c
+++ b/CORE/SERVICES/HIF/PCIe/copy_engine.c
@@ -428,7 +428,7 @@ CE_sendlist_send(struct CE_handle *copyeng,
DPTRACE(adf_dp_trace((adf_nbuf_t)per_transfer_context,
ADF_DP_TRACE_CE_PACKET_PTR_RECORD,
(uint8_t *)&(((adf_nbuf_t)per_transfer_context)->data),
- sizeof(((adf_nbuf_t)per_transfer_context)->data)));
+ sizeof(((adf_nbuf_t)per_transfer_context)->data), ADF_TX));
} else {
/*
* Probably not worth the additional complexity to support
diff --git a/CORE/SERVICES/HIF/PCIe/hif_pci.c b/CORE/SERVICES/HIF/PCIe/hif_pci.c
index 3a1de9d23d07..26c73b5928f9 100644
--- a/CORE/SERVICES/HIF/PCIe/hif_pci.c
+++ b/CORE/SERVICES/HIF/PCIe/hif_pci.c
@@ -375,7 +375,7 @@ HIFSend_head(HIF_DEVICE *hif_device,
NBUF_UPDATE_TX_PKT_COUNT(nbuf, NBUF_TX_PKT_HIF);
DPTRACE(adf_dp_trace(nbuf, ADF_DP_TRACE_HIF_PACKET_PTR_RECORD,
adf_nbuf_data_addr(nbuf),
- sizeof(adf_nbuf_data(nbuf))));
+ sizeof(adf_nbuf_data(nbuf)), ADF_TX));
status = CE_sendlist_send(ce_hdl, nbuf, &sendlist, transfer_id);
A_ASSERT(status == A_OK);
diff --git a/CORE/SERVICES/HIF/USB/if_usb.c b/CORE/SERVICES/HIF/USB/if_usb.c
index a2edc1cc9057..4b92609454ec 100644
--- a/CORE/SERVICES/HIF/USB/if_usb.c
+++ b/CORE/SERVICES/HIF/USB/if_usb.c
@@ -285,9 +285,6 @@ static void hif_usb_remove(struct usb_interface *interface)
/* do cold reset */
HIFDiagWriteCOLDRESET(sc->hif_device);
- if (usb_sc->suspend_state) {
- hif_usb_resume(usb_sc->interface);
- }
unregister_reboot_notifier(&sc->reboot_notifier);
usb_put_dev(interface_to_usbdev(interface));
if (atomic_read(&hif_usb_unload_state) ==
diff --git a/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c b/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c
index 602adf59432a..3786d71036c4 100644
--- a/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c
+++ b/CORE/SERVICES/HIF/sdio/linux/if_ath_sdio.c
@@ -114,12 +114,24 @@ static inline void hif_release_ramdump_mem(unsigned long *address)
#else
static inline void *hif_get_virt_ramdump_mem(unsigned long *size)
{
- *size = 0;
- return NULL;
+ size_t length = 0;
+ int flags = GFP_KERNEL;
+
+ length = DRAM_SIZE + IRAM_SIZE + AXI_SIZE;
+
+ if (size != NULL)
+ *size = (unsigned long)length;
+
+ if (in_interrupt() || irqs_disabled() || in_atomic())
+ flags = GFP_ATOMIC;
+
+ return kzalloc(length, flags);
}
static inline void hif_release_ramdump_mem(unsigned long *address)
{
+ if (address != NULL)
+ kfree(address);
}
#endif
#endif
diff --git a/CORE/SERVICES/HTC/htc_send.c b/CORE/SERVICES/HTC/htc_send.c
index ec70a40fed00..c67f17366c4d 100644
--- a/CORE/SERVICES/HTC/htc_send.c
+++ b/CORE/SERVICES/HTC/htc_send.c
@@ -1331,7 +1331,7 @@ A_STATUS HTCSendDataPkt(HTC_HANDLE HTCHandle, adf_nbuf_t netbuf, int Epid,
NBUF_UPDATE_TX_PKT_COUNT(netbuf, NBUF_TX_PKT_HTC);
DPTRACE(adf_dp_trace(netbuf, ADF_DP_TRACE_HTC_PACKET_PTR_RECORD,
adf_nbuf_data_addr(netbuf),
- sizeof(adf_nbuf_data(netbuf))));
+ sizeof(adf_nbuf_data(netbuf)), ADF_TX));
status = HIFSend_head(target->hif_dev,
pEndpoint->UL_PipeID,
diff --git a/CORE/SERVICES/WMA/wma.c b/CORE/SERVICES/WMA/wma.c
index 81d4d758911f..743f7a4bea60 100644
--- a/CORE/SERVICES/WMA/wma.c
+++ b/CORE/SERVICES/WMA/wma.c
@@ -3187,7 +3187,7 @@ static int wma_stats_event_handler(void *handle, u_int8_t *cmd_param_info,
vos_msg_t vos_msg = {0};
u_int32_t buf_size, buf_data_size;
u_int8_t *buf, *temp;
- bool rssi_stats_present = FALSE;
+ bool rssi_stats_support = FALSE;
param_buf = (WMI_UPDATE_STATS_EVENTID_param_tlvs *)cmd_param_info;
if (!param_buf) {
@@ -3200,16 +3200,20 @@ static int wma_stats_event_handler(void *handle, u_int8_t *cmd_param_info,
(event->num_vdev_stats * sizeof(wmi_vdev_stats)) +
(event->num_peer_stats * sizeof(wmi_peer_stats)) +
(event->num_mib_stats * sizeof(wmi_mib_stats));
+
buf_data_size = buf_size - sizeof(*event);
- if (param_buf->data) {
- rssi_event = (wmi_per_chain_rssi_stats *)
- ((uint8_t *)param_buf->data + buf_data_size);
- if (((rssi_event->tlv_header & 0xFFFF0000) >> 16) ==
- WMITLV_TAG_STRUC_wmi_per_chain_rssi_stats) {
+
+ rssi_event = param_buf->chain_stats;
+ if (rssi_event) {
+ if ((((rssi_event->tlv_header & 0xFFFF0000) >> 16) ==
+ WMITLV_TAG_STRUC_wmi_per_chain_rssi_stats) &&
+ ((rssi_event->tlv_header & 0x0000FFFF) ==
+ WMITLV_GET_STRUCT_TLVLEN(
+ wmi_per_chain_rssi_stats))) {
buf_size += sizeof(*rssi_event) +
(rssi_event->num_per_chain_rssi_stats *
sizeof(wmi_rssi_stats));
- rssi_stats_present = TRUE;
+ rssi_stats_support = TRUE;
}
}
@@ -3221,14 +3225,13 @@ static int wma_stats_event_handler(void *handle, u_int8_t *cmd_param_info,
vos_mem_zero(buf, buf_size);
vos_mem_copy(buf, event, sizeof(*event));
temp = buf + sizeof(*event);
- vos_mem_copy(temp, (u_int8_t *)param_buf->data,
+ vos_mem_copy(temp, (uint8_t *)param_buf->data,
buf_data_size);
temp += buf_data_size;
- if (rssi_stats_present) {
- vos_mem_copy(temp, (u_int8_t *)param_buf->chain_stats,
- sizeof(*param_buf->chain_stats));
- temp += sizeof(*param_buf->chain_stats);
- vos_mem_copy(temp, (u_int8_t *)param_buf->rssi_stats,
+ if (rssi_stats_support) {
+ vos_mem_copy(temp, rssi_event, sizeof(*rssi_event));
+ temp += sizeof(*rssi_event);
+ vos_mem_copy(temp, (uint8_t *)param_buf->rssi_stats,
(rssi_event->num_per_chain_rssi_stats *
sizeof(wmi_rssi_stats)));
}
@@ -3446,8 +3449,10 @@ static void wma_fw_stats_ind(tp_wma_handle wma, u_int8_t *buf)
}
rssi_event = (wmi_per_chain_rssi_stats *)temp;
- if ((rssi_event->tlv_header & 0xFFFF0000) >> 16 ==
- WMITLV_TAG_STRUC_wmi_per_chain_rssi_stats) {
+ if ((((rssi_event->tlv_header & 0xFFFF0000) >> 16) ==
+ WMITLV_TAG_STRUC_wmi_per_chain_rssi_stats) &&
+ ((rssi_event->tlv_header & 0x0000FFFF) ==
+ WMITLV_GET_STRUCT_TLVLEN(wmi_per_chain_rssi_stats))) {
WMA_LOGD("%s: num_rssi_stats %u", __func__,
rssi_event->num_per_chain_rssi_stats);
if (rssi_event->num_per_chain_rssi_stats > 0) {
@@ -3486,7 +3491,6 @@ static int wma_extscan_rsp_handler(tp_wma_handle wma, uint8_t *buf)
uint8_t vdev_id;
tpAniSirGlobal mac_ctx = (tpAniSirGlobal)vos_get_context(
VOS_MODULE_ID_PE, wma->vos_context);
- WMA_LOGI("%s: Enter", __func__);
if (!mac_ctx) {
WMA_LOGE("%s: Invalid mac_ctx", __func__);
return -EINVAL;
@@ -3747,7 +3751,6 @@ static int wma_extscan_operations_event_handler(void *handle,
int buf_len;
vos_msg_t vos_msg = {0};
- WMA_LOGI("%s: Enter", __func__);
param_buf = (WMI_EXTSCAN_OPERATION_EVENTID_param_tlvs *)
cmd_param_info;
if (!param_buf) {
@@ -3788,7 +3791,6 @@ static int wma_extscan_operations_event_handler(void *handle,
vos_mem_free(buf);
return -EINVAL;
}
- WMA_LOGI("WDA_EXTSCAN_OPERATION_IND posted");
return 0;
}
@@ -4223,9 +4225,8 @@ static int wma_extscan_cached_results_event_handler(void *handle,
src_hotlist = param_buf->bssid_list;
src_rssi = param_buf->rssi_list;
numap = event->num_entries_in_page;
- WMA_LOGI("Total_entries %u first_entry_index %u", event->total_entries,
- event->first_entry_index);
- WMA_LOGI("num_entries_in_page %d", numap);
+ WMA_LOGI("Total_entries: %u first_entry_index: %u num_entries_in_page: %u",
+ event->total_entries, event->first_entry_index, numap);
if (!src_hotlist || !src_rssi || !numap) {
WMA_LOGW("%s: Cached results empty, send 0 results", __func__);
goto noresults;
@@ -4265,7 +4266,6 @@ static int wma_extscan_cached_results_event_handler(void *handle,
pMac->sme.pExtScanIndCb(pMac->hHdd,
eSIR_EXTSCAN_CACHED_RESULTS_IND,
dest_cachelist);
- WMA_LOGI("%s: sending cached results event", __func__);
dest_result = dest_cachelist->result;
for (i = 0; i < dest_cachelist->num_scan_ids; i++) {
@@ -4284,7 +4284,6 @@ noresults:
pMac->sme.pExtScanIndCb(pMac->hHdd,
eSIR_EXTSCAN_CACHED_RESULTS_IND,
&empty_cachelist);
- WMA_LOGI("%s: sending cached results event", __func__);
return 0;
}
@@ -5022,13 +5021,11 @@ static int wma_unified_link_radio_stats_event_handler(void *handle,
return -ENOMEM;
}
- WMA_LOGD("Radio Stats Fixed Param:");
WMA_LOGD("request_id %u num_radio %u more_radio_events %u",
fixed_param->request_id, fixed_param->num_radio,
fixed_param->more_radio_events);
- WMA_LOGD("Radio Info");
- WMA_LOGD("radio_id %u on_time %u tx_time %u rx_time %u on_time_scan %u "
+ WMA_LOGD("Radio Info: radio_id %u on_time %u tx_time %u rx_time %u on_time_scan %u "
"on_time_nbd %u on_time_gscan %u on_time_roam_scan %u "
"on_time_pno_scan %u on_time_hs20 %u num_channels %u",
radio_stats->radio_id, radio_stats->on_time,
@@ -7112,6 +7109,39 @@ void ol_cfg_update_bundle_params(struct txrx_pdev_cfg_param_t *olCfg,
}
#endif
+
+/**
+ * ol_cfg_update_ac_specs_params() - update ac_specs params
+ * @olcfg: cfg handle
+ * @mac_params: mac params
+ *
+ * Return: none
+ */
+void ol_cfg_update_ac_specs_params(struct txrx_pdev_cfg_param_t *olcfg,
+ tMacOpenParameters *mac_params)
+{
+ int i;
+
+ if (NULL == olcfg)
+ return;
+
+ if (NULL == mac_params)
+ return;
+
+ for (i = 0; i < OL_TX_NUM_WMM_AC; i++) {
+ olcfg->ac_specs[i].wrr_skip_weight =
+ mac_params->ac_specs[i].wrr_skip_weight;
+ olcfg->ac_specs[i].credit_threshold =
+ mac_params->ac_specs[i].credit_threshold;
+ olcfg->ac_specs[i].send_limit =
+ mac_params->ac_specs[i].send_limit;
+ olcfg->ac_specs[i].credit_reserve =
+ mac_params->ac_specs[i].credit_reserve;
+ olcfg->ac_specs[i].discard_weight =
+ mac_params->ac_specs[i].discard_weight;
+ }
+}
+
#ifdef FEATURE_RUNTIME_PM
/**
* wma_runtime_context_init() - API to init wma runtime contexts
@@ -7338,6 +7368,7 @@ VOS_STATUS WDA_open(v_VOID_t *vos_context, v_VOID_t *os_ctx,
#endif
ol_cfg_update_bundle_params(&olCfg, mac_params);
+ ol_cfg_update_ac_specs_params(&olCfg, mac_params);
((pVosContextType) vos_context)->cfg_ctx =
ol_pdev_cfg_attach(((pVosContextType) vos_context)->adf_ctx, olCfg);
@@ -7999,9 +8030,6 @@ static VOS_STATUS wma_vdev_detach(tp_wma_handle wma_handle,
WMA_LOGA("BSS is not yet stopped. Defering vdev(vdev id %x) deletion",
vdev_id);
iface->del_staself_req = pdel_sta_self_req_param;
- if (generateRsp)
- wma_send_msg(wma_handle, WDA_DEL_STA_SELF_RSP,
- (void *)pdel_sta_self_req_param, 0);
return status;
}
@@ -21571,11 +21599,6 @@ static int wma_wow_wakeup_host_event(void *handle, u_int8_t *event,
if (param_buf->wow_packet_buffer) {
wow_buf_pkt_len =
*(uint32_t *)param_buf->wow_packet_buffer;
- WMA_LOGD("wow_packet_buffer dump");
- vos_trace_hex_dump(VOS_MODULE_ID_WDA,
- VOS_TRACE_LEVEL_DEBUG,
- param_buf->wow_packet_buffer,
- wow_buf_pkt_len);
wma_extscan_wow_event_callback(handle,
(u_int8_t *)(param_buf->wow_packet_buffer + 4),
wow_buf_pkt_len);
@@ -26933,8 +26956,6 @@ static VOS_STATUS wma_process_ll_stats_getReq
nchannels += src_bucket->numChannels;
src_bucket++;
}
- WMA_LOGD("%s: Total buckets: %d total #of channels is %d",
- __func__, nbuckets, nchannels);
len += nchannels * sizeof(wmi_extscan_bucket_channel);
/* Allocate the memory */
*buf = wmi_buf_alloc(wma_handle->wmi_handle, len);
@@ -26959,8 +26980,8 @@ static VOS_STATUS wma_process_ll_stats_getReq
if (pstart->configuration_flags & EXTSCAN_LP_EXTENDED_BATCHING)
cmd->configuration_flags |= WMI_EXTSCAN_EXTENDED_BATCHING_EN;
- WMA_LOGI("%s: configuration_flags: 0x%x", __func__,
- cmd->configuration_flags);
+ WMA_LOGD("%s: Total buckets: %d total #of channels: %d cfgn_flags: 0x%x",
+ __func__, nbuckets, nchannels, cmd->configuration_flags);
cmd->min_rest_time = WMA_EXTSCAN_REST_TIME;
cmd->max_rest_time = WMA_EXTSCAN_REST_TIME;
diff --git a/CORE/SERVICES/WMI/wmi_unified.c b/CORE/SERVICES/WMI/wmi_unified.c
index c5bd9ad31b7e..b371ed06b251 100644
--- a/CORE/SERVICES/WMI/wmi_unified.c
+++ b/CORE/SERVICES/WMI/wmi_unified.c
@@ -703,6 +703,8 @@ static u_int8_t* get_wmi_cmd_string(WMI_CMD_ID wmi_command)
CASE_RETURN_STRING(WMI_PEER_BWF_REQUEST_CMDID);
CASE_RETURN_STRING(WMI_DBGLOG_TIME_STAMP_SYNC_CMDID);
CASE_RETURN_STRING(_place_holder_cmd_1);
+ CASE_RETURN_STRING(WMI_P2P_LISTEN_OFFLOAD_START_CMDID);
+ CASE_RETURN_STRING(WMI_P2P_LISTEN_OFFLOAD_STOP_CMDID);
}
return "Invalid WMI cmd";
}
diff --git a/CORE/VOSS/src/vos_api.c b/CORE/VOSS/src/vos_api.c
index 983e08aaaa06..0ce823314587 100644
--- a/CORE/VOSS/src/vos_api.c
+++ b/CORE/VOSS/src/vos_api.c
@@ -296,6 +296,74 @@ static void vos_set_bundle_params(tMacOpenParameters *param,
}
#endif
+/**
+ * vos_set_ac_specs_params() - set ac_specs params in mac open param
+ * @param: Pointer to mac open param
+ * @hdd_ctx: Pointer to hdd context
+ *
+ * Return: none
+ */
+static void vos_set_ac_specs_params(tMacOpenParameters *param,
+ hdd_context_t *hdd_ctx)
+{
+ uint8_t num_entries = 0;
+ uint8_t tx_sched_wrr_param[TX_SCHED_WRR_PARAMS_NUM];
+ uint8_t *tx_sched_wrr_ac;
+ int i;
+
+ if (NULL == hdd_ctx)
+ return;
+
+ if (NULL == param)
+ return;
+
+ if (NULL == hdd_ctx->cfg_ini) {
+ /* Do nothing if hdd_ctx is invalid */
+ VOS_TRACE(VOS_MODULE_ID_WDA, VOS_TRACE_LEVEL_ERROR,
+ "%s: Warning: hdd_ctx->cfg_ini is NULL", __func__);
+ return;
+ }
+
+ for (i = 0; i < OL_TX_NUM_WMM_AC; i++) {
+ switch (i) {
+ case OL_TX_WMM_AC_BE:
+ tx_sched_wrr_ac = hdd_ctx->cfg_ini->tx_sched_wrr_be;
+ break;
+ case OL_TX_WMM_AC_BK:
+ tx_sched_wrr_ac = hdd_ctx->cfg_ini->tx_sched_wrr_bk;
+ break;
+ case OL_TX_WMM_AC_VI:
+ tx_sched_wrr_ac = hdd_ctx->cfg_ini->tx_sched_wrr_vi;
+ break;
+ case OL_TX_WMM_AC_VO:
+ tx_sched_wrr_ac = hdd_ctx->cfg_ini->tx_sched_wrr_vo;
+ break;
+ default:
+ tx_sched_wrr_ac = NULL;
+ }
+
+ hdd_string_to_u8_array(tx_sched_wrr_ac,
+ tx_sched_wrr_param,
+ &num_entries,
+ sizeof(tx_sched_wrr_param));
+
+ if (num_entries == TX_SCHED_WRR_PARAMS_NUM) {
+ param->ac_specs[i].wrr_skip_weight =
+ tx_sched_wrr_param[0];
+ param->ac_specs[i].credit_threshold =
+ tx_sched_wrr_param[1];
+ param->ac_specs[i].send_limit =
+ tx_sched_wrr_param[2];
+ param->ac_specs[i].credit_reserve =
+ tx_sched_wrr_param[3];
+ param->ac_specs[i].discard_weight =
+ tx_sched_wrr_param[4];
+ }
+
+ num_entries = 0;
+ }
+}
+
/*---------------------------------------------------------------------------
@@ -574,6 +642,7 @@ VOS_STATUS vos_open( v_CONTEXT_t *pVosContext, v_SIZE_t hddContextSize )
vos_set_nan_enable(&macOpenParms, pHddCtx);
vos_set_bundle_params(&macOpenParms, pHddCtx);
+ vos_set_ac_specs_params(&macOpenParms, pHddCtx);
vStatus = WDA_open( gpVosContext, gpVosContext->pHDDContext,
hdd_update_tgt_cfg,
diff --git a/Kbuild b/Kbuild
index b8a64f1b8d1d..aad48a3f5641 100644
--- a/Kbuild
+++ b/Kbuild
@@ -1032,6 +1032,14 @@ CDEFINES += -DCONFIG_HL_SUPPORT \
-DHIF_MBOX_SLEEP_WAR
endif
+ifeq ($(CONFIG_ARCH_MDMCALIFORNIUM), y)
+ifeq ($(CONFIG_QCA_WIFI_SDIO), 1)
+ifeq ($(CONFIG_WCNSS_SKB_PRE_ALLOC), y)
+CDEFINES += -DFEATURE_SKB_PRE_ALLOC
+endif
+endif
+endif
+
ifeq ($(CONFIG_ARCH_MDM9607), y)
ifeq ($(CONFIG_QCA_WIFI_SDIO), 1)
CDEFINES += -DDEBUG_HL_LOGGING